@codingame/monaco-editor-wrapper 4.0.0-next.0 → 4.0.0-next.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/dist/_virtual/Angular.ng-template-15.2.1.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/C2Hs-configuration.json.raw.js +3 -0
- package/dist/_virtual/Dart-Code.dart-code-3.63.20230419.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/Hsc2Hs-configuration.json.raw.js +3 -0
- package/dist/_virtual/IMCTradingBV.svlangserver-0.4.1.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/JakeBecker.elixir-ls-0.14.5.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/JuanBlanco.solidity-0.0.152.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/META.json.raw2.js +3 -0
- package/dist/_virtual/REditorSupport.r-2.7.2.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/Rlogo.svg.raw.js +3 -0
- package/dist/{_commonjsHelpers.js → _virtual/_commonjsHelpers.js} +1 -1
- package/dist/_virtual/_monaco-editor.js +6 -0
- package/dist/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +31 -0
- package/dist/_virtual/actions.js +3 -0
- package/dist/_virtual/alefragnani.pascal-9.6.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/angular-template-language-configuration.json.raw.js +3 -0
- package/dist/_virtual/basicInput.js +3 -0
- package/dist/_virtual/batisteo.vscode-django-1.10.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/bitwisecook.tcl-0.4.3.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/book-dark.svg.raw.js +3 -0
- package/dist/_virtual/book-light.svg.raw.js +3 -0
- package/dist/_virtual/broadcomMFD.cobol-language-support-1.2.1.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/cabal-configuration.json.raw.js +3 -0
- package/dist/_virtual/castwide.solargraph-0.24.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/ckolkman.vscode-postgres-1.4.2.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/cm_adapter.js +3 -0
- package/dist/_virtual/commands.js +3 -0
- package/dist/_virtual/conda-environment.json.raw.js +3 -0
- package/dist/_virtual/conda-meta.json.raw.js +3 -0
- package/dist/_virtual/condarc.json.raw.js +3 -0
- package/dist/{css.worker.js → _virtual/css.worker.js} +1 -1
- package/dist/_virtual/d.json.raw2.js +3 -0
- package/dist/_virtual/dart-language-configuration.json.raw.js +3 -0
- package/dist/_virtual/dcf-configuration.json.raw.js +3 -0
- package/dist/_virtual/diet.json.raw3.js +3 -0
- package/dist/_virtual/dub.schema.json.raw.js +3 -0
- package/dist/_virtual/dune.json.raw3.js +3 -0
- package/dist/_virtual/editor.api.js +6 -0
- package/dist/_virtual/editor.worker.js +6 -0
- package/dist/_virtual/eex-language-configuration.json.raw.js +3 -0
- package/dist/_virtual/elixir-language-configuration.json.raw.js +3 -0
- package/dist/_virtual/erlang.configuration.json.raw.js +3 -0
- package/dist/_virtual/file_type_java.svg.raw.js +3 -0
- package/dist/_virtual/file_type_scala.svg.raw.js +3 -0
- package/dist/_virtual/flutter_activity_bar.svg.raw.js +3 -0
- package/dist/_virtual/general.json.raw.js +3 -0
- package/dist/_virtual/go.mod.language-configuration.json.raw.js +3 -0
- package/dist/_virtual/golang.Go-0.38.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/haskell-configuration.json.raw.js +3 -0
- package/dist/{html.worker.js → _virtual/html.worker.js} +1 -1
- package/dist/_virtual/index.js +3 -0
- package/dist/_virtual/index2.js +3 -0
- package/dist/_virtual/index3.js +3 -0
- package/dist/_virtual/java-properties-configuration.json.raw.js +3 -0
- package/dist/_virtual/johnsoncodehk.vscode-angular-1.0.22.vsix_package.json.vsjson.js +3 -0
- package/dist/{json.worker.js → _virtual/json.worker.js} +1 -1
- package/dist/_virtual/justusadam.language-haskell-3.6.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/keymap_vim.js +3 -0
- package/dist/_virtual/kotlin.configuration.json.raw.js +3 -0
- package/dist/_virtual/lang-config.json.raw.js +3 -0
- package/dist/_virtual/language-configuration.json.raw.js +3 -0
- package/dist/_virtual/language-configuration.json.raw2.js +3 -0
- package/dist/_virtual/language-configuration.json.raw3.js +3 -0
- package/dist/_virtual/language-configuration.json.raw4.js +3 -0
- package/dist/_virtual/language-configuration.json.raw5.js +3 -0
- package/dist/_virtual/language-configuration.json.raw6.js +3 -0
- package/dist/_virtual/language-configuration.json.raw7.js +3 -0
- package/dist/_virtual/language-configuration.json.raw8.js +3 -0
- package/dist/_virtual/literate-haskell-configuration.json.raw.js +3 -0
- package/dist/_virtual/logo.svg.raw.js +3 -0
- package/dist/_virtual/mathiasfrohlich.Kotlin-1.7.1.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/menhir.json.raw2.js +3 -0
- package/dist/_virtual/ms-dotnettools.csharp-1.25.4.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/ms-python.python-2023.7.11111009.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/ms-vscode.cpptools-1.15.2.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/oasis.json.raw2.js +3 -0
- package/dist/_virtual/ocaml.json.raw3.js +3 -0
- package/dist/_virtual/ocamlbuild.json.raw2.js +3 -0
- package/dist/_virtual/ocamlformat.json.raw2.js +3 -0
- package/dist/_virtual/ocamllabs.ocaml-platform-1.12.2.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/ocamllex.json.raw3.js +3 -0
- package/dist/_virtual/opam-install.json.raw2.js +3 -0
- package/dist/_virtual/opam.json.raw2.js +3 -0
- package/dist/_virtual/package-json-schema.json.raw.js +3 -0
- package/dist/_virtual/package.schema.json.raw.js +3 -0
- package/dist/_virtual/pascal.configuration.json.raw.js +3 -0
- package/dist/_virtual/pgourlain.erlang-0.8.8.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/pip-requirements.json.raw.js +3 -0
- package/dist/_virtual/postgres-explorer.svg.raw.js +3 -0
- package/dist/_virtual/prettier-options-schema.json.raw.js +3 -0
- package/dist/_virtual/r-configuration.json.raw.js +3 -0
- package/dist/_virtual/rbuildignore-configuration.json.raw.js +3 -0
- package/dist/_virtual/rd-configuration.json.raw.js +3 -0
- package/dist/{reason.json2.js → _virtual/reason.json.raw2.js} +2 -2
- package/dist/_virtual/redhat.java-1.18.2023042204.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/rmd-configuration.json.raw.js +3 -0
- package/dist/_virtual/rnamespace-configuration.json.raw.js +3 -0
- package/dist/_virtual/scala-lang.scala-0.5.6.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/scalameta-logo.png.raw.js +3 -0
- package/dist/_virtual/scalameta.metals-1.23.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/scalameta.svg.raw.js +3 -0
- package/dist/_virtual/schema.json.raw.js +3 -0
- package/dist/_virtual/shiftCommand.js +6 -0
- package/dist/_virtual/solidity.configuration.json.raw.js +3 -0
- package/dist/_virtual/state.js +3 -0
- package/dist/_virtual/statusbar.js +3 -0
- package/dist/_virtual/sumneko.lua-3.6.18.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/svelte.svelte-vscode-107.3.0.vsix_package.json.vsjson.js +3 -0
- package/dist/_virtual/tasks.schema.json.raw.js +3 -0
- package/dist/{ts.worker.js → _virtual/ts.worker.js} +1 -1
- package/dist/_virtual/util.js +3 -0
- package/dist/_virtual/webfreak.code-d-0.23.2.vsix_package.json.vsjson.js +3 -0
- package/dist/configuration/index.js +45 -0
- package/dist/editor/autofold.js +24 -0
- package/dist/editor/cobol.js +67 -0
- package/dist/editor/index.js +9 -0
- package/dist/extensions/Angular.ng-template-15.2.1.vsix.js +15 -0
- package/dist/extensions/Dart-Code.dart-code-3.63.20230419.vsix.js +14 -0
- package/dist/extensions/IMCTradingBV.svlangserver-0.4.1.vsix.js +18 -0
- package/dist/extensions/JakeBecker.elixir-ls-0.14.5.vsix.js +18 -0
- package/dist/extensions/JuanBlanco.solidity-0.0.152.vsix.js +13 -0
- package/dist/extensions/REditorSupport.r-2.7.2.vsix.js +47 -0
- package/dist/extensions/alefragnani.pascal-9.6.0.vsix.js +13 -0
- package/dist/extensions/batisteo.vscode-django-1.10.0.vsix.js +17 -0
- package/dist/extensions/bitwisecook.tcl-0.4.3.vsix.js +13 -0
- package/dist/extensions/broadcomMFD.cobol-language-support-1.2.1.vsix.js +11 -0
- package/dist/extensions/castwide.solargraph-0.24.0.vsix.js +8 -0
- package/dist/extensions/ckolkman.vscode-postgres-1.4.2.vsix.js +14 -0
- package/dist/extensions/golang.Go-0.38.0.vsix.js +17 -0
- package/dist/extensions/johnsoncodehk.vscode-angular-1.0.22.vsix.js +13 -0
- package/dist/extensions/justusadam.language-haskell-3.6.0.vsix.js +41 -0
- package/dist/extensions/mathiasfrohlich.Kotlin-1.7.1.vsix.js +15 -0
- package/dist/extensions/ms-dotnettools.csharp-1.25.4.vsix.js +17 -0
- package/dist/extensions/ms-python.python-2023.7.11111009.vsix.js +20 -0
- package/dist/extensions/ms-vscode.cpptools-1.15.2.vsix.js +8 -0
- package/dist/extensions/ocamllabs.ocaml-platform-1.12.2.vsix.js +92 -0
- package/dist/extensions/pgourlain.erlang-0.8.8.vsix.js +13 -0
- package/dist/extensions/redhat.java-1.18.2023042204.vsix.js +19 -0
- package/dist/extensions/scala-lang.scala-0.5.6.vsix.js +11 -0
- package/dist/extensions/scalameta.metals-1.23.0.vsix.js +34 -0
- package/dist/extensions/sumneko.lua-3.6.18.vsix.js +10 -0
- package/dist/extensions/svelte.svelte-vscode-107.3.0.vsix.js +37 -0
- package/dist/extensions/webfreak.code-d-0.23.2.vsix.js +28 -0
- package/dist/extensions.d.ts +3 -2
- package/dist/features/cssContribution.js +4 -5
- package/dist/features/debug.d.ts +1 -0
- package/dist/features/debug.js +7 -0
- package/dist/features/htmlContribution.js +79 -88
- package/dist/features/jsonContribution.js +10 -12
- package/dist/features/search.d.ts +1 -0
- package/dist/features/search.js +7 -0
- package/dist/features/typescriptContribution.js +27 -15
- package/dist/features/viewPanels.d.ts +1 -0
- package/dist/features/viewPanels.js +9 -0
- package/dist/features/views.d.ts +4 -0
- package/dist/features/views.js +17 -0
- package/dist/keybindings/index.js +36 -0
- package/dist/keybindings/vim.js +82 -0
- package/dist/languages/index.js +40 -0
- package/dist/main.js +6 -1286
- package/dist/monaco.d.ts +0 -1
- package/dist/monaco.js +90 -0
- package/dist/node_modules/@types/node/console.d.js +3 -0
- package/dist/node_modules/@types/node/globals.d.js +3 -0
- package/dist/node_modules/@types/node/process.d.js +3 -0
- package/dist/node_modules/lodash.kebabcase/index.js +439 -0
- package/dist/node_modules/lodash.throttle/index.js +443 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/actions.js +596 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/basicInput.js +113 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/commands.js +184 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/index.js +186 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/state.js +116 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/util.js +112 -0
- package/dist/node_modules/monaco-emacs/lib/index.js +31 -0
- package/dist/{vim.js → node_modules/monaco-vim/lib/cm/keymap_vim.js} +3 -1790
- package/dist/node_modules/monaco-vim/lib/cm_adapter.js +1393 -0
- package/dist/node_modules/monaco-vim/lib/index.js +71 -0
- package/dist/node_modules/monaco-vim/lib/statusbar.js +239 -0
- package/dist/node_modules/tslib/tslib.es6.js +77 -0
- package/dist/services.d.ts +2 -0
- package/dist/services.js +50 -0
- package/dist/style.js +12 -0
- package/dist/theme/index.js +21 -0
- package/dist/tools/EditorOpenHandlerRegistry.js +108 -0
- package/dist/tools.js +235 -0
- package/dist/worker.d.ts +1 -10
- package/dist/worker.js +9 -58
- package/package.json +28 -37
- package/stats.html +1 -1
- package/dist/C2Hs-configuration.json.js +0 -3
- package/dist/Hsc2Hs-configuration.json.js +0 -3
- package/dist/META.json2.js +0 -3
- package/dist/_monaco-editor_commonjs-external.js +0 -39
- package/dist/_rollupPluginBabelHelpers.js +0 -51
- package/dist/add.svg.js +0 -3
- package/dist/add.svg2.js +0 -3
- package/dist/adddep-dark.svg.js +0 -3
- package/dist/adddep-light.svg.js +0 -3
- package/dist/angular-template-language-configuration.json.js +0 -3
- package/dist/arrow-circle-up-dark.svg.js +0 -3
- package/dist/arrow-circle-up-light.svg.js +0 -3
- package/dist/book-dark.svg.js +0 -3
- package/dist/book-light.svg.js +0 -3
- package/dist/book-open-dark.svg.js +0 -3
- package/dist/book-open-light.svg.js +0 -3
- package/dist/cabal-configuration.json.js +0 -3
- package/dist/d.json2.js +0 -3
- package/dist/dart-language-configuration.json.js +0 -3
- package/dist/dcf-configuration.json.js +0 -3
- package/dist/diet.json3.js +0 -3
- package/dist/document-search-dark.svg.js +0 -3
- package/dist/document-search-light.svg.js +0 -3
- package/dist/documentation-inverse.svg.js +0 -3
- package/dist/documentation.svg.js +0 -3
- package/dist/dub-convert-inverse.svg.js +0 -3
- package/dist/dub-convert.svg.js +0 -3
- package/dist/dune.json3.js +0 -3
- package/dist/edit-dub-inverse.svg.js +0 -3
- package/dist/edit-dub.svg.js +0 -3
- package/dist/edit-source-inverse.svg.js +0 -3
- package/dist/edit-source.svg.js +0 -3
- package/dist/eex-language-configuration.json.js +0 -3
- package/dist/elixir-language-configuration.json.js +0 -3
- package/dist/erlang.configuration.json.js +0 -3
- package/dist/extension-web.js.js +0 -3
- package/dist/extension-web.js2.js +0 -3
- package/dist/extension.browser.js.js +0 -3
- package/dist/file_type_java.svg.js +0 -3
- package/dist/file_type_scala.svg.js +0 -3
- package/dist/focus-dark.svg.js +0 -3
- package/dist/focus-light.svg.js +0 -3
- package/dist/general.json.js +0 -3
- package/dist/get-inverse.svg.js +0 -3
- package/dist/get.svg.js +0 -3
- package/dist/go.mod.language-configuration.json.js +0 -3
- package/dist/haskell-configuration.json.js +0 -3
- package/dist/hot-reload-tb.png.js +0 -3
- package/dist/hot-reload.svg.js +0 -3
- package/dist/index.js +0 -2210
- package/dist/index2.js +0 -49
- package/dist/inspector.svg.js +0 -3
- package/dist/java-properties-configuration.json.js +0 -3
- package/dist/kotlin.configuration.json.js +0 -3
- package/dist/lang-config.json.js +0 -3
- package/dist/language-configuration.json.js +0 -3
- package/dist/language-configuration.json2.js +0 -3
- package/dist/language-configuration.json3.js +0 -3
- package/dist/language-configuration.json4.js +0 -3
- package/dist/language-configuration.json5.js +0 -3
- package/dist/language-configuration.json6.js +0 -3
- package/dist/language-configuration.json7.js +0 -3
- package/dist/language-configuration.json8.js +0 -3
- package/dist/literate-haskell-configuration.json.js +0 -3
- package/dist/menhir.json2.js +0 -3
- package/dist/oasis.json2.js +0 -3
- package/dist/ocaml.json3.js +0 -3
- package/dist/ocamlbuild.json2.js +0 -3
- package/dist/ocamlformat.json2.js +0 -3
- package/dist/ocamllex.json3.js +0 -3
- package/dist/opam-install.json2.js +0 -3
- package/dist/opam.json2.js +0 -3
- package/dist/outdated-inverse.svg.js +0 -3
- package/dist/outdated.svg.js +0 -3
- package/dist/pascal.configuration.json.js +0 -3
- package/dist/performance.svg.js +0 -3
- package/dist/pip-requirements.json.js +0 -3
- package/dist/plus-dark.svg.js +0 -3
- package/dist/plus-light.svg.js +0 -3
- package/dist/preview-right-dark.svg.js +0 -3
- package/dist/preview-right-light.svg.js +0 -3
- package/dist/r-configuration.json.js +0 -3
- package/dist/rbuildignore-configuration.json.js +0 -3
- package/dist/rd-configuration.json.js +0 -3
- package/dist/ref-group-by-type-dark.svg.js +0 -3
- package/dist/ref-group-by-type-light.svg.js +0 -3
- package/dist/ref-ungroup-by-type-dark.svg.js +0 -3
- package/dist/ref-ungroup-by-type-light.svg.js +0 -3
- package/dist/refresh-dark.svg.js +0 -3
- package/dist/refresh-dark.svg2.js +0 -3
- package/dist/refresh-light.svg.js +0 -3
- package/dist/refresh-light.svg2.js +0 -3
- package/dist/repl.svg.js +0 -3
- package/dist/repl.svg2.js +0 -3
- package/dist/rmd-configuration.json.js +0 -3
- package/dist/rnamespace-configuration.json.js +0 -3
- package/dist/save.svg.js +0 -3
- package/dist/save.svg2.js +0 -3
- package/dist/scalameta-logo.png.js +0 -3
- package/dist/solidity.configuration.json.js +0 -3
- package/dist/switch-impl-intf.dark.svg.js +0 -3
- package/dist/switch-impl-intf.light.svg.js +0 -3
- package/dist/upgrade-inverse.svg.js +0 -3
- package/dist/upgrade.svg.js +0 -3
- package/dist/x-dark.svg.js +0 -3
- package/dist/x-light.svg.js +0 -3
- /package/dist/{C2Hs.json.js → _virtual/C2Hs.json.raw.js} +0 -0
- /package/dist/{COBOL.tmLanguage.json.js → _virtual/COBOL.tmLanguage.json.raw.js} +0 -0
- /package/dist/{Erlang.plist.js → _virtual/Erlang.plist.raw.js} +0 -0
- /package/dist/{Hsc2Hs.json.js → _virtual/Hsc2Hs.json.raw.js} +0 -0
- /package/dist/{JavaProperties.tmLanguage.json.js → _virtual/JavaProperties.tmLanguage.json.raw.js} +0 -0
- /package/dist/{Kotlin.tmLanguage.js → _virtual/Kotlin.tmLanguage.raw.js} +0 -0
- /package/dist/{META.json.js → _virtual/META.json.raw.js} +0 -0
- /package/dist/{Markdown Redcarpet.json.js → _virtual/Markdown Redcarpet.json.raw.js} +0 -0
- /package/dist/{RMarkdown.json.js → _virtual/RMarkdown.json.raw.js} +0 -0
- /package/dist/{Rcpp.json.js → _virtual/Rcpp.json.raw.js} +0 -0
- /package/dist/{Rd (R Documentation).json.js → _virtual/Rd (R Documentation).json.raw.js} +0 -0
- /package/dist/{Scala.tmLanguage.json.js → _virtual/Scala.tmLanguage.json.raw.js} +0 -0
- /package/dist/{alex.json.js → _virtual/alex.json.raw.js} +0 -0
- /package/dist/{angular-directives.json.js → _virtual/angular-directives.json.raw.js} +0 -0
- /package/dist/{angular-interpolations.json.js → _virtual/angular-interpolations.json.raw.js} +0 -0
- /package/dist/{aspnetcorerazor.tmLanguage.json.js → _virtual/aspnetcorerazor.tmLanguage.json.raw.js} +0 -0
- /package/dist/{atd.json.js → _virtual/atd.json.raw.js} +0 -0
- /package/dist/{buildtarget.json.js → _virtual/buildtarget.json.raw.js} +0 -0
- /package/dist/{cabal.json.js → _virtual/cabal.json.raw.js} +0 -0
- /package/dist/{codeblock-cabal.json.js → _virtual/codeblock-cabal.json.raw.js} +0 -0
- /package/dist/{codeblock-haskell.json.js → _virtual/codeblock-haskell.json.raw.js} +0 -0
- /package/dist/{codeblock-literate-haskell.json.js → _virtual/codeblock-literate-haskell.json.raw.js} +0 -0
- /package/dist/{codeblock.json.js → _virtual/codeblock.json.raw.js} +0 -0
- /package/dist/{codeblock.json2.js → _virtual/codeblock.json.raw2.js} +0 -0
- /package/dist/{cram.json.js → _virtual/cram.json.raw.js} +0 -0
- /package/dist/{csharp.json.js → _virtual/csharp.json.raw.js} +0 -0
- /package/dist/{d.json.js → _virtual/d.json.raw.js} +0 -0
- /package/dist/{dart.json.js → _virtual/dart.json.raw.js} +0 -0
- /package/dist/{dcf.json.js → _virtual/dcf.json.raw.js} +0 -0
- /package/dist/{diet.json.js → _virtual/diet.json.raw.js} +0 -0
- /package/dist/{diet.json2.js → _virtual/diet.json.raw2.js} +0 -0
- /package/dist/{django-html.tmLanguage.json.js → _virtual/django-html.tmLanguage.json.raw.js} +0 -0
- /package/dist/{django-txt.tmLanguage.json.js → _virtual/django-txt.tmLanguage.json.raw.js} +0 -0
- /package/dist/{dml.json.js → _virtual/dml.json.raw.js} +0 -0
- /package/dist/{dune-project.json.js → _virtual/dune-project.json.raw.js} +0 -0
- /package/dist/{dune-project.json2.js → _virtual/dune-project.json.raw2.js} +0 -0
- /package/dist/{dune-workspace.json.js → _virtual/dune-workspace.json.raw.js} +0 -0
- /package/dist/{dune.json.js → _virtual/dune.json.raw.js} +0 -0
- /package/dist/{dune.json2.js → _virtual/dune.json.raw2.js} +0 -0
- /package/dist/{eex.json.js → _virtual/eex.json.raw.js} +0 -0
- /package/dist/{elixir.json.js → _virtual/elixir.json.raw.js} +0 -0
- /package/dist/{erlang.json.js → _virtual/erlang.json.raw.js} +0 -0
- /package/dist/{expression.json.js → _virtual/expression.json.raw.js} +0 -0
- /package/dist/{filters.json.js → _virtual/filters.json.raw.js} +0 -0
- /package/dist/{go.json.js → _virtual/go.json.raw.js} +0 -0
- /package/dist/{go.mod.tmGrammar.json.js → _virtual/go.mod.tmGrammar.json.raw.js} +0 -0
- /package/dist/{go.sum.tmGrammar.json.js → _virtual/go.sum.tmGrammar.json.raw.js} +0 -0
- /package/dist/{govulncheck.tmGrammar.json.js → _virtual/govulncheck.tmGrammar.json.raw.js} +0 -0
- /package/dist/{happy.json.js → _virtual/happy.json.raw.js} +0 -0
- /package/dist/{haskell.json.js → _virtual/haskell.json.raw.js} +0 -0
- /package/dist/{html-eex.json.js → _virtual/html-eex.json.raw.js} +0 -0
- /package/dist/{inline-styles.json.js → _virtual/inline-styles.json.raw.js} +0 -0
- /package/dist/{inline-template.json.js → _virtual/inline-template.json.raw.js} +0 -0
- /package/dist/{java.json.js → _virtual/java.json.raw.js} +0 -0
- /package/dist/{javascript.json.js → _virtual/javascript.json.raw.js} +0 -0
- /package/dist/{jvm-bytecode-verbose.json.js → _virtual/jvm-bytecode-verbose.json.raw.js} +0 -0
- /package/dist/{jvm-bytecode.json.js → _virtual/jvm-bytecode.json.raw.js} +0 -0
- /package/dist/{kotlin.json.js → _virtual/kotlin.json.raw.js} +0 -0
- /package/dist/{literateHaskell.json.js → _virtual/literateHaskell.json.raw.js} +0 -0
- /package/dist/{markdown-svelte-css.json.js → _virtual/markdown-svelte-css.json.raw.js} +0 -0
- /package/dist/{markdown-svelte-js.json.js → _virtual/markdown-svelte-js.json.raw.js} +0 -0
- /package/dist/{markdown-svelte.json.js → _virtual/markdown-svelte.json.raw.js} +0 -0
- /package/dist/{menhir-action.json.js → _virtual/menhir-action.json.raw.js} +0 -0
- /package/dist/{menhir.json.js → _virtual/menhir.json.raw.js} +0 -0
- /package/dist/{merlin.json.js → _virtual/merlin.json.raw.js} +0 -0
- /package/dist/{oasis.json.js → _virtual/oasis.json.raw.js} +0 -0
- /package/dist/{ocaml-markdown-codeblock.json.js → _virtual/ocaml-markdown-codeblock.json.raw.js} +0 -0
- /package/dist/{ocaml.interface.json.js → _virtual/ocaml.interface.json.raw.js} +0 -0
- /package/dist/{ocaml.json.js → _virtual/ocaml.json.raw.js} +0 -0
- /package/dist/{ocaml.json2.js → _virtual/ocaml.json.raw2.js} +0 -0
- /package/dist/{ocamlbuild.json.js → _virtual/ocamlbuild.json.raw.js} +0 -0
- /package/dist/{ocamldoc.json.js → _virtual/ocamldoc.json.raw.js} +0 -0
- /package/dist/{ocamlformat.json.js → _virtual/ocamlformat.json.raw.js} +0 -0
- /package/dist/{ocamllex.json.js → _virtual/ocamllex.json.raw.js} +0 -0
- /package/dist/{ocamllex.json2.js → _virtual/ocamllex.json.raw2.js} +0 -0
- /package/dist/{opam-install.json.js → _virtual/opam-install.json.raw.js} +0 -0
- /package/dist/{opam.json.js → _virtual/opam.json.raw.js} +0 -0
- /package/dist/{pascal.json.js → _virtual/pascal.json.raw.js} +0 -0
- /package/dist/{pascal.tmLanguage.js → _virtual/pascal.tmLanguage.raw.js} +0 -0
- /package/dist/{pgsql.tmLanguage.js → _virtual/pgsql.tmLanguage.raw.js} +0 -0
- /package/dist/{pip-requirements.tmLanguage.json.js → _virtual/pip-requirements.tmLanguage.json.raw.js} +0 -0
- /package/dist/{postcss.json.js → _virtual/postcss.json.raw.js} +0 -0
- /package/dist/{pug-svelte-dotblock.json.js → _virtual/pug-svelte-dotblock.json.raw.js} +0 -0
- /package/dist/{pug-svelte-tags.json.js → _virtual/pug-svelte-tags.json.raw.js} +0 -0
- /package/dist/{pug-svelte.json.js → _virtual/pug-svelte.json.raw.js} +0 -0
- /package/dist/{r-snippets.json.js → _virtual/r-snippets.json.raw.js} +0 -0
- /package/dist/{r.json.js → _virtual/r.json.raw.js} +0 -0
- /package/dist/{rbuildignore.json.js → _virtual/rbuildignore.json.raw.js} +0 -0
- /package/dist/{reason-markdown-codeblock.json.js → _virtual/reason-markdown-codeblock.json.raw.js} +0 -0
- /package/dist/{reason.json.js → _virtual/reason.json.raw.js} +0 -0
- /package/dist/{rmarkdown.json2.js → _virtual/rmarkdown.json.raw2.js} +0 -0
- /package/dist/{rnamespace.json.js → _virtual/rnamespace.json.raw.js} +0 -0
- /package/dist/{sdl.json.js → _virtual/sdl.json.raw.js} +0 -0
- /package/dist/{semanticdb.json.js → _virtual/semanticdb.json.raw.js} +0 -0
- /package/dist/{solidity.json.js → _virtual/solidity.json.raw.js} +0 -0
- /package/dist/{solidity.json2.js → _virtual/solidity.json.raw2.js} +0 -0
- /package/dist/{svelte.json.js → _virtual/svelte.json.raw.js} +0 -0
- /package/dist/{svelte.tmLanguage.json.js → _virtual/svelte.tmLanguage.json.raw.js} +0 -0
- /package/dist/{systemverilog.json.js → _virtual/systemverilog.json.raw.js} +0 -0
- /package/dist/{systemverilog.tmLanguage.json.js → _virtual/systemverilog.tmLanguage.json.raw.js} +0 -0
- /package/dist/{tags.json.js → _virtual/tags.json.raw.js} +0 -0
- /package/dist/{tasty.json.js → _virtual/tasty.json.raw.js} +0 -0
- /package/dist/{tcl.json.js → _virtual/tcl.json.raw.js} +0 -0
- /package/dist/{tcl.json2.js → _virtual/tcl.json.raw2.js} +0 -0
- /package/dist/{template.json.js → _virtual/template.json.raw.js} +0 -0
- /package/dist/{typescript.json.js → _virtual/typescript.json.raw.js} +0 -0
- /package/dist/{vs2019_dark.json.js → _virtual/vs2019_dark.json.raw.js} +0 -0
- /package/dist/{vs2019_light.json.js → _virtual/vs2019_light.json.raw.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
|
|
2
2
|
|
|
3
3
|
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKGUpe2lmKGUgaW5zdGFuY2VvZiBvKXJldHVybiBlO2NvbnN0IHQ9bmV3IG87cmV0dXJuIHQubWVzc2FnZT1lLm1lc3NhZ2UsdC5zdGFjaz1lLnN0YWNrLHR9c3RhdGljIGlzRXJyb3JOb1RlbGVtZXRyeShlKXtyZXR1cm4iQ29kZUV4cGVjdGVkRXJyb3IiPT09ZS5uYW1lfX1jbGFzcyBzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZXx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHMucHJvdG90eXBlKX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIGw7ZnVuY3Rpb24gdShlKXtpZihsLmlzKGUpKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2goZSl7dC5wdXNoKGUpfWlmKDE9PT10Lmxlbmd0aCl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHQsIkVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gYyhlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbipyKGUpe3lpZWxkIGV9ZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBufSxlLnNpbmdsZT1yLGUud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gdChlKT9lOnIoZSl9LGUuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8bn0sZS5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxlLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LGUuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4hMDtyZXR1cm4hMX0sZS5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlpZih0KG4pKXJldHVybiBufSxlLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgbiBvZiBlKXQobikmJih5aWVsZCBuKX0sZS5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgciBvZiBlKXlpZWxkIHQocixuKyspfSxlLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuc2xpY2U9ZnVuY3Rpb24qKGUsdCxuPWUubGVuZ3RoKXtmb3IodDwwJiYodCs9ZS5sZW5ndGgpLG48MD9uKz1lLmxlbmd0aDpuPmUubGVuZ3RoJiYobj1lLmxlbmd0aCk7dDxuO3QrKyl5aWVsZCBlW3RdfSxlLmNvbnN1bWU9ZnVuY3Rpb24odCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3Qgcj1bXTtpZigwPT09bilyZXR1cm5bcix0XTtjb25zdCBpPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IHQ9aS5uZXh0KCk7aWYodC5kb25lKXJldHVybltyLGUuZW1wdHkoKV07ci5wdXNoKHQudmFsdWUpfXJldHVybltyLHtbU3ltYm9sLml0ZXJhdG9yXTooKT0+aX1dfX0obHx8KGw9e30pKTtjbGFzcyBoe2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYoMCE9PXRoaXMuX3RvRGlzcG9zZS5zaXplKXRyeXt1KHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1kLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIHY7Y29uc3QgYj0iZW4iO2xldCB5LEMsXyxTPSExLHc9ITEsQT0hMSx4PSExLEU9YixMPWI7Y29uc3QgTj0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6e307bGV0IGs7dm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3M/az1OLnZzY29kZS5wcm9jZXNzOiJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2VzcyYmKGs9cHJvY2Vzcyk7Y29uc3QgUj0ic3RyaW5nIj09dHlwZW9mKG51bGw9PT0odj1udWxsPT1rP3ZvaWQgMDprLnZlcnNpb25zKXx8dm9pZCAwPT09dj92b2lkIDA6di5lbGVjdHJvbikmJiJyZW5kZXJlciI9PT0obnVsbD09az92b2lkIDA6ay50eXBlKTtpZigib2JqZWN0IiE9dHlwZW9mIG5hdmlnYXRvcnx8UilpZigib2JqZWN0Ij09dHlwZW9mIGspe1M9IndpbjMyIj09PWsucGxhdGZvcm0sdz0iZGFyd2luIj09PWsucGxhdGZvcm0sQT0ibGludXgiPT09ay5wbGF0Zm9ybSxBJiZrLmVudi5TTkFQJiZrLmVudi5TTkFQX1JFVklTSU9OLGsuZW52LkNJfHxrLmVudi5CVUlMRF9BUlRJRkFDVFNUQUdJTkdESVJFQ1RPUlkseT1iLEU9Yjtjb25zdCBlPWsuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07eT10LmxvY2FsZSxMPXQub3NMb2NhbGUsRT1ufHxiLEM9dC5fdHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaChlKXt9fWVsc2UgY29uc29sZS5lcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcGxhdGZvcm0uIik7ZWxzZSBfPW5hdmlnYXRvci51c2VyQWdlbnQsUz1fLmluZGV4T2YoIldpbmRvd3MiKT49MCx3PV8uaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKF8uaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fF8uaW5kZXhPZigiaVBhZCIpPj0wfHxfLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsQT1fLmluZGV4T2YoIkxpbnV4Iik+PTAsbnVsbD09X3x8Xy5pbmRleE9mKCJNb2JpIikseD0hMCxmdW5jdGlvbihlLHQsLi4ubil7IWZ1bmN0aW9uKGUsdCl7bGV0IG47bj0wPT09dC5sZW5ndGg/ZTplLnJlcGxhY2UoL1x7KFxkKylcfS9nLCgoZSxuKT0+e2NvbnN0IHI9blswXSxpPXRbcl07bGV0IG89ZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGk/bz1pOiJudW1iZXIiIT10eXBlb2YgaSYmImJvb2xlYW4iIT10eXBlb2YgaSYmbnVsbCE9aXx8KG89U3RyaW5nKGkpKSxvfSkpLHAmJihuPSLvvLsiK24ucmVwbGFjZSgvW2FvdWVpXS9nLCIkJiQmIikrIu+8vSIpfSh0LG4pfSgwLCJfIikseT1iLEU9eSxMPW5hdmlnYXRvci5sYW5ndWFnZTtjb25zdCBUPVMsTz13O3gmJk4uaW1wb3J0U2NyaXB0cztjb25zdCBNPV8sST0iZnVuY3Rpb24iPT10eXBlb2YgTi5wb3N0TWVzc2FnZSYmIU4uaW1wb3J0U2NyaXB0czsoKCk9PntpZihJKXtjb25zdCBlPVtdO04uYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHQ9PntpZih0LmRhdGEmJnQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspe2NvbnN0IHI9ZVtuXTtpZihyLmlkPT09dC5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXJldHVybiBlLnNwbGljZShuLDEpLHZvaWQgci5jYWxsYmFjaygpfX0pKTtsZXQgdD0wO3JldHVybiBuPT57Y29uc3Qgcj0rK3Q7ZS5wdXNoKHtpZDpyLGNhbGxiYWNrOm59KSxOLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazpyfSwiKiIpfX19KSgpO2NvbnN0IFA9ISEoTSYmTS5pbmRleE9mKCJDaHJvbWUiKT49MCk7TSYmTS5pbmRleE9mKCJGaXJlZm94IiksIVAmJk0mJk0uaW5kZXhPZigiU2FmYXJpIiksTSYmTS5pbmRleE9mKCJFZGcvIiksTSYmTS5pbmRleE9mKCJBbmRyb2lkIik7Y29uc3QgRj1OLnBlcmZvcm1hbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgTi5wZXJmb3JtYW5jZS5ub3c7Y2xhc3MgVntzdGF0aWMgY3JlYXRlKGU9ITApe3JldHVybiBuZXcgVihlKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl9oaWdoUmVzb2x1dGlvbj1GJiZlLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9ZWxhcHNlZCgpe3JldHVybi0xIT09dGhpcy5fc3RvcFRpbWU/dGhpcy5fc3RvcFRpbWUtdGhpcy5fc3RhcnRUaW1lOnRoaXMuX25vdygpLXRoaXMuX3N0YXJ0VGltZX1fbm93KCl7cmV0dXJuIHRoaXMuX2hpZ2hSZXNvbHV0aW9uP04ucGVyZm9ybWFuY2Uubm93KCk6RGF0ZS5ub3coKX19dmFyIEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIHMoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBzKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIHMoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIHMoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBVKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7bj1lKHIuZmlyZSxyKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtudWxsPT1ufHxuLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09dHx8dC5hZGQociksci5ldmVudH1mdW5jdGlvbiBhKGUsdCxuPTEwMCxyPSExLGk9ITEsbyxzKXtsZXQgYSxsLHUsYyxoPTA7Y29uc3QgZD1uZXcgVSh7bGVha1dhcm5pbmdUaHJlc2hvbGQ6byxvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7YT1lKChlPT57aCsrLGw9dChsLGUpLHImJiF1JiYoZC5maXJlKGwpLGw9dm9pZCAwKSxjPSgpPT57Y29uc3QgZT1sO2w9dm9pZCAwLHU9dm9pZCAwLCghcnx8aD4xKSYmZC5maXJlKGUpLGg9MH0sIm51bWJlciI9PXR5cGVvZiBuPyhjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGMsbikpOnZvaWQgMD09PXUmJih1PTAscXVldWVNaWNyb3Rhc2soYykpfSkpfSxvbldpbGxSZW1vdmVMaXN0ZW5lcigpe2kmJmg+MCYmKG51bGw9PWN8fGMoKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7Yz12b2lkIDAsYS5kaXNwb3NlKCl9fSk7cmV0dXJuIG51bGw9PXN8fHMuYWRkKGQpLGQuZXZlbnR9ZnVuY3Rpb24gbChlLHQ9KChlLHQpPT5lPT09dCksbil7bGV0IHIsbz0hMDtyZXR1cm4gaShlLChlPT57Y29uc3Qgbj1vfHwhdChlLHIpO3JldHVybiBvPSExLHI9ZSxufSksbil9ZS5Ob25lPSgpPT5kLk5vbmUsZS5kZWZlcj1mdW5jdGlvbihlLHQpe3JldHVybiBhKGUsKCgpPT57fSksMCx2b2lkIDAsITAsdm9pZCAwLHQpfSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIGMoKCgpPT51KGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPWEsZS5hY2N1bXVsYXRlPWZ1bmN0aW9uKHQsbj0wLHIpe3JldHVybiBlLmRlYm91bmNlKHQsKChlLHQpPT5lPyhlLnB1c2godCksZSk6W3RdKSxuLHZvaWQgMCwhMCx2b2lkIDAscil9LGUubGF0Y2g9bCxlLnNwbGl0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm5bZS5maWx0ZXIodCxuLHIpLGUuZmlsdGVyKHQsKGU9PiFuKGUpKSxyKV19LGUuYnVmZmVyPWZ1bmN0aW9uKGUsdD0hMSxuPVtdKXtsZXQgcj1uLnNsaWNlKCksaT1lKChlPT57cj9yLnB1c2goZSk6cy5maXJlKGUpfSkpO2NvbnN0IG89KCk9PntudWxsPT1yfHxyLmZvckVhY2goKGU9PnMuZmlyZShlKSkpLHI9bnVsbH0scz1uZXcgVSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe2l8fChpPWUoKGU9PnMuZmlyZShlKSkpKX0sb25EaWRBZGRGaXJzdExpc3RlbmVyKCl7ciYmKHQ/c2V0VGltZW91dChvKTpvKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe2kmJmkuZGlzcG9zZSgpLGk9bnVsbH19KTtyZXR1cm4gcy5ldmVudH07Y2xhc3MgZntjb25zdHJ1Y3RvcihlKXt0aGlzLmV2ZW50PWUsdGhpcy5kaXNwb3NhYmxlcz1uZXcgaH1tYXAoZSl7cmV0dXJuIG5ldyBmKG4odGhpcy5ldmVudCxlLHRoaXMuZGlzcG9zYWJsZXMpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgZihyKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgZihpKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9cmVkdWNlKGUsdCl7cmV0dXJuIG5ldyBmKG8odGhpcy5ldmVudCxlLHQsdGhpcy5kaXNwb3NhYmxlcykpfWxhdGNoKCl7cmV0dXJuIG5ldyBmKGwodGhpcy5ldmVudCx2b2lkIDAsdGhpcy5kaXNwb3NhYmxlcykpfWRlYm91bmNlKGUsdD0xMDAsbj0hMSxyPSExLGkpe3JldHVybiBuZXcgZihhKHRoaXMuZXZlbnQsZSx0LG4scixpLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBVKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT5lLm9uKHQsciksb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9PmUucmVtb3ZlTGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLmZyb21ET01FdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LG49KGU9PmUpKXtjb25zdCByPSguLi5lKT0+aS5maXJlKG4oLi4uZSkpLGk9bmV3IFUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PmUuYWRkRXZlbnRMaXN0ZW5lcih0LHIpLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLnRvUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKG49PnQoZSkobikpKX0sZS5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoKGU9PnQoZSkpKX0sZS5ydW5BbmRTdWJzY3JpYmVXaXRoU3RvcmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1udWxsO2Z1bmN0aW9uIHIoZSl7bnVsbD09bnx8bi5kaXNwb3NlKCksbj1uZXcgaCx0KGUsbil9cih2b2lkIDApO2NvbnN0IGk9ZSgoZT0+cihlKSkpO3JldHVybiBjKCgoKT0+e2kuZGlzcG9zZSgpLG51bGw9PW58fG4uZGlzcG9zZSgpfSkpfTtjbGFzcyBte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fb2JzZXJ2YWJsZT1lLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9oYXNDaGFuZ2VkPSExO2NvbnN0IG49e29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntlLmFkZE9ic2VydmVyKHRoaXMpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e2UucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9fTt0aGlzLmVtaXR0ZXI9bmV3IFUobiksdCYmdC5hZGQodGhpcy5lbWl0dGVyKX1iZWdpblVwZGF0ZShlKXt0aGlzLl9jb3VudGVyKyt9aGFuZGxlUG9zc2libGVDaGFuZ2UoZSl7fWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpe3RoaXMuX2NvdW50ZXItLSwwPT09dGhpcy5fY291bnRlciYmKHRoaXMuX29ic2VydmFibGUucmVwb3J0Q2hhbmdlcygpLHRoaXMuX2hhc0NoYW5nZWQmJih0aGlzLl9oYXNDaGFuZ2VkPSExLHRoaXMuZW1pdHRlci5maXJlKHRoaXMuX29ic2VydmFibGUuZ2V0KCkpKSl9fWUuZnJvbU9ic2VydmFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG0oZSx0KS5lbWl0dGVyLmV2ZW50fSxlLmZyb21PYnNlcnZhYmxlTGlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PntsZXQgbj0wLHI9ITE7Y29uc3QgaT17YmVnaW5VcGRhdGUoKXtuKyt9LGVuZFVwZGF0ZSgpe24tLSwwPT09biYmKGUucmVwb3J0Q2hhbmdlcygpLHImJihyPSExLHQoKSkpfSxoYW5kbGVQb3NzaWJsZUNoYW5nZSgpe30saGFuZGxlQ2hhbmdlKCl7cj0hMH19O3JldHVybiBlLmFkZE9ic2VydmVyKGkpLHtkaXNwb3NlKCl7ZS5yZW1vdmVPYnNlcnZlcihpKX19fX19KER8fChEPXt9KSk7Y2xhc3MgS3tjb25zdHJ1Y3RvcihlKXt0aGlzLmxpc3RlbmVyQ291bnQ9MCx0aGlzLmludm9jYXRpb25Db3VudD0wLHRoaXMuZWxhcHNlZE92ZXJhbGw9MCx0aGlzLmR1cmF0aW9ucz1bXSx0aGlzLm5hbWU9YCR7ZX1fJHtLLl9pZFBvb2wrK31gLEsuYWxsLmFkZCh0aGlzKX1zdGFydChlKXt0aGlzLl9zdG9wV2F0Y2g9bmV3IFYoITApLHRoaXMubGlzdGVuZXJDb3VudD1lfXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IGU9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLmR1cmF0aW9ucy5wdXNoKGUpLHRoaXMuZWxhcHNlZE92ZXJhbGwrPWUsdGhpcy5pbnZvY2F0aW9uQ291bnQrPTEsdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fUsuYWxsPW5ldyBTZXQsSy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlLHQ9TWF0aC5yYW5kb20oKS50b1N0cmluZygxOCkuc2xpY2UoMiw1KSl7dGhpcy50aHJlc2hvbGQ9ZSx0aGlzLm5hbWU9dCx0aGlzLl93YXJuQ291bnRkb3duPTB9ZGlzcG9zZSgpe3ZhciBlO251bGw9PT0oZT10aGlzLl9zdGFja3MpfHx2b2lkIDA9PT1lfHxlLmNsZWFyKCl9Y2hlY2soZSx0KXtjb25zdCBuPXRoaXMudGhyZXNob2xkO2lmKG48PTB8fHQ8bilyZXR1cm47dGhpcy5fc3RhY2tzfHwodGhpcy5fc3RhY2tzPW5ldyBNYXApO2NvbnN0IHI9dGhpcy5fc3RhY2tzLmdldChlLnZhbHVlKXx8MDtpZih0aGlzLl9zdGFja3Muc2V0KGUudmFsdWUscisxKSx0aGlzLl93YXJuQ291bnRkb3duLT0xLHRoaXMuX3dhcm5Db3VudGRvd248PTApe2xldCBlO3RoaXMuX3dhcm5Db3VudGRvd249LjUqbjtsZXQgcj0wO2Zvcihjb25zdFt0LG5db2YgdGhpcy5fc3RhY2tzKSghZXx8cjxuKSYmKGU9dCxyPW4pO2NvbnNvbGUud2FybihgWyR7dGhpcy5uYW1lfV0gcG90ZW50aWFsIGxpc3RlbmVyIExFQUsgZGV0ZWN0ZWQsIGhhdmluZyAke3R9IGxpc3RlbmVycyBhbHJlYWR5LiBNT1NUIGZyZXF1ZW50IGxpc3RlbmVyICgke3J9KTpgKSxjb25zb2xlLndhcm4oZSl9cmV0dXJuKCk9Pntjb25zdCB0PXRoaXMuX3N0YWNrcy5nZXQoZS52YWx1ZSl8fDA7dGhpcy5fc3RhY2tzLnNldChlLnZhbHVlLHQtMSl9fX1jbGFzcyBxe3N0YXRpYyBjcmVhdGUoKXt2YXIgZTtyZXR1cm4gbmV3IHEobnVsbCE9PShlPShuZXcgRXJyb3IpLnN0YWNrKSYmdm9pZCAwIT09ZT9lOiIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdCgiXG4iKS5zbGljZSgyKS5qb2luKCJcbiIpKX19Y2xhc3MgQntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5jYWxsYmFjaz1lLHRoaXMuY2FsbGJhY2tUaGlzPXQsdGhpcy5zdGFjaz1uLHRoaXMuc3Vic2NyaXB0aW9uPW5ldyBmfWludm9rZShlKXt0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5jYWxsYmFja1RoaXMsZSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSl7dmFyIHQsbixyLGksbzt0aGlzLl9kaXNwb3NlZD0hMSx0aGlzLl9vcHRpb25zPWUsdGhpcy5fbGVha2FnZU1vbj0obnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmxlYWtXYXJuaW5nVGhyZXNob2xkKT9uZXcgaihudWxsIT09KHI9bnVsbD09PShuPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlYWtXYXJuaW5nVGhyZXNob2xkKSYmdm9pZCAwIT09cj9yOi0xKTp2b2lkIDAsdGhpcy5fcGVyZk1vbj0obnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLl9wcm9mTmFtZSk/bmV3IEsodGhpcy5fb3B0aW9ucy5fcHJvZk5hbWUpOnZvaWQgMCx0aGlzLl9kZWxpdmVyeVF1ZXVlPW51bGw9PT0obz10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09bz92b2lkIDA6by5kZWxpdmVyeVF1ZXVlfWRpc3Bvc2UoKXt2YXIgZSx0LG4scjt0aGlzLl9kaXNwb3NlZHx8KHRoaXMuX2Rpc3Bvc2VkPSEwLHRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCksbnVsbD09PShlPXRoaXMuX2RlbGl2ZXJ5UXVldWUpfHx2b2lkIDA9PT1lfHxlLmNsZWFyKHRoaXMpLG51bGw9PT0obj1udWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpfHx2b2lkIDA9PT1ufHxuLmNhbGwodCksbnVsbD09PShyPXRoaXMuX2xlYWthZ2VNb24pfHx2b2lkIDA9PT1yfHxyLmRpc3Bvc2UoKSl9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9KGUsdCxuKT0+e3ZhciByLGksbztpZih0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IGcpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPjMqdGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCksZC5Ob25lO2NvbnN0IHM9dGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKTtsZXQgYSxsO3MmJihudWxsPT09KHI9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIub25XaWxsQWRkRmlyc3RMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25XaWxsQWRkRmlyc3RMaXN0ZW5lcih0aGlzKSx0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9saXN0ZW5lcnMuc2l6ZT49TWF0aC5jZWlsKC4yKnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKSYmKGw9cS5jcmVhdGUoKSxhPXRoaXMuX2xlYWthZ2VNb24uY2hlY2sobCx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgdT1uZXcgQihlLHQsbCksYz10aGlzLl9saXN0ZW5lcnMucHVzaCh1KTtzJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25EaWRBZGRGaXJzdExpc3RlbmVyKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25EaWRBZGRMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25EaWRBZGRMaXN0ZW5lcih0aGlzLGUsdCk7Y29uc3QgZj11LnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57dmFyIGUsdDtpZihudWxsPT1hfHxhKCksIXRoaXMuX2Rpc3Bvc2VkJiYobnVsbD09PSh0PW51bGw9PT0oZT10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5vbldpbGxSZW1vdmVMaXN0ZW5lcil8fHZvaWQgMD09PXR8fHQuY2FsbChlLHRoaXMpLGMoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcih0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuLHI7aWYodGhpcy5fbGlzdGVuZXJzKXt0aGlzLl9kZWxpdmVyeVF1ZXVlfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgVyhudWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25MaXN0ZW5lckVycm9yKSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fbGlzdGVuZXJzKXRoaXMuX2RlbGl2ZXJ5UXVldWUucHVzaCh0aGlzLHQsZSk7bnVsbD09PShuPXRoaXMuX3BlcmZNb24pfHx2b2lkIDA9PT1ufHxuLnN0YXJ0KHRoaXMuX2RlbGl2ZXJ5UXVldWUuc2l6ZSksdGhpcy5fZGVsaXZlcnlRdWV1ZS5kZWxpdmVyKCksbnVsbD09PShyPXRoaXMuX3BlcmZNb24pfHx2b2lkIDA9PT1yfHxyLnN0b3AoKX19aGFzTGlzdGVuZXJzKCl7cmV0dXJuISF0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfX1jbGFzcyAke2NvbnN0cnVjdG9yKGU9dCl7dGhpcy5fb25MaXN0ZW5lckVycm9yPWUsdGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBIKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3RoaXMuX29uTGlzdGVuZXJFcnJvcihlKX19fX1jbGFzcyBXIGV4dGVuZHMgJHtjbGVhcihlKXt0aGlzLl9xdWV1ZS5jbGVhcigpfX1jbGFzcyBIe2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmVtaXR0ZXI9ZSx0aGlzLmxpc3RlbmVyPXQsdGhpcy5ldmVudD1ufX1mdW5jdGlvbiB6KGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZnVuY3Rpb24oZSl7bGV0IHQ9W10sbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7Zm9yKDtPYmplY3QucHJvdG90eXBlIT09bjspdD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHR9KGUpKSJmdW5jdGlvbiI9PXR5cGVvZiBlW25dJiZ0LnB1c2gobik7cmV0dXJuIHR9Y2xhc3MgR3tjb25zdHJ1Y3RvcihlKXt0aGlzLmV4ZWN1dG9yPWUsdGhpcy5fZGlkUnVuPSExfWdldCB2YWx1ZSgpe2lmKCF0aGlzLl9kaWRSdW4pdHJ5e3RoaXMuX3ZhbHVlPXRoaXMuZXhlY3V0b3IoKX1jYXRjaChlKXt0aGlzLl9lcnJvcj1lfWZpbmFsbHl7dGhpcy5fZGlkUnVuPSEwfWlmKHRoaXMuX2Vycm9yKXRocm93IHRoaXMuX2Vycm9yO3JldHVybiB0aGlzLl92YWx1ZX1nZXQgcmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fXZhciBKO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIGU+PTY1JiZlPD05MH1mdW5jdGlvbiBaKGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gWShlLHQsbil7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobik7aWYoWihyKSYmbisxPHQpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M30odCkpcmV0dXJuIHQtNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn1yZXR1cm4gcn1jb25zdCBRPS9eW1x0XG5cclx4MjAtXHg3RV0qJC87Y2xhc3MgZWV7c3RhdGljIGdldEluc3RhbmNlKGUpe3JldHVybiBlZS5jYWNoZS5nZXQoQXJyYXkuZnJvbShlKSl9c3RhdGljIGdldExvY2FsZXMoKXtyZXR1cm4gZWUuX2xvY2FsZXMudmFsdWV9Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfWlzQW1iaWd1b3VzKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmhhcyhlKX1nZXRQcmltYXJ5Q29uZnVzYWJsZShlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5nZXQoZSl9Z2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKXtyZXR1cm4gbmV3IFNldCh0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmtleXMoKSl9fUo9ZWUsZWUuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YT1uZXcgRygoKCk9PkpTT04ucGFyc2UoJ3siX2NvbW1vbiI6WzgyMzIsMzIsODIzMywzMiw1NzYwLDMyLDgxOTIsMzIsODE5MywzMiw4MTk0LDMyLDgxOTUsMzIsODE5NiwzMiw4MTk3LDMyLDgxOTgsMzIsODIwMCwzMiw4MjAxLDMyLDgyMDIsMzIsODI4NywzMiw4MTk5LDMyLDgyMzksMzIsMjA0Miw5NSw2NTEwMSw5NSw2NTEwMiw5NSw2NTEwMyw5NSw4MjA4LDQ1LDgyMDksNDUsODIxMCw0NSw2NTExMiw0NSwxNzQ4LDQ1LDgyNTksNDUsNzI3LDQ1LDg3MjIsNDUsMTAxMzQsNDUsMTE0NTAsNDUsMTU0OSw0NCwxNjQzLDQ0LDgyMTgsNDQsMTg0LDQ0LDQyMjMzLDQ0LDg5NCw1OSwyMzA3LDU4LDI2OTEsNTgsMTQxNyw1OCwxNzk1LDU4LDE3OTYsNTgsNTg2OCw1OCw2NTA3Miw1OCw2MTQ3LDU4LDYxNTMsNTgsODI4Miw1OCwxNDc1LDU4LDc2MCw1OCw0Mjg4OSw1OCw4NzU4LDU4LDcyMCw1OCw0MjIzNyw1OCw0NTEsMzMsMTE2MDEsMzMsNjYwLDYzLDU3Nyw2MywyNDI5LDYzLDUwMzgsNjMsNDI3MzEsNjMsMTE5MTQ5LDQ2LDgyMjgsNDYsMTc5Myw0NiwxNzk0LDQ2LDQyNTEwLDQ2LDY4MTc2LDQ2LDE2MzIsNDYsMTc3Niw0Niw0MjIzMiw0NiwxMzczLDk2LDY1Mjg3LDk2LDgyMTksOTYsODI0Miw5NiwxMzcwLDk2LDE1MjMsOTYsODE3NSw5Niw2NTM0NCw5Niw5MDAsOTYsODE4OSw5Niw4MTI1LDk2LDgxMjcsOTYsODE5MCw5Niw2OTcsOTYsODg0LDk2LDcxMiw5Niw3MTQsOTYsNzE1LDk2LDc1Niw5Niw2OTksOTYsNzAxLDk2LDcwMCw5Niw3MDIsOTYsNDI4OTIsOTYsMTQ5Nyw5NiwyMDM2LDk2LDIwMzcsOTYsNTE5NCw5Niw1ODM2LDk2LDk0MDMzLDk2LDk0MDM0LDk2LDY1MzM5LDkxLDEwMDg4LDQwLDEwMDk4LDQwLDEyMzA4LDQwLDY0ODMwLDQwLDY1MzQxLDkzLDEwMDg5LDQxLDEwMDk5LDQxLDEyMzA5LDQxLDY0ODMxLDQxLDEwMTAwLDEyMywxMTkwNjAsMTIzLDEwMTAxLDEyNSw2NTM0Miw5NCw4MjcwLDQyLDE2NDUsNDIsODcyNyw0Miw2NjMzNSw0Miw1OTQxLDQ3LDgyNTcsNDcsODcyNSw0Nyw4MjYwLDQ3LDk1ODUsNDcsMTAxODcsNDcsMTA3NDQsNDcsMTE5MzU0LDQ3LDEyNzU1LDQ3LDEyMzM5LDQ3LDExNDYyLDQ3LDIwMDMxLDQ3LDEyMDM1LDQ3LDY1MzQwLDkyLDY1MTI4LDkyLDg3MjYsOTIsMTAxODksOTIsMTA3NDEsOTIsMTA3NDUsOTIsMTE5MzExLDkyLDExOTM1NSw5MiwxMjc1Niw5MiwyMDAyMiw5MiwxMjAzNCw5Miw0Mjg3MiwzOCw3MDgsOTQsNzEwLDk0LDU4NjksNDMsMTAxMzMsNDMsNjYyMDMsNDMsODI0OSw2MCwxMDA5NCw2MCw3MDYsNjAsMTE5MzUwLDYwLDUxNzYsNjAsNTgxMCw2MCw1MTIwLDYxLDExODQwLDYxLDEyNDQ4LDYxLDQyMjM5LDYxLDgyNTAsNjIsMTAwOTUsNjIsNzA3LDYyLDExOTM1MSw2Miw1MTcxLDYyLDk0MDE1LDYyLDgyNzUsMTI2LDczMiwxMjYsODEyOCwxMjYsODc2NCwxMjYsNjUzNzIsMTI0LDY1MjkzLDQ1LDEyMDc4NCw1MCwxMjA3OTQsNTAsMTIwODA0LDUwLDEyMDgxNCw1MCwxMjA4MjQsNTAsMTMwMDM0LDUwLDQyODQyLDUwLDQyMyw1MCwxMDAwLDUwLDQyNTY0LDUwLDUzMTEsNTAsNDI3MzUsNTAsMTE5MzAyLDUxLDEyMDc4NSw1MSwxMjA3OTUsNTEsMTIwODA1LDUxLDEyMDgxNSw1MSwxMjA4MjUsNTEsMTMwMDM1LDUxLDQyOTIzLDUxLDU0MCw1MSw0MzksNTEsNDI4NTgsNTEsMTE0NjgsNTEsMTI0OCw1MSw5NDAxMSw1MSw3MTg4Miw1MSwxMjA3ODYsNTIsMTIwNzk2LDUyLDEyMDgwNiw1MiwxMjA4MTYsNTIsMTIwODI2LDUyLDEzMDAzNiw1Miw1MDcwLDUyLDcxODU1LDUyLDEyMDc4Nyw1MywxMjA3OTcsNTMsMTIwODA3LDUzLDEyMDgxNyw1MywxMjA4MjcsNTMsMTMwMDM3LDUzLDQ0NCw1Myw3MTg2Nyw1MywxMjA3ODgsNTQsMTIwNzk4LDU0LDEyMDgwOCw1NCwxMjA4MTgsNTQsMTIwODI4LDU0LDEzMDAzOCw1NCwxMTQ3NCw1NCw1MTAyLDU0LDcxODkzLDU0LDExOTMxNCw1NSwxMjA3ODksNTUsMTIwNzk5LDU1LDEyMDgwOSw1NSwxMjA4MTksNTUsMTIwODI5LDU1LDEzMDAzOSw1NSw2Njc3MCw1NSw3MTg3OCw1NSwyODE5LDU2LDI1MzgsNTYsMjY2Niw1NiwxMjUxMzEsNTYsMTIwNzkwLDU2LDEyMDgwMCw1NiwxMjA4MTAsNTYsMTIwODIwLDU2LDEyMDgzMCw1NiwxMzAwNDAsNTYsNTQ3LDU2LDU0Niw1Niw2NjMzMCw1NiwyNjYzLDU3LDI5MjAsNTcsMjU0MSw1NywzNDM3LDU3LDEyMDc5MSw1NywxMjA4MDEsNTcsMTIwODExLDU3LDEyMDgyMSw1NywxMjA4MzEsNTcsMTMwMDQxLDU3LDQyODYyLDU3LDExNDY2LDU3LDcxODg0LDU3LDcxODUyLDU3LDcxODk0LDU3LDkwODIsOTcsNjUzNDUsOTcsMTE5ODM0LDk3LDExOTg4Niw5NywxMTk5MzgsOTcsMTE5OTkwLDk3LDEyMDA0Miw5NywxMjAwOTQsOTcsMTIwMTQ2LDk3LDEyMDE5OCw5NywxMjAyNTAsOTcsMTIwMzAyLDk3LDEyMDM1NCw5NywxMjA0MDYsOTcsMTIwNDU4LDk3LDU5Myw5Nyw5NDUsOTcsMTIwNTE0LDk3LDEyMDU3Miw5NywxMjA2MzAsOTcsMTIwNjg4LDk3LDEyMDc0Niw5Nyw2NTMxMyw2NSwxMTk4MDgsNjUsMTE5ODYwLDY1LDExOTkxMiw2NSwxMTk5NjQsNjUsMTIwMDE2LDY1LDEyMDA2OCw2NSwxMjAxMjAsNjUsMTIwMTcyLDY1LDEyMDIyNCw2NSwxMjAyNzYsNjUsMTIwMzI4LDY1LDEyMDM4MCw2NSwxMjA0MzIsNjUsOTEzLDY1LDEyMDQ4OCw2NSwxMjA1NDYsNjUsMTIwNjA0LDY1LDEyMDY2Miw2NSwxMjA3MjAsNjUsNTAzNCw2NSw1NTczLDY1LDQyMjIyLDY1LDk0MDE2LDY1LDY2MjA4LDY1LDExOTgzNSw5OCwxMTk4ODcsOTgsMTE5OTM5LDk4LDExOTk5MSw5OCwxMjAwNDMsOTgsMTIwMDk1LDk4LDEyMDE0Nyw5OCwxMjAxOTksOTgsMTIwMjUxLDk4LDEyMDMwMyw5OCwxMjAzNTUsOTgsMTIwNDA3LDk4LDEyMDQ1OSw5OCwzODgsOTgsNTA3MSw5OCw1MjM0LDk4LDU1NTEsOTgsNjUzMTQsNjYsODQ5Miw2NiwxMTk4MDksNjYsMTE5ODYxLDY2LDExOTkxMyw2NiwxMjAwMTcsNjYsMTIwMDY5LDY2LDEyMDEyMSw2NiwxMjAxNzMsNjYsMTIwMjI1LDY2LDEyMDI3Nyw2NiwxMjAzMjksNjYsMTIwMzgxLDY2LDEyMDQzMyw2Niw0MjkzMiw2Niw5MTQsNjYsMTIwNDg5LDY2LDEyMDU0Nyw2NiwxMjA2MDUsNjYsMTIwNjYzLDY2LDEyMDcyMSw2Niw1MTA4LDY2LDU2MjMsNjYsNDIxOTIsNjYsNjYxNzgsNjYsNjYyMDksNjYsNjYzMDUsNjYsNjUzNDcsOTksODU3Myw5OSwxMTk4MzYsOTksMTE5ODg4LDk5LDExOTk0MCw5OSwxMTk5OTIsOTksMTIwMDQ0LDk5LDEyMDA5Niw5OSwxMjAxNDgsOTksMTIwMjAwLDk5LDEyMDI1Miw5OSwxMjAzMDQsOTksMTIwMzU2LDk5LDEyMDQwOCw5OSwxMjA0NjAsOTksNzQyOCw5OSwxMDEwLDk5LDExNDI5LDk5LDQzOTUxLDk5LDY2NjIxLDk5LDEyODg0NCw2Nyw3MTkyMiw2Nyw3MTkxMyw2Nyw2NTMxNSw2Nyw4NTU3LDY3LDg0NTAsNjcsODQ5Myw2NywxMTk4MTAsNjcsMTE5ODYyLDY3LDExOTkxNCw2NywxMTk5NjYsNjcsMTIwMDE4LDY3LDEyMDE3NCw2NywxMjAyMjYsNjcsMTIwMjc4LDY3LDEyMDMzMCw2NywxMjAzODIsNjcsMTIwNDM0LDY3LDEwMTcsNjcsMTE0MjgsNjcsNTA4Nyw2Nyw0MjIwMiw2Nyw2NjIxMCw2Nyw2NjMwNiw2Nyw2NjU4MSw2Nyw2Njg0NCw2Nyw4NTc0LDEwMCw4NTE4LDEwMCwxMTk4MzcsMTAwLDExOTg4OSwxMDAsMTE5OTQxLDEwMCwxMTk5OTMsMTAwLDEyMDA0NSwxMDAsMTIwMDk3LDEwMCwxMjAxNDksMTAwLDEyMDIwMSwxMDAsMTIwMjUzLDEwMCwxMjAzMDUsMTAwLDEyMDM1NywxMDAsMTIwNDA5LDEwMCwxMjA0NjEsMTAwLDEyODEsMTAwLDUwOTUsMTAwLDUyMzEsMTAwLDQyMTk0LDEwMCw4NTU4LDY4LDg1MTcsNjgsMTE5ODExLDY4LDExOTg2Myw2OCwxMTk5MTUsNjgsMTE5OTY3LDY4LDEyMDAxOSw2OCwxMjAwNzEsNjgsMTIwMTIzLDY4LDEyMDE3NSw2OCwxMjAyMjcsNjgsMTIwMjc5LDY4LDEyMDMzMSw2OCwxMjAzODMsNjgsMTIwNDM1LDY4LDUwMjQsNjgsNTU5OCw2OCw1NjEwLDY4LDQyMTk1LDY4LDg0OTQsMTAxLDY1MzQ5LDEwMSw4NDk1LDEwMSw4NTE5LDEwMSwxMTk4MzgsMTAxLDExOTg5MCwxMDEsMTE5OTQyLDEwMSwxMjAwNDYsMTAxLDEyMDA5OCwxMDEsMTIwMTUwLDEwMSwxMjAyMDIsMTAxLDEyMDI1NCwxMDEsMTIwMzA2LDEwMSwxMjAzNTgsMTAxLDEyMDQxMCwxMDEsMTIwNDYyLDEwMSw0MzgyNiwxMDEsMTIxMywxMDEsODk1OSw2OSw2NTMxNyw2OSw4NDk2LDY5LDExOTgxMiw2OSwxMTk4NjQsNjksMTE5OTE2LDY5LDEyMDAyMCw2OSwxMjAwNzIsNjksMTIwMTI0LDY5LDEyMDE3Niw2OSwxMjAyMjgsNjksMTIwMjgwLDY5LDEyMDMzMiw2OSwxMjAzODQsNjksMTIwNDM2LDY5LDkxNyw2OSwxMjA0OTIsNjksMTIwNTUwLDY5LDEyMDYwOCw2OSwxMjA2NjYsNjksMTIwNzI0LDY5LDExNTc3LDY5LDUwMzYsNjksNDIyMjQsNjksNzE4NDYsNjksNzE4NTQsNjksNjYxODIsNjksMTE5ODM5LDEwMiwxMTk4OTEsMTAyLDExOTk0MywxMDIsMTE5OTk1LDEwMiwxMjAwNDcsMTAyLDEyMDA5OSwxMDIsMTIwMTUxLDEwMiwxMjAyMDMsMTAyLDEyMDI1NSwxMDIsMTIwMzA3LDEwMiwxMjAzNTksMTAyLDEyMDQxMSwxMDIsMTIwNDYzLDEwMiw0MzgyOSwxMDIsNDI5MDUsMTAyLDM4MywxMDIsNzgzNywxMDIsMTQxMiwxMDIsMTE5MzE1LDcwLDg0OTcsNzAsMTE5ODEzLDcwLDExOTg2NSw3MCwxMTk5MTcsNzAsMTIwMDIxLDcwLDEyMDA3Myw3MCwxMjAxMjUsNzAsMTIwMTc3LDcwLDEyMDIyOSw3MCwxMjAyODEsNzAsMTIwMzMzLDcwLDEyMDM4NSw3MCwxMjA0MzcsNzAsNDI5MDQsNzAsOTg4LDcwLDEyMDc3OCw3MCw1NTU2LDcwLDQyMjA1LDcwLDcxODc0LDcwLDcxODQyLDcwLDY2MTgzLDcwLDY2MjEzLDcwLDY2ODUzLDcwLDY1MzUxLDEwMyw4NDU4LDEwMywxMTk4NDAsMTAzLDExOTg5MiwxMDMsMTE5OTQ0LDEwMywxMjAwNDgsMTAzLDEyMDEwMCwxMDMsMTIwMTUyLDEwMywxMjAyMDQsMTAzLDEyMDI1NiwxMDMsMTIwMzA4LDEwMywxMjAzNjAsMTAzLDEyMDQxMiwxMDMsMTIwNDY0LDEwMyw2MDksMTAzLDc1NTUsMTAzLDM5NywxMDMsMTQwOSwxMDMsMTE5ODE0LDcxLDExOTg2Niw3MSwxMTk5MTgsNzEsMTE5OTcwLDcxLDEyMDAyMiw3MSwxMjAwNzQsNzEsMTIwMTI2LDcxLDEyMDE3OCw3MSwxMjAyMzAsNzEsMTIwMjgyLDcxLDEyMDMzNCw3MSwxMjAzODYsNzEsMTIwNDM4LDcxLDEyOTIsNzEsNTA1Niw3MSw1MTA3LDcxLDQyMTk4LDcxLDY1MzUyLDEwNCw4NDYyLDEwNCwxMTk4NDEsMTA0LDExOTk0NSwxMDQsMTE5OTk3LDEwNCwxMjAwNDksMTA0LDEyMDEwMSwxMDQsMTIwMTUzLDEwNCwxMjAyMDUsMTA0LDEyMDI1NywxMDQsMTIwMzA5LDEwNCwxMjAzNjEsMTA0LDEyMDQxMywxMDQsMTIwNDY1LDEwNCwxMjExLDEwNCwxMzkyLDEwNCw1MDU4LDEwNCw2NTMyMCw3Miw4NDU5LDcyLDg0NjAsNzIsODQ2MSw3MiwxMTk4MTUsNzIsMTE5ODY3LDcyLDExOTkxOSw3MiwxMjAwMjMsNzIsMTIwMTc5LDcyLDEyMDIzMSw3MiwxMjAyODMsNzIsMTIwMzM1LDcyLDEyMDM4Nyw3MiwxMjA0MzksNzIsOTE5LDcyLDEyMDQ5NCw3MiwxMjA1NTIsNzIsMTIwNjEwLDcyLDEyMDY2OCw3MiwxMjA3MjYsNzIsMTE0MDYsNzIsNTA1MSw3Miw1NTAwLDcyLDQyMjE1LDcyLDY2MjU1LDcyLDczMSwxMDUsOTA3NSwxMDUsNjUzNTMsMTA1LDg1NjAsMTA1LDg1MDUsMTA1LDg1MjAsMTA1LDExOTg0MiwxMDUsMTE5ODk0LDEwNSwxMTk5NDYsMTA1LDExOTk5OCwxMDUsMTIwMDUwLDEwNSwxMjAxMDIsMTA1LDEyMDE1NCwxMDUsMTIwMjA2LDEwNSwxMjAyNTgsMTA1LDEyMDMxMCwxMDUsMTIwMzYyLDEwNSwxMjA0MTQsMTA1LDEyMDQ2NiwxMDUsMTIwNDg0LDEwNSw2MTgsMTA1LDYxNywxMDUsOTUzLDEwNSw4MTI2LDEwNSw4OTAsMTA1LDEyMDUyMiwxMDUsMTIwNTgwLDEwNSwxMjA2MzgsMTA1LDEyMDY5NiwxMDUsMTIwNzU0LDEwNSwxMTEwLDEwNSw0MjU2NywxMDUsMTIzMSwxMDUsNDM4OTMsMTA1LDUwMjksMTA1LDcxODc1LDEwNSw2NTM1NCwxMDYsODUyMSwxMDYsMTE5ODQzLDEwNiwxMTk4OTUsMTA2LDExOTk0NywxMDYsMTE5OTk5LDEwNiwxMjAwNTEsMTA2LDEyMDEwMywxMDYsMTIwMTU1LDEwNiwxMjAyMDcsMTA2LDEyMDI1OSwxMDYsMTIwMzExLDEwNiwxMjAzNjMsMTA2LDEyMDQxNSwxMDYsMTIwNDY3LDEwNiwxMDExLDEwNiwxMTEyLDEwNiw2NTMyMiw3NCwxMTk4MTcsNzQsMTE5ODY5LDc0LDExOTkyMSw3NCwxMTk5NzMsNzQsMTIwMDI1LDc0LDEyMDA3Nyw3NCwxMjAxMjksNzQsMTIwMTgxLDc0LDEyMDIzMyw3NCwxMjAyODUsNzQsMTIwMzM3LDc0LDEyMDM4OSw3NCwxMjA0NDEsNzQsNDI5MzAsNzQsODk1LDc0LDEwMzIsNzQsNTAzNSw3NCw1MjYxLDc0LDQyMjAxLDc0LDExOTg0NCwxMDcsMTE5ODk2LDEwNywxMTk5NDgsMTA3LDEyMDAwMCwxMDcsMTIwMDUyLDEwNywxMjAxMDQsMTA3LDEyMDE1NiwxMDcsMTIwMjA4LDEwNywxMjAyNjAsMTA3LDEyMDMxMiwxMDcsMTIwMzY0LDEwNywxMjA0MTYsMTA3LDEyMDQ2OCwxMDcsODQ5MCw3NSw2NTMyMyw3NSwxMTk4MTgsNzUsMTE5ODcwLDc1LDExOTkyMiw3NSwxMTk5NzQsNzUsMTIwMDI2LDc1LDEyMDA3OCw3NSwxMjAxMzAsNzUsMTIwMTgyLDc1LDEyMDIzNCw3NSwxMjAyODYsNzUsMTIwMzM4LDc1LDEyMDM5MCw3NSwxMjA0NDIsNzUsOTIyLDc1LDEyMDQ5Nyw3NSwxMjA1NTUsNzUsMTIwNjEzLDc1LDEyMDY3MSw3NSwxMjA3MjksNzUsMTE0MTIsNzUsNTA5NCw3NSw1ODQ1LDc1LDQyMTk5LDc1LDY2ODQwLDc1LDE0NzIsMTA4LDg3MzksNzMsOTIxMyw3Myw2NTUxMiw3MywxNjMzLDEwOCwxNzc3LDczLDY2MzM2LDEwOCwxMjUxMjcsMTA4LDEyMDc4Myw3MywxMjA3OTMsNzMsMTIwODAzLDczLDEyMDgxMyw3MywxMjA4MjMsNzMsMTMwMDMzLDczLDY1MzIxLDczLDg1NDQsNzMsODQ2NCw3Myw4NDY1LDczLDExOTgxNiw3MywxMTk4NjgsNzMsMTE5OTIwLDczLDEyMDAyNCw3MywxMjAxMjgsNzMsMTIwMTgwLDczLDEyMDIzMiw3MywxMjAyODQsNzMsMTIwMzM2LDczLDEyMDM4OCw3MywxMjA0NDAsNzMsNjUzNTYsMTA4LDg1NzIsNzMsODQ2NywxMDgsMTE5ODQ1LDEwOCwxMTk4OTcsMTA4LDExOTk0OSwxMDgsMTIwMDAxLDEwOCwxMjAwNTMsMTA4LDEyMDEwNSw3MywxMjAxNTcsNzMsMTIwMjA5LDczLDEyMDI2MSw3MywxMjAzMTMsNzMsMTIwMzY1LDczLDEyMDQxNyw3MywxMjA0NjksNzMsNDQ4LDczLDEyMDQ5Niw3MywxMjA1NTQsNzMsMTIwNjEyLDczLDEyMDY3MCw3MywxMjA3MjgsNzMsMTE0MTAsNzMsMTAzMCw3MywxMjE2LDczLDE0OTMsMTA4LDE1MDMsMTA4LDE1NzUsMTA4LDEyNjQ2NCwxMDgsMTI2NTkyLDEwOCw2NTE2NiwxMDgsNjUxNjUsMTA4LDE5OTQsMTA4LDExNTk5LDczLDU4MjUsNzMsNDIyMjYsNzMsOTM5OTIsNzMsNjYxODYsMTI0LDY2MzEzLDEyNCwxMTkzMzgsNzYsODU1Niw3Niw4NDY2LDc2LDExOTgxOSw3NiwxMTk4NzEsNzYsMTE5OTIzLDc2LDEyMDAyNyw3NiwxMjAwNzksNzYsMTIwMTMxLDc2LDEyMDE4Myw3NiwxMjAyMzUsNzYsMTIwMjg3LDc2LDEyMDMzOSw3NiwxMjAzOTEsNzYsMTIwNDQzLDc2LDExNDcyLDc2LDUwODYsNzYsNTI5MCw3Niw0MjIwOSw3Niw5Mzk3NCw3Niw3MTg0Myw3Niw3MTg1OCw3Niw2NjU4Nyw3Niw2Njg1NCw3Niw2NTMyNSw3Nyw4NTU5LDc3LDg0OTksNzcsMTE5ODIwLDc3LDExOTg3Miw3NywxMTk5MjQsNzcsMTIwMDI4LDc3LDEyMDA4MCw3NywxMjAxMzIsNzcsMTIwMTg0LDc3LDEyMDIzNiw3NywxMjAyODgsNzcsMTIwMzQwLDc3LDEyMDM5Miw3NywxMjA0NDQsNzcsOTI0LDc3LDEyMDQ5OSw3NywxMjA1NTcsNzcsMTIwNjE1LDc3LDEyMDY3Myw3NywxMjA3MzEsNzcsMTAxOCw3NywxMTQxNiw3Nyw1MDQ3LDc3LDU2MTYsNzcsNTg0Niw3Nyw0MjIwNyw3Nyw2NjIyNCw3Nyw2NjMyMSw3NywxMTk4NDcsMTEwLDExOTg5OSwxMTAsMTE5OTUxLDExMCwxMjAwMDMsMTEwLDEyMDA1NSwxMTAsMTIwMTA3LDExMCwxMjAxNTksMTEwLDEyMDIxMSwxMTAsMTIwMjYzLDExMCwxMjAzMTUsMTEwLDEyMDM2NywxMTAsMTIwNDE5LDExMCwxMjA0NzEsMTEwLDE0MDAsMTEwLDE0MDQsMTEwLDY1MzI2LDc4LDg0NjksNzgsMTE5ODIxLDc4LDExOTg3Myw3OCwxMTk5MjUsNzgsMTE5OTc3LDc4LDEyMDAyOSw3OCwxMjAwODEsNzgsMTIwMTg1LDc4LDEyMDIzNyw3OCwxMjAyODksNzgsMTIwMzQxLDc4LDEyMDM5Myw3OCwxMjA0NDUsNzgsOTI1LDc4LDEyMDUwMCw3OCwxMjA1NTgsNzgsMTIwNjE2LDc4LDEyMDY3NCw3OCwxMjA3MzIsNzgsMTE0MTgsNzgsNDIyMDgsNzgsNjY4MzUsNzgsMzA3NCwxMTEsMzIwMiwxMTEsMzMzMCwxMTEsMzQ1OCwxMTEsMjQwNiwxMTEsMjY2MiwxMTEsMjc5MCwxMTEsMzA0NiwxMTEsMzE3NCwxMTEsMzMwMiwxMTEsMzQzMCwxMTEsMzY2NCwxMTEsMzc5MiwxMTEsNDE2MCwxMTEsMTYzNywxMTEsMTc4MSwxMTEsNjUzNTksMTExLDg1MDAsMTExLDExOTg0OCwxMTEsMTE5OTAwLDExMSwxMTk5NTIsMTExLDEyMDA1NiwxMTEsMTIwMTA4LDExMSwxMjAxNjAsMTExLDEyMDIxMiwxMTEsMTIwMjY0LDExMSwxMjAzMTYsMTExLDEyMDM2OCwxMTEsMTIwNDIwLDExMSwxMjA0NzIsMTExLDc0MzksMTExLDc0NDEsMTExLDQzODM3LDExMSw5NTksMTExLDEyMDUyOCwxMTEsMTIwNTg2LDExMSwxMjA2NDQsMTExLDEyMDcwMiwxMTEsMTIwNzYwLDExMSw5NjMsMTExLDEyMDUzMiwxMTEsMTIwNTkwLDExMSwxMjA2NDgsMTExLDEyMDcwNiwxMTEsMTIwNzY0LDExMSwxMTQyMywxMTEsNDM1MSwxMTEsMTQxMywxMTEsMTUwNSwxMTEsMTYwNywxMTEsMTI2NTAwLDExMSwxMjY1NjQsMTExLDEyNjU5NiwxMTEsNjUyNTksMTExLDY1MjYwLDExMSw2NTI1OCwxMTEsNjUyNTcsMTExLDE3MjYsMTExLDY0NDI4LDExMSw2NDQyOSwxMTEsNjQ0MjcsMTExLDY0NDI2LDExMSwxNzI5LDExMSw2NDQyNCwxMTEsNjQ0MjUsMTExLDY0NDIzLDExMSw2NDQyMiwxMTEsMTc0OSwxMTEsMzM2MCwxMTEsNDEyNSwxMTEsNjY3OTQsMTExLDcxODgwLDExMSw3MTg5NSwxMTEsNjY2MDQsMTExLDE5ODQsNzksMjUzNCw3OSwyOTE4LDc5LDEyMjk1LDc5LDcwODY0LDc5LDcxOTA0LDc5LDEyMDc4Miw3OSwxMjA3OTIsNzksMTIwODAyLDc5LDEyMDgxMiw3OSwxMjA4MjIsNzksMTMwMDMyLDc5LDY1MzI3LDc5LDExOTgyMiw3OSwxMTk4NzQsNzksMTE5OTI2LDc5LDExOTk3OCw3OSwxMjAwMzAsNzksMTIwMDgyLDc5LDEyMDEzNCw3OSwxMjAxODYsNzksMTIwMjM4LDc5LDEyMDI5MCw3OSwxMjAzNDIsNzksMTIwMzk0LDc5LDEyMDQ0Niw3OSw5MjcsNzksMTIwNTAyLDc5LDEyMDU2MCw3OSwxMjA2MTgsNzksMTIwNjc2LDc5LDEyMDczNCw3OSwxMTQyMiw3OSwxMzY1LDc5LDExNjA0LDc5LDQ4MTYsNzksMjg0OCw3OSw2Njc1NCw3OSw0MjIyNyw3OSw3MTg2MSw3OSw2NjE5NCw3OSw2NjIxOSw3OSw2NjU2NCw3OSw2NjgzOCw3OSw5MDc2LDExMiw2NTM2MCwxMTIsMTE5ODQ5LDExMiwxMTk5MDEsMTEyLDExOTk1MywxMTIsMTIwMDA1LDExMiwxMjAwNTcsMTEyLDEyMDEwOSwxMTIsMTIwMTYxLDExMiwxMjAyMTMsMTEyLDEyMDI2NSwxMTIsMTIwMzE3LDExMiwxMjAzNjksMTEyLDEyMDQyMSwxMTIsMTIwNDczLDExMiw5NjEsMTEyLDEyMDUzMCwxMTIsMTIwNTQ0LDExMiwxMjA1ODgsMTEyLDEyMDYwMiwxMTIsMTIwNjQ2LDExMiwxMjA2NjAsMTEyLDEyMDcwNCwxMTIsMTIwNzE4LDExMiwxMjA3NjIsMTEyLDEyMDc3NiwxMTIsMTE0MjcsMTEyLDY1MzI4LDgwLDg0NzMsODAsMTE5ODIzLDgwLDExOTg3NSw4MCwxMTk5MjcsODAsMTE5OTc5LDgwLDEyMDAzMSw4MCwxMjAwODMsODAsMTIwMTg3LDgwLDEyMDIzOSw4MCwxMjAyOTEsODAsMTIwMzQzLDgwLDEyMDM5NSw4MCwxMjA0NDcsODAsOTI5LDgwLDEyMDUwNCw4MCwxMjA1NjIsODAsMTIwNjIwLDgwLDEyMDY3OCw4MCwxMjA3MzYsODAsMTE0MjYsODAsNTA5MCw4MCw1MjI5LDgwLDQyMTkzLDgwLDY2MTk3LDgwLDExOTg1MCwxMTMsMTE5OTAyLDExMywxMTk5NTQsMTEzLDEyMDAwNiwxMTMsMTIwMDU4LDExMywxMjAxMTAsMTEzLDEyMDE2MiwxMTMsMTIwMjE0LDExMywxMjAyNjYsMTEzLDEyMDMxOCwxMTMsMTIwMzcwLDExMywxMjA0MjIsMTEzLDEyMDQ3NCwxMTMsMTMwNywxMTMsMTM3OSwxMTMsMTM4MiwxMTMsODQ3NCw4MSwxMTk4MjQsODEsMTE5ODc2LDgxLDExOTkyOCw4MSwxMTk5ODAsODEsMTIwMDMyLDgxLDEyMDA4NCw4MSwxMjAxODgsODEsMTIwMjQwLDgxLDEyMDI5Miw4MSwxMjAzNDQsODEsMTIwMzk2LDgxLDEyMDQ0OCw4MSwxMTYwNSw4MSwxMTk4NTEsMTE0LDExOTkwMywxMTQsMTE5OTU1LDExNCwxMjAwMDcsMTE0LDEyMDA1OSwxMTQsMTIwMTExLDExNCwxMjAxNjMsMTE0LDEyMDIxNSwxMTQsMTIwMjY3LDExNCwxMjAzMTksMTE0LDEyMDM3MSwxMTQsMTIwNDIzLDExNCwxMjA0NzUsMTE0LDQzODQ3LDExNCw0Mzg0OCwxMTQsNzQ2MiwxMTQsMTEzOTcsMTE0LDQzOTA1LDExNCwxMTkzMTgsODIsODQ3NSw4Miw4NDc2LDgyLDg0NzcsODIsMTE5ODI1LDgyLDExOTg3Nyw4MiwxMTk5MjksODIsMTIwMDMzLDgyLDEyMDE4OSw4MiwxMjAyNDEsODIsMTIwMjkzLDgyLDEyMDM0NSw4MiwxMjAzOTcsODIsMTIwNDQ5LDgyLDQyMiw4Miw1MDI1LDgyLDUwNzQsODIsNjY3NDAsODIsNTUxMSw4Miw0MjIxMSw4Miw5NDAwNSw4Miw2NTM2MywxMTUsMTE5ODUyLDExNSwxMTk5MDQsMTE1LDExOTk1NiwxMTUsMTIwMDA4LDExNSwxMjAwNjAsMTE1LDEyMDExMiwxMTUsMTIwMTY0LDExNSwxMjAyMTYsMTE1LDEyMDI2OCwxMTUsMTIwMzIwLDExNSwxMjAzNzIsMTE1LDEyMDQyNCwxMTUsMTIwNDc2LDExNSw0MjgwMSwxMTUsNDQ1LDExNSwxMTA5LDExNSw0Mzk0NiwxMTUsNzE4NzMsMTE1LDY2NjMyLDExNSw2NTMzMSw4MywxMTk4MjYsODMsMTE5ODc4LDgzLDExOTkzMCw4MywxMTk5ODIsODMsMTIwMDM0LDgzLDEyMDA4Niw4MywxMjAxMzgsODMsMTIwMTkwLDgzLDEyMDI0Miw4MywxMjAyOTQsODMsMTIwMzQ2LDgzLDEyMDM5OCw4MywxMjA0NTAsODMsMTAyOSw4MywxMzU5LDgzLDUwNzcsODMsNTA4Miw4Myw0MjIxMCw4Myw5NDAxMCw4Myw2NjE5OCw4Myw2NjU5Miw4MywxMTk4NTMsMTE2LDExOTkwNSwxMTYsMTE5OTU3LDExNiwxMjAwMDksMTE2LDEyMDA2MSwxMTYsMTIwMTEzLDExNiwxMjAxNjUsMTE2LDEyMDIxNywxMTYsMTIwMjY5LDExNiwxMjAzMjEsMTE2LDEyMDM3MywxMTYsMTIwNDI1LDExNiwxMjA0NzcsMTE2LDg4NjgsODQsMTAyMDEsODQsMTI4ODcyLDg0LDY1MzMyLDg0LDExOTgyNyw4NCwxMTk4NzksODQsMTE5OTMxLDg0LDExOTk4Myw4NCwxMjAwMzUsODQsMTIwMDg3LDg0LDEyMDEzOSw4NCwxMjAxOTEsODQsMTIwMjQzLDg0LDEyMDI5NSw4NCwxMjAzNDcsODQsMTIwMzk5LDg0LDEyMDQ1MSw4NCw5MzIsODQsMTIwNTA3LDg0LDEyMDU2NSw4NCwxMjA2MjMsODQsMTIwNjgxLDg0LDEyMDczOSw4NCwxMTQzMCw4NCw1MDI2LDg0LDQyMTk2LDg0LDkzOTYyLDg0LDcxODY4LDg0LDY2MTk5LDg0LDY2MjI1LDg0LDY2MzI1LDg0LDExOTg1NCwxMTcsMTE5OTA2LDExNywxMTk5NTgsMTE3LDEyMDAxMCwxMTcsMTIwMDYyLDExNywxMjAxMTQsMTE3LDEyMDE2NiwxMTcsMTIwMjE4LDExNywxMjAyNzAsMTE3LDEyMDMyMiwxMTcsMTIwMzc0LDExNywxMjA0MjYsMTE3LDEyMDQ3OCwxMTcsNDI5MTEsMTE3LDc0NTIsMTE3LDQzODU0LDExNyw0Mzg1OCwxMTcsNjUxLDExNyw5NjUsMTE3LDEyMDUzNCwxMTcsMTIwNTkyLDExNywxMjA2NTAsMTE3LDEyMDcwOCwxMTcsMTIwNzY2LDExNywxNDA1LDExNyw2NjgwNiwxMTcsNzE4OTYsMTE3LDg3NDYsODUsODg5OSw4NSwxMTk4MjgsODUsMTE5ODgwLDg1LDExOTkzMiw4NSwxMTk5ODQsODUsMTIwMDM2LDg1LDEyMDA4OCw4NSwxMjAxNDAsODUsMTIwMTkyLDg1LDEyMDI0NCw4NSwxMjAyOTYsODUsMTIwMzQ4LDg1LDEyMDQwMCw4NSwxMjA0NTIsODUsMTM1Nyw4NSw0NjA4LDg1LDY2NzY2LDg1LDUxOTYsODUsNDIyMjgsODUsOTQwMTgsODUsNzE4NjQsODUsODc0NCwxMTgsODg5NywxMTgsNjUzNjYsMTE4LDg1NjQsMTE4LDExOTg1NSwxMTgsMTE5OTA3LDExOCwxMTk5NTksMTE4LDEyMDAxMSwxMTgsMTIwMDYzLDExOCwxMjAxMTUsMTE4LDEyMDE2NywxMTgsMTIwMjE5LDExOCwxMjAyNzEsMTE4LDEyMDMyMywxMTgsMTIwMzc1LDExOCwxMjA0MjcsMTE4LDEyMDQ3OSwxMTgsNzQ1NiwxMTgsOTU3LDExOCwxMjA1MjYsMTE4LDEyMDU4NCwxMTgsMTIwNjQyLDExOCwxMjA3MDAsMTE4LDEyMDc1OCwxMTgsMTE0MSwxMTgsMTQ5NiwxMTgsNzE0MzAsMTE4LDQzOTQ1LDExOCw3MTg3MiwxMTgsMTE5MzA5LDg2LDE2MzksODYsMTc4Myw4Niw4NTQ4LDg2LDExOTgyOSw4NiwxMTk4ODEsODYsMTE5OTMzLDg2LDExOTk4NSw4NiwxMjAwMzcsODYsMTIwMDg5LDg2LDEyMDE0MSw4NiwxMjAxOTMsODYsMTIwMjQ1LDg2LDEyMDI5Nyw4NiwxMjAzNDksODYsMTIwNDAxLDg2LDEyMDQ1Myw4NiwxMTQwLDg2LDExNTc2LDg2LDUwODEsODYsNTE2Nyw4Niw0MjcxOSw4Niw0MjIxNCw4Niw5Mzk2MCw4Niw3MTg0MCw4Niw2Njg0NSw4Niw2MjMsMTE5LDExOTg1NiwxMTksMTE5OTA4LDExOSwxMTk5NjAsMTE5LDEyMDAxMiwxMTksMTIwMDY0LDExOSwxMjAxMTYsMTE5LDEyMDE2OCwxMTksMTIwMjIwLDExOSwxMjAyNzIsMTE5LDEyMDMyNCwxMTksMTIwMzc2LDExOSwxMjA0MjgsMTE5LDEyMDQ4MCwxMTksNzQ1NywxMTksMTEyMSwxMTksMTMwOSwxMTksMTM3NywxMTksNzE0MzQsMTE5LDcxNDM4LDExOSw3MTQzOSwxMTksNDM5MDcsMTE5LDcxOTE5LDg3LDcxOTEwLDg3LDExOTgzMCw4NywxMTk4ODIsODcsMTE5OTM0LDg3LDExOTk4Niw4NywxMjAwMzgsODcsMTIwMDkwLDg3LDEyMDE0Miw4NywxMjAxOTQsODcsMTIwMjQ2LDg3LDEyMDI5OCw4NywxMjAzNTAsODcsMTIwNDAyLDg3LDEyMDQ1NCw4NywxMzA4LDg3LDUwNDMsODcsNTA3Niw4Nyw0MjIxOCw4Nyw1NzQyLDEyMCwxMDUzOSwxMjAsMTA1NDAsMTIwLDEwNzk5LDEyMCw2NTM2OCwxMjAsODU2OSwxMjAsMTE5ODU3LDEyMCwxMTk5MDksMTIwLDExOTk2MSwxMjAsMTIwMDEzLDEyMCwxMjAwNjUsMTIwLDEyMDExNywxMjAsMTIwMTY5LDEyMCwxMjAyMjEsMTIwLDEyMDI3MywxMjAsMTIwMzI1LDEyMCwxMjAzNzcsMTIwLDEyMDQyOSwxMjAsMTIwNDgxLDEyMCw1NDQxLDEyMCw1NTAxLDEyMCw1NzQxLDg4LDk1ODcsODgsNjYzMzgsODgsNzE5MTYsODgsNjUzMzYsODgsODU1Myw4OCwxMTk4MzEsODgsMTE5ODgzLDg4LDExOTkzNSw4OCwxMTk5ODcsODgsMTIwMDM5LDg4LDEyMDA5MSw4OCwxMjAxNDMsODgsMTIwMTk1LDg4LDEyMDI0Nyw4OCwxMjAyOTksODgsMTIwMzUxLDg4LDEyMDQwMyw4OCwxMjA0NTUsODgsNDI5MzEsODgsOTM1LDg4LDEyMDUxMCw4OCwxMjA1NjgsODgsMTIwNjI2LDg4LDEyMDY4NCw4OCwxMjA3NDIsODgsMTE0MzYsODgsMTE2MTMsODgsNTgxNSw4OCw0MjIxOSw4OCw2NjE5Miw4OCw2NjIyOCw4OCw2NjMyNyw4OCw2Njg1NSw4OCw2MTEsMTIxLDc1NjQsMTIxLDY1MzY5LDEyMSwxMTk4NTgsMTIxLDExOTkxMCwxMjEsMTE5OTYyLDEyMSwxMjAwMTQsMTIxLDEyMDA2NiwxMjEsMTIwMTE4LDEyMSwxMjAxNzAsMTIxLDEyMDIyMiwxMjEsMTIwMjc0LDEyMSwxMjAzMjYsMTIxLDEyMDM3OCwxMjEsMTIwNDMwLDEyMSwxMjA0ODIsMTIxLDY1NSwxMjEsNzkzNSwxMjEsNDM4NjYsMTIxLDk0NywxMjEsODUwOSwxMjEsMTIwNTE2LDEyMSwxMjA1NzQsMTIxLDEyMDYzMiwxMjEsMTIwNjkwLDEyMSwxMjA3NDgsMTIxLDExOTksMTIxLDQzMjcsMTIxLDcxOTAwLDEyMSw2NTMzNyw4OSwxMTk4MzIsODksMTE5ODg0LDg5LDExOTkzNiw4OSwxMTk5ODgsODksMTIwMDQwLDg5LDEyMDA5Miw4OSwxMjAxNDQsODksMTIwMTk2LDg5LDEyMDI0OCw4OSwxMjAzMDAsODksMTIwMzUyLDg5LDEyMDQwNCw4OSwxMjA0NTYsODksOTMzLDg5LDk3OCw4OSwxMjA1MDgsODksMTIwNTY2LDg5LDEyMDYyNCw4OSwxMjA2ODIsODksMTIwNzQwLDg5LDExNDMyLDg5LDExOTgsODksNTAzMyw4OSw1MDUzLDg5LDQyMjIwLDg5LDk0MDE5LDg5LDcxODQ0LDg5LDY2MjI2LDg5LDExOTg1OSwxMjIsMTE5OTExLDEyMiwxMTk5NjMsMTIyLDEyMDAxNSwxMjIsMTIwMDY3LDEyMiwxMjAxMTksMTIyLDEyMDE3MSwxMjIsMTIwMjIzLDEyMiwxMjAyNzUsMTIyLDEyMDMyNywxMjIsMTIwMzc5LDEyMiwxMjA0MzEsMTIyLDEyMDQ4MywxMjIsNzQ1OCwxMjIsNDM5MjMsMTIyLDcxODc2LDEyMiw2NjI5Myw5MCw3MTkwOSw5MCw2NTMzOCw5MCw4NDg0LDkwLDg0ODgsOTAsMTE5ODMzLDkwLDExOTg4NSw5MCwxMTk5MzcsOTAsMTE5OTg5LDkwLDEyMDA0MSw5MCwxMjAxOTcsOTAsMTIwMjQ5LDkwLDEyMDMwMSw5MCwxMjAzNTMsOTAsMTIwNDA1LDkwLDEyMDQ1Nyw5MCw5MTgsOTAsMTIwNDkzLDkwLDEyMDU1MSw5MCwxMjA2MDksOTAsMTIwNjY3LDkwLDEyMDcyNSw5MCw1MDU5LDkwLDQyMjA0LDkwLDcxODQ5LDkwLDY1MjgyLDM0LDY1Mjg0LDM2LDY1Mjg1LDM3LDY1Mjg2LDM4LDY1MjkwLDQyLDY1MjkxLDQzLDY1Mjk0LDQ2LDY1Mjk1LDQ3LDY1Mjk2LDQ4LDY1Mjk3LDQ5LDY1Mjk4LDUwLDY1Mjk5LDUxLDY1MzAwLDUyLDY1MzAxLDUzLDY1MzAyLDU0LDY1MzAzLDU1LDY1MzA0LDU2LDY1MzA1LDU3LDY1MzA4LDYwLDY1MzA5LDYxLDY1MzEwLDYyLDY1MzEyLDY0LDY1MzE2LDY4LDY1MzE4LDcwLDY1MzE5LDcxLDY1MzI0LDc2LDY1MzI5LDgxLDY1MzMwLDgyLDY1MzMzLDg1LDY1MzM0LDg2LDY1MzM1LDg3LDY1MzQzLDk1LDY1MzQ2LDk4LDY1MzQ4LDEwMCw2NTM1MCwxMDIsNjUzNTUsMTA3LDY1MzU3LDEwOSw2NTM1OCwxMTAsNjUzNjEsMTEzLDY1MzYyLDExNCw2NTM2NCwxMTYsNjUzNjUsMTE3LDY1MzY3LDExOSw2NTM3MCwxMjIsNjUzNzEsMTIzLDY1MzczLDEyNSwxMTk4NDYsMTA5XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLGVlLmNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZuPWUsdGhpcy5sYXN0Q2FjaGU9dm9pZCAwLHRoaXMubGFzdEFyZ0tleT12b2lkIDB9Z2V0KGUpe2NvbnN0IHQ9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIHRoaXMubGFzdEFyZ0tleSE9PXQmJih0aGlzLmxhc3RBcmdLZXk9dCx0aGlzLmxhc3RDYWNoZT10aGlzLmZuKGUpKSx0aGlzLmxhc3RDYWNoZX19KChlPT57ZnVuY3Rpb24gdChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0yKXQuc2V0KGVbbl0sZVtuKzFdKTtyZXR1cm4gdH1mdW5jdGlvbiBuKGUsdCl7aWYoIWUpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdFtyLGldb2YgZSl0LmhhcyhyKSYmbi5zZXQocixpKTtyZXR1cm4gbn1jb25zdCByPUouYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZTtsZXQgaSxvPWUuZmlsdGVyKChlPT4hZS5zdGFydHNXaXRoKCJfIikmJmUgaW4gcikpOzA9PT1vLmxlbmd0aCYmKG89WyJfZGVmYXVsdCJdKTtmb3IoY29uc3QgZSBvZiBvKXtpPW4oaSx0KHJbZV0pKX1jb25zdCBzPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgTWFwKGUpO2Zvcihjb25zdFtlLHJdb2YgdCluLnNldChlLHIpO3JldHVybiBufSh0KHIuX2NvbW1vbiksaSk7cmV0dXJuIG5ldyBlZShzKX0pKSxlZS5fbG9jYWxlcz1uZXcgRygoKCk9Pk9iamVjdC5rZXlzKGVlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyB0ZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KHRlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiB0ZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiB0ZS5nZXREYXRhKCl9fXRlLl9kYXRhPXZvaWQgMDtjbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgVSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e249U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQobixyKSx0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUobiksdGhpcy5fc2VuZChuZXcgc2UodGhpcy5fd29ya2VySWQsbikpLG49bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKGUpe2UmJmUudnNXb3JrZXImJigtMSE9PXRoaXMuX3dvcmtlcklkJiZlLnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UoZSkpfV9oYW5kbGVNZXNzYWdlKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKGUpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UoZSk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UoZSk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKX19X2hhbmRsZVJlcGx5TWVzc2FnZShlKXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIik7Y29uc3QgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtjb25zdCB0PWUucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZShlLm1ldGhvZCxlLmFyZ3MpLnRoZW4oKGU9Pnt0aGlzLl9zZW5kKG5ldyByZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9KSwoZT0+e2UuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihlLmRldGFpbD1uKGUuZGV0YWlsKSksdGhpcy5fc2VuZChuZXcgcmUodGhpcy5fd29ya2VySWQsdCx2b2lkIDAsbihlKSkpfSkpfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcSxuPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKChlPT57dGhpcy5fc2VuZChuZXcgb2UodGhpcy5fd29ya2VySWQsdCxlKSl9KSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQodCxuKX1faGFuZGxlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXMoZS5yZXEpP3RoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQoZS5yZXEpLmZpcmUoZS5ldmVudCk6Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIil9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFdmVudHMuaGFzKGUucmVxKT8odGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQoZS5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZShlLnJlcSkpOmNvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpfV9zZW5kKGUpe2NvbnN0IHQ9W107aWYoMD09PWUudHlwZSlmb3IobGV0IG49MDtuPGUuYXJncy5sZW5ndGg7bisrKWUuYXJnc1tuXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChlLmFyZ3Nbbl0pO2Vsc2UgMT09PWUudHlwZSYmZS5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKGUsdCl9fWZ1bmN0aW9uIGxlKGUpe3JldHVybiJvIj09PWVbMF0mJiJuIj09PWVbMV0mJlgoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmWChlLmNoYXJDb2RlQXQoOSkpfWNsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PXQsdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgYWUoe3NlbmRNZXNzYWdlOih0LG4pPT57ZSh0LG4pfSxoYW5kbGVNZXNzYWdlOihlLHQpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGUsdCksaGFuZGxlRXZlbnQ6KGUsdCk9PnRoaXMuX2hhbmRsZUV2ZW50KGUsdCl9KX1vbm1lc3NhZ2UoZSl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZShlKX1faGFuZGxlTWVzc2FnZShlLHQpe2lmKCIkaW5pdGlhbGl6ZSI9PT1lKXJldHVybiB0aGlzLmluaXRpYWxpemUodFswXSx0WzFdLHRbMl0sdFszXSk7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmFwcGx5KHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fV9oYW5kbGVFdmVudChlLHQpe2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIiKTtpZih1ZShlKSl7Y29uc3Qgbj10aGlzLl9yZXF1ZXN0SGFuZGxlcltlXS5jYWxsKHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBkeW5hbWljIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBufWlmKGxlKGUpKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke2V9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7ZX1gKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxpPWU9PmZ1bmN0aW9uKHQpe3JldHVybiBuKGUsdCl9LG89e307Zm9yKGNvbnN0IHQgb2YgZSl1ZSh0KT9vW3RdPWkodCk6bGUodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZSh6KHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxnbG9iYWxUaGlzLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxnbG9iYWxUaGlzLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2Uoeih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGhle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIGRlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIGZlKGUsdCl7dD1kZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9ZGUoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIG1le2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZ2UoZSx0LG4pe3JldHVybiBuZXcgeWUobmV3IG1lKGUpLG5ldyBtZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBwZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyB2ZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIGJle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgaGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIHlle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109eWUuX2dldEVsZW1lbnRzKGUpLFtzLGEsbF09eWUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmbCx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9cyx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPWEsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKHllLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT1mZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiB5ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09eWUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IHM9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYocz10aGlzLlByZXR0aWZ5Q2hhbmdlcyhzKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6c319Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8ocGUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBoZShlLDAsbixyLW4rMSldKTplPD10PyhwZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGhlKGUsdC1lKzEsbiwwKV0pOihwZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIikscGUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0scz1bMF0sYT10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8scyxpKSxsPW9bMF0sdT1zWzBdO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxsLG4sdSxpKTtsZXQgcz1bXTtyZXR1cm4gcz1pWzBdP1tuZXcgaGUobCsxLHQtKGwrMSkrMSx1KzEsci0odSsxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShsKzEsdCx1KzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLHMpfXJldHVybltuZXcgaGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLHMsYSxsLHUsYyxoLGQsZixtLGcscCx2KXtsZXQgYj1udWxsLHk9bnVsbCxDPW5ldyBiZSxfPXQsUz1uLHc9ZFswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCx4PXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PXcrZTt0PT09X3x8dDxTJiZsW3QtMV08bFt0KzFdPyhmPShjPWxbdCsxXSktdy1yLGM8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9YyxDLkFkZE1vZGlmaWVkRWxlbWVudChjKzEsZiksdz10KzEtZSk6KGY9KGM9bFt0LTFdKzEpLXctcixjPEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPWMtMSxDLkFkZE9yaWdpbmFsRWxlbWVudChjLGYrMSksdz10LTEtZSkseD49MCYmKGU9KGw9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3hdKVswXSxfPTEsUz1sLmxlbmd0aC0xKX13aGlsZSgtLXg+PS0xKTtpZihiPUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSx2WzBdKXtsZXQgZT1kWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PWImJmIubGVuZ3RoPjApe2NvbnN0IG49YltiLmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgaGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBiZSxfPW8sUz1zLHc9ZFswXS1nWzBdLWEsQT0xMDczNzQxODI0LHg9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9dytpO2U9PT1ffHxlPFMmJnVbZS0xXT49dVtlKzFdPyhmPShjPXVbZSsxXS0xKS13LWEsYz5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT1jKzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQoYysxLGYrMSksdz1lKzEtaSk6KGY9KGM9dVtlLTFdKS13LWEsYz5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT1jLEMuQWRkTW9kaWZpZWRFbGVtZW50KGMrMSxmKzEpLHc9ZS0xLWkpLHg+PTAmJihpPSh1PXRoaXMubV9yZXZlcnNlSGlzdG9yeVt4XSlbMF0sXz0xLFM9dS5sZW5ndGgtMSl9d2hpbGUoLS14Pj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoYix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8scyl7bGV0IGE9MCxsPTAsdT0wLGM9MCxoPTAsZD0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGY9dC1lKyhyLW4pLG09ZisxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSx2PXItbixiPXQtZSx5PWUtbixDPXQtcixfPShiLXYpJTI9PTA7Z1t2XT1lLHBbYl09dCxzWzBdPSExO2ZvcihsZXQgUz0xO1M8PWYvMisxO1MrKyl7bGV0IGY9MCx3PTA7dT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtUyxTLHYsbSksYz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrUyxTLHYsbSk7Zm9yKGxldCBlPXU7ZTw9YztlKz0yKXthPWU9PT11fHxlPGMmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGw9YS0oZS12KS15O2NvbnN0IG49YTtmb3IoO2E8dCYmbDxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoYSsxLGwrMSk7KWErKyxsKys7aWYoZ1tlXT1hLGErbD5mK3cmJihmPWEsdz1sKSwhXyYmTWF0aC5hYnMoZS1iKTw9Uy0xJiZhPj1wW2VdKXJldHVybiBpWzBdPWEsb1swXT1sLG48PXBbZV0mJlM8PTE0NDg/dGhpcy5XQUxLVFJBQ0Uodix1LGMseSxiLGgsZCxDLGcscCxhLHQsaSxsLHIsbyxfLHMpOm51bGx9Y29uc3QgQT0oZi1lKyh3LW4pLVMpLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZixBKSlyZXR1cm4gc1swXT0hMCxpWzBdPWYsb1swXT13LEE+MCYmUzw9MTQ0OD90aGlzLldBTEtUUkFDRSh2LHUsYyx5LGIsaCxkLEMsZyxwLGEsdCxpLGwscixvLF8scyk6KGUrKyxuKyssW25ldyBoZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItUyxTLGIsbSksZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrUyxTLGIsbSk7Zm9yKGxldCBmPWg7Zjw9ZDtmKz0yKXthPWY9PT1ofHxmPGQmJnBbZi0xXT49cFtmKzFdP3BbZisxXS0xOnBbZi0xXSxsPWEtKGYtYiktQztjb25zdCBtPWE7Zm9yKDthPmUmJmw+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEsbCk7KWEtLSxsLS07aWYocFtmXT1hLF8mJk1hdGguYWJzKGYtdik8PVMmJmE8PWdbZl0pcmV0dXJuIGlbMF09YSxvWzBdPWwsbT49Z1tmXSYmUzw9MTQ0OD90aGlzLldBTEtUUkFDRSh2LHUsYyx5LGIsaCxkLEMsZyxwLGEsdCxpLGwscixvLF8scyk6bnVsbH1pZihTPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheShjLXUrMik7ZVswXT12LXUrMSx2ZS5Db3B5MihnLHUsZSwxLGMtdSsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGQtaCsyKSxlWzBdPWItaCsxLHZlLkNvcHkyKHAsaCxlLDEsZC1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0Uodix1LGMseSxiLGgsZCxDLGcscCxhLHQsaSxsLHIsbyxfLHMpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLHM9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFzfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWNvbnN0IGE9W251bGxdO3Q8ZS5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3RdLGVbdCsxXSxhKSYmKGVbdF09YVswXSxlLnNwbGljZSh0KzEsMSksdC0tKX1mb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj1lW3RdO2xldCByPTAsaT0wO2lmKHQ+MCl7Y29uc3Qgbj1lW3QtMV07cj1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxpPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofWNvbnN0IG89bi5vcmlnaW5hbExlbmd0aD4wLHM9bi5tb2RpZmllZExlbmd0aD4wO2xldCBhPTAsbD10aGlzLl9ib3VuZGFyeVNjb3JlKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGU9MTs7ZSsrKXtjb25zdCB0PW4ub3JpZ2luYWxTdGFydC1lLHU9bi5tb2RpZmllZFN0YXJ0LWU7aWYodDxyfHx1PGkpYnJlYWs7aWYobyYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsdCtuLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZihzJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwodSx1K24ubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IGM9KHQ9PT1yJiZ1PT09aT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUodCxuLm9yaWdpbmFsTGVuZ3RoLHUsbi5tb2RpZmllZExlbmd0aCk7Yz5sJiYobD1jLGE9ZSl9bi5vcmlnaW5hbFN0YXJ0LT1hLG4ubW9kaWZpZWRTdGFydC09YTtjb25zdCB1PVtudWxsXTt0PjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0LTFdLGVbdF0sdSkmJihlW3QtMV09dVswXSxlLnNwbGljZSh0LDEpLHQrKyl9aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IHQ9MSxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0LTFdLHI9ZVt0XSxpPXIub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbExlbmd0aCxvPW4ub3JpZ2luYWxTdGFydCxzPXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLGE9cy1vLGw9bi5tb2RpZmllZFN0YXJ0LHU9ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgsYz11LWw7aWYoaTw1JiZhPDIwJiZjPDIwKXtjb25zdCBlPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobyxhLGwsYyxpKTtpZihlKXtjb25zdFt0LG9dPWU7dD09PW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoJiZvPT09bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh8fChuLm9yaWdpbmFsTGVuZ3RoPXQtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9by1uLm1vZGlmaWVkU3RhcnQsci5vcmlnaW5hbFN0YXJ0PXQraSxyLm1vZGlmaWVkU3RhcnQ9bytpLHIub3JpZ2luYWxMZW5ndGg9cy1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD11LXIubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gZX1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShlLHQsbixyLGkpe2lmKHQ8aXx8cjxpKXJldHVybiBudWxsO2NvbnN0IG89ZSt0LWkrMSxzPW4rci1pKzE7bGV0IGE9MCxsPTAsdT0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPW47ZTxzO2UrKyl7Y29uc3Qgbj10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LGUsaSk7bj4wJiZuPmEmJihhPW4sbD10LHU9ZSl9cmV0dXJuIGE+MD9bbCx1XTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZShlLHQsbil7bGV0IHI9MDtmb3IobGV0IGk9MDtpPG47aSsrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUraSx0K2kpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZStpXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobi0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKGUsdCxuLHIpe3JldHVybih0aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KT8xOjApKyh0aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkobixyKT8xOjApfUNvbmNhdGVuYXRlQ2hhbmdlcyhlLHQpe2NvbnN0IG49W107aWYoMD09PWUubGVuZ3RofHwwPT09dC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoPjA/dDplO2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAoZVtlLmxlbmd0aC0xXSx0WzBdLG4pKXtjb25zdCByPW5ldyBBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC0xKTtyZXR1cm4gdmUuQ29weShlLDAsciwwLGUubGVuZ3RoLTEpLHJbZS5sZW5ndGgtMV09blswXSx2ZS5Db3B5KHQsMSxyLGUubGVuZ3RoLHQubGVuZ3RoLTEpLHJ9e2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gdmUuQ29weShlLDAsbiwwLGUubGVuZ3RoKSx2ZS5Db3B5KHQsMCxuLGUubGVuZ3RoLHQubGVuZ3RoKSxufX1DaGFuZ2VzT3ZlcmxhcChlLHQsbil7aWYocGUuQXNzZXJ0KGUub3JpZ2luYWxTdGFydDw9dC5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHBlLkFzc2VydChlLm1vZGlmaWVkU3RhcnQ8PXQubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aD49dC5vcmlnaW5hbFN0YXJ0fHxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0KXtjb25zdCByPWUub3JpZ2luYWxTdGFydDtsZXQgaT1lLm9yaWdpbmFsTGVuZ3RoO2NvbnN0IG89ZS5tb2RpZmllZFN0YXJ0O2xldCBzPWUubW9kaWZpZWRMZW5ndGg7cmV0dXJuIGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnQmJihpPXQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLWUub3JpZ2luYWxTdGFydCksZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGg+PXQubW9kaWZpZWRTdGFydCYmKHM9dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtZS5tb2RpZmllZFN0YXJ0KSxuWzBdPW5ldyBoZShyLGksbyxzKSwhMH1yZXR1cm4gblswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKGUsdCxuLHIpe2lmKGU+PTAmJmU8cilyZXR1cm4gZTtjb25zdCBpPXQlMj09MDtpZihlPDApe3JldHVybiBpPT09KG4lMj09MCk/MDoxfXJldHVybiBpPT09KChyLW4tMSklMj09MCk/ci0xOnItMn19bGV0IENlO2lmKHZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzKXtjb25zdCBlPU4udnNjb2RlLnByb2Nlc3M7Q2U9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZDooKT0+ZS5jd2QoKX19ZWxzZSBDZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZDooKT0+cHJvY2Vzcy5lbnYuVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBUPyJ3aW4zMiI6Tz8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2Q6KCk9PiIvIn07Y29uc3QgX2U9Q2UuY3dkLFNlPUNlLmVudix3ZT1DZS5wbGF0Zm9ybSxBZT00Nix4ZT00NyxFZT05MixMZT01ODtjbGFzcyBOZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcjsic3RyaW5nIj09dHlwZW9mIHQmJjA9PT10LmluZGV4T2YoIm5vdCAiKT8ocj0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpyPSJtdXN0IGJlIjtjb25zdCBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2xldCBvPWBUaGUgIiR7ZX0iICR7aX0gJHtyfSBvZiB0eXBlICR7dH1gO28rPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbixzdXBlcihvKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24ga2UoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IE5lKHQsInN0cmluZyIsZSl9Y29uc3QgUmU9IndpbjMyIj09PXdlO2Z1bmN0aW9uIFRlKGUpe3JldHVybiBlPT09eGV8fGU9PT1FZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT09PXhlfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBlPj02NSYmZTw9OTB8fGU+PTk3JiZlPD0xMjJ9ZnVuY3Rpb24gSWUoZSx0LG4scil7bGV0IGk9IiIsbz0wLHM9LTEsYT0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihyKGwpKWJyZWFrO2w9eGV9aWYocihsKSl7aWYocz09PXUtMXx8MT09PWEpO2Vsc2UgaWYoMj09PWEpe2lmKGkubGVuZ3RoPDJ8fDIhPT1vfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT1BZXx8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTIpIT09QWUpe2lmKGkubGVuZ3RoPjIpe2NvbnN0IGU9aS5sYXN0SW5kZXhPZihuKTstMT09PWU/KGk9IiIsbz0wKTooaT1pLnNsaWNlKDAsZSksbz1pLmxlbmd0aC0xLWkubGFzdEluZGV4T2YobikpLHM9dSxhPTA7Y29udGludWV9aWYoMCE9PWkubGVuZ3RoKXtpPSIiLG89MCxzPXUsYT0wO2NvbnRpbnVlfX10JiYoaSs9aS5sZW5ndGg+MD9gJHtufS4uYDoiLi4iLG89Mil9ZWxzZSBpLmxlbmd0aD4wP2krPWAke259JHtlLnNsaWNlKHMrMSx1KX1gOmk9ZS5zbGljZShzKzEsdSksbz11LXMtMTtzPXUsYT0wfWVsc2UgbD09PUFlJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIGl9ZnVuY3Rpb24gUGUoZSx0KXshZnVuY3Rpb24oZSx0KXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBOZSh0LCJPYmplY3QiLGUpfSh0LCJwYXRoT2JqZWN0Iik7Y29uc3Qgbj10LmRpcnx8dC5yb290LHI9dC5iYXNlfHxgJHt0Lm5hbWV8fCIifSR7dC5leHR8fCIifWA7cmV0dXJuIG4/bj09PXQucm9vdD9gJHtufSR7cn1gOmAke259JHtlfSR7cn1gOnJ9Y29uc3QgRmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0iIixyPSExO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PS0xO2ktLSl7bGV0IG87aWYoaT49MCl7aWYobz1lW2ldLGtlKG8sInBhdGgiKSwwPT09by5sZW5ndGgpY29udGludWV9ZWxzZSAwPT09dC5sZW5ndGg/bz1fZSgpOihvPVNlW2A9JHt0fWBdfHxfZSgpLCh2b2lkIDA9PT1vfHxvLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSYmby5jaGFyQ29kZUF0KDIpPT09RWUpJiYobz1gJHt0fVxcYCkpO2NvbnN0IHM9by5sZW5ndGg7bGV0IGE9MCxsPSIiLHU9ITE7Y29uc3QgYz1vLmNoYXJDb2RlQXQoMCk7aWYoMT09PXMpVGUoYykmJihhPTEsdT0hMCk7ZWxzZSBpZihUZShjKSlpZih1PSEwLFRlKG8uY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxzJiYhVGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8cyYmZSE9PXQpe2NvbnN0IG49by5zbGljZSh0LGUpO2Zvcih0PWU7ZTxzJiZUZShvLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxzJiZlIT09dCl7Zm9yKHQ9ZTtlPHMmJiFUZShvLmNoYXJDb2RlQXQoZSkpOyllKys7ZSE9PXMmJmU9PT10fHwobD1gXFxcXCR7bn1cXCR7by5zbGljZSh0LGUpfWAsYT1lKX19fWVsc2UgYT0xO2Vsc2UgTWUoYykmJm8uY2hhckNvZGVBdCgxKT09PUxlJiYobD1vLnNsaWNlKDAsMiksYT0yLHM+MiYmVGUoby5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsYT0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYocil7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7by5zbGljZShhKX1cXCR7bn1gLHI9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPUllKG4sIXIsIlxcIixUZSkscj9gJHt0fVxcJHtufWA6YCR7dH0ke259YHx8Ii4ifSxub3JtYWxpemUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIi4iO2xldCBuLHI9MCxpPSExO2NvbnN0IG89ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBPZShvKT8iXFwiOmU7aWYoVGUobykpaWYoaT0hMCxUZShlLmNoYXJDb2RlQXQoMSkpKXtsZXQgaT0yLG89aTtmb3IoO2k8dCYmIVRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtjb25zdCBzPWUuc2xpY2UobyxpKTtmb3Iobz1pO2k8dCYmVGUoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2ZvcihvPWk7aTx0JiYhVGUoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk9PT10KXJldHVybmBcXFxcJHtzfVxcJHtlLnNsaWNlKG8pfVxcYDtpIT09byYmKG49YFxcXFwke3N9XFwke2Uuc2xpY2UobyxpKX1gLHI9aSl9fX1lbHNlIHI9MTtlbHNlIE1lKG8pJiZlLmNoYXJDb2RlQXQoMSk9PT1MZSYmKG49ZS5zbGljZSgwLDIpLHI9Mix0PjImJlRlKGUuY2hhckNvZGVBdCgyKSkmJihpPSEwLHI9MykpO2xldCBzPXI8dD9JZShlLnNsaWNlKHIpLCFpLCJcXCIsVGUpOiIiO3JldHVybiAwIT09cy5sZW5ndGh8fGl8fChzPSIuIikscy5sZW5ndGg+MCYmVGUoZS5jaGFyQ29kZUF0KHQtMSkpJiYocys9IlxcIiksdm9pZCAwPT09bj9pP2BcXCR7c31gOnM6aT9gJHtufVxcJHtzfWA6YCR7bn0ke3N9YH0saXNBYnNvbHV0ZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4hMTtjb25zdCBuPWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gVGUobil8fHQ+MiYmTWUobikmJmUuY2hhckNvZGVBdCgxKT09PUxlJiZUZShlLmNoYXJDb2RlQXQoMikpfSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQsbjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil7Y29uc3QgaT1lW3JdO2tlKGksInBhdGgiKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09dD90PW49aTp0Kz1gXFwke2l9YCl9aWYodm9pZCAwPT09dClyZXR1cm4iLiI7bGV0IHI9ITAsaT0wO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmVGUobi5jaGFyQ29kZUF0KDApKSl7KytpO2NvbnN0IGU9bi5sZW5ndGg7ZT4xJiZUZShuLmNoYXJDb2RlQXQoMSkpJiYoKytpLGU+MiYmKFRlKG4uY2hhckNvZGVBdCgyKSk/KytpOnI9ITEpKX1pZihyKXtmb3IoO2k8dC5sZW5ndGgmJlRlKHQuY2hhckNvZGVBdChpKSk7KWkrKztpPj0yJiYodD1gXFwke3Quc2xpY2UoaSl9YCl9cmV0dXJuIEZlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihrZShlLCJmcm9tIiksa2UodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCBuPUZlLnJlc29sdmUoZSkscj1GZS5yZXNvbHZlKHQpO2lmKG49PT1yKXJldHVybiIiO2lmKChlPW4udG9Mb3dlckNhc2UoKSk9PT0odD1yLnRvTG93ZXJDYXNlKCkpKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSk9PT1FZTspaSsrO2xldCBvPWUubGVuZ3RoO2Zvcig7by0xPmkmJmUuY2hhckNvZGVBdChvLTEpPT09RWU7KW8tLTtjb25zdCBzPW8taTtsZXQgYT0wO2Zvcig7YTx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGEpPT09RWU7KWErKztsZXQgbD10Lmxlbmd0aDtmb3IoO2wtMT5hJiZ0LmNoYXJDb2RlQXQobC0xKT09PUVlOylsLS07Y29uc3QgdT1sLWEsYz1zPHU/czp1O2xldCBoPS0xLGQ9MDtmb3IoO2Q8YztkKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KGkrZCk7aWYobiE9PXQuY2hhckNvZGVBdChhK2QpKWJyZWFrO249PT1FZSYmKGg9ZCl9aWYoZCE9PWMpe2lmKC0xPT09aClyZXR1cm4gcn1lbHNle2lmKHU+Yyl7aWYodC5jaGFyQ29kZUF0KGErZCk9PT1FZSlyZXR1cm4gci5zbGljZShhK2QrMSk7aWYoMj09PWQpcmV0dXJuIHIuc2xpY2UoYStkKX1zPmMmJihlLmNoYXJDb2RlQXQoaStkKT09PUVlP2g9ZDoyPT09ZCYmKGg9MykpLC0xPT09aCYmKGg9MCl9bGV0IGY9IiI7Zm9yKGQ9aStoKzE7ZDw9bzsrK2QpZCE9PW8mJmUuY2hhckNvZGVBdChkKSE9PUVlfHwoZis9MD09PWYubGVuZ3RoPyIuLiI6IlxcLi4iKTtyZXR1cm4gYSs9aCxmLmxlbmd0aD4wP2Ake2Z9JHtyLnNsaWNlKGEsbCl9YDooci5jaGFyQ29kZUF0KGEpPT09RWUmJisrYSxyLnNsaWNlKGEsbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiBlO2NvbnN0IHQ9RmUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PUFlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihNZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1MZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBUZShpKT9lOiIuIjtpZihUZShpKSl7aWYobj1yPTEsVGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFUZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJlRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIVRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgTWUoaSkmJmUuY2hhckNvZGVBdCgxKT09PUxlJiYobj10PjImJlRlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEscz0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKFRlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFzKXtvPW47YnJlYWt9fWVsc2Ugcz0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk1lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PUxlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBzPXQubGVuZ3RoLTEsYT0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBsPWUuY2hhckNvZGVBdChuKTtpZihUZShsKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1hJiYobz0hMSxhPW4rMSkscz49MCYmKGw9PT10LmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKGk9bik6KHM9LTEsaT1hKSl9cmV0dXJuIHI9PT1pP2k9YTotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihUZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxzPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PUxlJiZNZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgYT1lLmxlbmd0aC0xO2E+PXQ7LS1hKXtjb25zdCB0PWUuY2hhckNvZGVBdChhKTtpZihUZSh0KSl7aWYoIW8pe3I9YSsxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPWErMSksdD09PUFlPy0xPT09bj9uPWE6MSE9PXMmJihzPTEpOi0xIT09biYmKHM9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09c3x8MT09PXMmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6UGUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBUZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihUZShpKSl7aWYocj0xLFRlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhVGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZUZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFUZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoTWUoaSkmJmUuY2hhckNvZGVBdCgxKT09PUxlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixUZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLHM9cixhPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGM9MDtmb3IoO3U+PXI7LS11KWlmKGk9ZS5jaGFyQ29kZUF0KHUpLFRlKGkpKXtpZighbCl7cz11KzE7YnJlYWt9fWVsc2UtMT09PWEmJihsPSExLGE9dSsxKSxpPT09QWU/LTE9PT1vP289dToxIT09YyYmKGM9MSk6LTEhPT1vJiYoYz0tMSk7cmV0dXJuLTEhPT1hJiYoLTE9PT1vfHwwPT09Y3x8MT09PWMmJm89PT1hLTEmJm89PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKHMsYSk6KHQubmFtZT1lLnNsaWNlKHMsbyksdC5iYXNlPWUuc2xpY2UocyxhKSx0LmV4dD1lLnNsaWNlKG8sYSkpKSx0LmRpcj1zPjAmJnMhPT1yP2Uuc2xpY2UoMCxzLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sVmU9KCgpPT57aWYoUmUpe2NvbnN0IGU9L1xcL2c7cmV0dXJuKCk9Pntjb25zdCB0PV9lKCkucmVwbGFjZShlLCIvIik7cmV0dXJuIHQuc2xpY2UodC5pbmRleE9mKCIvIikpfX1yZXR1cm4oKT0+X2UoKX0pKCksRGU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpWZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09eGUpfXJldHVybiB0PUllKHQsIW4sIi8iLE9lKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09eGUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT14ZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLE9lKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PXhlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpEZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9RGUucmVzb2x2ZShlKSk9PT0odD1EZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IHM9LTEsYT0wO2Zvcig7YTxvO2ErKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMSthKTtpZihuIT09dC5jaGFyQ29kZUF0KDErYSkpYnJlYWs7bj09PXhlJiYocz1hKX1pZihhPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK2EpPT09eGUpcmV0dXJuIHQuc2xpY2UoMSthKzEpO2lmKDA9PT1hKXJldHVybiB0LnNsaWNlKDErYSl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMSthKT09PXhlP3M9YTowPT09YSYmKHM9MCkpO2xldCBsPSIiO2ZvcihhPTErcysxO2E8PW47KythKWEhPT1uJiZlLmNoYXJDb2RlQXQoYSkhPT14ZXx8KGwrPTA9PT1sLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtsfSR7dC5zbGljZSgxK3MpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09eGU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT14ZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLGE9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgbD1lLmNoYXJDb2RlQXQobik7aWYobD09PXhlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWEmJihvPSExLGE9bisxKSxzPj0wJiYobD09PXQuY2hhckNvZGVBdChzKT8tMT09LS1zJiYoaT1uKToocz0tMSxpPWEpKX1yZXR1cm4gcj09PWk/aT1hOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PXhlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQocyk7aWYoYSE9PXhlKS0xPT09ciYmKGk9ITEscj1zKzEpLGE9PT1BZT8tMT09PXQ/dD1zOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPXMrMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpQZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09eGU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAscz0tMSxhPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobCk7aWYodCE9PXhlKS0xPT09cyYmKGE9ITEscz1sKzEpLHQ9PT1BZT8tMT09PWk/aT1sOjEhPT11JiYodT0xKTotMSE9PWkmJih1PS0xKTtlbHNlIGlmKCFhKXtvPWwrMTticmVha319aWYoLTEhPT1zKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT11fHwxPT09dSYmaT09PXMtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixzKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLHMpLHQuZXh0PWUuc2xpY2UoaSxzKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtEZS53aW4zMj1GZS53aW4zMj1GZSxEZS5wb3NpeD1GZS5wb3NpeD1EZSxSZT9GZS5ub3JtYWxpemU6RGUubm9ybWFsaXplLFJlP0ZlLnJlc29sdmU6RGUucmVzb2x2ZSxSZT9GZS5yZWxhdGl2ZTpEZS5yZWxhdGl2ZSxSZT9GZS5kaXJuYW1lOkRlLmRpcm5hbWUsUmU/RmUuYmFzZW5hbWU6RGUuYmFzZW5hbWUsUmU/RmUuZXh0bmFtZTpEZS5leHRuYW1lLFJlP0ZlLnNlcDpEZS5zZXA7Y29uc3QgS2U9L15cd1tcd1xkKy4tXSokLyxqZT0vXlwvLyxxZT0vXlwvXC8vO2NvbnN0IEJlPSIiLFVlPSIvIiwkZT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztsZXQgV2U9Y2xhc3MgZXtzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJigic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nKX1jb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8QmUsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fEJlLHRoaXMucGF0aD1lLnBhdGh8fEJlLHRoaXMucXVlcnk9ZS5xdWVyeXx8QmUsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxCZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8QmUsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1VZSYmKHQ9VWUrdCk6dD1VZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8QmUpLHRoaXMucXVlcnk9cnx8QmUsdGhpcy5mcmFnbWVudD1pfHxCZSxmdW5jdGlvbihlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIUtlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFqZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihxZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9KHRoaXMsbykpfWdldCBmc1BhdGgoKXtyZXR1cm4gWmUodGhpcywhMSl9d2l0aChlKXtpZighZSlyZXR1cm4gdGhpcztsZXR7c2NoZW1lOnQsYXV0aG9yaXR5Om4scGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309ZTtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1CZSksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1CZSksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9QmUpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1CZSksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPUJlKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHplKHQsbixyLGksbyl9c3RhdGljIHBhcnNlKGUsdD0hMSl7Y29uc3Qgbj0kZS5leGVjKGUpO3JldHVybiBuP25ldyB6ZShuWzJdfHxCZSx0dChuWzRdfHxCZSksdHQobls1XXx8QmUpLHR0KG5bN118fEJlKSx0dChuWzldfHxCZSksdCk6bmV3IHplKEJlLEJlLEJlLEJlLEJlKX1zdGF0aWMgZmlsZShlKXtsZXQgdD1CZTtpZihUJiYoZT1lLnJlcGxhY2UoL1xcL2csVWUpKSxlWzBdPT09VWUmJmVbMV09PT1VZSl7Y29uc3Qgbj1lLmluZGV4T2YoVWUsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9VWUpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8VWUpfXJldHVybiBuZXcgemUoImZpbGUiLHQsZSxCZSxCZSl9c3RhdGljIGZyb20oZSx0KXtyZXR1cm4gbmV3IHplKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQsdCl9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1UJiYiZmlsZSI9PT10LnNjaGVtZT9lLmZpbGUoRmUuam9pbihaZSh0LCEwKSwuLi5uKSkucGF0aDpEZS5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBZZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7dmFyIG4scjtpZih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDt7Y29uc3QgZT1uZXcgemUodCk7cmV0dXJuIGUuX2Zvcm1hdHRlZD1udWxsIT09KG49dC5leHRlcm5hbCkmJnZvaWQgMCE9PW4/bjpudWxsLGUuX2ZzUGF0aD10Ll9zZXA9PT1IZSYmbnVsbCE9PShyPXQuZnNQYXRoKSYmdm9pZCAwIT09cj9yOm51bGwsZX19cmV0dXJuIHR9fTtjb25zdCBIZT1UPzE6dm9pZCAwO2NsYXNzIHplIGV4dGVuZHMgV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPVplKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/WWUodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1ZZSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPUhlKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgR2U9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiBKZShlLHQsbil7bGV0IHIsaT0tMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQobyk7aWYocz49OTcmJnM8PTEyMnx8cz49NjUmJnM8PTkwfHxzPj00OCYmczw9NTd8fDQ1PT09c3x8NDY9PT1zfHw5NT09PXN8fDEyNj09PXN8fHQmJjQ3PT09c3x8biYmOTE9PT1zfHxuJiY5Mz09PXN8fG4mJjU4PT09cyktMSE9PWkmJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcoaSxvKSksaT0tMSksdm9pZCAwIT09ciYmKHIrPWUuY2hhckF0KG8pKTtlbHNle3ZvaWQgMD09PXImJihyPWUuc3Vic3RyKDAsbykpO2NvbnN0IHQ9R2Vbc107dm9pZCAwIT09dD8oLTEhPT1pJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGksbykpLGk9LTEpLHIrPXQpOi0xPT09aSYmKGk9byl9fXJldHVybi0xIT09aSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpKSkpLHZvaWQgMCE9PXI/cjplfWZ1bmN0aW9uIFhlKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9R2Vbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gWmUoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWWUoZSx0KXtjb25zdCBuPXQ/WGU6SmU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6cyxxdWVyeTphLGZyYWdtZW50Omx9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1VZSxyKz1VZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5sYXN0SW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKHQsITEsITEpOihyKz1uKHQuc3Vic3RyKDAsZSksITEsITEpLHIrPSI6IixyKz1uKHQuc3Vic3RyKGUrMSksITEsITApKSxyKz0iQCJ9bz1vLnRvTG93ZXJDYXNlKCksZT1vLmxhc3RJbmRleE9mKCI6IiksLTE9PT1lP3IrPW4obywhMSwhMCk6KHIrPW4oby5zdWJzdHIoMCxlKSwhMSwhMCkscis9by5zdWJzdHIoZSkpfWlmKHMpe2lmKHMubGVuZ3RoPj0zJiY0Nz09PXMuY2hhckNvZGVBdCgwKSYmNTg9PT1zLmNoYXJDb2RlQXQoMikpe2NvbnN0IGU9cy5jaGFyQ29kZUF0KDEpO2U+PTY1JiZlPD05MCYmKHM9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7cy5zdWJzdHIoMyl9YCl9ZWxzZSBpZihzLmxlbmd0aD49MiYmNTg9PT1zLmNoYXJDb2RlQXQoMSkpe2NvbnN0IGU9cy5jaGFyQ29kZUF0KDApO2U+PTY1JiZlPD05MCYmKHM9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHtzLnN1YnN0cigyKX1gKX1yKz1uKHMsITAsITEpfXJldHVybiBhJiYocis9Ij8iLHIrPW4oYSwhMSwhMSkpLGwmJihyKz0iIyIscis9dD9sOkplKGwsITEsITEpKSxyfWZ1bmN0aW9uIFFlKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrUWUoZS5zdWJzdHIoMykpOmV9fWNvbnN0IGV0PS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHR0KGUpe3JldHVybiBlLm1hdGNoKGV0KT9lLnJlcGxhY2UoZXQsKGU9PlFlKGUpKSk6ZX1sZXQgbnQ9Y2xhc3MgZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGUodCxuKX1kZWx0YShlPTAsdD0wKXtyZXR1cm4gdGhpcy53aXRoKHRoaXMubGluZU51bWJlcitlLHRoaXMuY29sdW1uK3QpfWVxdWFscyh0KXtyZXR1cm4gZS5lcXVhbHModGhpcyx0KX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKHQpe3JldHVybiBlLmlzQmVmb3JlKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gZS5pc0JlZm9yZU9yRXF1YWwodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmVPckVxdWFsKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPD10LmNvbHVtbn1zdGF0aWMgY29tcGFyZShlLHQpe2NvbnN0IG49MHxlLmxpbmVOdW1iZXIscj0wfHQubGluZU51bWJlcjtpZihuPT09cil7cmV0dXJuKDB8ZS5jb2x1bW4pLSgwfHQuY29sdW1uKX1yZXR1cm4gbi1yfWNsb25lKCl7cmV0dXJuIG5ldyBlKHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQodCl7cmV0dXJuIG5ldyBlKHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19LHJ0PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0LG4scil7ZT5ufHxlPT09biYmdD5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1uLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPW4sdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBlLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkoZSl7cmV0dXJuIGUuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09ZS5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gZS5jb250YWluc1Bvc2l0aW9uKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKHQpe3JldHVybiBlLmNvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiBlLnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+PWUuZW5kQ29sdW1uKSkpfXBsdXNSYW5nZSh0KXtyZXR1cm4gZS5wbHVzUmFuZ2UodGhpcyx0KX1zdGF0aWMgcGx1c1JhbmdlKHQsbil7bGV0IHIsaSxvLHM7cmV0dXJuIG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyPyhyPW4uc3RhcnRMaW5lTnVtYmVyLGk9bi5zdGFydENvbHVtbik6bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPU1hdGgubWluKG4uc3RhcnRDb2x1bW4sdC5zdGFydENvbHVtbikpOihyPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbiksbi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcj8obz1uLmVuZExpbmVOdW1iZXIscz1uLmVuZENvbHVtbik6bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyPyhvPW4uZW5kTGluZU51bWJlcixzPU1hdGgubWF4KG4uZW5kQ29sdW1uLHQuZW5kQ29sdW1uKSk6KG89dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW4pLG5ldyBlKHIsaSxvLHMpfWludGVyc2VjdFJhbmdlcyh0KXtyZXR1cm4gZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IHI9dC5zdGFydExpbmVOdW1iZXIsaT10LnN0YXJ0Q29sdW1uLG89dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW47Y29uc3QgYT1uLnN0YXJ0TGluZU51bWJlcixsPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsYz1uLmVuZENvbHVtbjtyZXR1cm4gcjxhPyhyPWEsaT1sKTpyPT09YSYmKGk9TWF0aC5tYXgoaSxsKSksbz51PyhvPXUscz1jKTpvPT09dSYmKHM9TWF0aC5taW4ocyxjKSkscj5vfHxyPT09byYmaT5zP251bGw6bmV3IGUocixpLG8scyl9ZXF1YWxzUmFuZ2UodCl7cmV0dXJuIGUuZXF1YWxzUmFuZ2UodGhpcyx0KX1zdGF0aWMgZXF1YWxzUmFuZ2UoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09dC5zdGFydENvbHVtbiYmZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbj09PXQuZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIGUuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgbnQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIGUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IG50KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1jb2xsYXBzZVRvRW5kKCl7cmV0dXJuIGUuY29sbGFwc2VUb0VuZCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb0VuZCh0KXtyZXR1cm4gbmV3IGUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyBlKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5zdGFydENvbHVtbix0aGlzLmVuZExpbmVOdW1iZXIrdCx0aGlzLmVuZENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gdD9uZXcgZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07dmFyIGl0O2Z1bmN0aW9uIG90KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIHN0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9IWZ1bmN0aW9uKGUpe2UuaXNMZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwfSxlLmlzR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0sZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9LGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KGl0fHwoaXQ9e30pKTtjbGFzcyBhdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPXN0KGUpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPXQubGVuZ3RoO3JldHVybiAwIT09aSYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUpLGUraSksdGhpcy52YWx1ZXMuc2V0KHQsZSksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZShlLHQpe3JldHVybiBlPXN0KGUpLHQ9c3QodCksdGhpcy52YWx1ZXNbZV0hPT10JiYodGhpcy52YWx1ZXNbZV09dCxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksITApfXJlbW92ZVZhbHVlcyhlLHQpe2U9c3QoZSksdD1zdCh0KTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYoZT49bi5sZW5ndGgpcmV0dXJuITE7Y29uc3QgaT1uLmxlbmd0aC1lO3JldHVybiB0Pj1pJiYodD1pKSwwIT09dCYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC10KSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUrdCksZSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiAwPT09dGhpcy52YWx1ZXMubGVuZ3RoPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0oZSl7cmV0dXJuIGU8MD8wOihlPXN0KGUpLHRoaXMuX2dldFByZWZpeFN1bShlKSl9X2dldFByZWZpeFN1bShlKXtpZihlPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW2VdO2xldCB0PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxOzA9PT10JiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sdCsrKSxlPj10aGlzLnZhbHVlcy5sZW5ndGgmJihlPXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IG49dDtuPD1lO24rKyl0aGlzLnByZWZpeFN1bVtuXT10aGlzLnByZWZpeFN1bVtuLTFdK3RoaXMudmFsdWVzW25dO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLGUpLHRoaXMucHJlZml4U3VtW2VdfWdldEluZGV4T2YoZSl7ZT1NYXRoLmZsb29yKGUpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgdD0wLG49dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDt0PD1uOylpZihyPXQrKG4tdCkvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLGU8byluPXItMTtlbHNle2lmKCEoZT49aSkpYnJlYWs7dD1yKzF9cmV0dXJuIG5ldyBsdChyLGUtbyl9fWNsYXNzIGx0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXQsdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dH19Y2xhc3MgdXR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBudChlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IGF0KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19Y29uc3QgY3Q9ZnVuY3Rpb24oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyIpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9KCk7Y29uc3QgaHQ9bmV3IGc7ZnVuY3Rpb24gZHQoZSx0LG4scixpKXtpZihpfHwoaT1sLmZpcnN0KGh0KSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLGR0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxzPWUtMS1yO2xldCBhPS0xLHU9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9cy1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89ZnQodCxuLHMsYSk7aWYoIW8mJnUpYnJlYWs7aWYodT1vLHI8PTApYnJlYWs7YT1yfWlmKHUpe2NvbnN0IGU9e3dvcmQ6dVswXSxzdGFydENvbHVtbjpyKzErdS5pbmRleCxlbmRDb2x1bW46cisxK3UuaW5kZXgrdVswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZnQoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1odC51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtjbGFzcyBtdHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PW90KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPW10Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gdC5maWxsKGUpLHR9c2V0KGUsdCl7Y29uc3Qgbj1vdCh0KTtlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXT1uOnRoaXMuX21hcC5zZXQoZSxuKX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdOnRoaXMuX21hcC5nZXQoZSl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgZ3R7Y29uc3RydWN0b3IoZSx0LG4pe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSp0KTtmb3IobGV0IGk9MCxvPWUqdDtpPG87aSsrKXJbaV09bjt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPWUsdGhpcy5jb2xzPXR9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF19c2V0KGUsdCxuKXt0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdPW59fWNsYXNzIHB0e2NvbnN0cnVjdG9yKGUpe2xldCB0PTAsbj0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3RbaSxvLHNdPWVbcl07bz50JiYodD1vKSxpPm4mJihuPWkpLHM+biYmKG49cyl9dCsrLG4rKztjb25zdCByPW5ldyBndChuLHQsMCk7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdFtuLGksb109ZVt0XTtyLnNldChuLGksbyl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9dH1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IHZ0PW51bGw7bGV0IGJ0PW51bGw7Y2xhc3MgeXR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxuLHIsaSl7bGV0IG89aS0xO2Rve2NvbnN0IG49dC5jaGFyQ29kZUF0KG8pO2lmKDIhPT1lLmdldChuKSlicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGU9dC5jaGFyQ29kZUF0KHItMSksbj10LmNoYXJDb2RlQXQobyk7KDQwPT09ZSYmNDE9PT1ufHw5MT09PWUmJjkzPT09bnx8MTIzPT09ZSYmMTI1PT09bikmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpuLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOm4sZW5kQ29sdW1uOm8rMn0sdXJsOnQuc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyhlLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXZ0JiYodnQ9bmV3IHB0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSx2dH0oKSl7Y29uc3Qgbj1mdW5jdGlvbigpe2lmKG51bGw9PT1idCl7YnQ9bmV3IG10KDApO2NvbnN0IGU9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylidC5zZXQoZS5jaGFyQ29kZUF0KHQpLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWJ0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIGJ0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSkscz1vLmxlbmd0aDtsZXQgYT0wLGw9MCx1PTAsYz0xLGg9ITEsZD0hMSxmPSExLG09ITE7Zm9yKDthPHM7KXtsZXQgZT0hMTtjb25zdCBzPW8uY2hhckNvZGVBdChhKTtpZigxMz09PWMpe2xldCB0O3N3aXRjaChzKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmY9ITAsZD0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpmPSExLHQ9ZD8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5Njp0PXU9PT1zPzE6Mzk9PT11fHwzND09PXV8fDk2PT09dT8wOjE7YnJlYWs7Y2FzZSA0Mjp0PTQyPT09dT8xOjA7YnJlYWs7Y2FzZSAxMjQ6dD0xMjQ9PT11PzE6MDticmVhaztjYXNlIDMyOnQ9Zj8wOjE7YnJlYWs7ZGVmYXVsdDp0PW4uZ2V0KHMpfTE9PT10JiYoci5wdXNoKHl0Ll9jcmVhdGVMaW5rKG4sbyxpLGwsYSkpLGU9ITApfWVsc2UgaWYoMTI9PT1jKXtsZXQgdDs5MT09PXM/KGQ9ITAsdD0wKTp0PW4uZ2V0KHMpLDE9PT10P2U9ITA6Yz0xM31lbHNlIGM9dC5uZXh0U3RhdGUoYyxzKSwwPT09YyYmKGU9ITApO2UmJihjPTEsaD0hMSxkPSExLG09ITEsbD1hKzEsdT1zKSxhKyt9MTM9PT1jJiZyLnB1c2goeXQuX2NyZWF0ZUxpbmsobixvLGksbCxzKSl9cmV0dXJuIHJ9fWNsYXNzIEN0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtpZihlJiZ0KXtjb25zdCBuPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYobilyZXR1cm57cmFuZ2U6ZSx2YWx1ZTpufX1pZihuJiZyKXtjb25zdCBlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHIsaSk7aWYoZSlyZXR1cm57cmFuZ2U6bix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXtjb25zdCBuPXRoaXMubnVtYmVyUmVwbGFjZShlLHQpO3JldHVybiBudWxsIT09bj9uOnRoaXMudGV4dFJlcGxhY2UoZSx0KX1udW1iZXJSZXBsYWNlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgcj1OdW1iZXIoZSk7Y29uc3QgaT1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHIhPT1pP251bGw6MCE9PXJ8fHQ/KHI9TWF0aC5mbG9vcihyKm4pLHIrPXQ/bjotbixTdHJpbmcoci9uKSk6bnVsbH10ZXh0UmVwbGFjZShlLHQpe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LGUsdCl9dmFsdWVTZXRzUmVwbGFjZShlLHQsbil7bGV0IHI9bnVsbDtmb3IobGV0IGk9MCxvPWUubGVuZ3RoO251bGw9PT1yJiZpPG87aSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UoZVtpXSx0LG4pO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZShlLHQsbil7bGV0IHI9ZS5pbmRleE9mKHQpO3JldHVybiByPj0wPyhyKz1uPzE6LTEscjwwP3I9ZS5sZW5ndGgtMTpyJT1lLmxlbmd0aCxlW3JdKTpudWxsfX1DdC5JTlNUQU5DRT1uZXcgQ3Q7Y29uc3QgX3Q9T2JqZWN0LmZyZWV6ZSgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KG4pfX19KSk7dmFyIFN0OyFmdW5jdGlvbihlKXtlLmlzQ2FuY2VsbGF0aW9uVG9rZW49ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLk5vbmV8fHQ9PT1lLkNhbmNlbGxlZHx8KHQgaW5zdGFuY2VvZiB3dHx8ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKCJib29sZWFuIj09dHlwZW9mIHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpELk5vbmV9KSxlLkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpfdH0pfShTdHx8KFN0PXt9KSk7Y2xhc3Mgd3R7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP190Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgVSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBBdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IHd0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIHd0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1TdC5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXt2YXIgdDtlJiZ0aGlzLmNhbmNlbCgpLG51bGw9PT0odD10aGlzLl9wYXJlbnRMaXN0ZW5lcil8fHZvaWQgMD09PXR8fHQuZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2Ygd3QmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1TdC5Ob25lfX1jbGFzcyB4dHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUoZSx0KXt0aGlzLl9rZXlDb2RlVG9TdHJbZV09dCx0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXT1lfWtleUNvZGVUb1N0cihlKXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW2VdfXN0clRvS2V5Q29kZShlKXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW2UudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IEV0PW5ldyB4dCxMdD1uZXcgeHQsTnQ9bmV3IHh0LGt0PW5ldyBBcnJheSgyMzApLFJ0PU9iamVjdC5jcmVhdGUobnVsbCksVHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgT3Q7IWZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFsxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFsxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFsxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFsxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFswLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFswLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFswLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFswLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFswLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFswLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFswLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFswLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFswLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFswLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFswLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFswLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFsxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbMCw1MSwiTWludXMiLDg4LCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbMCw1MiwiRXF1YWwiLDg2LCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzAsNTMsIkJyYWNrZXRMZWZ0Iiw5MiwiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFswLDU0LCJCcmFja2V0UmlnaHQiLDk0LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzAsNTUsIkJhY2tzbGFzaCIsOTMsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFswLDU3LCJTZW1pY29sb24iLDg1LCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzAsNTgsIlF1b3RlIiw5NSwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFswLDU5LCJCYWNrcXVvdGUiLDkxLCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzAsNjAsIkNvbW1hIiw4NywiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzAsNjEsIlBlcmlvZCIsODksIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzAsNjIsIlNsYXNoIiw5MCwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFsxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFsxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFsxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFsxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFsxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFsxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFsxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFsxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFsxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFsxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFsxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFsxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFsxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFsxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFsxLDc3LCJTY3JvbGxMb2NrIiw4NCwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbMSw4OSwiTnVtTG9jayIsODMsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMSw5MCwiTnVtcGFkRGl2aWRlIiwxMTMsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTA4LCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMTEsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMSw5MywiTnVtcGFkQWRkIiwxMDksIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFsxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFsxLDk1LCJOdW1wYWQxIiw5OSwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzEsOTYsIk51bXBhZDIiLDEwMCwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzEsOTcsIk51bXBhZDMiLDEwMSwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzEsOTgsIk51bXBhZDQiLDEwMiwiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFsxLDk5LCJOdW1wYWQ1IiwxMDMsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbMSwxMDAsIk51bXBhZDYiLDEwNCwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxLDEwMSwiTnVtcGFkNyIsMTA1LCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEsMTAyLCJOdW1wYWQ4IiwxMDYsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMSwxMDMsIk51bXBhZDkiLDEwNywiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFsxLDEwNCwiTnVtcGFkMCIsOTgsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTEyLCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFswLDEwNiwiSW50bEJhY2tzbGFzaCIsOTcsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFsxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFsxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFsxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMSwxMTcsIkYyMCIsNzgsIkYyMCIsMTMxLCJWS19GMjAiLGUsZV0sWzEsMTE4LCJGMjEiLDc5LCJGMjEiLDEzMiwiVktfRjIxIixlLGVdLFsxLDExOSwiRjIyIiw4MCwiRjIyIiwxMzMsIlZLX0YyMiIsZSxlXSxbMSwxMjAsIkYyMyIsODEsIkYyMyIsMTM0LCJWS19GMjMiLGUsZV0sWzEsMTIxLCJGMjQiLDgyLCJGMjQiLDEzNSwiVktfRjI0IixlLGVdLFsxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFsxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFsxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFsxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFsxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFsxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFsxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTcsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExOCwiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExOSwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxLDEzNCwiTnVtcGFkQ29tbWEiLDExMCwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzAsMTM1LCJJbnRsUm8iLDExNSwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFsxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFsxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFsxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFsxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFsxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFsxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMSwxNTUsIk51bXBhZENsZWFyIiwxMzEsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFsxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFsxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFsxLDAsZSw1NywiTWV0YSIsOTEsIlZLX0NPTU1BTkQiLGUsZV0sWzEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFsxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFsxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFsxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFsxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFsxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFsxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTI0LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjUsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxLDE3MywiTWVkaWFTdG9wIiwxMjYsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFsxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjcsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzEsMTc2LCJNZWRpYVNlbGVjdCIsMTI4LCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFsxLDE3NywiTGF1bmNoTWFpbCIsMTI5LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFsxLDE3OCwiTGF1bmNoQXBwMiIsMTMwLCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFsxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFsxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFsxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMSwxODIsIkJyb3dzZXJTZWFyY2giLDEyMCwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMSwxODMsIkJyb3dzZXJIb21lIiwxMjEsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMSwxODQsIkJyb3dzZXJCYWNrIiwxMjIsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMjMsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFsxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxLDAsZSwxMTQsIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzEsMCxlLDExNiwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFsxLDAsZSw5NiwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxyPVtdO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0W3QsaSxvLHMsYSxsLHUsYyxoXT1lO2lmKHJbaV18fChyW2ldPSEwLFJ0W29dPWksVHRbby50b0xvd2VyQ2FzZSgpXT1pKSwhbltzXSl7aWYobltzXT0hMCwhYSl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHtvfWApO0V0LmRlZmluZShzLGEpLEx0LmRlZmluZShzLGN8fGEpLE50LmRlZmluZShzLGh8fGN8fGEpfWwmJihrdFtsXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gRXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBMdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBOdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gTHQuc3RyVG9LZXlDb2RlKGUpfHxOdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTk4JiZlPD0xMTMpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIEV0LmtleUNvZGVUb1N0cihlKX19KE90fHwoT3Q9e30pKTtjbGFzcyBNdCBleHRlbmRzIHJ0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBNdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBNdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IE10KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgbnQodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IG50KHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IE10KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBNdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBNdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBNdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IE10KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IE10KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IE10KGUsdCxuLHIpOm5ldyBNdChuLHIsZSx0KX19Y29uc3QgSXQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBQdChlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgbj1JdFt0XTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gSXRbZV09dCx7aWQ6ZX19Y29uc3QgRnQ9e2FkZDpQdCgiYWRkIiw2ZTQpLHBsdXM6UHQoInBsdXMiLDZlNCksZ2lzdE5ldzpQdCgiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpQdCgicmVwby1jcmVhdGUiLDZlNCksbGlnaHRidWxiOlB0KCJsaWdodGJ1bGIiLDYwMDAxKSxsaWdodEJ1bGI6UHQoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOlB0KCJyZXBvIiw2MDAwMikscmVwb0RlbGV0ZTpQdCgicmVwby1kZWxldGUiLDYwMDAyKSxnaXN0Rm9yazpQdCgiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpQdCgicmVwby1mb3JrZWQiLDYwMDAzKSxnaXRQdWxsUmVxdWVzdDpQdCgiZ2l0LXB1bGwtcmVxdWVzdCIsNjAwMDQpLGdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkOlB0KCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6UHQoInJlY29yZC1rZXlzIiw2MDAwNSksa2V5Ym9hcmQ6UHQoImtleWJvYXJkIiw2MDAwNSksdGFnOlB0KCJ0YWciLDYwMDA2KSx0YWdBZGQ6UHQoInRhZy1hZGQiLDYwMDA2KSx0YWdSZW1vdmU6UHQoInRhZy1yZW1vdmUiLDYwMDA2KSxwZXJzb246UHQoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpQdCgicGVyc29uLWZvbGxvdyIsNjAwMDcpLHBlcnNvbk91dGxpbmU6UHQoInBlcnNvbi1vdXRsaW5lIiw2MDAwNykscGVyc29uRmlsbGVkOlB0KCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOlB0KCJnaXQtYnJhbmNoIiw2MDAwOCksZ2l0QnJhbmNoQ3JlYXRlOlB0KCJnaXQtYnJhbmNoLWNyZWF0ZSIsNjAwMDgpLGdpdEJyYW5jaERlbGV0ZTpQdCgiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOlB0KCJzb3VyY2UtY29udHJvbCIsNjAwMDgpLG1pcnJvcjpQdCgibWlycm9yIiw2MDAwOSksbWlycm9yUHVibGljOlB0KCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpQdCgic3RhciIsNjAwMTApLHN0YXJBZGQ6UHQoInN0YXItYWRkIiw2MDAxMCksc3RhckRlbGV0ZTpQdCgic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6UHQoInN0YXItZW1wdHkiLDYwMDEwKSxjb21tZW50OlB0KCJjb21tZW50Iiw2MDAxMSksY29tbWVudEFkZDpQdCgiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpQdCgiYWxlcnQiLDYwMDEyKSx3YXJuaW5nOlB0KCJ3YXJuaW5nIiw2MDAxMiksc2VhcmNoOlB0KCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOlB0KCJzZWFyY2gtc2F2ZSIsNjAwMTMpLGxvZ091dDpQdCgibG9nLW91dCIsNjAwMTQpLHNpZ25PdXQ6UHQoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46UHQoImxvZy1pbiIsNjAwMTUpLHNpZ25JbjpQdCgic2lnbi1pbiIsNjAwMTUpLGV5ZTpQdCgiZXllIiw2MDAxNiksZXllVW53YXRjaDpQdCgiZXllLXVud2F0Y2giLDYwMDE2KSxleWVXYXRjaDpQdCgiZXllLXdhdGNoIiw2MDAxNiksY2lyY2xlRmlsbGVkOlB0KCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OlB0KCJwcmltaXRpdmUtZG90Iiw2MDAxNyksY2xvc2VEaXJ0eTpQdCgiY2xvc2UtZGlydHkiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnQ6UHQoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpQdCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIsNjAwMTcpLGRlYnVnSGludDpQdCgiZGVidWctaGludCIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpQdCgicHJpbWl0aXZlLXNxdWFyZSIsNjAwMTgpLGVkaXQ6UHQoImVkaXQiLDYwMDE5KSxwZW5jaWw6UHQoInBlbmNpbCIsNjAwMTkpLGluZm86UHQoImluZm8iLDYwMDIwKSxpc3N1ZU9wZW5lZDpQdCgiaXNzdWUtb3BlbmVkIiw2MDAyMCksZ2lzdFByaXZhdGU6UHQoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOlB0KCJnaXQtZm9yay1wcml2YXRlIiw2MDAyMSksbG9jazpQdCgibG9jayIsNjAwMjEpLG1pcnJvclByaXZhdGU6UHQoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6UHQoImNsb3NlIiw2MDAyMikscmVtb3ZlQ2xvc2U6UHQoInJlbW92ZS1jbG9zZSIsNjAwMjIpLHg6UHQoIngiLDYwMDIyKSxyZXBvU3luYzpQdCgicmVwby1zeW5jIiw2MDAyMyksc3luYzpQdCgic3luYyIsNjAwMjMpLGNsb25lOlB0KCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpQdCgiZGVza3RvcC1kb3dubG9hZCIsNjAwMjQpLGJlYWtlcjpQdCgiYmVha2VyIiw2MDAyNSksbWljcm9zY29wZTpQdCgibWljcm9zY29wZSIsNjAwMjUpLHZtOlB0KCJ2bSIsNjAwMjYpLGRldmljZURlc2t0b3A6UHQoImRldmljZS1kZXNrdG9wIiw2MDAyNiksZmlsZTpQdCgiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OlB0KCJmaWxlLXRleHQiLDYwMDI3KSxtb3JlOlB0KCJtb3JlIiw2MDAyOCksZWxsaXBzaXM6UHQoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOlB0KCJrZWJhYi1ob3Jpem9udGFsIiw2MDAyOCksbWFpbFJlcGx5OlB0KCJtYWlsLXJlcGx5Iiw2MDAyOSkscmVwbHk6UHQoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOlB0KCJvcmdhbml6YXRpb24iLDYwMDMwKSxvcmdhbml6YXRpb25GaWxsZWQ6UHQoIm9yZ2FuaXphdGlvbi1maWxsZWQiLDYwMDMwKSxvcmdhbml6YXRpb25PdXRsaW5lOlB0KCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6UHQoIm5ldy1maWxlIiw2MDAzMSksZmlsZUFkZDpQdCgiZmlsZS1hZGQiLDYwMDMxKSxuZXdGb2xkZXI6UHQoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOlB0KCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLDYwMDMyKSx0cmFzaDpQdCgidHJhc2giLDYwMDMzKSx0cmFzaGNhbjpQdCgidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OlB0KCJoaXN0b3J5Iiw2MDAzNCksY2xvY2s6UHQoImNsb2NrIiw2MDAzNCksZm9sZGVyOlB0KCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OlB0KCJmaWxlLWRpcmVjdG9yeSIsNjAwMzUpLHN5bWJvbEZvbGRlcjpQdCgic3ltYm9sLWZvbGRlciIsNjAwMzUpLGxvZ29HaXRodWI6UHQoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpQdCgibWFyay1naXRodWIiLDYwMDM2KSxnaXRodWI6UHQoImdpdGh1YiIsNjAwMzYpLHRlcm1pbmFsOlB0KCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6UHQoImNvbnNvbGUiLDYwMDM3KSxyZXBsOlB0KCJyZXBsIiw2MDAzNyksemFwOlB0KCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpQdCgic3ltYm9sLWV2ZW50Iiw2MDAzOCksZXJyb3I6UHQoImVycm9yIiw2MDAzOSksc3RvcDpQdCgic3RvcCIsNjAwMzkpLHZhcmlhYmxlOlB0KCJ2YXJpYWJsZSIsNjAwNDApLHN5bWJvbFZhcmlhYmxlOlB0KCJzeW1ib2wtdmFyaWFibGUiLDYwMDQwKSxhcnJheTpQdCgiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpQdCgic3ltYm9sLWFycmF5Iiw2MDA0Miksc3ltYm9sTW9kdWxlOlB0KCJzeW1ib2wtbW9kdWxlIiw2MDA0Myksc3ltYm9sUGFja2FnZTpQdCgic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6UHQoInN5bWJvbC1uYW1lc3BhY2UiLDYwMDQzKSxzeW1ib2xPYmplY3Q6UHQoInN5bWJvbC1vYmplY3QiLDYwMDQzKSxzeW1ib2xNZXRob2Q6UHQoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpQdCgic3ltYm9sLWZ1bmN0aW9uIiw2MDA0NCksc3ltYm9sQ29uc3RydWN0b3I6UHQoInN5bWJvbC1jb25zdHJ1Y3RvciIsNjAwNDQpLHN5bWJvbEJvb2xlYW46UHQoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpQdCgic3ltYm9sLW51bGwiLDYwMDQ3KSxzeW1ib2xOdW1lcmljOlB0KCJzeW1ib2wtbnVtZXJpYyIsNjAwNDgpLHN5bWJvbE51bWJlcjpQdCgic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpQdCgic3ltYm9sLXN0cnVjdHVyZSIsNjAwNDkpLHN5bWJvbFN0cnVjdDpQdCgic3ltYm9sLXN0cnVjdCIsNjAwNDkpLHN5bWJvbFBhcmFtZXRlcjpQdCgic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6UHQoInN5bWJvbC10eXBlLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbEtleTpQdCgic3ltYm9sLWtleSIsNjAwNTEpLHN5bWJvbFRleHQ6UHQoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOlB0KCJzeW1ib2wtcmVmZXJlbmNlIiw2MDA1MiksZ29Ub0ZpbGU6UHQoImdvLXRvLWZpbGUiLDYwMDUyKSxzeW1ib2xFbnVtOlB0KCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOlB0KCJzeW1ib2wtdmFsdWUiLDYwMDUzKSxzeW1ib2xSdWxlcjpQdCgic3ltYm9sLXJ1bGVyIiw2MDA1NCksc3ltYm9sVW5pdDpQdCgic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOlB0KCJhY3RpdmF0ZS1icmVha3BvaW50cyIsNjAwNTUpLGFyY2hpdmU6UHQoImFyY2hpdmUiLDYwMDU2KSxhcnJvd0JvdGg6UHQoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246UHQoImFycm93LWRvd24iLDYwMDU4KSxhcnJvd0xlZnQ6UHQoImFycm93LWxlZnQiLDYwMDU5KSxhcnJvd1JpZ2h0OlB0KCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOlB0KCJhcnJvdy1zbWFsbC1kb3duIiw2MDA2MSksYXJyb3dTbWFsbExlZnQ6UHQoImFycm93LXNtYWxsLWxlZnQiLDYwMDYyKSxhcnJvd1NtYWxsUmlnaHQ6UHQoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOlB0KCJhcnJvdy1zbWFsbC11cCIsNjAwNjQpLGFycm93VXA6UHQoImFycm93LXVwIiw2MDA2NSksYmVsbDpQdCgiYmVsbCIsNjAwNjYpLGJvbGQ6UHQoImJvbGQiLDYwMDY3KSxib29rOlB0KCJib29rIiw2MDA2OCksYm9va21hcms6UHQoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOlB0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLDYwMDcwKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbDpQdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpQdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLDYwMDcyKSxkZWJ1Z0JyZWFrcG9pbnREYXRhOlB0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLDYwMDc0KSxkZWJ1Z0JyZWFrcG9pbnRMb2c6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nIiw2MDA3NSksZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOlB0KCJicmllZmNhc2UiLDYwMDc2KSxicm9hZGNhc3Q6UHQoImJyb2FkY2FzdCIsNjAwNzcpLGJyb3dzZXI6UHQoImJyb3dzZXIiLDYwMDc4KSxidWc6UHQoImJ1ZyIsNjAwNzkpLGNhbGVuZGFyOlB0KCJjYWxlbmRhciIsNjAwODApLGNhc2VTZW5zaXRpdmU6UHQoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6UHQoImNoZWNrIiw2MDA4MiksY2hlY2tsaXN0OlB0KCJjaGVja2xpc3QiLDYwMDgzKSxjaGV2cm9uRG93bjpQdCgiY2hldnJvbi1kb3duIiw2MDA4NCksZHJvcERvd25CdXR0b246UHQoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxjaGV2cm9uTGVmdDpQdCgiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OlB0KCJjaGV2cm9uLXJpZ2h0Iiw2MDA4NiksY2hldnJvblVwOlB0KCJjaGV2cm9uLXVwIiw2MDA4NyksY2hyb21lQ2xvc2U6UHQoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOlB0KCJjaHJvbWUtbWF4aW1pemUiLDYwMDg5KSxjaHJvbWVNaW5pbWl6ZTpQdCgiY2hyb21lLW1pbmltaXplIiw2MDA5MCksY2hyb21lUmVzdG9yZTpQdCgiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGU6UHQoImNpcmNsZSIsNjAwOTIpLGNpcmNsZU91dGxpbmU6UHQoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksZGVidWdCcmVha3BvaW50VW52ZXJpZmllZDpQdCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksY2lyY2xlU2xhc2g6UHQoImNpcmNsZS1zbGFzaCIsNjAwOTMpLGNpcmN1aXRCb2FyZDpQdCgiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOlB0KCJjbGVhci1hbGwiLDYwMDk1KSxjbGlwcHk6UHQoImNsaXBweSIsNjAwOTYpLGNsb3NlQWxsOlB0KCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOlB0KCJjbG91ZC1kb3dubG9hZCIsNjAwOTgpLGNsb3VkVXBsb2FkOlB0KCJjbG91ZC11cGxvYWQiLDYwMDk5KSxjb2RlOlB0KCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6UHQoImNvbGxhcHNlLWFsbCIsNjAxMDEpLGNvbG9yTW9kZTpQdCgiY29sb3ItbW9kZSIsNjAxMDIpLGNvbW1lbnREaXNjdXNzaW9uOlB0KCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjb21wYXJlQ2hhbmdlczpQdCgiY29tcGFyZS1jaGFuZ2VzIiw2MDE1NyksY3JlZGl0Q2FyZDpQdCgiY3JlZGl0LWNhcmQiLDYwMTA1KSxkYXNoOlB0KCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOlB0KCJkYXNoYm9hcmQiLDYwMTA5KSxkYXRhYmFzZTpQdCgiZGF0YWJhc2UiLDYwMTEwKSxkZWJ1Z0NvbnRpbnVlOlB0KCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpQdCgiZGVidWctZGlzY29ubmVjdCIsNjAxMTIpLGRlYnVnUGF1c2U6UHQoImRlYnVnLXBhdXNlIiw2MDExMyksZGVidWdSZXN0YXJ0OlB0KCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpQdCgiZGVidWctc3RhcnQiLDYwMTE1KSxkZWJ1Z1N0ZXBJbnRvOlB0KCJkZWJ1Zy1zdGVwLWludG8iLDYwMTE2KSxkZWJ1Z1N0ZXBPdXQ6UHQoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpQdCgiZGVidWctc3RlcC1vdmVyIiw2MDExOCksZGVidWdTdG9wOlB0KCJkZWJ1Zy1zdG9wIiw2MDExOSksZGVidWc6UHQoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86UHQoImRldmljZS1jYW1lcmEtdmlkZW8iLDYwMTIxKSxkZXZpY2VDYW1lcmE6UHQoImRldmljZS1jYW1lcmEiLDYwMTIyKSxkZXZpY2VNb2JpbGU6UHQoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6UHQoImRpZmYtYWRkZWQiLDYwMTI0KSxkaWZmSWdub3JlZDpQdCgiZGlmZi1pZ25vcmVkIiw2MDEyNSksZGlmZk1vZGlmaWVkOlB0KCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6UHQoImRpZmYtcmVtb3ZlZCIsNjAxMjcpLGRpZmZSZW5hbWVkOlB0KCJkaWZmLXJlbmFtZWQiLDYwMTI4KSxkaWZmOlB0KCJkaWZmIiw2MDEyOSksZGlzY2FyZDpQdCgiZGlzY2FyZCIsNjAxMzApLGVkaXRvckxheW91dDpQdCgiZWRpdG9yLWxheW91dCIsNjAxMzEpLGVtcHR5V2luZG93OlB0KCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOlB0KCJleGNsdWRlIiw2MDEzMyksZXh0ZW5zaW9uczpQdCgiZXh0ZW5zaW9ucyIsNjAxMzQpLGV5ZUNsb3NlZDpQdCgiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6UHQoImZpbGUtYmluYXJ5Iiw2MDEzNiksZmlsZUNvZGU6UHQoImZpbGUtY29kZSIsNjAxMzcpLGZpbGVNZWRpYTpQdCgiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6UHQoImZpbGUtcGRmIiw2MDEzOSksZmlsZVN1Ym1vZHVsZTpQdCgiZmlsZS1zdWJtb2R1bGUiLDYwMTQwKSxmaWxlU3ltbGlua0RpcmVjdG9yeTpQdCgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpQdCgiZmlsZS1zeW1saW5rLWZpbGUiLDYwMTQyKSxmaWxlWmlwOlB0KCJmaWxlLXppcCIsNjAxNDMpLGZpbGVzOlB0KCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpQdCgiZmlsdGVyIiw2MDE0NSksZmxhbWU6UHQoImZsYW1lIiw2MDE0NiksZm9sZERvd246UHQoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpQdCgiZm9sZC11cCIsNjAxNDgpLGZvbGQ6UHQoImZvbGQiLDYwMTQ5KSxmb2xkZXJBY3RpdmU6UHQoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6UHQoImZvbGRlci1vcGVuZWQiLDYwMTUxKSxnZWFyOlB0KCJnZWFyIiw2MDE1MiksZ2lmdDpQdCgiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6UHQoImdpc3Qtc2VjcmV0Iiw2MDE1NCksZ2lzdDpQdCgiZ2lzdCIsNjAxNTUpLGdpdENvbW1pdDpQdCgiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6UHQoImdpdC1jb21wYXJlIiw2MDE1NyksZ2l0TWVyZ2U6UHQoImdpdC1tZXJnZSIsNjAxNTgpLGdpdGh1YkFjdGlvbjpQdCgiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpQdCgiZ2l0aHViLWFsdCIsNjAxNjApLGdsb2JlOlB0KCJnbG9iZSIsNjAxNjEpLGdyYWJiZXI6UHQoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpQdCgiZ3JhcGgiLDYwMTYzKSxncmlwcGVyOlB0KCJncmlwcGVyIiw2MDE2NCksaGVhcnQ6UHQoImhlYXJ0Iiw2MDE2NSksaG9tZTpQdCgiaG9tZSIsNjAxNjYpLGhvcml6b250YWxSdWxlOlB0KCJob3Jpem9udGFsLXJ1bGUiLDYwMTY3KSxodWJvdDpQdCgiaHVib3QiLDYwMTY4KSxpbmJveDpQdCgiaW5ib3giLDYwMTY5KSxpc3N1ZUNsb3NlZDpQdCgiaXNzdWUtY2xvc2VkIiw2MDMyNCksaXNzdWVSZW9wZW5lZDpQdCgiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6UHQoImlzc3VlcyIsNjAxNzIpLGl0YWxpYzpQdCgiaXRhbGljIiw2MDE3MyksamVyc2V5OlB0KCJqZXJzZXkiLDYwMTc0KSxqc29uOlB0KCJqc29uIiw2MDE3NSksYnJhY2tldDpQdCgiYnJhY2tldCIsNjAxNzUpLGtlYmFiVmVydGljYWw6UHQoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OlB0KCJrZXkiLDYwMTc3KSxsYXc6UHQoImxhdyIsNjAxNzgpLGxpZ2h0YnVsYkF1dG9maXg6UHQoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOlB0KCJsaW5rLWV4dGVybmFsIiw2MDE4MCksbGluazpQdCgibGluayIsNjAxODEpLGxpc3RPcmRlcmVkOlB0KCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOlB0KCJsaXN0LXVub3JkZXJlZCIsNjAxODMpLGxpdmVTaGFyZTpQdCgibGl2ZS1zaGFyZSIsNjAxODQpLGxvYWRpbmc6UHQoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpQdCgibG9jYXRpb24iLDYwMTg2KSxtYWlsUmVhZDpQdCgibWFpbC1yZWFkIiw2MDE4NyksbWFpbDpQdCgibWFpbCIsNjAxODgpLG1hcmtkb3duOlB0KCJtYXJrZG93biIsNjAxODkpLG1lZ2FwaG9uZTpQdCgibWVnYXBob25lIiw2MDE5MCksbWVudGlvbjpQdCgibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpQdCgibWlsZXN0b25lIiw2MDE5MiksbW9ydGFyQm9hcmQ6UHQoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6UHQoIm1vdmUiLDYwMTk0KSxtdWx0aXBsZVdpbmRvd3M6UHQoIm11bHRpcGxlLXdpbmRvd3MiLDYwMTk1KSxtdXRlOlB0KCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOlB0KCJuby1uZXdsaW5lIiw2MDE5Nyksbm90ZTpQdCgibm90ZSIsNjAxOTgpLG9jdG9mYWNlOlB0KCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OlB0KCJvcGVuLXByZXZpZXciLDYwMjAwKSxwYWNrYWdlXzpQdCgicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOlB0KCJwYWludGNhbiIsNjAyMDIpLHBpbjpQdCgicGluIiw2MDIwMykscGxheTpQdCgicGxheSIsNjAyMDQpLHJ1bjpQdCgicnVuIiw2MDIwNCkscGx1ZzpQdCgicGx1ZyIsNjAyMDUpLHByZXNlcnZlQ2FzZTpQdCgicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6UHQoInByZXZpZXciLDYwMjA3KSxwcm9qZWN0OlB0KCJwcm9qZWN0Iiw2MDIwOCkscHVsc2U6UHQoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246UHQoInF1ZXN0aW9uIiw2MDIxMCkscXVvdGU6UHQoInF1b3RlIiw2MDIxMSkscmFkaW9Ub3dlcjpQdCgicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6UHQoInJlYWN0aW9ucyIsNjAyMTMpLHJlZmVyZW5jZXM6UHQoInJlZmVyZW5jZXMiLDYwMjE0KSxyZWZyZXNoOlB0KCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6UHQoInJlZ2V4Iiw2MDIxNikscmVtb3RlRXhwbG9yZXI6UHQoInJlbW90ZS1leHBsb3JlciIsNjAyMTcpLHJlbW90ZTpQdCgicmVtb3RlIiw2MDIxOCkscmVtb3ZlOlB0KCJyZW1vdmUiLDYwMjE5KSxyZXBsYWNlQWxsOlB0KCJyZXBsYWNlLWFsbCIsNjAyMjApLHJlcGxhY2U6UHQoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6UHQoInJlcG8tY2xvbmUiLDYwMjIyKSxyZXBvRm9yY2VQdXNoOlB0KCJyZXBvLWZvcmNlLXB1c2giLDYwMjIzKSxyZXBvUHVsbDpQdCgicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6UHQoInJlcG8tcHVzaCIsNjAyMjUpLHJlcG9ydDpQdCgicmVwb3J0Iiw2MDIyNikscmVxdWVzdENoYW5nZXM6UHQoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpQdCgicm9ja2V0Iiw2MDIyOCkscm9vdEZvbGRlck9wZW5lZDpQdCgicm9vdC1mb2xkZXItb3BlbmVkIiw2MDIyOSkscm9vdEZvbGRlcjpQdCgicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6UHQoInJzcyIsNjAyMzEpLHJ1Ynk6UHQoInJ1YnkiLDYwMjMyKSxzYXZlQWxsOlB0KCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpQdCgic2F2ZS1hcyIsNjAyMzQpLHNhdmU6UHQoInNhdmUiLDYwMjM1KSxzY3JlZW5GdWxsOlB0KCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpQdCgic2NyZWVuLW5vcm1hbCIsNjAyMzcpLHNlYXJjaFN0b3A6UHQoInNlYXJjaC1zdG9wIiw2MDIzOCksc2VydmVyOlB0KCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6UHQoInNldHRpbmdzLWdlYXIiLDYwMjQxKSxzZXR0aW5nczpQdCgic2V0dGluZ3MiLDYwMjQyKSxzaGllbGQ6UHQoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpQdCgic21pbGV5Iiw2MDI0NCksc29ydFByZWNlZGVuY2U6UHQoInNvcnQtcHJlY2VkZW5jZSIsNjAyNDUpLHNwbGl0SG9yaXpvbnRhbDpQdCgic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6UHQoInNwbGl0LXZlcnRpY2FsIiw2MDI0Nyksc3F1aXJyZWw6UHQoInNxdWlycmVsIiw2MDI0OCksc3RhckZ1bGw6UHQoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOlB0KCJzdGFyLWhhbGYiLDYwMjUwKSxzeW1ib2xDbGFzczpQdCgic3ltYm9sLWNsYXNzIiw2MDI1MSksc3ltYm9sQ29sb3I6UHQoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbEN1c3RvbUNvbG9yOlB0KCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxzeW1ib2xDb25zdGFudDpQdCgic3ltYm9sLWNvbnN0YW50Iiw2MDI1Myksc3ltYm9sRW51bU1lbWJlcjpQdCgic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6UHQoInN5bWJvbC1maWVsZCIsNjAyNTUpLHN5bWJvbEZpbGU6UHQoInN5bWJvbC1maWxlIiw2MDI1Niksc3ltYm9sSW50ZXJmYWNlOlB0KCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpQdCgic3ltYm9sLWtleXdvcmQiLDYwMjU4KSxzeW1ib2xNaXNjOlB0KCJzeW1ib2wtbWlzYyIsNjAyNTkpLHN5bWJvbE9wZXJhdG9yOlB0KCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpQdCgic3ltYm9sLXByb3BlcnR5Iiw2MDI2MSksd3JlbmNoOlB0KCJ3cmVuY2giLDYwMjYxKSx3cmVuY2hTdWJhY3Rpb246UHQoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OlB0KCJzeW1ib2wtc25pcHBldCIsNjAyNjIpLHRhc2tsaXN0OlB0KCJ0YXNrbGlzdCIsNjAyNjMpLHRlbGVzY29wZTpQdCgidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6UHQoInRleHQtc2l6ZSIsNjAyNjUpLHRocmVlQmFyczpQdCgidGhyZWUtYmFycyIsNjAyNjYpLHRodW1ic2Rvd246UHQoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpQdCgidGh1bWJzdXAiLDYwMjY4KSx0b29sczpQdCgidG9vbHMiLDYwMjY5KSx0cmlhbmdsZURvd246UHQoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6UHQoInRyaWFuZ2xlLWxlZnQiLDYwMjcxKSx0cmlhbmdsZVJpZ2h0OlB0KCJ0cmlhbmdsZS1yaWdodCIsNjAyNzIpLHRyaWFuZ2xlVXA6UHQoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpQdCgidHdpdHRlciIsNjAyNzQpLHVuZm9sZDpQdCgidW5mb2xkIiw2MDI3NSksdW5sb2NrOlB0KCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6UHQoInVubXV0ZSIsNjAyNzcpLHVudmVyaWZpZWQ6UHQoInVudmVyaWZpZWQiLDYwMjc4KSx2ZXJpZmllZDpQdCgidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpQdCgidmVyc2lvbnMiLDYwMjgwKSx2bUFjdGl2ZTpQdCgidm0tYWN0aXZlIiw2MDI4MSksdm1PdXRsaW5lOlB0KCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOlB0KCJ2bS1ydW5uaW5nIiw2MDI4Myksd2F0Y2g6UHQoIndhdGNoIiw2MDI4NCksd2hpdGVzcGFjZTpQdCgid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpQdCgid2hvbGUtd29yZCIsNjAyODYpLHdpbmRvdzpQdCgid2luZG93Iiw2MDI4Nyksd29yZFdyYXA6UHQoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpQdCgiem9vbS1pbiIsNjAyODkpLHpvb21PdXQ6UHQoInpvb20tb3V0Iiw2MDI5MCksbGlzdEZpbHRlcjpQdCgibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpQdCgibGlzdC1mbGF0Iiw2MDI5MiksbGlzdFNlbGVjdGlvbjpQdCgibGlzdC1zZWxlY3Rpb24iLDYwMjkzKSxzZWxlY3Rpb246UHQoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOlB0KCJsaXN0LXRyZWUiLDYwMjk0KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIsNjAyOTUpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uOlB0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpQdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIsNjAyOTYpLGRlYnVnU3RhY2tmcmFtZUFjdGl2ZTpQdCgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLDYwMjk3KSxjaXJjbGVTbWFsbEZpbGxlZDpQdCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpQdCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWU6UHQoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOlB0KCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLDYwMjk5KSxkZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZDpQdCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIsNjAzMDApLHN5bWJvbFN0cmluZzpQdCgic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOlB0KCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIiw2MDMwMiksZGVidWdTdGVwQmFjazpQdCgiZGVidWctc3RlcC1iYWNrIiw2MDMwMyksZGVidWdSZXN0YXJ0RnJhbWU6UHQoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxjYWxsSW5jb21pbmc6UHQoImNhbGwtaW5jb21pbmciLDYwMzA2KSxjYWxsT3V0Z29pbmc6UHQoImNhbGwtb3V0Z29pbmciLDYwMzA3KSxtZW51OlB0KCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOlB0KCJleHBhbmQtYWxsIiw2MDMwOSksZmVlZGJhY2s6UHQoImZlZWRiYWNrIiw2MDMxMCksZ3JvdXBCeVJlZlR5cGU6UHQoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpQdCgidW5ncm91cC1ieS1yZWYtdHlwZSIsNjAzMTIpLGFjY291bnQ6UHQoImFjY291bnQiLDYwMzEzKSxiZWxsRG90OlB0KCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpQdCgiZGVidWctY29uc29sZSIsNjAzMTUpLGxpYnJhcnk6UHQoImxpYnJhcnkiLDYwMzE2KSxvdXRwdXQ6UHQoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpQdCgicnVuLWFsbCIsNjAzMTgpLHN5bmNJZ25vcmVkOlB0KCJzeW5jLWlnbm9yZWQiLDYwMzE5KSxwaW5uZWQ6UHQoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOlB0KCJnaXRodWItaW52ZXJ0ZWQiLDYwMzIxKSxkZWJ1Z0FsdDpQdCgiZGVidWctYWx0Iiw2MDMwNSksc2VydmVyUHJvY2VzczpQdCgic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpQdCgic2VydmVyLWVudmlyb25tZW50Iiw2MDMyMykscGFzczpQdCgicGFzcyIsNjAzMjQpLHN0b3BDaXJjbGU6UHQoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpQdCgicGxheS1jaXJjbGUiLDYwMzI2KSxyZWNvcmQ6UHQoInJlY29yZCIsNjAzMjcpLGRlYnVnQWx0U21hbGw6UHQoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpQdCgidm0tY29ubmVjdCIsNjAzMjkpLGNsb3VkOlB0KCJjbG91ZCIsNjAzMzApLG1lcmdlOlB0KCJtZXJnZSIsNjAzMzEpLGV4cG9ydEljb246UHQoImV4cG9ydCIsNjAzMzIpLGdyYXBoTGVmdDpQdCgiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpQdCgibWFnbmV0Iiw2MDMzNCksbm90ZWJvb2s6UHQoIm5vdGVib29rIiw2MDMzNSkscmVkbzpQdCgicmVkbyIsNjAzMzYpLGNoZWNrQWxsOlB0KCJjaGVjay1hbGwiLDYwMzM3KSxwaW5uZWREaXJ0eTpQdCgicGlubmVkLWRpcnR5Iiw2MDMzOCkscGFzc0ZpbGxlZDpQdCgicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpQdCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIsNjAzNDApLGNpcmNsZUxhcmdlOlB0KCJjaXJjbGUtbGFyZ2UiLDYwMzQxKSxjaXJjbGVMYXJnZU91dGxpbmU6UHQoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpQdCgiY29tYmluZSIsNjAzNDIpLGdhdGhlcjpQdCgiZ2F0aGVyIiw2MDM0MiksdGFibGU6UHQoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpQdCgidmFyaWFibGUtZ3JvdXAiLDYwMzQ0KSx0eXBlSGllcmFyY2h5OlB0KCJ0eXBlLWhpZXJhcmNoeSIsNjAzNDUpLHR5cGVIaWVyYXJjaHlTdWI6UHQoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpQdCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLDYwMzQ3KSxnaXRQdWxsUmVxdWVzdENyZWF0ZTpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLDYwMzQ4KSxydW5BYm92ZTpQdCgicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6UHQoInJ1bi1iZWxvdyIsNjAzNTApLG5vdGVib29rVGVtcGxhdGU6UHQoIm5vdGVib29rLXRlbXBsYXRlIiw2MDM1MSksZGVidWdSZXJ1bjpQdCgiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOlB0KCJ3b3Jrc3BhY2UtdHJ1c3RlZCIsNjAzNTMpLHdvcmtzcGFjZVVudHJ1c3RlZDpQdCgid29ya3NwYWNlLXVudHJ1c3RlZCIsNjAzNTQpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOlB0KCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLDYwMzU1KSx0ZXJtaW5hbENtZDpQdCgidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46UHQoInRlcm1pbmFsLWRlYmlhbiIsNjAzNTcpLHRlcm1pbmFsTGludXg6UHQoInRlcm1pbmFsLWxpbnV4Iiw2MDM1OCksdGVybWluYWxQb3dlcnNoZWxsOlB0KCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OlB0KCJ0ZXJtaW5hbC10bXV4Iiw2MDM2MCksdGVybWluYWxVYnVudHU6UHQoInRlcm1pbmFsLXVidW50dSIsNjAzNjEpLHRlcm1pbmFsQmFzaDpQdCgidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpQdCgiYXJyb3ctc3dhcCIsNjAzNjMpLGNvcHk6UHQoImNvcHkiLDYwMzY0KSxwZXJzb25BZGQ6UHQoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6UHQoImZpbHRlci1maWxsZWQiLDYwMzY2KSx3YW5kOlB0KCJ3YW5kIiw2MDM2NyksZGVidWdMaW5lQnlMaW5lOlB0KCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OlB0KCJpbnNwZWN0Iiw2MDM2OSksbGF5ZXJzOlB0KCJsYXllcnMiLDYwMzcwKSxsYXllcnNEb3Q6UHQoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6UHQoImxheWVycy1hY3RpdmUiLDYwMzcyKSxjb21wYXNzOlB0KCJjb21wYXNzIiw2MDM3MyksY29tcGFzc0RvdDpQdCgiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOlB0KCJjb21wYXNzLWFjdGl2ZSIsNjAzNzUpLGF6dXJlOlB0KCJhenVyZSIsNjAzNzYpLGlzc3VlRHJhZnQ6UHQoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6UHQoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIiw2MDM3OCksZ2l0UHVsbFJlcXVlc3REcmFmdDpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIsNjAzNzkpLGRlYnVnQWxsOlB0KCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOlB0KCJkZWJ1Zy1jb3ZlcmFnZSIsNjAzODEpLHJ1bkVycm9yczpQdCgicnVuLWVycm9ycyIsNjAzODIpLGZvbGRlckxpYnJhcnk6UHQoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOlB0KCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIsNjAzODQpLGJlYWtlclN0b3A6UHQoImJlYWtlci1zdG9wIiw2MDM4NSksZ3JhcGhMaW5lOlB0KCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOlB0KCJncmFwaC1zY2F0dGVyIiw2MDM4NykscGllQ2hhcnQ6UHQoInBpZS1jaGFydCIsNjAzODgpLGJyYWNrZXREb3Q6UHQoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOlB0KCJicmFja2V0LWVycm9yIiw2MDM5MCksbG9ja1NtYWxsOlB0KCJsb2NrLXNtYWxsIiw2MDM5MSksYXp1cmVEZXZvcHM6UHQoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOlB0KCJ2ZXJpZmllZC1maWxsZWQiLDYwMzkzKSxuZXdMaW5lOlB0KCJuZXdsaW5lIiw2MDM5NCksbGF5b3V0OlB0KCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6UHQoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iiw2MDM5NiksbGF5b3V0QWN0aXZpdHliYXJSaWdodDpQdCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iiw2MDM5NyksbGF5b3V0UGFuZWxMZWZ0OlB0KCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOlB0KCJsYXlvdXQtcGFuZWwtY2VudGVyIiw2MDM5OSksbGF5b3V0UGFuZWxKdXN0aWZ5OlB0KCJsYXlvdXQtcGFuZWwtanVzdGlmeSIsNjA0MDApLGxheW91dFBhbmVsUmlnaHQ6UHQoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOlB0KCJsYXlvdXQtcGFuZWwiLDYwNDAyKSxsYXlvdXRTaWRlYmFyTGVmdDpQdCgibGF5b3V0LXNpZGViYXItbGVmdCIsNjA0MDMpLGxheW91dFNpZGViYXJSaWdodDpQdCgibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6UHQoImxheW91dC1zdGF0dXNiYXIiLDYwNDA1KSxsYXlvdXRNZW51YmFyOlB0KCJsYXlvdXQtbWVudWJhciIsNjA0MDYpLGxheW91dENlbnRlcmVkOlB0KCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSxsYXlvdXRTaWRlYmFyUmlnaHRPZmY6UHQoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIsNjA0MTYpLGxheW91dFBhbmVsT2ZmOlB0KCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6UHQoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIiw2MDQxOCksdGFyZ2V0OlB0KCJ0YXJnZXQiLDYwNDA4KSxpbmRlbnQ6UHQoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOlB0KCJyZWNvcmQtc21hbGwiLDYwNDEwKSxlcnJvclNtYWxsOlB0KCJlcnJvci1zbWFsbCIsNjA0MTEpLGFycm93Q2lyY2xlRG93bjpQdCgiYXJyb3ctY2lyY2xlLWRvd24iLDYwNDEyKSxhcnJvd0NpcmNsZUxlZnQ6UHQoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpQdCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iiw2MDQxNCksYXJyb3dDaXJjbGVVcDpQdCgiYXJyb3ctY2lyY2xlLXVwIiw2MDQxNSksaGVhcnRGaWxsZWQ6UHQoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpQdCgibWFwIiw2MDQyMSksbWFwRmlsbGVkOlB0KCJtYXAtZmlsbGVkIiw2MDQyMiksY2lyY2xlU21hbGw6UHQoImNpcmNsZS1zbWFsbCIsNjA0MjMpLGJlbGxTbGFzaDpQdCgiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpQdCgiYmVsbC1zbGFzaC1kb3QiLDYwNDI1KSxjb21tZW50VW5yZXNvbHZlZDpQdCgiY29tbWVudC11bnJlc29sdmVkIiw2MDQyNiksZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlczpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOlB0KCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIiw2MDQyOCksc2VhcmNoRnV6enk6UHQoInNlYXJjaC1mdXp6eSIsNjA0MjkpLGNvbW1lbnREcmFmdDpQdCgiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6UHQoInNlbmQiLDYwNDMxKSxzcGFya2xlOlB0KCJzcGFya2xlIiw2MDQzMiksaW5zZXJ0OlB0KCJpbnNlcnQiLDYwNDMzKSxkaWFsb2dFcnJvcjpQdCgiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOlB0KCJkaWFsb2ctd2FybmluZyIsIndhcm5pbmciKSxkaWFsb2dJbmZvOlB0KCJkaWFsb2ctaW5mbyIsImluZm8iKSxkaWFsb2dDbG9zZTpQdCgiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOlB0KCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLCJjaGV2cm9uLWRvd24iKSx0cmVlRmlsdGVyT25UeXBlT246UHQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLCJsaXN0LWZpbHRlciIpLHRyZWVGaWx0ZXJPblR5cGVPZmY6UHQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6UHQoInRyZWUtZmlsdGVyLWNsZWFyIiwiY2xvc2UiKSx0cmVlSXRlbUxvYWRpbmc6UHQoInRyZWUtaXRlbS1sb2FkaW5nIiwibG9hZGluZyIpLG1lbnVTZWxlY3Rpb246UHQoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpQdCgibWVudS1zdWJtZW51IiwiY2hldnJvbi1yaWdodCIpLG1lbnVCYXJNb3JlOlB0KCJtZW51YmFyLW1vcmUiLCJtb3JlIiksc2Nyb2xsYmFyQnV0dG9uTGVmdDpQdCgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OlB0KCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IiwidHJpYW5nbGUtcmlnaHQiKSxzY3JvbGxiYXJCdXR0b25VcDpQdCgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsInRyaWFuZ2xlLXVwIiksc2Nyb2xsYmFyQnV0dG9uRG93bjpQdCgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOlB0KCJ0b29sYmFyLW1vcmUiLCJtb3JlIikscXVpY2tJbnB1dEJhY2s6UHQoInF1aWNrLWlucHV0LWJhY2siLCJhcnJvdy1sZWZ0Iil9O3ZhciBWdCxEdCxLdCxqdCxxdCxCdCxVdCwkdCxXdCxIdCx6dCxHdCxKdCxYdCxadCxZdCxRdCxlbix0bixubixybixvbixzbixhbixsbix1bixjbixobixkbixmbixtbixnbixwbix2bixibix5bixDbixfbixTbix3bixBbix4bixFbixMbixObixrbixSbixUbixPbixNbixJbj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtsKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7bChyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBsKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWwoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgUG4gZXh0ZW5kcyBke2dldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuIEluKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfSkpfV9jcmVhdGUoKXtyZXR1cm4gSW4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2ZhY3RvcnkudG9rZW5pemF0aW9uU3VwcG9ydDt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3MgRm57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMub2Zmc2V0PWUsdGhpcy50eXBlPXQsdGhpcy5sYW5ndWFnZT1uLHRoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLEZ0LnN5bWJvbE1ldGhvZCksdC5zZXQoMSxGdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixGdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoMyxGdC5zeW1ib2xGaWVsZCksdC5zZXQoNCxGdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxGdC5zeW1ib2xDbGFzcyksdC5zZXQoNixGdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsRnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LEZ0LnN5bWJvbE1vZHVsZSksdC5zZXQoOSxGdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsRnQuc3ltYm9sRXZlbnQpLHQuc2V0KDExLEZ0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgxMixGdC5zeW1ib2xVbml0KSx0LnNldCgxMyxGdC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsRnQuc3ltYm9sRW51bSksdC5zZXQoMTQsRnQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LEZ0LnN5bWJvbEVudW0pLHQuc2V0KDE2LEZ0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDE3LEZ0LnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LEZ0LnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LEZ0LnN5bWJvbFRleHQpLHQuc2V0KDE5LEZ0LnN5bWJvbENvbG9yKSx0LnNldCgyMCxGdC5zeW1ib2xGaWxlKSx0LnNldCgyMSxGdC5zeW1ib2xSZWZlcmVuY2UpLHQuc2V0KDIyLEZ0LnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxGdC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LEZ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQuc2V0KDI1LEZ0LmFjY291bnQpLHQuc2V0KDI2LEZ0Lmlzc3VlcyksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLG49RnQuc3ltYm9sUHJvcGVydHkpLG59O2NvbnN0IG49bmV3IE1hcDtuLnNldCgibWV0aG9kIiwwKSxuLnNldCgiZnVuY3Rpb24iLDEpLG4uc2V0KCJjb25zdHJ1Y3RvciIsMiksbi5zZXQoImZpZWxkIiwzKSxuLnNldCgidmFyaWFibGUiLDQpLG4uc2V0KCJjbGFzcyIsNSksbi5zZXQoInN0cnVjdCIsNiksbi5zZXQoImludGVyZmFjZSIsNyksbi5zZXQoIm1vZHVsZSIsOCksbi5zZXQoInByb3BlcnR5Iiw5KSxuLnNldCgiZXZlbnQiLDEwKSxuLnNldCgib3BlcmF0b3IiLDExKSxuLnNldCgidW5pdCIsMTIpLG4uc2V0KCJ2YWx1ZSIsMTMpLG4uc2V0KCJjb25zdGFudCIsMTQpLG4uc2V0KCJlbnVtIiwxNSksbi5zZXQoImVudW0tbWVtYmVyIiwxNiksbi5zZXQoImVudW1NZW1iZXIiLDE2KSxuLnNldCgia2V5d29yZCIsMTcpLG4uc2V0KCJzbmlwcGV0IiwyNyksbi5zZXQoInRleHQiLDE4KSxuLnNldCgiY29sb3IiLDE5KSxuLnNldCgiZmlsZSIsMjApLG4uc2V0KCJyZWZlcmVuY2UiLDIxKSxuLnNldCgiY3VzdG9tY29sb3IiLDIyKSxuLnNldCgiZm9sZGVyIiwyMyksbi5zZXQoInR5cGUtcGFyYW1ldGVyIiwyNCksbi5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSxuLnNldCgiYWNjb3VudCIsMjUpLG4uc2V0KCJpc3N1ZSIsMjYpLGUuZnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe2xldCByPW4uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yfHx0fHwocj05KSxyfX0oVnR8fChWdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KER0fHwoRHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KEt0fHwoS3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShqdHx8KGp0PXt9KSksZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsRnQuc3ltYm9sRmlsZSksdC5zZXQoMSxGdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsRnQuc3ltYm9sTmFtZXNwYWNlKSx0LnNldCgzLEZ0LnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsRnQuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsRnQuc3ltYm9sTWV0aG9kKSx0LnNldCg2LEZ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LEZ0LnN5bWJvbEZpZWxkKSx0LnNldCg4LEZ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCg5LEZ0LnN5bWJvbEVudW0pLHQuc2V0KDEwLEZ0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsRnQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDEyLEZ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxGdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsRnQuc3ltYm9sU3RyaW5nKSx0LnNldCgxNSxGdC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LEZ0LnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LEZ0LnN5bWJvbEFycmF5KSx0LnNldCgxOCxGdC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LEZ0LnN5bWJvbEtleSksdC5zZXQoMjAsRnQuc3ltYm9sTnVsbCksdC5zZXQoMjEsRnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsRnQuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxGdC5zeW1ib2xFdmVudCksdC5zZXQoMjQsRnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LEZ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBTeW1ib2xLaW5kICIrZSksbj1GdC5zeW1ib2xQcm9wZXJ0eSksbn19KHF0fHwocXQ9e30pKSxmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9fShCdHx8KEJ0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KFV0fHwoVXQ9e30pKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cz1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBVLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1oYW5kbGVDaGFuZ2UoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLnNldChlLHQpLHRoaXMuaGFuZGxlQ2hhbmdlKFtlXSksYygoKCk9Pnt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQoZSk9PT10JiYodGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZGVsZXRlKGUpLHRoaXMuaGFuZGxlQ2hhbmdlKFtlXSkpfSkpfWdldChlKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KGUpfHxudWxsfXJlZ2lzdGVyRmFjdG9yeShlLHQpe3ZhciBuO251bGw9PT0obj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpKXx8dm9pZCAwPT09bnx8bi5kaXNwb3NlKCk7Y29uc3Qgcj1uZXcgUG4odGhpcyxlLHQpO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KGUsciksYygoKCk9Pntjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7dCYmdD09PXImJih0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKGUpLHQuZGlzcG9zZSgpKX0pKX1nZXRPckNyZWF0ZShlKXtyZXR1cm4gSW4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgbj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiFufHxuLmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgbi5yZXNvbHZlKCksdGhpcy5nZXQoZSkpfSkpfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KCR0fHwoJHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0oV3R8fChXdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KEd0fHwoR3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0oWHR8fChYdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KGVufHwoZW49e30pKSxmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXV0b0Nsb3NpbmdCcmFja2V0cz01XT0iYXV0b0Nsb3NpbmdCcmFja2V0cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj02XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9N109ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT04XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTldPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9MTBdPSJhdXRvSW5kZW50IixlW2UuYXV0b21hdGljTGF5b3V0PTExXT0iYXV0b21hdGljTGF5b3V0IixlW2UuYXV0b1N1cnJvdW5kPTEyXT0iYXV0b1N1cnJvdW5kIixlW2UuYnJhY2tldFBhaXJDb2xvcml6YXRpb249MTNdPSJicmFja2V0UGFpckNvbG9yaXphdGlvbiIsZVtlLmd1aWRlcz0xNF09Imd1aWRlcyIsZVtlLmNvZGVMZW5zPTE1XT0iY29kZUxlbnMiLGVbZS5jb2RlTGVuc0ZvbnRGYW1pbHk9MTZdPSJjb2RlTGVuc0ZvbnRGYW1pbHkiLGVbZS5jb2RlTGVuc0ZvbnRTaXplPTE3XT0iY29kZUxlbnNGb250U2l6ZSIsZVtlLmNvbG9yRGVjb3JhdG9ycz0xOF09ImNvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0xpbWl0PTE5XT0iY29sb3JEZWNvcmF0b3JzTGltaXQiLGVbZS5jb2x1bW5TZWxlY3Rpb249MjBdPSJjb2x1bW5TZWxlY3Rpb24iLGVbZS5jb21tZW50cz0yMV09ImNvbW1lbnRzIixlW2UuY29udGV4dG1lbnU9MjJdPSJjb250ZXh0bWVudSIsZVtlLmNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nPTIzXT0iY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmciLGVbZS5jdXJzb3JCbGlua2luZz0yNF09ImN1cnNvckJsaW5raW5nIixlW2UuY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb249MjVdPSJjdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbiIsZVtlLmN1cnNvclN0eWxlPTI2XT0iY3Vyc29yU3R5bGUiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzPTI3XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lcyIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZT0yOF09ImN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZSIsZVtlLmN1cnNvcldpZHRoPTI5XT0iY3Vyc29yV2lkdGgiLGVbZS5kaXNhYmxlTGF5ZXJIaW50aW5nPTMwXT0iZGlzYWJsZUxheWVySGludGluZyIsZVtlLmRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zPTMxXT0iZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnMiLGVbZS5kb21SZWFkT25seT0zMl09ImRvbVJlYWRPbmx5IixlW2UuZHJhZ0FuZERyb3A9MzNdPSJkcmFnQW5kRHJvcCIsZVtlLmRyb3BJbnRvRWRpdG9yPTM0XT0iZHJvcEludG9FZGl0b3IiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zNV09ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZz0zNl09ImV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmciLGVbZS5leHRyYUVkaXRvckNsYXNzTmFtZT0zN109ImV4dHJhRWRpdG9yQ2xhc3NOYW1lIixlW2UuZmFzdFNjcm9sbFNlbnNpdGl2aXR5PTM4XT0iZmFzdFNjcm9sbFNlbnNpdGl2aXR5IixlW2UuZmluZD0zOV09ImZpbmQiLGVbZS5maXhlZE92ZXJmbG93V2lkZ2V0cz00MF09ImZpeGVkT3ZlcmZsb3dXaWRnZXRzIixlW2UuZm9sZGluZz00MV09ImZvbGRpbmciLGVbZS5mb2xkaW5nU3RyYXRlZ3k9NDJdPSJmb2xkaW5nU3RyYXRlZ3kiLGVbZS5mb2xkaW5nSGlnaGxpZ2h0PTQzXT0iZm9sZGluZ0hpZ2hsaWdodCIsZVtlLmZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0PTQ0XT0iZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQiLGVbZS5mb2xkaW5nTWF4aW11bVJlZ2lvbnM9NDVdPSJmb2xkaW5nTWF4aW11bVJlZ2lvbnMiLGVbZS51bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmU9NDZdPSJ1bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmUiLGVbZS5mb250RmFtaWx5PTQ3XT0iZm9udEZhbWlseSIsZVtlLmZvbnRJbmZvPTQ4XT0iZm9udEluZm8iLGVbZS5mb250TGlnYXR1cmVzPTQ5XT0iZm9udExpZ2F0dXJlcyIsZVtlLmZvbnRTaXplPTUwXT0iZm9udFNpemUiLGVbZS5mb250V2VpZ2h0PTUxXT0iZm9udFdlaWdodCIsZVtlLmZvbnRWYXJpYXRpb25zPTUyXT0iZm9udFZhcmlhdGlvbnMiLGVbZS5mb3JtYXRPblBhc3RlPTUzXT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT01NF09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTU1XT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTZdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTU3XT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTU4XT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTldPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTYwXT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NjFdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTYyXT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjNdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjRdPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjVdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjZdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02N109ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02OF09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02OV09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTcwXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzFdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTcyXT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzNdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03NF09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzVdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03Nl09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTc3XT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTc4XT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTc5XT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04MF09Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODFdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04Ml09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04M109InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04NF09InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTg1XT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODZdPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTg3XT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9ODhdPSJyZWFkT25seSIsZVtlLnJlbmFtZU9uVHlwZT04OV09InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTkwXT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9OTFdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTkyXT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTkzXT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9OTRdPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTk1XT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9OTZdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj05N109InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9OThdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9OTldPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwMF09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDFdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDJdPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTAzXT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwNF09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTA1XT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTA2XT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTA3XT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMDhdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMDldPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTBdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTExXT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTEyXT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExM109InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExNF09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTE1XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTE2XT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMTddPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTE4XT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTE5XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyMF09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjFdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjJdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyM109InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyNF09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEyNV09IndvcmRCcmVhayIsZVtlLndvcmRTZXBhcmF0b3JzPTEyNl09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTI3XT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEyOF09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMjldPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzMF09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTMxXT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzJdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzM109IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMzRdPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTM1XT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTEzNl09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTM3XT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xMzhdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTEzOV09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQwXT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDFdPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0Ml09ImRlZmF1bHRDb2xvckRlY29yYXRvcnMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShubnx8KG5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5SaWdodD0yXT0iUmlnaHQifShvbnx8KG9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifShhbnx8KGFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSh1bnx8KHVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLkYyMD03OF09IkYyMCIsZVtlLkYyMT03OV09IkYyMSIsZVtlLkYyMj04MF09IkYyMiIsZVtlLkYyMz04MV09IkYyMyIsZVtlLkYyND04Ml09IkYyNCIsZVtlLk51bUxvY2s9ODNdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz04NF09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODVdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04Nl09IkVxdWFsIixlW2UuQ29tbWE9ODddPSJDb21tYSIsZVtlLk1pbnVzPTg4XT0iTWludXMiLGVbZS5QZXJpb2Q9ODldPSJQZXJpb2QiLGVbZS5TbGFzaD05MF09IlNsYXNoIixlW2UuQmFja3F1b3RlPTkxXT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9OTJdPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD05M109IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD05NF09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTk1XT0iUXVvdGUiLGVbZS5PRU1fOD05Nl09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05N109IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTk4XT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTldPSJOdW1wYWQxIixlW2UuTnVtcGFkMj0xMDBdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz0xMDFdPSJOdW1wYWQzIixlW2UuTnVtcGFkND0xMDJdPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT0xMDNdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj0xMDRdPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDVdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDZdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDddPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTA4XT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA5XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMTBdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTExXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTExMl09Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTEzXT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTExNF09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTE1XT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTE2XT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTddPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExOF09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE5XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMjBdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTIxXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMjJdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTEyM109IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTI0XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTI1XT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyNl09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyN109Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTI4XT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyOV09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEzMF09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMzFdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMzJdPSJNQVhfVkFMVUUifShjbnx8KGNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KGRufHwoZG49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KG1ufHwobW49e30pKSxmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0oZ258fChnbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0ocG58fChwbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KGJufHwoYm49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KENufHwoQ249e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KF9ufHwoX249e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KFNufHwoU249e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KHdufHwod249e30pKSxmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifShBbnx8KEFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifSh4bnx8KHhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KEVufHwoRW49e30pKSxmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0oTG58fChMbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifShObnx8KE5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0oa258fChrbj17fSkpO2NsYXNzIFZue3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fWZ1bmN0aW9uIERuKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoMD09PXIpcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCwwLHIsaSkmJmZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYocitpPT09bilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyK2kpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIraS0xKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxuLHIsaSl9Vm4uQ3RybENtZD0yMDQ4LFZuLlNoaWZ0PTEwMjQsVm4uQWx0PTUxMixWbi5XaW5DdHJsPTI1NixmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLlJpZ2h0PTJdPSJSaWdodCJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oTW58fChNbj17fSkpO2NsYXNzIEtue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT10KXJldHVybiBudWxsO2lmKG49dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSwhbilyZXR1cm4gbnVsbDtjb25zdCByPW4uaW5kZXgsaT1uWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmaT09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYoMD09PWkpe1koZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxEbih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQscixpKSlyZXR1cm4gbn13aGlsZShuKTtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam4oZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBxbihlKXtlKCl8fChlKCksdChuZXcgcygiQXNzZXJ0aW9uIEZhaWxlZCIpKSl9ZnVuY3Rpb24gQm4oZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7aWYoIXQoZVtuXSxlW24rMV0pKXJldHVybiExO24rK31yZXR1cm4hMH1jbGFzcyBVbntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgJG4odCkscz1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgYTt2YXIgbCx1O2E9ImFsbE5vbkJhc2ljQXNjaWkiPT09cz9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKCIiKyhsPUFycmF5LmZyb20ocyksYFske3U9bC5tYXAoKGU9PlN0cmluZy5mcm9tQ29kZVBvaW50KGUpKSkuam9pbigiIiksdS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfV1gKSwiZyIpO2NvbnN0IGM9bmV3IEtuKG51bGwsYSksaD1bXTtsZXQgZCxmPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDtjLnJlc2V0KDApO2Rve2lmKGQ9Yy5uZXh0KG4pLGQpe2xldCBlPWQuaW5kZXgsaT1kLmluZGV4K2RbMF0ubGVuZ3RoO2lmKGU+MCl7WihuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLX1pZihpKzE8cil7WihuLmNoYXJDb2RlQXQoaS0xKSkmJmkrK31jb25zdCBzPW4uc3Vic3RyaW5nKGUsaSk7bGV0IGE9ZHQoZSsxLGN0LG4sMCk7YSYmYS5lbmRDb2x1bW48PWUrMSYmKGE9bnVsbCk7Y29uc3QgbD1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkocyxhP2Eud29yZDpudWxsKTtpZigwIT09bCl7Mz09PWw/bSsrOjI9PT1sP2crKzoxPT09bD9wKys6am4oKTtjb25zdCBuPTFlMztpZihoLmxlbmd0aD49bil7Zj0hMDticmVhayBlfWgucHVzaChuZXcgcnQodCxlKzEsdCxpKzEpKX19fXdoaWxlKGQpfXJldHVybntyYW5nZXM6aCxoYXNNb3JlOmYsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6bSxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDpnLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDpwfX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24oZSx0KXtjb25zdCBuPW5ldyAkbih0KTtzd2l0Y2gobi5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCByPWUuY29kZVBvaW50QXQoMCksaT1uLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0UHJpbWFyeUNvbmZ1c2FibGUociksbz1lZS5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hZWUuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgJG57Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1lZS5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0ZS5jb2RlUG9pbnRzKVduKFN0cmluZy5mcm9tQ29kZVBvaW50KHQpKXx8ZS5hZGQodCk7aWYodGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCkpZS5hZGQodCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5hbGxvd2VkQ29kZVBvaW50cyllLmRlbGV0ZSh0KTtyZXR1cm4gZX1zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsdCl7Y29uc3Qgbj1lLmNvZGVQb2ludEF0KDApO2lmKHRoaXMuYWxsb3dlZENvZGVQb2ludHMuaGFzKG4pKXJldHVybiAwO2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiAxO2xldCByPSExLGk9ITE7aWYodClmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWUuY29kZVBvaW50QXQoMCksbj0obz1lLFEudGVzdChvKSk7cj1yfHxuLG58fHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyh0KXx8dGUuaXNJbnZpc2libGVDaGFyYWN0ZXIodCl8fChpPSEwKX12YXIgbztyZXR1cm4hciYmaT8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhV24oZSkmJnRlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKG4pPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhuKT8zOjB9fWZ1bmN0aW9uIFduKGUpe3JldHVybiIgIj09PWV8fCJcbiI9PT1lfHwiXHQiPT09ZX1jbGFzcyBIbntzdGF0aWMgZnJvbVJhbmdlKGUpe3JldHVybiBuZXcgSG4oZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyKX1zdGF0aWMgam9pbk1hbnkoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO2xldCB0PWVbMF07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspdD10aGlzLmpvaW4odCxlW25dKTtyZXR1cm4gdH1zdGF0aWMgam9pbihlLHQpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MCxvPW51bGw7Zm9yKDtyPGUubGVuZ3RofHxpPHQubGVuZ3RoOyl7bGV0IHM9bnVsbDtpZihyPGUubGVuZ3RoJiZpPHQubGVuZ3RoKXtjb25zdCBuPWVbcl0sbz10W2ldO24uc3RhcnRMaW5lTnVtYmVyPG8uc3RhcnRMaW5lTnVtYmVyPyhzPW4scisrKToocz1vLGkrKyl9ZWxzZSByPGUubGVuZ3RoPyhzPWVbcl0scisrKToocz10W2ldLGkrKyk7bnVsbD09PW8/bz1zOm8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49cy5zdGFydExpbmVOdW1iZXI/bz1uZXcgSG4oby5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgoby5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2gobyksbz1zKX1yZXR1cm4gbnVsbCE9PW8mJm4ucHVzaChvKSxufXN0YXRpYyBvZkxlbmd0aChlLHQpe3JldHVybiBuZXcgSG4oZSxlK3QpfWNvbnN0cnVjdG9yKGUsdCl7aWYoZT50KXRocm93IG5ldyBzKGBzdGFydExpbmVOdW1iZXIgJHtlfSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke3R9YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9dH1jb250YWlucyhlKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PWUmJmU8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKGUpe3JldHVybiBuZXcgSG4odGhpcy5zdGFydExpbmVOdW1iZXIrZSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrZSl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbihlKXtyZXR1cm4gbmV3IEhuKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdChlKXtjb25zdCB0PU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRMaW5lTnVtYmVyKSxuPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKHQ8PW4pcmV0dXJuIG5ldyBIbih0LG4pfWludGVyc2VjdHNTdHJpY3QoZSl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPGUuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmZS5zdGFydExpbmVOdW1iZXI8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfW92ZXJsYXBPclRvdWNoKGUpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9ZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZlLnN0YXJ0TGluZU51bWJlcjw9dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09ZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvSW5jbHVzaXZlUmFuZ2UoKXtyZXR1cm4gdGhpcy5pc0VtcHR5P251bGw6bmV3IHJ0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpfXRvRXhjbHVzaXZlUmFuZ2UoKXtyZXR1cm4gbmV3IHJ0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpfX1jbGFzcyB6bntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY2hhbmdlcz1lLHRoaXMuaGl0VGltZW91dD10fX1jbGFzcyBHbntzdGF0aWMgaW52ZXJzZShlLHQsbil7Y29uc3Qgcj1bXTtsZXQgaT0xLG89MTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW5ldyBHbihuZXcgSG4oaSx0Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSxuZXcgSG4obyx0Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSx2b2lkIDApO2UubW9kaWZpZWRSYW5nZS5pc0VtcHR5fHxyLnB1c2goZSksaT10Lm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxvPXQubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IHM9bmV3IEduKG5ldyBIbihpLHQrMSksbmV3IEhuKG8sbisxKSx2b2lkIDApO3JldHVybiBzLm1vZGlmaWVkUmFuZ2UuaXNFbXB0eXx8ci5wdXNoKHMpLHJ9Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMub3JpZ2luYWxSYW5nZT1lLHRoaXMubW9kaWZpZWRSYW5nZT10LHRoaXMuaW5uZXJDaGFuZ2VzPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWdldCBjaGFuZ2VkTGluZUNvdW50KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3JpZ2luYWxSYW5nZS5sZW5ndGgsdGhpcy5tb2RpZmllZFJhbmdlLmxlbmd0aCl9fWNsYXNzIEpue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5vcmlnaW5hbFJhbmdlPWUsdGhpcy5tb2RpZmllZFJhbmdlPXR9dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfX1mdW5jdGlvbiBYbihlLHQsbixyKXtyZXR1cm4gbmV3IHllKGUsdCxuKS5Db21wdXRlRGlmZihyKX1sZXQgWm49Y2xhc3N7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1bXSxuPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0W3JdPW5yKGVbcl0sMSksbltyXT1ycihlW3JdLDEpO3RoaXMubGluZXM9ZSx0aGlzLl9zdGFydENvbHVtbnM9dCx0aGlzLl9lbmRDb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLG49dGhpcy5saW5lcy5sZW5ndGg7dDxuO3QrKyllW3RdPXRoaXMubGluZXNbdF0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1t0XS0xLHRoaXMuX2VuZENvbHVtbnNbdF0tMSk7cmV0dXJuIGV9Z2V0U3RyaWN0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5saW5lc1tlXX1nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Y3JlYXRlQ2hhclNlcXVlbmNlKGUsdCxuKXtjb25zdCByPVtdLGk9W10sbz1bXTtsZXQgcz0wO2ZvcihsZXQgYT10O2E8PW47YSsrKXtjb25zdCB0PXRoaXMubGluZXNbYV0sbD1lP3RoaXMuX3N0YXJ0Q29sdW1uc1thXToxLHU9ZT90aGlzLl9lbmRDb2x1bW5zW2FdOnQubGVuZ3RoKzE7Zm9yKGxldCBlPWw7ZTx1O2UrKylyW3NdPXQuY2hhckNvZGVBdChlLTEpLGlbc109YSsxLG9bc109ZSxzKys7IWUmJmE8biYmKHJbc109MTAsaVtzXT1hKzEsb1tzXT10Lmxlbmd0aCsxLHMrKyl9cmV0dXJuIG5ldyBZbihyLGksbyl9fTtjbGFzcyBZbntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgoKGUsdCk9PigxMD09PWU/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1t0XX0sJHt0aGlzLl9jb2x1bW5zW3RdfSlgKSkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KGUsdCl7aWYoZTwwfHxlPj10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0TGluZU51bWJlcihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT90aGlzLl9saW5lTnVtYmVyc1tlXSsxOnRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4oZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW2VdKX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRDb2x1bW4oZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT8xOnRoaXMuX2NvbHVtbnNbZV0rMSl9fWNsYXNzIFFue2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLHMsYSl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1zLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49YX1zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2NvbnN0IHI9dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxzPXQuZ2V0RW5kQ29sdW1uKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLGE9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSx1PW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSxjPW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgUW4ocixpLG8scyxhLGwsdSxjKX19Y2xhc3MgZXJ7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLHMpe2xldCBhLGwsdSxjLGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KGE9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGw9MCk6KGE9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KHU9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLGM9MCk6KHU9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSxjPXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxhPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmYS5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgZT1YbihvLGEsaSwhMCkuY2hhbmdlcztzJiYoZT1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3JdLG89aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkscz1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLHMpPDM/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9KGUpKSxoPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyloLnB1c2goUW4uY3JlYXRlRnJvbURpZmZDaGFuZ2UoZVt0XSxvLGEpKX19cmV0dXJuIG5ldyBlcihhLGwsdSxjLGgpfX1jbGFzcyB0cntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9bi5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPW4uc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPW4uc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1uLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IFpuKGUpLHRoaXMubW9kaWZpZWQ9bmV3IFpuKHQpLHRoaXMuY29udGludWVMaW5lRGlmZj1pcihuLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPWlyKDA9PT1uLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKG4ubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYoMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGgpcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgZT1Ybih0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKGVyLmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgcz1lKzE8bj90W2UrMV06bnVsbCxhPXM/cy5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsbD1zP3MubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxhJiZvPGw7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPW5yKGUsMSkscz1ucih0LDEpO2Zvcig7bj4xJiZzPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChzLTIpKWJyZWFrO24tLSxzLS19KG4+MXx8cz4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEscyl9e2xldCBuPXJyKGUsMSkscz1ycih0LDEpO2NvbnN0IGE9ZS5sZW5ndGgrMSxsPXQubGVuZ3RoKzE7Zm9yKDtuPGEmJnM8bDspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KHMtMSkpYnJlYWs7bisrLHMrK30objxhfHxzPGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4sYSxvKzEscyxsKX19aSsrLG8rK31zJiYoci5wdXNoKGVyLmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Uscyx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPXMub3JpZ2luYWxMZW5ndGgsbys9cy5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8scyl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8scykpcmV0dXJuO2xldCBhO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYoYT1bbmV3IFFuKHQsbix0LHIsaSxvLGkscyldKSxlLnB1c2gobmV3IGVyKHQsdCxpLGksYSkpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxzKXtjb25zdCBhPWUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiExO2NvbnN0IGw9ZVthLTFdO3JldHVybiAwIT09bC5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1sLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09dCYmbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT1pPyh0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBRbih0LG4sdCxyLGksbyxpLHMpKSwhMCk6bC5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PXQmJmwubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pJiYobC5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCxsLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZsLmNoYXJDaGFuZ2VzJiZsLmNoYXJDaGFuZ2VzLnB1c2gobmV3IFFuKHQsbix0LHIsaSxvLGkscykpLCEwKSl9fWZ1bmN0aW9uIG5yKGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIHR9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMX1mdW5jdGlvbiBycihlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCB0PWUuY2hhckNvZGVBdChuKTtpZigzMiE9PXQmJjkhPT10KXJldHVybiBufXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzJ9ZnVuY3Rpb24gaXIoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9Y2xhc3Mgb3J7c3RhdGljIGFkZFJhbmdlKGUsdCl7bGV0IG49MDtmb3IoO248dC5sZW5ndGgmJnRbbl0uZW5kRXhjbHVzaXZlPGUuc3RhcnQ7KW4rKztsZXQgcj1uO2Zvcig7cjx0Lmxlbmd0aCYmdFtyXS5zdGFydDw9ZS5lbmRFeGNsdXNpdmU7KXIrKztpZihuPT09cil0LnNwbGljZShuLDAsZSk7ZWxzZXtjb25zdCBpPU1hdGgubWluKGUuc3RhcnQsdFtuXS5zdGFydCksbz1NYXRoLm1heChlLmVuZEV4Y2x1c2l2ZSx0W3ItMV0uZW5kRXhjbHVzaXZlKTt0LnNwbGljZShuLHItbixuZXcgb3IoaSxvKSl9fXN0YXRpYyB0cnlDcmVhdGUoZSx0KXtpZighKGU+dCkpcmV0dXJuIG5ldyBvcihlLHQpfWNvbnN0cnVjdG9yKGUsdCl7aWYodGhpcy5zdGFydD1lLHRoaXMuZW5kRXhjbHVzaXZlPXQsZT50KXRocm93IG5ldyBzKGBJbnZhbGlkIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnN0YXJ0PT09dGhpcy5lbmRFeGNsdXNpdmV9ZGVsdGEoZSl7cmV0dXJuIG5ldyBvcih0aGlzLnN0YXJ0K2UsdGhpcy5lbmRFeGNsdXNpdmUrZSl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZS10aGlzLnN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnR9LCAke3RoaXMuZW5kRXhjbHVzaXZlfSlgfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5zdGFydD09PWUuc3RhcnQmJnRoaXMuZW5kRXhjbHVzaXZlPT09ZS5lbmRFeGNsdXNpdmV9Y29udGFpbnNSYW5nZShlKXtyZXR1cm4gdGhpcy5zdGFydDw9ZS5zdGFydCYmZS5lbmRFeGNsdXNpdmU8PXRoaXMuZW5kRXhjbHVzaXZlfWpvaW4oZSl7cmV0dXJuIG5ldyBvcihNYXRoLm1pbih0aGlzLnN0YXJ0LGUuc3RhcnQpLE1hdGgubWF4KHRoaXMuZW5kRXhjbHVzaXZlLGUuZW5kRXhjbHVzaXZlKSl9aW50ZXJzZWN0KGUpe2NvbnN0IHQ9TWF0aC5tYXgodGhpcy5zdGFydCxlLnN0YXJ0KSxuPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLGUuZW5kRXhjbHVzaXZlKTtpZih0PD1uKXJldHVybiBuZXcgb3IodCxuKX19Y2xhc3Mgc3J7c3RhdGljIHRyaXZpYWwoZSx0KXtyZXR1cm4gbmV3IHNyKFtuZXcgYXIobmV3IG9yKDAsZS5sZW5ndGgpLG5ldyBvcigwLHQubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KGUsdCl7cmV0dXJuIG5ldyBzcihbbmV3IGFyKG5ldyBvcigwLGUubGVuZ3RoKSxuZXcgb3IoMCx0Lmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRpZmZzPWUsdGhpcy5oaXRUaW1lb3V0PXR9fWNsYXNzIGFye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zZXExUmFuZ2U9ZSx0aGlzLnNlcTJSYW5nZT10fXJldmVyc2UoKXtyZXR1cm4gbmV3IGFyKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4oZSl7cmV0dXJuIG5ldyBhcih0aGlzLnNlcTFSYW5nZS5qb2luKGUuc2VxMVJhbmdlKSx0aGlzLnNlcTJSYW5nZS5qb2luKGUuc2VxMlJhbmdlKSl9fWNsYXNzIGxye2lzVmFsaWQoKXtyZXR1cm4hMH19bHIuaW5zdGFuY2U9bmV3IGxyO2NsYXNzIHVye2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMudGltZW91dD1lLHRoaXMuc3RhcnRUaW1lPURhdGUubm93KCksdGhpcy52YWxpZD0hMCxlPD0wKXRocm93IG5ldyBzKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7cmV0dXJuIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQmJih0aGlzLnZhbGlkPSExKSx0aGlzLnZhbGlkfX1jbGFzcyBjcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMuYXJyYXk9W10sdGhpcy5hcnJheT1uZXcgQXJyYXkoZSp0KX1nZXQoZSx0KXtyZXR1cm4gdGhpcy5hcnJheVtlK3QqdGhpcy53aWR0aF19c2V0KGUsdCxuKXt0aGlzLmFycmF5W2UrdCp0aGlzLndpZHRoXT1ufX1jbGFzcyBocntjb21wdXRlKGUsdCxuPWxyLmluc3RhbmNlLHIpe2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiBzci50cml2aWFsKGUsdCk7Y29uc3QgaT1uZXcgY3IoZS5sZW5ndGgsdC5sZW5ndGgpLG89bmV3IGNyKGUubGVuZ3RoLHQubGVuZ3RoKSxzPW5ldyBjcihlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspZm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKyspe2lmKCFuLmlzVmFsaWQoKSlyZXR1cm4gc3IudHJpdmlhbFRpbWVkT3V0KGUsdCk7Y29uc3QgdT0wPT09YT8wOmkuZ2V0KGEtMSxsKSxjPTA9PT1sPzA6aS5nZXQoYSxsLTEpO2xldCBoO2UuZ2V0RWxlbWVudChhKT09PXQuZ2V0RWxlbWVudChsKT8oaD0wPT09YXx8MD09PWw/MDppLmdldChhLTEsbC0xKSxhPjAmJmw+MCYmMz09PW8uZ2V0KGEtMSxsLTEpJiYoaCs9cy5nZXQoYS0xLGwtMSkpLGgrPXI/cihhLGwpOjEpOmg9LTE7Y29uc3QgZD1NYXRoLm1heCh1LGMsaCk7aWYoZD09PWgpe2NvbnN0IGU9YT4wJiZsPjA/cy5nZXQoYS0xLGwtMSk6MDtzLnNldChhLGwsZSsxKSxvLnNldChhLGwsMyl9ZWxzZSBkPT09dT8ocy5zZXQoYSxsLDApLG8uc2V0KGEsbCwxKSk6ZD09PWMmJihzLnNldChhLGwsMCksby5zZXQoYSxsLDIpKTtpLnNldChhLGwsZCl9Y29uc3QgYT1bXTtsZXQgbD1lLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGMoZSx0KXtlKzE9PT1sJiZ0KzE9PT11fHxhLnB1c2gobmV3IGFyKG5ldyBvcihlKzEsbCksbmV3IG9yKHQrMSx1KSkpLGw9ZSx1PXR9bGV0IGg9ZS5sZW5ndGgtMSxkPXQubGVuZ3RoLTE7Zm9yKDtoPj0wJiZkPj0wOykzPT09by5nZXQoaCxkKT8oYyhoLGQpLGgtLSxkLS0pOjE9PT1vLmdldChoLGQpP2gtLTpkLS07cmV0dXJuIGMoLTEsLTEpLGEucmV2ZXJzZSgpLG5ldyBzcihhLCExKX19ZnVuY3Rpb24gZHIoZSx0LG4pe2xldCByPW47cmV0dXJuIHI9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9W107bi5sZW5ndGg+MCYmci5wdXNoKG5bMF0pO2ZvcihsZXQgZT0xO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCBpPXJbci5sZW5ndGgtMV0sbz1uW2VdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHkpe2xldCBlPSEwO2NvbnN0IG49by5zZXExUmFuZ2Uuc3RhcnQtaS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8PW47cisrKWlmKHQuZ2V0RWxlbWVudChvLnNlcTJSYW5nZS5zdGFydC1yKSE9PXQuZ2V0RWxlbWVudChvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtcikpe2U9ITE7YnJlYWt9aWYoZSl7cltyLmxlbmd0aC0xXT1uZXcgYXIoaS5zZXExUmFuZ2UsbmV3IG9yKGkuc2VxMlJhbmdlLnN0YXJ0LG8uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1uKSk7Y29udGludWV9fXIucHVzaChvKX1yZXR1cm4gcn0oMCx0LHIpLHI9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2NvbnN0IGk9bltyXTtpZihpLnNlcTFSYW5nZS5pc0VtcHR5KXtjb25zdCBvPXI+MD9uW3ItMV0uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTotMSxzPXIrMTxuLmxlbmd0aD9uW3IrMV0uc2VxMlJhbmdlLnN0YXJ0OnQubGVuZ3RoO25bcl09ZnIoaSxlLHQscyxvKX1lbHNlIGlmKGkuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IG89cj4wP25bci0xXS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOi0xLHM9cisxPG4ubGVuZ3RoP25bcisxXS5zZXExUmFuZ2Uuc3RhcnQ6ZS5sZW5ndGg7bltyXT1mcihpLnJldmVyc2UoKSx0LGUscyxvKS5yZXZlcnNlKCl9fXJldHVybiBufShlLHQscikscn1mdW5jdGlvbiBmcihlLHQsbixyLGkpe2xldCBvPTE7Zm9yKDtlLnNlcTJSYW5nZS5zdGFydC1vPmkmJm4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5zdGFydC1vKT09PW4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtbykmJm88MjA7KW8rKztvLS07bGV0IHM9MDtmb3IoO2Uuc2VxMlJhbmdlLnN0YXJ0K3M8ciYmbi5nZXRFbGVtZW50KGUuc2VxMlJhbmdlLnN0YXJ0K3MpPT09bi5nZXRFbGVtZW50KGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStzKSYmczwyMDspcysrO2lmKDA9PT1vJiYwPT09cylyZXR1cm4gZTtsZXQgYT0wLGw9LTE7Zm9yKGxldCByPS1vO3I8PXM7cisrKXtjb25zdCBpPWUuc2VxMlJhbmdlLnN0YXJ0K3Isbz1lLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrcixzPWUuc2VxMVJhbmdlLnN0YXJ0K3IsdT10LmdldEJvdW5kYXJ5U2NvcmUocykrbi5nZXRCb3VuZGFyeVNjb3JlKGkpK24uZ2V0Qm91bmRhcnlTY29yZShvKTt1PmwmJihsPXUsYT1yKX1yZXR1cm4gMCE9PWE/bmV3IGFyKGUuc2VxMVJhbmdlLmRlbHRhKGEpLGUuc2VxMlJhbmdlLmRlbHRhKGEpKTplfWNsYXNzIG1ye2NvbXB1dGUoZSx0LG49bHIuaW5zdGFuY2Upe2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiBzci50cml2aWFsKGUsdCk7ZnVuY3Rpb24gcihuLHIpe2Zvcig7bjxlLmxlbmd0aCYmcjx0Lmxlbmd0aCYmZS5nZXRFbGVtZW50KG4pPT09dC5nZXRFbGVtZW50KHIpOyluKysscisrO3JldHVybiBufWxldCBpPTA7Y29uc3Qgbz1uZXcgcHI7by5zZXQoMCxyKDAsMCkpO2NvbnN0IHM9bmV3IHZyO3Muc2V0KDAsMD09PW8uZ2V0KDApP251bGw6bmV3IGdyKG51bGwsMCwwLG8uZ2V0KDApKSk7bGV0IGE9MDtlOmZvcig7Oylmb3IoaSsrLGE9LWk7YTw9aTthKz0yKXtpZighbi5pc1ZhbGlkKCkpcmV0dXJuIHNyLnRyaXZpYWxUaW1lZE91dChlLHQpO2NvbnN0IGw9YT09PWk/LTE6by5nZXQoYSsxKSx1PWE9PT0taT8tMTpvLmdldChhLTEpKzEsYz1NYXRoLm1pbihNYXRoLm1heChsLHUpLGUubGVuZ3RoKSxoPWMtYSxkPXIoYyxoKTtvLnNldChhLGQpO2NvbnN0IGY9Yz09PWw/cy5nZXQoYSsxKTpzLmdldChhLTEpO2lmKHMuc2V0KGEsZCE9PWM/bmV3IGdyKGYsYyxoLGQtYyk6Ziksby5nZXQoYSk9PT1lLmxlbmd0aCYmby5nZXQoYSktYT09PXQubGVuZ3RoKWJyZWFrIGV9bGV0IGw9cy5nZXQoYSk7Y29uc3QgdT1bXTtsZXQgYz1lLmxlbmd0aCxoPXQubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgZT1sP2wueCtsLmxlbmd0aDowLHQ9bD9sLnkrbC5sZW5ndGg6MDtpZihlPT09YyYmdD09PWh8fHUucHVzaChuZXcgYXIobmV3IG9yKGUsYyksbmV3IG9yKHQsaCkpKSwhbClicmVhaztjPWwueCxoPWwueSxsPWwucHJldn1yZXR1cm4gdS5yZXZlcnNlKCksbmV3IHNyKHUsITEpfX1jbGFzcyBncntjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnByZXY9ZSx0aGlzLng9dCx0aGlzLnk9bix0aGlzLmxlbmd0aD1yfX1jbGFzcyBwcntjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApLHRoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApfWdldChlKXtyZXR1cm4gZTwwPyhlPS1lLTEsdGhpcy5uZWdhdGl2ZUFycltlXSk6dGhpcy5wb3NpdGl2ZUFycltlXX1zZXQoZSx0KXtpZihlPDApe2lmKChlPS1lLTEpPj10aGlzLm5lZ2F0aXZlQXJyLmxlbmd0aCl7Y29uc3QgZT10aGlzLm5lZ2F0aXZlQXJyO3RoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMiplLmxlbmd0aCksdGhpcy5uZWdhdGl2ZUFyci5zZXQoZSl9dGhpcy5uZWdhdGl2ZUFycltlXT10fWVsc2V7aWYoZT49dGhpcy5wb3NpdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGU9dGhpcy5wb3NpdGl2ZUFycjt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDIqZS5sZW5ndGgpLHRoaXMucG9zaXRpdmVBcnIuc2V0KGUpfXRoaXMucG9zaXRpdmVBcnJbZV09dH19fWNsYXNzIHZye2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1bXSx0aGlzLm5lZ2F0aXZlQXJyPVtdfWdldChlKXtyZXR1cm4gZTwwPyhlPS1lLTEsdGhpcy5uZWdhdGl2ZUFycltlXSk6dGhpcy5wb3NpdGl2ZUFycltlXX1zZXQoZSx0KXtlPDA/KGU9LWUtMSx0aGlzLm5lZ2F0aXZlQXJyW2VdPXQpOnRoaXMucG9zaXRpdmVBcnJbZV09dH19Y2xhc3MgYnJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRyaW1tZWRIYXNoPWUsdGhpcy5saW5lcz10fWdldEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2hbZV19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKGUpe3JldHVybiAxZTMtKCgwPT09ZT8wOnlyKHRoaXMubGluZXNbZS0xXSkpKyhlPT09dGhpcy5saW5lcy5sZW5ndGg/MDp5cih0aGlzLmxpbmVzW2VdKSkpfX1mdW5jdGlvbiB5cihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKDMyPT09ZS5jaGFyQ29kZUF0KHQpfHw5PT09ZS5jaGFyQ29kZUF0KHQpKTspdCsrO3JldHVybiB0fWNsYXNzIENye2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmxpbmVzPWUsdGhpcy5jb25zaWRlcldoaXRlc3BhY2VDaGFuZ2VzPW4sdGhpcy5lbGVtZW50cz1bXSx0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZU1pbnVzT25lPVtdLHRoaXMub2Zmc2V0QnlMaW5lPVtdO2xldCByPSExO3Quc3RhcnQ+MCYmdC5lbmRFeGNsdXNpdmU+PWUubGVuZ3RoJiYodD1uZXcgb3IodC5zdGFydC0xLHQuZW5kRXhjbHVzaXZlKSxyPSEwKSx0aGlzLmxpbmVSYW5nZT10O2ZvcihsZXQgdD10aGlzLmxpbmVSYW5nZS5zdGFydDt0PHRoaXMubGluZVJhbmdlLmVuZEV4Y2x1c2l2ZTt0Kyspe2xldCBpPWVbdF0sbz0wO2lmKHIpbz1pLmxlbmd0aCxpPSIiLHI9ITE7ZWxzZSBpZighbil7Y29uc3QgZT1pLnRyaW1TdGFydCgpO289aS5sZW5ndGgtZS5sZW5ndGgsaT1lLnRyaW1FbmQoKX10aGlzLm9mZnNldEJ5TGluZS5wdXNoKG8pO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXRoaXMuZWxlbWVudHMucHVzaChpLmNoYXJDb2RlQXQoZSkpO3Q8ZS5sZW5ndGgtMSYmKHRoaXMuZWxlbWVudHMucHVzaCgiXG4iLmNoYXJDb2RlQXQoMCkpLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lTWludXNPbmVbdC10aGlzLmxpbmVSYW5nZS5zdGFydF09dGhpcy5lbGVtZW50cy5sZW5ndGgpfXRoaXMub2Zmc2V0QnlMaW5lLnB1c2goMCl9dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVyblsuLi50aGlzLmVsZW1lbnRzXS5tYXAoKGU9PlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKS5qb2luKCIiKX1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLmVsZW1lbnRzW2VdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZShlKXtjb25zdCB0PUFyKGU+MD90aGlzLmVsZW1lbnRzW2UtMV06LTEpLG49QXIoZTx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW2VdOi0xKTtpZig2PT09dCYmNz09PW4pcmV0dXJuIDA7bGV0IHI9MDtyZXR1cm4gdCE9PW4mJihyKz0xMCwxPT09biYmKHIrPTEpKSxyKz13cih0KSxyKz13cihuKSxyfXRyYW5zbGF0ZU9mZnNldChlKXtpZih0aGlzLmxpbmVSYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgbnQodGhpcy5saW5lUmFuZ2Uuc3RhcnQrMSwxKTtsZXQgdD0wLG49dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZS5sZW5ndGg7Zm9yKDt0PG47KXtjb25zdCByPU1hdGguZmxvb3IoKHQrbikvMik7dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZVtyXT5lP249cjp0PXIrMX1jb25zdCByPTA9PT10PzA6dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZVt0LTFdO3JldHVybiBuZXcgbnQodGhpcy5saW5lUmFuZ2Uuc3RhcnQrdCsxLGUtcisxK3RoaXMub2Zmc2V0QnlMaW5lW3RdKX10cmFuc2xhdGVSYW5nZShlKXtyZXR1cm4gcnQuZnJvbVBvc2l0aW9ucyh0aGlzLnRyYW5zbGF0ZU9mZnNldChlLnN0YXJ0KSx0aGlzLnRyYW5zbGF0ZU9mZnNldChlLmVuZEV4Y2x1c2l2ZSkpfWZpbmRXb3JkQ29udGFpbmluZyhlKXtpZihlPDB8fGU+PXRoaXMuZWxlbWVudHMubGVuZ3RoKXJldHVybjtpZighX3IodGhpcy5lbGVtZW50c1tlXSkpcmV0dXJuO2xldCB0PWU7Zm9yKDt0PjAmJl9yKHRoaXMuZWxlbWVudHNbdC0xXSk7KXQtLTtsZXQgbj1lO2Zvcig7bjx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmX3IodGhpcy5lbGVtZW50c1tuXSk7KW4rKztyZXR1cm4gbmV3IG9yKHQsbil9fWZ1bmN0aW9uIF9yKGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB8fGU+PTQ4JiZlPD01N31jb25zdCBTcj17MDowLDE6MCwyOjAsMzoxMCw0OjIsNTozLDY6MTAsNzoxMH07ZnVuY3Rpb24gd3IoZSl7cmV0dXJuIFNyW2VdfWZ1bmN0aW9uIEFyKGUpe3JldHVybiAxMD09PWU/NzoxMz09PWU/NjpmdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZX0oZSk/NTplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6LTE9PT1lPzM6NH1jb25zdCB4cj17bGVnYWN5Om5ldyBjbGFzc3tjb21wdXRlRGlmZihlLHQsbil7dmFyIHI7Y29uc3QgaT1uZXcgdHIoZSx0LHttYXhDb21wdXRhdGlvblRpbWU6bi5tYXhDb21wdXRhdGlvblRpbWVNcyxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpuLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHNob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwfSkuY29tcHV0ZURpZmYoKSxvPVtdO2xldCBzPW51bGw7Zm9yKGNvbnN0IGUgb2YgaS5jaGFuZ2VzKXtsZXQgdCxuO3Q9MD09PWUub3JpZ2luYWxFbmRMaW5lTnVtYmVyP25ldyBIbihlLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEsZS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxKTpuZXcgSG4oZS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixlLm9yaWdpbmFsRW5kTGluZU51bWJlcisxKSxuPTA9PT1lLm1vZGlmaWVkRW5kTGluZU51bWJlcj9uZXcgSG4oZS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxLGUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSk6bmV3IEhuKGUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsZS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGk9bmV3IEduKHQsbixudWxsPT09KHI9ZS5jaGFyQ2hhbmdlcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIubWFwKChlPT5uZXcgSm4obmV3IHJ0KGUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFN0YXJ0Q29sdW1uLGUub3JpZ2luYWxFbmRMaW5lTnVtYmVyLGUub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyBydChlLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGUubW9kaWZpZWRTdGFydENvbHVtbixlLm1vZGlmaWVkRW5kTGluZU51bWJlcixlLm1vZGlmaWVkRW5kQ29sdW1uKSkpKSk7cyYmKHMubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09aS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlciYmcy5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUhPT1pLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyfHwoaT1uZXcgR24ocy5vcmlnaW5hbFJhbmdlLmpvaW4oaS5vcmlnaW5hbFJhbmdlKSxzLm1vZGlmaWVkUmFuZ2Uuam9pbihpLm1vZGlmaWVkUmFuZ2UpLHMuaW5uZXJDaGFuZ2VzJiZpLmlubmVyQ2hhbmdlcz9zLmlubmVyQ2hhbmdlcy5jb25jYXQoaS5pbm5lckNoYW5nZXMpOnZvaWQgMCksby5wb3AoKSkpLG8ucHVzaChpKSxzPWl9cmV0dXJuIHFuKCgoKT0+Qm4obywoKGUsdCk9PnQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PXQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIpKSkpLG5ldyB6bihvLGkucXVpdEVhcmx5KX19LGFkdmFuY2VkOm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgaHIsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3IG1yfWNvbXB1dGVEaWZmKGUsdCxuKXtjb25zdCByPTA9PT1uLm1heENvbXB1dGF0aW9uVGltZU1zP2xyLmluc3RhbmNlOm5ldyB1cihuLm1heENvbXB1dGF0aW9uVGltZU1zKSxpPSFuLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLG89bmV3IE1hcDtmdW5jdGlvbiBzKGUpe2xldCB0PW8uZ2V0KGUpO3JldHVybiB2b2lkIDA9PT10JiYodD1vLnNpemUsby5zZXQoZSx0KSksdH1jb25zdCBhPWUubWFwKChlPT5zKGUudHJpbSgpKSkpLGw9dC5tYXAoKGU9PnMoZS50cmltKCkpKSksdT1uZXcgYnIoYSxlKSxjPW5ldyBicihsLHQpLGg9KCgpPT51Lmxlbmd0aCtjLmxlbmd0aDwxNTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKHUsYyxyLCgobixyKT0+ZVtuXT09PXRbcl0/MD09PXRbcl0ubGVuZ3RoPy4xOjErTWF0aC5sb2coMSt0W3JdLmxlbmd0aCk6Ljk5KSk6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZSh1LGMpKSgpO2xldCBkPWguZGlmZnMsZj1oLmhpdFRpbWVvdXQ7ZD1kcih1LGMsZCk7Y29uc3QgbT1bXSxnPW49PntpZihpKWZvcihsZXQgbz0wO288bjtvKyspe2NvbnN0IG49cCtvLHM9ditvO2lmKGVbbl0hPT10W3NdKXtjb25zdCBvPXRoaXMucmVmaW5lRGlmZihlLHQsbmV3IGFyKG5ldyBvcihuLG4rMSksbmV3IG9yKHMscysxKSkscixpKTtmb3IoY29uc3QgZSBvZiBvLm1hcHBpbmdzKW0ucHVzaChlKTtvLmhpdFRpbWVvdXQmJihmPSEwKX19fTtsZXQgcD0wLHY9MDtmb3IoY29uc3QgbiBvZiBkKXtxbigoKCk9Pm4uc2VxMVJhbmdlLnN0YXJ0LXA9PW4uc2VxMlJhbmdlLnN0YXJ0LXYpKTtnKG4uc2VxMVJhbmdlLnN0YXJ0LXApLHA9bi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHY9bi5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IG89dGhpcy5yZWZpbmVEaWZmKGUsdCxuLHIsaSk7by5oaXRUaW1lb3V0JiYoZj0hMCk7Zm9yKGNvbnN0IGUgb2Ygby5tYXBwaW5ncyltLnB1c2goZSl9ZyhlLmxlbmd0aC1wKTtjb25zdCBiPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIGZ1bmN0aW9uKihlLHQpe2xldCBuLHI7Zm9yKGNvbnN0IGkgb2YgZSl2b2lkIDAhPT1yJiZ0KHIsaSk/bi5wdXNoKGkpOihuJiYoeWllbGQgbiksbj1baV0pLHI9aTtuJiYoeWllbGQgbil9KGUubWFwKChlPT5mdW5jdGlvbihlLHQsbil7bGV0IHI9MCxpPTA7ZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiYocj0xKTsxPT09ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbiYmMT09PWUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4mJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXImJihpPS0xKTtjb25zdCBvPW5ldyBIbihlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKSxzPW5ldyBIbihlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKTtyZXR1cm4gbmV3IEduKG8scyxbZV0pfShlLHQsbikpKSwoKGUsdCk9PmUub3JpZ2luYWxSYW5nZS5vdmVybGFwT3JUb3VjaCh0Lm9yaWdpbmFsUmFuZ2UpfHxlLm1vZGlmaWVkUmFuZ2Uub3ZlcmxhcE9yVG91Y2godC5tb2RpZmllZFJhbmdlKSkpKXtjb25zdCBlPWlbMF0sdD1pW2kubGVuZ3RoLTFdO3IucHVzaChuZXcgR24oZS5vcmlnaW5hbFJhbmdlLmpvaW4odC5vcmlnaW5hbFJhbmdlKSxlLm1vZGlmaWVkUmFuZ2Uuam9pbih0Lm1vZGlmaWVkUmFuZ2UpLGkubWFwKChlPT5lLmlubmVyQ2hhbmdlc1swXSkpKSl9cmV0dXJuIHFuKCgoKT0+Qm4ociwoKGUsdCk9PnQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PXQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIpKSkpLHJ9KG0sZSx0KTtyZXR1cm4gbmV3IHpuKGIsZil9cmVmaW5lRGlmZihlLHQsbixyLGkpe2NvbnN0IG89bmV3IENyKGUsbi5zZXExUmFuZ2UsaSkscz1uZXcgQ3IodCxuLnNlcTJSYW5nZSxpKSxhPW8ubGVuZ3RoK3MubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShvLHMscik6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShvLHMscik7bGV0IGw9YS5kaWZmcztsPWRyKG8scyxsKSxsPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPVtdO2xldCBpO2Z1bmN0aW9uIG8oKXtpZighaSlyZXR1cm47Y29uc3QgZT1pLnMxUmFuZ2UubGVuZ3RoLWkuZGVsZXRlZDtpLnMyUmFuZ2UubGVuZ3RoLGkuYWRkZWQsTWF0aC5tYXgoaS5kZWxldGVkLGkuYWRkZWQpKyhpLmNvdW50LTEpPmUmJnIucHVzaChuZXcgYXIoaS5zMVJhbmdlLGkuczJSYW5nZSkpLGk9dm9pZCAwfWZvcihjb25zdCBzIG9mIG4pe2Z1bmN0aW9uIGEoZSx0KXt2YXIgbixyLGEsbDtpZighaXx8IWkuczFSYW5nZS5jb250YWluc1JhbmdlKGUpfHwhaS5zMlJhbmdlLmNvbnRhaW5zUmFuZ2UodCkpaWYoIWl8fGkuczFSYW5nZS5lbmRFeGNsdXNpdmU8ZS5zdGFydCYmaS5zMlJhbmdlLmVuZEV4Y2x1c2l2ZTx0LnN0YXJ0KW8oKSxpPXthZGRlZDowLGRlbGV0ZWQ6MCxjb3VudDowLHMxUmFuZ2U6ZSxzMlJhbmdlOnR9O2Vsc2V7Y29uc3Qgbz1vci50cnlDcmVhdGUoaS5zMVJhbmdlLmVuZEV4Y2x1c2l2ZSxlLnN0YXJ0KSxzPW9yLnRyeUNyZWF0ZShpLnMyUmFuZ2UuZW5kRXhjbHVzaXZlLHQuc3RhcnQpO2kuZGVsZXRlZCs9bnVsbCE9PShuPW51bGw9PW8/dm9pZCAwOm8ubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjAsaS5hZGRlZCs9bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMubGVuZ3RoKSYmdm9pZCAwIT09cj9yOjAsaS5zMVJhbmdlPWkuczFSYW5nZS5qb2luKGUpLGkuczJSYW5nZT1pLnMyUmFuZ2Uuam9pbih0KX1jb25zdCB1PWUuaW50ZXJzZWN0KHMuc2VxMVJhbmdlKSxjPXQuaW50ZXJzZWN0KHMuc2VxMlJhbmdlKTtpLmNvdW50KyssaS5kZWxldGVkKz1udWxsIT09KGE9bnVsbD09dT92b2lkIDA6dS5sZW5ndGgpJiZ2b2lkIDAhPT1hP2E6MCxpLmFkZGVkKz1udWxsIT09KGw9bnVsbD09Yz92b2lkIDA6Yy5sZW5ndGgpJiZ2b2lkIDAhPT1sP2w6MH1jb25zdCBsPWUuZmluZFdvcmRDb250YWluaW5nKHMuc2VxMVJhbmdlLnN0YXJ0LTEpLHU9dC5maW5kV29yZENvbnRhaW5pbmcocy5zZXEyUmFuZ2Uuc3RhcnQtMSksYz1lLmZpbmRXb3JkQ29udGFpbmluZyhzLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpLGg9dC5maW5kV29yZENvbnRhaW5pbmcocy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKTtsJiZjJiZ1JiZoJiZsLmVxdWFscyhjKSYmdS5lcXVhbHMoaCk/YShsLHUpOihsJiZ1JiZhKGwsdSksYyYmaCYmYShjLGgpKX1vKCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCByPWVbMF0saT10WzBdO2xldCBvO289ciYmKCFpfHxyLnNlcTFSYW5nZS5zdGFydDxpLnNlcTFSYW5nZS5zdGFydCk/ZS5zaGlmdCgpOnQuc2hpZnQoKSxuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU+PW8uc2VxMVJhbmdlLnN0YXJ0P25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5qb2luKG8pOm4ucHVzaChvKX1yZXR1cm4gbn0obixyKX0obyxzLGwpLGw9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3QgdD1yW3IubGVuZ3RoLTFdO3QmJihlLnNlcTFSYW5nZS5zdGFydC10LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PTJ8fGUuc2VxMlJhbmdlLnN0YXJ0LXQuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mik/cltyLmxlbmd0aC0xXT1uZXcgYXIodC5zZXExUmFuZ2Uuam9pbihlLnNlcTFSYW5nZSksdC5zZXEyUmFuZ2Uuam9pbihlLnNlcTJSYW5nZSkpOnIucHVzaChlKX1yZXR1cm4gcn0oMCwwLGwpO3JldHVybnttYXBwaW5nczpsLm1hcCgoZT0+bmV3IEpuKG8udHJhbnNsYXRlUmFuZ2UoZS5zZXExUmFuZ2UpLHMudHJhbnNsYXRlUmFuZ2UoZS5zZXEyUmFuZ2UpKSkpLGhpdFRpbWVvdXQ6YS5oaXRUaW1lb3V0fX19fTtmdW5jdGlvbiBFcihlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIExye2NvbnN0cnVjdG9yKGUsdCxuLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9MHxNYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxlKSksdGhpcy5nPTB8TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpLHRoaXMuYj0wfE1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKSx0aGlzLmE9RXIoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGUucj09PXQuciYmZS5nPT09dC5nJiZlLmI9PT10LmImJmUuYT09PXQuYX19Y2xhc3MgTnJ7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9MHxNYXRoLm1heChNYXRoLm1pbigzNjAsZSksMCksdGhpcy5zPUVyKE1hdGgubWF4KE1hdGgubWluKDEsdCksMCksMyksdGhpcy5sPUVyKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5hPUVyKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlLmg9PT10LmgmJmUucz09PXQucyYmZS5sPT09dC5sJiZlLmE9PT10LmF9c3RhdGljIGZyb21SR0JBKGUpe2NvbnN0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9ZS5hLG89TWF0aC5tYXgodCxuLHIpLHM9TWF0aC5taW4odCxuLHIpO2xldCBhPTAsbD0wO2NvbnN0IHU9KHMrbykvMixjPW8tcztpZihjPjApe3N3aXRjaChsPU1hdGgubWluKHU8PS41P2MvKDIqdSk6Yy8oMi0yKnUpLDEpLG8pe2Nhc2UgdDphPShuLXIpL2MrKG48cj82OjApO2JyZWFrO2Nhc2UgbjphPShyLXQpL2MrMjticmVhaztjYXNlIHI6YT0odC1uKS9jKzR9YSo9NjAsYT1NYXRoLnJvdW5kKGEpfXJldHVybiBuZXcgTnIoYSxsLHUsaSl9c3RhdGljIF9odWUycmdiKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9c3RhdGljIHRvUkdCQShlKXtjb25zdCB0PWUuaC8zNjAse3M6bixsOnIsYTppfT1lO2xldCBvLHMsYTtpZigwPT09bilvPXM9YT1yO2Vsc2V7Y29uc3QgZT1yPC41P3IqKDErbik6cituLXIqbixpPTIqci1lO289TnIuX2h1ZTJyZ2IoaSxlLHQrMS8zKSxzPU5yLl9odWUycmdiKGksZSx0KSxhPU5yLl9odWUycmdiKGksZSx0LTEvMyl9cmV0dXJuIG5ldyBMcihNYXRoLnJvdW5kKDI1NSpvKSxNYXRoLnJvdW5kKDI1NSpzKSxNYXRoLnJvdW5kKDI1NSphKSxpKX19Y2xhc3Mga3J7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5faHN2YUJyYW5kPXZvaWQgMCx0aGlzLmg9MHxNYXRoLm1heChNYXRoLm1pbigzNjAsZSksMCksdGhpcy5zPUVyKE1hdGgubWF4KE1hdGgubWluKDEsdCksMCksMyksdGhpcy52PUVyKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5hPUVyKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlLmg9PT10LmgmJmUucz09PXQucyYmZS52PT09dC52JiZlLmE9PT10LmF9c3RhdGljIGZyb21SR0JBKGUpe2NvbnN0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9TWF0aC5tYXgodCxuLHIpLG89aS1NYXRoLm1pbih0LG4scikscz0wPT09aT8wOm8vaTtsZXQgYTtyZXR1cm4gYT0wPT09bz8wOmk9PT10Pygobi1yKS9vJTYrNiklNjppPT09bj8oci10KS9vKzI6KHQtbikvbys0LG5ldyBrcihNYXRoLnJvdW5kKDYwKmEpLHMsaSxlLmEpfXN0YXRpYyB0b1JHQkEoZSl7Y29uc3R7aDp0LHM6bix2OnIsYTppfT1lLG89cipuLHM9byooMS1NYXRoLmFicyh0LzYwJTItMSkpLGE9ci1vO2xldFtsLHUsY109WzAsMCwwXTtyZXR1cm4gdDw2MD8obD1vLHU9cyk6dDwxMjA/KGw9cyx1PW8pOnQ8MTgwPyh1PW8sYz1zKTp0PDI0MD8odT1zLGM9byk6dDwzMDA/KGw9cyxjPW8pOnQ8PTM2MCYmKGw9byxjPXMpLGw9TWF0aC5yb3VuZCgyNTUqKGwrYSkpLHU9TWF0aC5yb3VuZCgyNTUqKHUrYSkpLGM9TWF0aC5yb3VuZCgyNTUqKGMrYSkpLG5ldyBMcihsLHUsYyxpKX19bGV0IFJyPWNsYXNzIGV7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIGUuRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8ZS5yZWR9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISghZXx8IXQpJiZlLmVxdWFscyh0KX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6TnIuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6a3IuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3RvcihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKTtpZihlIGluc3RhbmNlb2YgTHIpdGhpcy5yZ2JhPWU7ZWxzZSBpZihlIGluc3RhbmNlb2YgTnIpdGhpcy5faHNsYT1lLHRoaXMucmdiYT1Oci50b1JHQkEoZSk7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBrcikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTt0aGlzLl9oc3ZhPWUsdGhpcy5yZ2JhPWtyLnRvUkdCQShlKX19ZXF1YWxzKGUpe3JldHVybiEhZSYmTHIuZXF1YWxzKHRoaXMucmdiYSxlLnJnYmEpJiZOci5lcXVhbHModGhpcy5oc2xhLGUuaHNsYSkmJmtyLmVxdWFscyh0aGlzLmhzdmEsZS5oc3ZhKX1nZXRSZWxhdGl2ZUx1bWluYW5jZSgpe3JldHVybiBFciguMjEyNiplLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEucikrLjcxNTIqZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLmcpKy4wNzIyKmUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KGUpe2NvbnN0IHQ9ZS8yNTU7cmV0dXJuIHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKDI5OSp0aGlzLnJnYmEucis1ODcqdGhpcy5yZ2JhLmcrMTE0KnRoaXMucmdiYS5iKS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKGUpe3JldHVybiB0aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk+ZS5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpfWlzRGFya2VyVGhhbihlKXtyZXR1cm4gdGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpPGUuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKX1saWdodGVuKHQpe3JldHVybiBuZXcgZShuZXcgTnIodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IGUobmV3IE5yKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpyLGI6aSxhOm99PXRoaXMucmdiYTtyZXR1cm4gbmV3IGUobmV3IExyKG4scixpLG8qdCkpfWlzVHJhbnNwYXJlbnQoKXtyZXR1cm4gMD09PXRoaXMucmdiYS5hfWlzT3BhcXVlKCl7cmV0dXJuIDE9PT10aGlzLnJnYmEuYX1vcHBvc2l0ZSgpe3JldHVybiBuZXcgZShuZXcgTHIoMjU1LXRoaXMucmdiYS5yLDI1NS10aGlzLnJnYmEuZywyNTUtdGhpcy5yZ2JhLmIsdGhpcy5yZ2JhLmEpKX1tYWtlT3BhcXVlKHQpe2lmKHRoaXMuaXNPcGFxdWUoKXx8MSE9PXQucmdiYS5hKXJldHVybiB0aGlzO2NvbnN0e3I6bixnOnIsYjppLGE6b309dGhpcy5yZ2JhO3JldHVybiBuZXcgZShuZXcgTHIodC5yZ2JhLnItbyoodC5yZ2JhLnItbiksdC5yZ2JhLmctbyoodC5yZ2JhLmctciksdC5yZ2JhLmItbyoodC5yZ2JhLmItaSksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9ZS5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcihlLHQsbil7aWYoZS5pc0xpZ2h0ZXJUaGFuKHQpKXJldHVybiBlO249bnx8LjU7Y29uc3Qgcj1lLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG49biooaS1yKS9pLGUubGlnaHRlbihuKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IoZSx0LG4pe2lmKGUuaXNEYXJrZXJUaGFuKHQpKXJldHVybiBlO249bnx8LjU7Y29uc3Qgcj1lLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG49biooci10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkpL3IsZS5kYXJrZW4obil9fTtmdW5jdGlvbiBUcihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9TnVtYmVyKG4pOyhlfHwwPT09ZSYmIiIhPT1uLnJlcGxhY2UoL1xzL2csIiIpKSYmdC5wdXNoKGUpfXJldHVybiB0fWZ1bmN0aW9uIE9yKGUsdCxuLHIpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTpyfX1mdW5jdGlvbiBNcihlLHQpe2NvbnN0IG49dC5pbmRleCxyPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCBpPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOmkubGluZU51bWJlcixzdGFydENvbHVtbjppLmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW4rcn19ZnVuY3Rpb24gSXIoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj1Sci5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO3JldHVybiBuP3tyYW5nZTplLGNvbG9yOk9yKG4ucmdiYS5yLG4ucmdiYS5nLG4ucmdiYS5iLG4ucmdiYS5hKX06dm9pZCAwfWZ1bmN0aW9uIFByKGUsdCxuKXtpZighZXx8MSE9PXQubGVuZ3RoKXJldHVybjtjb25zdCByPVRyKHRbMF0udmFsdWVzKCkpO3JldHVybntyYW5nZTplLGNvbG9yOk9yKHJbMF0sclsxXSxyWzJdLG4/clszXToxKX19ZnVuY3Rpb24gRnIoZSx0LG4pe2lmKCFlfHwxIT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9VHIodFswXS52YWx1ZXMoKSksaT1uZXcgUnIobmV3IE5yKHJbMF0sclsxXS8xMDAsclsyXS8xMDAsbj9yWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpPcihpLnJnYmEucixpLnJnYmEuZyxpLnJnYmEuYixpLnJnYmEuYSl9fWZ1bmN0aW9uIFZyKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIERyKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRWYWx1ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUucG9zaXRpb25BdD9mdW5jdGlvbihlKXtjb25zdCB0PVtdLG49VnIoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXs2fSlcYnwoIykoW0EtRmEtZjAtOV17OH0pXGIvZ20pO2lmKG4ubGVuZ3RoPjApZm9yKGNvbnN0IHIgb2Ygbil7Y29uc3Qgbj1yLmZpbHRlcigoZT0+dm9pZCAwIT09ZSkpLGk9blsxXSxvPW5bMl07aWYoIW8pY29udGludWU7bGV0IHM7aWYoInJnYiI9PT1pKXtjb25zdCB0PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTtzPVByKE1yKGUsciksVnIobyx0KSwhMSl9ZWxzZSBpZigicmdiYSI9PT1pKXtjb25zdCB0PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtzPVByKE1yKGUsciksVnIobyx0KSwhMCl9ZWxzZSBpZigiaHNsIj09PWkpe2NvbnN0IHQ9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO3M9RnIoTXIoZSxyKSxWcihvLHQpLCExKX1lbHNlIGlmKCJoc2xhIj09PWkpe2NvbnN0IHQ9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO3M9RnIoTXIoZSxyKSxWcihvLHQpLCEwKX1lbHNlIiMiPT09aSYmKHM9SXIoTXIoZSxyKSxpK28pKTtzJiZ0LnB1c2gocyl9cmV0dXJuIHR9KGUpOltdfVJyLndoaXRlPW5ldyBScihuZXcgTHIoMjU1LDI1NSwyNTUsMSkpLFJyLmJsYWNrPW5ldyBScihuZXcgTHIoMCwwLDAsMSkpLFJyLnJlZD1uZXcgUnIobmV3IExyKDI1NSwwLDAsMSkpLFJyLmJsdWU9bmV3IFJyKG5ldyBMcigwLDAsMjU1LDEpKSxSci5ncmVlbj1uZXcgUnIobmV3IExyKDAsMjU1LDAsMSkpLFJyLmN5YW49bmV3IFJyKG5ldyBMcigwLDI1NSwyNTUsMSkpLFJyLmxpZ2h0Z3JleT1uZXcgUnIobmV3IExyKDIxMSwyMTEsMjExLDEpKSxSci50cmFuc3BhcmVudD1uZXcgUnIobmV3IExyKDAsMCwwLDApKSxmdW5jdGlvbihlKXt2YXIgdDsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtjb25zdCB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1mdW5jdGlvbiByKGUpe3N3aXRjaChlKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpjYXNlIDY2OnJldHVybiAxMTtjYXNlIDk5OmNhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOmNhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOmNhc2UgNjk6cmV0dXJuIDE0O2Nhc2UgMTAyOmNhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfXQuZm9ybWF0UkdCPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5yZ2JhLmE/YHJnYigke3QucmdiYS5yfSwgJHt0LnJnYmEuZ30sICR7dC5yZ2JhLmJ9KWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEodCl9LHQuZm9ybWF0UkdCQT1mdW5jdGlvbihlKXtyZXR1cm5gcmdiYSgke2UucmdiYS5yfSwgJHtlLnJnYmEuZ30sICR7ZS5yZ2JhLmJ9LCAkeytlLnJnYmEuYS50b0ZpeGVkKDIpfSlgfSx0LmZvcm1hdEhTTD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQuaHNsYS5hP2Boc2woJHt0LmhzbGEuaH0sICR7KDEwMCp0LmhzbGEucykudG9GaXhlZCgyKX0lLCAkeygxMDAqdC5oc2xhLmwpLnRvRml4ZWQoMil9JSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRIU0xBKHQpfSx0LmZvcm1hdEhTTEE9ZnVuY3Rpb24oZSl7cmV0dXJuYGhzbGEoJHtlLmhzbGEuaH0sICR7KDEwMCplLmhzbGEucykudG9GaXhlZCgyKX0lLCAkeygxMDAqZS5oc2xhLmwpLnRvRml4ZWQoMil9JSwgJHtlLmhzbGEuYS50b0ZpeGVkKDIpfSlgfSx0LmZvcm1hdEhleD1mdW5jdGlvbihlKXtyZXR1cm5gIyR7bihlLnJnYmEucil9JHtuKGUucmdiYS5nKX0ke24oZS5yZ2JhLmIpfWB9LHQuZm9ybWF0SGV4QT1mdW5jdGlvbih0LHI9ITEpe3JldHVybiByJiYxPT09dC5yZ2JhLmE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleCh0KTpgIyR7bih0LnJnYmEucil9JHtuKHQucmdiYS5nKX0ke24odC5yZ2JhLmIpfSR7bihNYXRoLnJvdW5kKDI1NSp0LnJnYmEuYSkpfWB9LHQuZm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzT3BhcXVlKCk/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleCh0KTplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQSh0KX0sdC5wYXJzZUhleD1mdW5jdGlvbih0KXtjb25zdCBuPXQubGVuZ3RoO2lmKDA9PT1uKXJldHVybiBudWxsO2lmKDM1IT09dC5jaGFyQ29kZUF0KDApKXJldHVybiBudWxsO2lmKDc9PT1uKXtjb25zdCBuPTE2KnIodC5jaGFyQ29kZUF0KDEpKStyKHQuY2hhckNvZGVBdCgyKSksaT0xNipyKHQuY2hhckNvZGVBdCgzKSkrcih0LmNoYXJDb2RlQXQoNCkpLG89MTYqcih0LmNoYXJDb2RlQXQoNSkpK3IodC5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IExyKG4saSxvLDEpKX1pZig5PT09bil7Y29uc3Qgbj0xNipyKHQuY2hhckNvZGVBdCgxKSkrcih0LmNoYXJDb2RlQXQoMikpLGk9MTYqcih0LmNoYXJDb2RlQXQoMykpK3IodC5jaGFyQ29kZUF0KDQpKSxvPTE2KnIodC5jaGFyQ29kZUF0KDUpKStyKHQuY2hhckNvZGVBdCg2KSkscz0xNipyKHQuY2hhckNvZGVBdCg3KSkrcih0LmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgTHIobixpLG8scy8yNTUpKX1pZig0PT09bil7Y29uc3Qgbj1yKHQuY2hhckNvZGVBdCgxKSksaT1yKHQuY2hhckNvZGVBdCgyKSksbz1yKHQuY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBMcigxNipuK24sMTYqaStpLDE2Km8rbykpfWlmKDU9PT1uKXtjb25zdCBuPXIodC5jaGFyQ29kZUF0KDEpKSxpPXIodC5jaGFyQ29kZUF0KDIpKSxvPXIodC5jaGFyQ29kZUF0KDMpKSxzPXIodC5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IExyKDE2Km4rbiwxNippK2ksMTYqbytvLCgxNipzK3MpLzI1NSkpfXJldHVybiBudWxsfX0pKCh0PWUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKS5DU1N8fCh0LkNTUz17fSkpfShScnx8KFJyPXt9KSk7dmFyIEtyPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBqciBleHRlbmRzIHV0e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTA7bjx0aGlzLl9saW5lcy5sZW5ndGg7bisrKXtjb25zdCByPXRoaXMuX2xpbmVzW25dLGk9dGhpcy5vZmZzZXRBdChuZXcgbnQobisxLDEpKSxvPXIubWF0Y2hBbGwoZSk7Zm9yKGNvbnN0IGUgb2YgbykoZS5pbmRleHx8MD09PWUuaW5kZXgpJiYoZS5pbmRleD1lLmluZGV4K2kpLHQucHVzaChlKX1yZXR1cm4gdH1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49ZHQoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9Y3Q7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyBydChlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAscz1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88cy5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoc1tvXS5zdGFydCxzW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0scz1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFudC5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIHFye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcganIoV2UucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj9Vbi5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocix0LG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSkpfWNvbXB1dGVEaWZmKGUsdCxuLHIpe3JldHVybiBLcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSksbz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaSYmbz9xci5jb21wdXRlRGlmZihpLG8sbixyKTpudWxsfSkpfXN0YXRpYyBjb21wdXRlRGlmZihlLHQsbixyKXtjb25zdCBpPSJhZHZhbmNlZCI9PT1yP3hyLmFkdmFuY2VkOnhyLmxlZ2FjeSxvPWUuZ2V0TGluZXNDb250ZW50KCkscz10LmdldExpbmVzQ29udGVudCgpLGE9aS5jb21wdXRlRGlmZihvLHMsbik7cmV0dXJue2lkZW50aWNhbDohKGEuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpLHF1aXRFYXJseTphLmhpdFRpbWVvdXQsY2hhbmdlczphLmNoYW5nZXMubWFwKChlPT57dmFyIHQ7cmV0dXJuW2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxudWxsPT09KHQ9ZS5pbm5lckNoYW5nZXMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm1hcCgoZT0+W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyLGUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4sZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4sZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIsZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbl0pKV19KSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCl7Y29uc3Qgbj1lLmdldExpbmVDb3VudCgpO2lmKG4hPT10LmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgcj0xO3I8PW47cisrKXtpZihlLmdldExpbmVDb250ZW50KHIpIT09dC5nZXRMaW5lQ29udGVudChyKSlyZXR1cm4hMX1yZXR1cm4hMH1jb21wdXRlTW9yZU1pbmltYWxFZGl0cyhlLHQsbil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtpZighcilyZXR1cm4gdDtjb25zdCBpPVtdO2xldCBvO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIHJ0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpzLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKG89YSkscnQuaXNFbXB0eShlKSYmIXMpY29udGludWU7Y29uc3QgdD1yLmdldFZhbHVlSW5SYW5nZShlKTtpZihzPXMucmVwbGFjZSgvXHJcbnxcbnxcci9nLHIuZW9sKSx0PT09cyljb250aW51ZTtpZihNYXRoLm1heChzLmxlbmd0aCx0Lmxlbmd0aCk+cXIuX2RpZmZMaW1pdCl7aS5wdXNoKHtyYW5nZTplLHRleHQ6c30pO2NvbnRpbnVlfWNvbnN0IGw9Z2UodCxzLG4pLHU9ci5vZmZzZXRBdChydC5saWZ0KGUpLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGUgb2YgbCl7Y29uc3QgdD1yLnBvc2l0aW9uQXQodStlLm9yaWdpbmFsU3RhcnQpLG49ci5wb3NpdGlvbkF0KHUrZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgpLG89e3RleHQ6cy5zdWJzdHIoZS5tb2RpZmllZFN0YXJ0LGUubW9kaWZpZWRMZW5ndGgpLHJhbmdlOntzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLGVuZENvbHVtbjpuLmNvbHVtbn19O3IuZ2V0VmFsdWVJblJhbmdlKG8ucmFuZ2UpIT09by50ZXh0JiZpLnB1c2gobyl9fXJldHVybiJudW1iZXIiPT10eXBlb2YgbyYmaS5wdXNoKHtlb2w6byx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxpfSkpfWNvbXB1dGVMaW5rcyhlKXtyZXR1cm4gS3IodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P3l0LmNvbXB1dGVMaW5rcyhlKTpbXX0odCk6bnVsbH0pKX1jb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKGUpe3JldHVybiBLcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIHQ/RHIodCk6bnVsbH0pKX10ZXh0dWFsU3VnZ2VzdChlLHQsbixyKXtyZXR1cm4gS3IodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW5ldyBWKCEwKSxvPW5ldyBSZWdFeHAobixyKSxzPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKG4pO2lmKGUpZm9yKGNvbnN0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKHMuYWRkKG4pLHMuc2l6ZT5xci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShzKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxzPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9c1tuLndvcmRdO3R8fCh0PVtdLHNbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gc30pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBzPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IGE9by5nZXRWYWx1ZUluUmFuZ2UodCksbD1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxzKTtpZighbClyZXR1cm4gbnVsbDtjb25zdCB1PW8uZ2V0VmFsdWVJblJhbmdlKGwpO3JldHVybiBDdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQsYSxsLHUsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX0scj17fTtmb3IoY29uc3QgdCBvZiBlKXJbdF09bih0KTtyZXR1cm4gcn0obiwoKGUsdCk9PnRoaXMuX2hvc3QuZmhyKGUsdCkpKSxpPXtob3N0OnIsZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGksdCksUHJvbWlzZS5yZXNvbHZlKHoodGhpcy5fZm9yZWlnbk1vZHVsZSkpKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdXNhZ2UiKSl9Zm1yKGUsdCl7aWYoIXRoaXMuX2ZvcmVpZ25Nb2R1bGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mb3JlaWduTW9kdWxlW2VdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK2UpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mb3JlaWduTW9kdWxlW2VdLmFwcGx5KHRoaXMuX2ZvcmVpZ25Nb2R1bGUsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19fXFyLl9kaWZmTGltaXQ9MWU1LHFyLl9zdWdnZXN0aW9uc0xpbWl0PTFlNCwiZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKGdsb2JhbFRoaXMubW9uYWNvPXtlZGl0b3I6dm9pZCAwLGxhbmd1YWdlczp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6QXQsRW1pdHRlcjpVLEtleUNvZGU6Y24sS2V5TW9kOlZuLFBvc2l0aW9uOm50LFJhbmdlOnJ0LFNlbGVjdGlvbjpNdCxTZWxlY3Rpb25EaXJlY3Rpb246U24sTWFya2VyU2V2ZXJpdHk6aG4sTWFya2VyVGFnOmRuLFVyaTpXZSxUb2tlbjpGbn0pO2xldCBCcj0hMTtmdW5jdGlvbiBVcihlKXtpZihCcilyZXR1cm47QnI9ITA7Y29uc3QgdD1uZXcgY2UoKGU9PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyBxcih0LGUpKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjM5LjAoZmYzNjIxYTNmYTYzODk4NzNiZTU0MTJkMTc1NTQyOTRlYTFiMDk0MSkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uICRyKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxzPTE2LGE9MCxsPTAsdT0wLGM9MCxoPTA7ZnVuY3Rpb24gZCh0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIHM9ZS5jaGFyQ29kZUF0KHIpO2lmKHM+PTQ4JiZzPD01NylvPTE2Km8rcy00ODtlbHNlIGlmKHM+PTY1JiZzPD03MClvPTE2Km8rcy02NSsxMDtlbHNle2lmKCEocz49OTcmJnM8PTEwMikpYnJlYWs7bz0xNipvK3MtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBmKCl7aWYoaT0iIixoPTAsbz1yLGw9YSxjPXUscj49bilyZXR1cm4gbz1uLHM9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKFdyKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShXcih0KSk7cmV0dXJuIHM9MTV9aWYoSHIodCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIiksYSsrLHU9cixzPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLHM9MTtjYXNlIDEyNTpyZXR1cm4gcisrLHM9MjtjYXNlIDkxOnJldHVybiByKysscz0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxzPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLHM9NjtjYXNlIDQ0OnJldHVybiByKysscz01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihIcihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIHM9ZCg0LCEwKTtzPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUocyk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCkscz0xMDtjYXNlIDQ3OnZhciBmPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFIcihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZixyKSxzPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciB2PWUuY2hhckNvZGVBdChyKTtpZig0Mj09PXYmJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssSHIodikmJigxMz09PXYmJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKyssYSsrLHU9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGYscikscz0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKysscz0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IXpyKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIHM9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZ6cihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJnpyKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCkscz0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIHM9ODtjYXNlImZhbHNlIjpyZXR1cm4gcz05O2Nhc2UibnVsbCI6cmV0dXJuIHM9N31yZXR1cm4gcz0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKysscz0xNn19ZnVuY3Rpb24gbShlKXtpZihXcihlKXx8SHIoZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAscz0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZigpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmYsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gc30sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby1jfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBXcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIEhyKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIHpyKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gR3IoZSx0LG4pe3ZhciByLGksbyxzLGE7aWYodCl7Zm9yKHM9dC5vZmZzZXQsYT1zK3QubGVuZ3RoLG89cztvPjAmJiFYcihlLG8tMSk7KW8tLTtmb3IodmFyIGw9YTtsPGUubGVuZ3RoJiYhWHIoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcobyxsKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAscz0wLGE9ZS5sZW5ndGg7dmFyIHUsYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGQ9MDt1PW4uaW5zZXJ0U3BhY2VzP0pyKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGY9JHIoaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIGMrSnIodSxyK2QpfWZ1bmN0aW9uIHAoKXt2YXIgZT1mLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1mLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1mLmdldFRva2VuRXJyb3IoKSxlfXZhciB2PVtdO2Z1bmN0aW9uIGIobixyLGkpe218fHQmJiEocjxhJiZpPnMpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8di5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWYuZ2V0VG9rZW5PZmZzZXQoKStvO2IoSnIodSxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciBfPWYuZ2V0VG9rZW5PZmZzZXQoKStmLmdldFRva2VuTGVuZ3RoKCkrbyxTPXAoKSx3PSIiLEE9ITE7IWgmJigxMj09PVN8fDEzPT09Uyk7KXtiKCIgIixfLGYuZ2V0VG9rZW5PZmZzZXQoKStvKSxfPWYuZ2V0VG9rZW5PZmZzZXQoKStmLmdldFRva2VuTGVuZ3RoKCkrbyx3PShBPTEyPT09Uyk/ZygpOiIiLFM9cCgpfWlmKDI9PT1TKTEhPT15JiYoZC0tLHc9ZygpKTtlbHNlIGlmKDQ9PT1TKTMhPT15JiYoZC0tLHc9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmQrKyx3PWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjp3PWcoKTticmVhaztjYXNlIDEzOmg/dz1nKCk6QXx8KHc9IiAiKTticmVhaztjYXNlIDY6QXx8KHc9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1TKXtBfHwodz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09U3x8MTM9PT1TP0F8fCh3PSIgIik6NSE9PVMmJjE3IT09UyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1TJiYxMyE9PVN8fCh3PWcoKSl9MTc9PT1TJiYodz1uLmluc2VydEZpbmFsTmV3bGluZT9jOiIiKSxiKHcsXyxmLmdldFRva2VuT2Zmc2V0KCkrbykseT1TfXJldHVybiB2fWZ1bmN0aW9uIEpyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gWHIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgWnI7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e0JyfHxVcihudWxsKX0sKFpyfHwoWnI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBZcixRcixlaSx0aSxuaSxyaSxpaSxvaSxzaSxhaSxsaSx1aSxjaSxoaSxkaSxmaSxtaSxnaSxwaSx2aSxiaSx5aSxDaSxfaSxTaSx3aSxBaSx4aSxFaSxMaSxOaSxraSxSaSxUaSxPaSxNaSxJaSxQaSxGaSxWaSxEaSxLaSxqaSxxaSxCaSxVaSwkaSxXaSxIaSx6aT0kcixHaT1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVpyLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIHMoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49WnIuREVGQVVMVCk7dmFyIHI9JHIoZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIHM9aSh0Lm9uT2JqZWN0QmVnaW4pLGE9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGw9aSh0Lm9uT2JqZWN0RW5kKSx1PWkodC5vbkFycmF5QmVnaW4pLGM9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxkPW8odC5vblNlcGFyYXRvciksZj1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIHYoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OmIoMTQpO2JyZWFrO2Nhc2UgNTpiKDE1KTticmVhaztjYXNlIDM6YigxMyk7YnJlYWs7Y2FzZSAxOmd8fGIoMTEpO2JyZWFrO2Nhc2UgMjpiKDEyKTticmVhaztjYXNlIDY6YigxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP2IoMTApOmYoKTticmVhaztjYXNlIDE2OmIoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiBiKGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXt2KCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT12KCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTphKHQpLHYoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKGIoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdigpLCEwfWZ1bmN0aW9uIF8oKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KGIoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhkKCI6IiksdigpLEEoKXx8Yig0LFtdLFsyLDVdKSk6Yig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gUygpe3MoKSx2KCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8Yig0LFtdLFtdKSxkKCIsIiksdigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZiKDYsW10sW10pO18oKXx8Yig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBsKCksMiE9PXIuZ2V0VG9rZW4oKT9iKDcsWzJdLFtdKTp2KCksITB9ZnVuY3Rpb24gdygpe3UoKSx2KCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8Yig0LFtdLFtdKSxkKCIsIiksdigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZiKDYsW10sW10pO0EoKXx8Yig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiBjKCksNCE9PXIuZ2V0VG9rZW4oKT9iKDgsWzRdLFtdKTp2KCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gdygpO2Nhc2UgMTpyZXR1cm4gUygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYodigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KGIoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIGIoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJmIoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTtzKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO3MoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOnMsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxKaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgcz1lKGlbb10sbixyKTtpZihzKXJldHVybiBzfXJldHVybiB0fX0sWGk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LFppPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLHM9by5jaGlsZHJlblsxXTtzJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKHMpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIFlpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFZaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIVlpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighWWkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBRaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gZW8oZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gdG8oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBubyhlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIHJvKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShRcj1Zcnx8KFlyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LFFyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LCh0aT1laXx8KGVpPXt9KSkuTUlOX1ZBTFVFPTAsdGkuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKHJpPW5pfHwobmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPWVpLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PWVpLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LHJpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLm9iamVjdExpdGVyYWwodCkmJmlzLnVpbnRlZ2VyKHQubGluZSkmJmlzLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKG9pPWlpfHwoaWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoaXMudWludGVnZXIoZSkmJmlzLnVpbnRlZ2VyKHQpJiZpcy51aW50ZWdlcihuKSYmaXMudWludGVnZXIocikpcmV0dXJue3N0YXJ0Om5pLmNyZWF0ZShlLHQpLGVuZDpuaS5jcmVhdGUobixyKX07aWYobmkuaXMoZSkmJm5pLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sb2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMub2JqZWN0TGl0ZXJhbCh0KSYmbmkuaXModC5zdGFydCkmJm5pLmlzKHQuZW5kKX0sKGFpPXNpfHwoc2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LGFpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMuc3RyaW5nKHQudXJpKXx8aXMudW5kZWZpbmVkKHQudXJpKSl9LCh1aT1saXx8KGxpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LHVpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQudGFyZ2V0UmFuZ2UpJiZpcy5zdHJpbmcodC50YXJnZXRVcmkpJiYoaWkuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fGlzLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJihpaS5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8aXMudW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKGhpPWNpfHwoY2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxoaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiZpcy5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJmlzLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiZpcy5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LChmaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LGZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlpLmlzKHQucmFuZ2UpJiZjaS5pcyh0LmNvbG9yKX0sKGdpPW1pfHwobWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sZ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuc3RyaW5nKHQubGFiZWwpJiYoaXMudW5kZWZpbmVkKHQudGV4dEVkaXQpfHxUaS5pcyh0KSkmJihpcy51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8aXMudHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsVGkuaXMpKX0sKHZpPXBpfHwocGk9e30pKS5Db21tZW50PSJjb21tZW50Iix2aS5JbXBvcnRzPSJpbXBvcnRzIix2aS5SZWdpb249InJlZ2lvbiIsKHlpPWJpfHwoYmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gaXMuZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksaXMuZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLGlzLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30seWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMudWludGVnZXIodC5zdGFydExpbmUpJiZpcy51aW50ZWdlcih0LnN0YXJ0TGluZSkmJihpcy51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fGlzLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKGlzLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fGlzLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJihpcy51bmRlZmluZWQodC5raW5kKXx8aXMuc3RyaW5nKHQua2luZCkpfSwoX2k9Q2l8fChDaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LF9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJnNpLmlzKHQubG9jYXRpb24pJiZpcy5zdHJpbmcodC5tZXNzYWdlKX0sKHdpPVNpfHwoU2k9e30pKS5FcnJvcj0xLHdpLldhcm5pbmc9Mix3aS5JbmZvcm1hdGlvbj0zLHdpLkhpbnQ9NCwoeGk9QWl8fChBaT17fSkpLlVubmVjZXNzYXJ5PTEseGkuRGVwcmVjYXRlZD0yLChFaXx8KEVpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmaXMuc3RyaW5nKHQuaHJlZil9LChOaT1MaXx8KExpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiBpcy5kZWZpbmVkKG4pJiYocy5zZXZlcml0eT1uKSxpcy5kZWZpbmVkKHIpJiYocy5jb2RlPXIpLGlzLmRlZmluZWQoaSkmJihzLnNvdXJjZT1pKSxpcy5kZWZpbmVkKG8pJiYocy5yZWxhdGVkSW5mb3JtYXRpb249byksc30sTmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiBpcy5kZWZpbmVkKG4pJiZpaS5pcyhuLnJhbmdlKSYmaXMuc3RyaW5nKG4ubWVzc2FnZSkmJihpcy5udW1iZXIobi5zZXZlcml0eSl8fGlzLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJihpcy5pbnRlZ2VyKG4uY29kZSl8fGlzLnN0cmluZyhuLmNvZGUpfHxpcy51bmRlZmluZWQobi5jb2RlKSkmJihpcy51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHxpcy5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihpcy5zdHJpbmcobi5zb3VyY2UpfHxpcy51bmRlZmluZWQobi5zb3VyY2UpKSYmKGlzLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGlzLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sQ2kuaXMpKX0sKFJpPWtpfHwoa2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiBpcy5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0sUmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmaXMuc3RyaW5nKHQudGl0bGUpJiZpcy5zdHJpbmcodC5jb21tYW5kKX0sKE9pPVRpfHwoVGk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sT2kuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxPaS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LE9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLm9iamVjdExpdGVyYWwodCkmJmlzLnN0cmluZyh0Lm5ld1RleHQpJiZpaS5pcyh0LnJhbmdlKX0sKElpPU1pfHwoTWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sSWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmaXMub2JqZWN0TGl0ZXJhbCh0KSYmaXMuc3RyaW5nKHQubGFiZWwpJiYoaXMuYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJihpcy5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwoUGl8fChQaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKFZpPUZpfHwoRmk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxWaS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sVmkuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LFZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFRpLmlzKHQpJiYoTWkuaXModC5hbm5vdGF0aW9uSWQpfHxQaS5pcyh0LmFubm90YXRpb25JZCkpfSwoS2k9RGl8fChEaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sS2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmbG8uaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwocWk9aml8fChqaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0scWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJmlzLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxpcy5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8aXMuYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8UGkuaXModC5hbm5vdGF0aW9uSWQpKX0sKFVpPUJpfHwoQmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sVWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJmlzLnN0cmluZyh0Lm9sZFVyaSkmJmlzLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxpcy5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8aXMuYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8UGkuaXModC5hbm5vdGF0aW9uSWQpKX0sKFdpPSRpfHwoJGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LFdpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiZpcy5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8aXMuYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fGlzLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fFBpLmlzKHQuYW5ub3RhdGlvbklkKSl9LChIaXx8KEhpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gaXMuc3RyaW5nKGUua2luZCk/amkuaXMoZSl8fEJpLmlzKGUpfHwkaS5pcyhlKTpEaS5pcyhlKX0pKSl9O3ZhciBpbyxvbyxzbyxhbyxsbyx1byxjbyxobyxmbyxtbyxnbyxwbyx2byxibyx5byxDbyxfbyxTbyx3byxBbyx4byxFbyxMbyxObyxrbyxSbyxUbyxPbyxNbyxJbyxQbyxGbyxWbyxEbyxLbyxqbyxxbyxCbyxVbywkbyxXbyxIbyx6byxHbyxKbyxYbyxabyxZbyxRbyxlcyx0cyxucz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVRpLmluc2VydChlLHQpOlBpLmlzKG4pPyhpPW4scj1GaS5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9RmkuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVRpLnJlcGxhY2UoZSx0KTpQaS5pcyhuKT8oaT1uLHI9RmkucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1GaS5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPVRpLmRlbChlKTpQaS5pcyh0KT8ocj10LG49RmkuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1GaS5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKFBpLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHJzKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoRGkuaXMoZSkpe3ZhciBuPW5ldyBucyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBucyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYobG8uaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBucyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IG5zKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBycyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihNaS5pcyh0KXx8UGkuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9amkuY3JlYXRlKGUsbik6KG89UGkuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1qaS5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLHM7aWYoTWkuaXMobil8fFBpLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPUJpLmNyZWF0ZShlLHQscik6KHM9UGkuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz1CaS5jcmVhdGUoZSx0LHIscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09cylyZXR1cm4gc30sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoTWkuaXModCl8fFBpLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPSRpLmNyZWF0ZShlLG4pOihvPVBpLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9JGkuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwob289aW98fChpbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSxvby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpfSwoYW89c298fChzbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxhby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpJiZpcy5pbnRlZ2VyKHQudmVyc2lvbil9LCh1bz1sb3x8KGxvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LHVvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlzLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHxpcy5pbnRlZ2VyKHQudmVyc2lvbikpfSwoaG89Y298fChjbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxoby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpJiZpcy5zdHJpbmcodC5sYW5ndWFnZUlkKSYmaXMuaW50ZWdlcih0LnZlcnNpb24pJiZpcy5zdHJpbmcodC50ZXh0KX0sKG1vPWZvfHwoZm89e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsbW8uTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShmb3x8KGZvPXt9KSksKGdvfHwoZ289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5vYmplY3RMaXRlcmFsKGUpJiZmby5pcyh0LmtpbmQpJiZpcy5zdHJpbmcodC52YWx1ZSl9LCh2bz1wb3x8KHBvPXt9KSkuVGV4dD0xLHZvLk1ldGhvZD0yLHZvLkZ1bmN0aW9uPTMsdm8uQ29uc3RydWN0b3I9NCx2by5GaWVsZD01LHZvLlZhcmlhYmxlPTYsdm8uQ2xhc3M9Nyx2by5JbnRlcmZhY2U9OCx2by5Nb2R1bGU9OSx2by5Qcm9wZXJ0eT0xMCx2by5Vbml0PTExLHZvLlZhbHVlPTEyLHZvLkVudW09MTMsdm8uS2V5d29yZD0xNCx2by5TbmlwcGV0PTE1LHZvLkNvbG9yPTE2LHZvLkZpbGU9MTcsdm8uUmVmZXJlbmNlPTE4LHZvLkZvbGRlcj0xOSx2by5FbnVtTWVtYmVyPTIwLHZvLkNvbnN0YW50PTIxLHZvLlN0cnVjdD0yMix2by5FdmVudD0yMyx2by5PcGVyYXRvcj0yNCx2by5UeXBlUGFyYW1ldGVyPTI1LCh5bz1ib3x8KGJvPXt9KSkuUGxhaW5UZXh0PTEseW8uU25pcHBldD0yLChDb3x8KENvPXt9KSkuRGVwcmVjYXRlZD0xLChTbz1fb3x8KF9vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LFNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmlzLnN0cmluZyh0Lm5ld1RleHQpJiZpaS5pcyh0Lmluc2VydCkmJmlpLmlzKHQucmVwbGFjZSl9LChBbz13b3x8KHdvPXt9KSkuYXNJcz0xLEFvLmFkanVzdEluZGVudGF0aW9uPTIsKHhvfHwoeG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoRW98fChFbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKE5vPUxvfHwoTG89e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sTm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuc3RyaW5nKHQpfHxpcy5vYmplY3RMaXRlcmFsKHQpJiZpcy5zdHJpbmcodC5sYW5ndWFnZSkmJmlzLnN0cmluZyh0LnZhbHVlKX0sKGtvfHwoa289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmaXMub2JqZWN0TGl0ZXJhbCh0KSYmKGdvLmlzKHQuY29udGVudHMpfHxMby5pcyh0LmNvbnRlbnRzKXx8aXMudHlwZWRBcnJheSh0LmNvbnRlbnRzLExvLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxpaS5pcyhlLnJhbmdlKSl9LChSb3x8KFJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChUb3x8KFRvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiBpcy5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLGlzLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LChNbz1Pb3x8KE9vPXt9KSkuVGV4dD0xLE1vLlJlYWQ9MixNby5Xcml0ZT0zLChJb3x8KElvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBpcy5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKEZvPVBvfHwoUG89e30pKS5GaWxlPTEsRm8uTW9kdWxlPTIsRm8uTmFtZXNwYWNlPTMsRm8uUGFja2FnZT00LEZvLkNsYXNzPTUsRm8uTWV0aG9kPTYsRm8uUHJvcGVydHk9NyxGby5GaWVsZD04LEZvLkNvbnN0cnVjdG9yPTksRm8uRW51bT0xMCxGby5JbnRlcmZhY2U9MTEsRm8uRnVuY3Rpb249MTIsRm8uVmFyaWFibGU9MTMsRm8uQ29uc3RhbnQ9MTQsRm8uU3RyaW5nPTE1LEZvLk51bWJlcj0xNixGby5Cb29sZWFuPTE3LEZvLkFycmF5PTE4LEZvLk9iamVjdD0xOSxGby5LZXk9MjAsRm8uTnVsbD0yMSxGby5FbnVtTWVtYmVyPTIyLEZvLlN0cnVjdD0yMyxGby5FdmVudD0yNCxGby5PcGVyYXRvcj0yNSxGby5UeXBlUGFyYW1ldGVyPTI2LChWb3x8KFZvPXt9KSkuRGVwcmVjYXRlZD0xLChEb3x8KERvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoam89S298fChLbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKHMuY2hpbGRyZW49byksc30sam8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaXMuc3RyaW5nKHQubmFtZSkmJmlzLm51bWJlcih0LmtpbmQpJiZpaS5pcyh0LnJhbmdlKSYmaWkuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8aXMuc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fGlzLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKEJvPXFvfHwocW89e30pKS5FbXB0eT0iIixCby5RdWlja0ZpeD0icXVpY2tmaXgiLEJvLlJlZmFjdG9yPSJyZWZhY3RvciIsQm8uUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixCby5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixCby5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLEJvLlNvdXJjZT0ic291cmNlIixCby5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLEJvLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKCRvPVVvfHwoVW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sJG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmaXMudHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLExpLmlzKSYmKHZvaWQgMD09PXQub25seXx8aXMudHlwZWRBcnJheSh0Lm9ubHksaXMuc3RyaW5nKSl9LChIbz1Xb3x8KFdvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOmtpLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sSG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaXMuc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8aXMudHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLExpLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fGlzLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8a2kuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHxpcy5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8SGkuaXModC5lZGl0KSl9LChHbz16b3x8KHpvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBpcy5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LEdvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMudW5kZWZpbmVkKHQuY29tbWFuZCl8fGtpLmlzKHQuY29tbWFuZCkpfSwoWG89Sm98fChKbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxYby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy51aW50ZWdlcih0LnRhYlNpemUpJiZpcy5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKFlvPVpvfHwoWm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LFlvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMudW5kZWZpbmVkKHQudGFyZ2V0KXx8aXMuc3RyaW5nKHQudGFyZ2V0KSl9LChlcz1Rb3x8KFFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxlcy5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZpaS5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxlcy5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgcz0wLGE9MCxsPTA7czxpLmxlbmd0aCYmYTxvLmxlbmd0aDspe3ZhciB1PW4oaVtzXSxvW2FdKTtlW2wrK109dTw9MD9pW3MrK106b1thKytdfWZvcig7czxpLmxlbmd0aDspZVtsKytdPWlbcysrXTtmb3IoO2E8by5sZW5ndGg7KWVbbCsrXT1vW2ErK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBhcyhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKGlzLmRlZmluZWQodCkmJmlzLnN0cmluZyh0LnVyaSkmJihpcy51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8aXMuc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiZpcy51aW50ZWdlcih0LmxpbmVDb3VudCkmJmlzLmZ1bmModC5nZXRUZXh0KSYmaXMuZnVuYyh0LnBvc2l0aW9uQXQpJiZpcy5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBhPWlbc10sbD1lLm9mZnNldEF0KGEucmFuZ2Uuc3RhcnQpLHU9ZS5vZmZzZXRBdChhLnJhbmdlLmVuZCk7aWYoISh1PD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsbCkrYS5uZXdUZXh0K3Iuc3Vic3RyaW5nKHUsci5sZW5ndGgpLG89bH1yZXR1cm4gcn19KHRzfHwodHM9e30pKTt2YXIgaXMsb3Msc3MsYXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4gbmkuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBuaS5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtvcz1pc3x8KGlzPXt9KSxzcz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG9zLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LG9zLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sb3MuYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sb3Muc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09c3MuY2FsbChlKX0sb3MubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09c3MuY2FsbChlKX0sb3MubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09c3MuY2FsbChlKSYmdDw9ZSYmZTw9bn0sb3MuaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXNzLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxvcy51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXNzLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LG9zLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PXNzLmNhbGwoZSl9LG9zLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LG9zLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIGxzLHVzLGNzLGhzLGRzLGZzPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZihmcy5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPXBzKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBzPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IGE9Z3ModC50ZXh0LCExLG4pO2lmKG8taT09PWEubGVuZ3RoKWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKylzW2UraSsxXT1hW2VdO2Vsc2UgYS5sZW5ndGg8MWU0P3Muc3BsaWNlKGkrMSxvLWksLi4uYSk6dGhpcy5fbGluZU9mZnNldHM9cz1zLnNsaWNlKDAsaSsxKS5jb25jYXQoYSxzLnNsaWNlKG8rMSkpO2NvbnN0IGw9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09bClmb3IobGV0IGU9aSsxK2EubGVuZ3RoLHQ9cy5sZW5ndGg7ZTx0O2UrKylzW2VdPXNbZV0rbH1lbHNle2lmKCFmcy5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz1ncyh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24gbXMoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7bXMocix0KSxtcyhpLHQpO2xldCBvPTAscz0wLGE9MDtmb3IoO288ci5sZW5ndGgmJnM8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVtzXSk7ZVthKytdPW48PTA/cltvKytdOmlbcysrXX1mb3IoO288ci5sZW5ndGg7KWVbYSsrXT1yW28rK107Zm9yKDtzPGkubGVuZ3RoOyllW2ErK109aVtzKytdO3JldHVybiBlfWZ1bmN0aW9uIGdzKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcHMoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gdnMoZSl7Y29uc3QgdD1wcyhlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gYnMoZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiB5cyhlKXtyZXR1cm4gYnN9KHVzPWxzfHwobHM9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBmcyhlLHQsbixyKX0sdXMudXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgZnMpcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LHVzLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPW1zKHQubWFwKHZzKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKGhzPWNzfHwoY3M9e30pKVtocy5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsaHNbaHMuRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixoc1tocy5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixoc1tocy5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGhzW2hzLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLGhzW2hzLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLGhzW2hzLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixoc1tocy5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLGhzW2hzLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsaHNbaHMuUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixoc1tocy5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLGhzW2hzLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsaHNbaHMuVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixoc1tocy5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsaHNbaHMuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixoc1tocy5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLGhzW2hzLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLGhzW2hzLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsaHNbaHMuU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKGRzfHwoZHM9e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W2ZvLk1hcmtkb3duLGZvLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBDcyxfcyxTcyx3cz0oQ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oQ3M9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUNzKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksQXM9eXMoKSx4cz17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpBcygiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6QXMoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOkFzKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOkFzKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpBcygiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6QXMoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpBcygiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6QXMoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LEVzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksTHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIHdzKHQsZSksdH0oRXMpLE5zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIHdzKHQsZSksdH0oRXMpLGtzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIHdzKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKSxScz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiB3cyh0LGUpLHR9KEVzKSxUcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIHdzKHQsZSksdH0oRXMpLE9zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4gd3ModCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKSxNcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiB3cyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKTtmdW5jdGlvbiBJcyhlKXtyZXR1cm4gdG8oZSk/ZT97fTp7bm90Ont9fTplfShTcz1fc3x8KF9zPXt9KSlbU3MuS2V5PTBdPSJLZXkiLFNzW1NzLkVudW09MV09IkVudW0iO3ZhciBQcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxqcyhlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksRnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksVnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PWNzLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPUFzKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBEcyhlKXtyZXR1cm4gWmkoZSl9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIFhpKGUpfWZ1bmN0aW9uIGpzKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHFzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBKaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPVNpLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IFZzO3JldHVybiBCcyh0aGlzLnJvb3QsdCxyLEZzLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT1paS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gTGkuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyBQcyh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJkJzKHRoaXMucm9vdCxlLG5ldyBWcyxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gQnMoZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxzPTAsYT1lLnByb3BlcnRpZXM7czxhLmxlbmd0aDtzKyspe2lbSz0ocD1hW3NdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGw9MCx1PXQucmVxdWlyZWQ7bDx1Lmxlbmd0aDtsKyspe2lmKCFpW3c9dVtsXV0pe3ZhciBjPWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPWM/e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOkFzKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyx3KX0pfX12YXIgZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGY9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZjxtLmxlbmd0aDtmKyspe2Qodz1tW2ZdKTt2YXIgZz10LnByb3BlcnRpZXNbd107aWYoaz1pW3ddKWlmKHRvKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLHcpfSl9ZWxzZSBCcyhrLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIHY9MCxiPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO3Y8Yi5sZW5ndGg7disrKWZvcih2YXIgeT1iW3ZdLEM9cm8oeSksXz0wLFM9by5zbGljZSgwKTtfPFMubGVuZ3RoO18rKyl7dmFyIHc9U1tfXTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QodykpaWYoZCh3KSxrPWlbd10paWYodG8oZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLHcpfSl9ZWxzZSBCcyhrLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLHg9bztBPHgubGVuZ3RoO0ErKyl7aWYoaz1pW3c9eFtBXV0pe3ZhciBFPW5ldyBWcztCcyhrLHQuYWRkaXRpb25hbFByb3BlcnRpZXMsRSxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChFKX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciBMPTAsTj1vO0w8Ti5sZW5ndGg7TCsrKXt2YXIgaztpZihrPWlbdz1OW0xdXSl7cD1rLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsdyl9KX19UWkodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7UWkodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFI9MCxUPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtSPFQubGVuZ3RoO1IrKyl7aWYoaVtLPVRbUl1dKXt2YXIgTz10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KE8pKWZvcih2YXIgTT0wLEk9TztNPEkubGVuZ3RoO00rKyl7dmFyIFA9SVtNXTtpW1BdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUCxLKX0pfWVsc2UgaWYoZz1JcyhPKSlCcyhlLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9fXZhciBGPUlzKHQucHJvcGVydHlOYW1lcyk7aWYoRilmb3IodmFyIFY9MCxEPWUucHJvcGVydGllcztWPEQubGVuZ3RoO1YrKyl7dmFyIEs7KEs9RFtWXS5rZXlOb2RlKSYmQnMoSyxGLG4sRnMuaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9SXMoaVtvXSksYT1uZXcgVnM7KGQ9ZS5pdGVtc1tvXSk/KEJzKGQscyxhLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKGEpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBsPWkubGVuZ3RoO2w8ZS5pdGVtcy5sZW5ndGg7bCsrKXthPW5ldyBWcztCcyhlLml0ZW1zW2xdLHQuYWRkaXRpb25hbEl0ZW1zLGEsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goYSl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgdT1Jcyh0Lml0ZW1zKTtpZih1KWZvcih2YXIgYz0wLGg9ZS5pdGVtcztjPGgubGVuZ3RoO2MrKyl7dmFyIGQ7QnMoZD1oW2NdLHUsYT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goYSl9fXZhciBmPUlzKHQuY29udGFpbnMpO2lmKGYpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFZzO3JldHVybiBCcyhlLGYsdCxGcy5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9UWkodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7UWkodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPURzKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7UWkodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpBcygibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO1FpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9cm8odC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxBcygicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgcz12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIGE9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTthP2FbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChzPUFzKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOnM9QXMoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBzPUFzKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTtzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fEFzKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixzKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgbD14c1t0LmZvcm1hdF07ZS52YWx1ZSYmbC5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8bC5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoUWkodC5tdWx0aXBsZU9mKSl7dmFyIHM9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKXM9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgYT1vKHQubXVsdGlwbGVPZiksbD1vKGkpO2lmKGEmJmwpe3ZhciB1PU1hdGgucG93KDEwLE1hdGguYWJzKGwubXVsdGlwbGllci1hLm11bHRpcGxpZXIpKTtsLm11bHRpcGxpZXI8YS5tdWx0aXBsaWVyP2wudmFsdWUqPXU6YS52YWx1ZSo9dSxzPWwudmFsdWUlYS52YWx1ZX19MCE9PXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBRaSh0KT90OnRvKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighdG8odCl8fCF0KXJldHVybiBlfXZhciBkPWModC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7UWkoZCkmJmk8PWQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGQpfSk7dmFyIGY9Yyh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtRaShmKSYmaT49ZiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpBcygiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZil9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO1FpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO1FpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBCcyhpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxBcygidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxzPXQuYWxsT2Y7bzxzLmxlbmd0aDtvKyspe3ZhciBhPXNbb107QnMoaSxJcyhhKSxuLHIpfXZhciBsPUlzKHQubm90KTtpZihsKXt2YXIgdT1uZXcgVnMsYz1yLm5ld1N1YigpO0JzKGksbCx1LGMpLHUuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpBcygibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGQ9Yy5zY2hlbWFzO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2YuaW52ZXJ0ZWQ9IWYuaW52ZXJ0ZWQsci5hZGQoZil9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLHM9dm9pZCAwLGE9MCxsPWU7YTxsLmxlbmd0aDthKyspe3ZhciB1PUlzKGxbYV0pLGM9bmV3IFZzLGg9ci5uZXdTdWIoKTtpZihCcyhpLHUsYyxoKSxjLmhhc1Byb2JsZW1zKCl8fG8ucHVzaCh1KSxzKWlmKHR8fGMuaGFzUHJvYmxlbXMoKXx8cy52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBkPWMuY29tcGFyZShzLnZhbGlkYXRpb25SZXN1bHQpO2Q+MD9zPXtzY2hlbWE6dSx2YWxpZGF0aW9uUmVzdWx0OmMsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1kJiYocy5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCkscy52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyhjKSl9ZWxzZSBzLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxzLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPWMucHJvcGVydGllc01hdGNoZXMscy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPWMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIHM9e3NjaGVtYTp1LHZhbGlkYXRpb25SZXN1bHQ6YyxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpBcygib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLHMmJihuLm1lcmdlKHMudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9cy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9cy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShzLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFZzLG89ci5uZXdTdWIoKTtCcyhpLElzKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9SXModC5pZik7cCYmKHY9cCxiPUlzKHQudGhlbikseT1Jcyh0LmVsc2UpLEM9SXModiksXz1uZXcgVnMsUz1yLm5ld1N1YigpLEJzKGksQyxfLFMpLHIubWVyZ2UoUyksXy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6YiYmZyhiKSk7dmFyIHYsYix5LEMsXyxTO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciB3PURzKGkpLEE9ITEseD0wLEU9dC5lbnVtO3g8RS5sZW5ndGg7eCsrKXtpZihZaSh3LEVbeF0pKXtBPSEwO2JyZWFrfX1uLmVudW1WYWx1ZXM9dC5lbnVtLG4uZW51bVZhbHVlTWF0Y2g9QSxBfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOmNzLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSl9KX1pZihlbyh0LmNvbnN0KSl7WWkodz1EcyhpKSx0LmNvbnN0KT9uLmVudW1WYWx1ZU1hdGNoPSEwOihuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOmNzLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KHQuY29uc3QpKX0pLG4uZW51bVZhbHVlTWF0Y2g9ITEpLG4uZW51bVZhbHVlcz1bdC5jb25zdF19dC5kZXByZWNhdGlvbk1lc3NhZ2UmJmkucGFyZW50JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5wYXJlbnQub2Zmc2V0LGxlbmd0aDppLnBhcmVudC5sZW5ndGh9LHNldmVyaXR5OlNpLldhcm5pbmcsbWVzc2FnZTp0LmRlcHJlY2F0aW9uTWVzc2FnZSxjb2RlOmNzLkRlcHJlY2F0ZWR9KX0oKSxyLmFkZCh7bm9kZTppLHNjaGVtYTp0fSl9fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIG49W10scj0tMSxpPWUuZ2V0VGV4dCgpLG89emkoaSwhMSkscz10JiZ0LmNvbGxlY3RDb21tZW50cz9bXTp2b2lkIDA7ZnVuY3Rpb24gYSgpe2Zvcig7Oyl7dmFyIHQ9by5zY2FuKCk7c3dpdGNoKGMoKSx0KXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheShzKSYmcy5wdXNoKGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKSxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH19fWZ1bmN0aW9uIGwodCxpLG8scyxhKXtpZih2b2lkIDA9PT1hJiYoYT1TaS5FcnJvciksMD09PW4ubGVuZ3RofHxvIT09cil7dmFyIGw9aWkuY3JlYXRlKGUucG9zaXRpb25BdChvKSxlLnBvc2l0aW9uQXQocykpO24ucHVzaChMaS5jcmVhdGUobCx0LGEsaSxlLmxhbmd1YWdlSWQpKSxyPW99fWZ1bmN0aW9uIHUoZSx0LG4scixzKXt2b2lkIDA9PT1uJiYobj12b2lkIDApLHZvaWQgMD09PXImJihyPVtdKSx2b2lkIDA9PT1zJiYocz1bXSk7dmFyIHU9by5nZXRUb2tlbk9mZnNldCgpLGM9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKTtpZih1PT09YyYmdT4wKXtmb3IodS0tO3U+MCYmL1xzLy50ZXN0KGkuY2hhckF0KHUpKTspdS0tO2M9dSsxfWlmKGwoZSx0LHUsYyksbiYmaChuLCExKSxyLmxlbmd0aCtzLmxlbmd0aD4wKWZvcih2YXIgZD1vLmdldFRva2VuKCk7MTchPT1kOyl7aWYoLTEhPT1yLmluZGV4T2YoZCkpe2EoKTticmVha31pZigtMSE9PXMuaW5kZXhPZihkKSlicmVhaztkPWEoKX1yZXR1cm4gbn1mdW5jdGlvbiBjKCl7c3dpdGNoKG8uZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIHUoQXMoIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSxjcy5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiB1KEFzKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSxjcy5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKSwhMDtjYXNlIDM6cmV0dXJuIHUoQXMoIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxjcy5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpLCEwO2Nhc2UgMTpyZXR1cm4gdShBcygiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksY3MuVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiB1KEFzKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksY3MuVW5leHBlY3RlZEVuZE9mU3RyaW5nKSwhMDtjYXNlIDY6cmV0dXJuIHUoQXMoIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLGNzLkludmFsaWRDaGFyYWN0ZXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZS5sZW5ndGg9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKS1lLm9mZnNldCx0JiZhKCksZX12YXIgZD1uZXcgVHModm9pZCAwLDAsMCk7ZnVuY3Rpb24gZih0LG4pe3ZhciByPW5ldyBPcyh0LG8uZ2V0VG9rZW5PZmZzZXQoKSxkKSxpPW0ocik7aWYoIWkpe2lmKDE2IT09by5nZXRUb2tlbigpKXJldHVybjt1KEFzKCJEb3VibGVRdW90ZXNFeHBlY3RlZCIsIlByb3BlcnR5IGtleXMgbXVzdCBiZSBkb3VibGVxdW90ZWQiKSxjcy5VbmRlZmluZWQpO3ZhciBzPW5ldyBUcyhyLG8uZ2V0VG9rZW5PZmZzZXQoKSxvLmdldFRva2VuTGVuZ3RoKCkpO3MudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaT1zLGEoKX1yLmtleU5vZGU9aTt2YXIgYz1uW2kudmFsdWVdO2lmKGM/KGwoQXMoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGNzLkR1cGxpY2F0ZUtleSxyLmtleU5vZGUub2Zmc2V0LHIua2V5Tm9kZS5vZmZzZXQrci5rZXlOb2RlLmxlbmd0aCxTaS5XYXJuaW5nKSwib2JqZWN0Ij09dHlwZW9mIGMmJmwoQXMoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGNzLkR1cGxpY2F0ZUtleSxjLmtleU5vZGUub2Zmc2V0LGMua2V5Tm9kZS5vZmZzZXQrYy5rZXlOb2RlLmxlbmd0aCxTaS5XYXJuaW5nKSxuW2kudmFsdWVdPSEwKTpuW2kudmFsdWVdPXIsNj09PW8uZ2V0VG9rZW4oKSlyLmNvbG9uT2Zmc2V0PW8uZ2V0VG9rZW5PZmZzZXQoKSxhKCk7ZWxzZSBpZih1KEFzKCJDb2xvbkV4cGVjdGVkIiwiQ29sb24gZXhwZWN0ZWQiKSxjcy5Db2xvbkV4cGVjdGVkKSwxMD09PW8uZ2V0VG9rZW4oKSYmZS5wb3NpdGlvbkF0KGkub2Zmc2V0K2kubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIHIubGVuZ3RoPWkubGVuZ3RoLHI7dmFyIGg9ZyhyKTtyZXR1cm4gaD8oci52YWx1ZU5vZGU9aCxyLmxlbmd0aD1oLm9mZnNldCtoLmxlbmd0aC1yLm9mZnNldCxyKTp1KEFzKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxjcy5WYWx1ZUV4cGVjdGVkLHIsW10sWzIsNV0pfWZ1bmN0aW9uIG0oZSl7aWYoMTA9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBUcyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cmV0dXJuIHQudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaCh0LCEwKX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMz09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IGtzKGUsby5nZXRUb2tlbk9mZnNldCgpKTthKCk7Zm9yKHZhciBuPSExOzQhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7bnx8dShBcygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksY3MuVmFsdWVFeHBlY3RlZCk7dmFyIHI9by5nZXRUb2tlbk9mZnNldCgpO2lmKGEoKSw0PT09by5nZXRUb2tlbigpKXtuJiZsKEFzKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxjcy5UcmFpbGluZ0NvbW1hLHIscisxKTtjb250aW51ZX19ZWxzZSBuJiZ1KEFzKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxjcy5Db21tYUV4cGVjdGVkKTt2YXIgaT1nKHQpO2k/dC5pdGVtcy5wdXNoKGkpOnUoQXMoIlByb3BlcnR5RXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGNzLlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxuPSEwfXJldHVybiA0IT09by5nZXRUb2tlbigpP3UoQXMoIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksY3MuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtpZigxPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgTXMoZSxvLmdldFRva2VuT2Zmc2V0KCkpLG49T2JqZWN0LmNyZWF0ZShudWxsKTthKCk7Zm9yKHZhciByPSExOzIhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7cnx8dShBcygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksY3MuUHJvcGVydHlFeHBlY3RlZCk7dmFyIGk9by5nZXRUb2tlbk9mZnNldCgpO2lmKGEoKSwyPT09by5nZXRUb2tlbigpKXtyJiZsKEFzKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxjcy5UcmFpbGluZ0NvbW1hLGksaSsxKTtjb250aW51ZX19ZWxzZSByJiZ1KEFzKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxjcy5Db21tYUV4cGVjdGVkKTt2YXIgcz1mKHQsbik7cz90LnByb3BlcnRpZXMucHVzaChzKTp1KEFzKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxjcy5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSkscj0hMH1yZXR1cm4gMiE9PW8uZ2V0VG9rZW4oKT91KEFzKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksY3MuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fG0oZSl8fGZ1bmN0aW9uKGUpe2lmKDExPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgUnMoZSxvLmdldFRva2VuT2Zmc2V0KCkpO2lmKDA9PT1vLmdldFRva2VuRXJyb3IoKSl7dmFyIG49by5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciByPUpTT04ucGFyc2Uobik7aWYoIVFpKHIpKXJldHVybiB1KEFzKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLGNzLlVuZGVmaW5lZCx0KTt0LnZhbHVlPXJ9Y2F0Y2goZSl7cmV0dXJuIHUoQXMoIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksY3MuVW5kZWZpbmVkLHQpfXQuaXNJbnRlZ2VyPS0xPT09bi5pbmRleE9mKCIuIil9cmV0dXJuIGgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7c3dpdGNoKG8uZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBoKG5ldyBMcyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gaChuZXcgTnMoZSwhMCxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGgobmV3IE5zKGUsITEsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fShlKX12YXIgcD12b2lkIDA7cmV0dXJuIDE3IT09YSgpJiYoKHA9ZyhwKSk/MTchPT1vLmdldFRva2VuKCkmJnUoQXMoIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksY3MuVW5kZWZpbmVkKTp1KEFzKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksY3MuVW5kZWZpbmVkKSksbmV3IHFzKHAsbixzKX1mdW5jdGlvbiAkcyhlLHQsbil7aWYobnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHI9dCsiXHQiO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgaT0iW1xuIixvPTA7bzxlLmxlbmd0aDtvKyspaSs9ciskcyhlW29dLHIsbiksbzxlLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4iO3JldHVybiBpKz10KyJdIn12YXIgcz1PYmplY3Qua2V5cyhlKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuInt9Ijtmb3IoaT0ie1xuIixvPTA7bzxzLmxlbmd0aDtvKyspe3ZhciBhPXNbb107aSs9citKU09OLnN0cmluZ2lmeShhKSsiOiAiKyRzKGVbYV0scixuKSxvPHMubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiJ9cmV0dXJuIGkrPXQrIn0ifXJldHVybiBuKGUpfXZhciBXcz15cygpLEhzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49UHJvbWlzZSksdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW4sdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihuKXt2YXIgcj1uKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sbz1lLmdldFRleHQoKSxzPWUub2Zmc2V0QXQodCksYT1uLmdldE5vZGVGcm9tT2Zmc2V0KHMsITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoZSxhP2Eub2Zmc2V0OjAscykpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtpZihhJiZzPT09YS5vZmZzZXQrYS5sZW5ndGgmJnM+MCl7dmFyIGw9b1tzLTFdOygib2JqZWN0Ij09PWEudHlwZSYmIn0iPT09bHx8ImFycmF5Ij09PWEudHlwZSYmIl0iPT09bCkmJihhPWEucGFyZW50KX12YXIgdSxjPXRoaXMuZ2V0Q3VycmVudFdvcmQoZSxzKTtpZighYXx8InN0cmluZyIhPT1hLnR5cGUmJiJudW1iZXIiIT09YS50eXBlJiYiYm9vbGVhbiIhPT1hLnR5cGUmJiJudWxsIiE9PWEudHlwZSl7dmFyIGg9cy1jLmxlbmd0aDtoPjAmJiciJz09PW9baC0xXSYmaC0tLHU9aWkuY3JlYXRlKGUucG9zaXRpb25BdChoKSx0KX1lbHNlIHU9aWkuY3JlYXRlKGUucG9zaXRpb25BdChhLm9mZnNldCksZS5wb3NpdGlvbkF0KGEub2Zmc2V0K2EubGVuZ3RoKSk7dmFyIGQ9e30sZj17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGFiZWwsbj1kW3RdO2lmKG4pbi5kb2N1bWVudGF0aW9ufHwobi5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksbi5kZXRhaWx8fChuLmRldGFpbD1lLmRldGFpbCk7ZWxzZXtpZigodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aD42MCl7dmFyIHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iO2Rbcl18fCh0PXIpfXUmJnZvaWQgMCE9PWUuaW5zZXJ0VGV4dCYmKGUudGV4dEVkaXQ9VGkucmVwbGFjZSh1LGUuaW5zZXJ0VGV4dCkpLGUubGFiZWw9dCxkW3RdPWUsaS5pdGVtcy5wdXNoKGUpfX0sc2V0QXNJbmNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5pc0luY29tcGxldGU9ITB9LGVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9LGxvZzpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pdGVtcy5sZW5ndGh9fTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBsPVtdLGg9ITAsbT0iIixnPXZvaWQgMDtpZihhJiYic3RyaW5nIj09PWEudHlwZSl7dmFyIHA9YS5wYXJlbnQ7cCYmInByb3BlcnR5Ij09PXAudHlwZSYmcC5rZXlOb2RlPT09YSYmKGg9IXAudmFsdWVOb2RlLGc9cCxtPW8uc3Vic3RyKGEub2Zmc2V0KzEsYS5sZW5ndGgtMikscCYmKGE9cC5wYXJlbnQpKX1pZihhJiYib2JqZWN0Ij09PWEudHlwZSl7aWYoYS5vZmZzZXQ9PT1zKXJldHVybiBpO2EucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXtnJiZnPT09ZXx8KGRbZS5rZXlOb2RlLnZhbHVlXT14by5jcmVhdGUoIl9fIikpfSkpO3ZhciB2PSIiO2gmJih2PXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLGUub2Zmc2V0QXQodS5lbmQpKSksdD9yLmdldFByb3BlcnR5Q29tcGxldGlvbnModCxuLGEsaCx2LGYpOnIuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMobixhLG0sZik7dmFyIGI9S3MoYSk7ci5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoZS51cmksYixjLGgsIiI9PT12LGYpO24mJmwucHVzaChuKX0pKSwhdCYmYy5sZW5ndGg+MCYmJyInIT09by5jaGFyQXQocy1jLmxlbmd0aC0xKSYmKGYuYWRkKHtraW5kOnBvLlByb3BlcnR5LGxhYmVsOnIuZ2V0TGFiZWxGb3JWYWx1ZShjKSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGMsdm9pZCAwLCExLHYpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksZi5zZXRBc0luY29tcGxldGUoKSl9dmFyIHk9e307cmV0dXJuIHQ/ci5nZXRWYWx1ZUNvbXBsZXRpb25zKHQsbixhLHMsZSxmLHkpOnIuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnMobixhLHMsZSxmKSxyLmNvbnRyaWJ1dGlvbnMubGVuZ3RoPjAmJnIuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zKG4sYSxzLGUsZixsKSxyLnByb21pc2VDb25zdHJ1Y3Rvci5hbGwobCkudGhlbigoZnVuY3Rpb24oKXtpZigwPT09Zi5nZXROdW1iZXJPZlByb3Bvc2FscygpKXt2YXIgdD1zOyFhfHwic3RyaW5nIiE9PWEudHlwZSYmIm51bWJlciIhPT1hLnR5cGUmJiJib29sZWFuIiE9PWEudHlwZSYmIm51bGwiIT09YS50eXBlfHwodD1hLm9mZnNldCthLmxlbmd0aCk7dmFyIG49ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsdCk7ci5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKHksbixmKX1yZXR1cm4gaX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9dGhpczt0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09biYmIWUuaW52ZXJ0ZWQpe3ZhciB0PWUuc2NoZW1hLnByb3BlcnRpZXM7dCYmT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJiFuLmRlcHJlY2F0aW9uTWVzc2FnZSYmIW4uZG9Ob3RTdWdnZXN0KXt2YXIgYT17a2luZDpwby5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6cy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSxuLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6cy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjpzLmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYoYS5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCksYS5pbnNlcnRUZXh0JiZubyhhLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYoYS5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChhKX19KSk7dmFyIGE9ZS5zY2hlbWEucHJvcGVydHlOYW1lcztpZigib2JqZWN0Ij09dHlwZW9mIGEmJiFhLmRlcHJlY2F0aW9uTWVzc2FnZSYmIWEuZG9Ob3RTdWdnZXN0KXt2YXIgbD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCk7dmFyIG49e2tpbmQ6cG8uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6cy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHxzLmZyb21NYXJrdXAoYS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8YS5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PWEuc3VnZ2VzdFNvcnRUZXh0JiYobi5zb3J0VGV4dD1hLnN1Z2dlc3RTb3J0VGV4dCksbi5pbnNlcnRUZXh0JiZubyhuLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYobi5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChuKX07aWYoYS5lbnVtKWZvcih2YXIgdT0wO3U8YS5lbnVtLmxlbmd0aDt1Kyspe3ZhciBjPXZvaWQgMDthLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmdTxhLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/Yz1zLmZyb21NYXJrdXAoYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdV0pOmEuZW51bURlc2NyaXB0aW9ucyYmdTxhLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYz1hLmVudW1EZXNjcmlwdGlvbnNbdV0pLGwoYS5lbnVtW3VdLGMpfWEuY29uc3QmJmwoYS5jb25zdCl9fX0pKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7ci5hZGQoe2tpbmQ6cG8uUHJvcGVydHksbGFiZWw6dCxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxmaWx0ZXJUZXh0OmkuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHQpLGRvY3VtZW50YXRpb246IiJ9KX0pKX07aWYodC5wYXJlbnQpaWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBzPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZSE9PXQucGFyZW50JiZlLmtleU5vZGUudmFsdWU9PT1zJiZlLnZhbHVlTm9kZSYmIm9iamVjdCI9PT1lLnZhbHVlTm9kZS50eXBlJiZvKGUudmFsdWVOb2RlKSwhMH0pKX1lbHNlImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJvYmplY3QiPT09ZS50eXBlJiZlIT09dCYmbyhlKX0pKTtlbHNlIm9iamVjdCI9PT10LnR5cGUmJnIuYWRkKHtraW5kOnBvLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMscz1uO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwocz10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO3ZhciBhPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihyLHMpLGw9ZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJiFqcyhlLnBhcmVudCxuLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsciksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxyLGEpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUsYSxpKX07aWYoInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PXQudmFsdWVOb2RlO2lmKHUmJihuPnUub2Zmc2V0K3UubGVuZ3RofHwib2JqZWN0Ij09PXUudHlwZXx8ImFycmF5Ij09PXUudHlwZSkpcmV0dXJuO3ZhciBjPXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1jJiZlLnZhbHVlTm9kZSYmbChlLnZhbHVlTm9kZSksITB9KSksIiRzY2hlbWEiPT09YyYmdC5wYXJlbnQmJiF0LnBhcmVudC5wYXJlbnQmJnRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoYSxpKX1pZigiYXJyYXkiPT09dC50eXBlKWlmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGg9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1oJiZlLnZhbHVlTm9kZSYmImFycmF5Ij09PWUudmFsdWVOb2RlLnR5cGUmJmUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2gobCksITB9KSl9ZWxzZSB0Lml0ZW1zLmZvckVhY2gobCl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8scyl7dmFyIGE9cixsPXZvaWQgMCx1PXZvaWQgMDtpZighbnx8InN0cmluZyIhPT1uLnR5cGUmJiJudW1iZXIiIT09bi50eXBlJiYiYm9vbGVhbiIhPT1uLnR5cGUmJiJudWxsIiE9PW4udHlwZXx8KGE9bi5vZmZzZXQrbi5sZW5ndGgsdT1uLG49bi5wYXJlbnQpLG4pe2lmKCJwcm9wZXJ0eSI9PT1uLnR5cGUmJnI+KG4uY29sb25PZmZzZXR8fDApKXt2YXIgYz1uLnZhbHVlTm9kZTtpZihjJiZyPmMub2Zmc2V0K2MubGVuZ3RoKXJldHVybjtsPW4ua2V5Tm9kZS52YWx1ZSxuPW4ucGFyZW50fWlmKG4mJih2b2lkIDAhPT1sfHwiYXJyYXkiPT09bi50eXBlKSl7Zm9yKHZhciBoPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihpLGEpLGQ9MCxmPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0LHUpO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgbT1mW2RdO2lmKG0ubm9kZT09PW4mJiFtLmludmVydGVkJiZtLnNjaGVtYSl7aWYoImFycmF5Ij09PW4udHlwZSYmbS5zY2hlbWEuaXRlbXMpaWYoQXJyYXkuaXNBcnJheShtLnNjaGVtYS5pdGVtcykpe3ZhciBnPXRoaXMuZmluZEl0ZW1BdE9mZnNldChuLGkscik7ZzxtLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtc1tnXSxoLG8scyl9ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXMsaCxvLHMpO2lmKHZvaWQgMCE9PWwpe3ZhciBwPSExO2lmKG0uc2NoZW1hLnByb3BlcnRpZXMpKF89bS5zY2hlbWEucHJvcGVydGllc1tsXSkmJihwPSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKSk7aWYobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiFwKWZvcih2YXIgdj0wLGI9T2JqZWN0LmtleXMobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO3Y8Yi5sZW5ndGg7disrKXt2YXIgeT1iW3ZdLEM9cm8oeSk7aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KGwpKXtwPSEwO3ZhciBfPW0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW3ldO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKX19aWYobS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFwKXtfPW0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKX19fX0iJHNjaGVtYSIhPT1sfHxuLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhoLG8pLHMuYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxoLG8pLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxoLG8pKSxzLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihoLG8pfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLnNjaGVtYSwiIixvLHMpfSxlLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpe2lmKCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fCh0PXQucGFyZW50KSx0JiYicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIHM9dC5rZXlOb2RlLnZhbHVlLGE9dC52YWx1ZU5vZGU7aWYoKCFhfHxuPD1hLm9mZnNldCthLmxlbmd0aCkmJnQucGFyZW50KXt2YXIgbD1Lcyh0LnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMoci51cmksbCxzLGkpO3QmJm8ucHVzaCh0KX0pKX19fWVsc2UgdGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhyLnVyaSxpKTt0JiZvLnB1c2godCl9KSl9LGUucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmNvbGxlY3RUeXBlcyhlLHIpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmZS5vbmVPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpKX0sZS5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0wKTt2YXIgbz0hMTtpZihlbyhlLmRlZmF1bHQpKXtmb3IodmFyIHM9ZS50eXBlLGE9ZS5kZWZhdWx0LGw9cjtsPjA7bC0tKWE9W2FdLHM9ImFycmF5IjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShhKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGEsdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygianNvbi5zdWdnZXN0LmRlZmF1bHQiLCJEZWZhdWx0IHZhbHVlIil9KSxvPSEwfUFycmF5LmlzQXJyYXkoZS5leGFtcGxlcykmJmUuZXhhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7Zm9yKHZhciBhPWUudHlwZSxsPXMsdT1yO3U+MDt1LS0pbD1bbF0sYT0iYXJyYXkiO24uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6aS5nZXRMYWJlbEZvclZhbHVlKGwpLGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobCx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXR9KSxvPSEwfSkpLEFycmF5LmlzQXJyYXkoZS5kZWZhdWx0U25pcHBldHMpJiZlLmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKChmdW5jdGlvbihzKXt2YXIgYSxsLHU9ZS50eXBlLGM9cy5ib2R5LGg9cy5sYWJlbDtpZihlbyhjKSl7ZS50eXBlO2Zvcih2YXIgZD1yO2Q+MDtkLS0pYz1bY107YT1pLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoYyx0KSxsPWkuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZShjKSxoPWh8fGkuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUoYyl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIHMuYm9keVRleHQpcmV0dXJuO3ZhciBmPSIiLG09IiIsZz0iIjtmb3IoZD1yO2Q+MDtkLS0pZj1mK2crIltcbiIsbT1tKyJcbiIrZysiXSIsZys9Ilx0Iix1PSJhcnJheSI7YT1mK2crcy5ib2R5VGV4dC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrZykrbSt0LGg9aHx8YSxsPWEucmVwbGFjZSgvW1xuXS9nLCIiKX1uLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKHUpLGxhYmVsOmgsZG9jdW1lbnRhdGlvbjppLmZyb21NYXJrdXAocy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8cy5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OmEsaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6bH0pLG89ITB9KSksIW8mJiJvYmplY3QiPT10eXBlb2YgZS5pdGVtcyYmIUFycmF5LmlzQXJyYXkoZS5pdGVtcykmJnI8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLml0ZW1zLHQsbixyKzEpfSxlLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7aWYoZW8oZS5jb25zdCkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgcj0wLGk9ZS5lbnVtLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmVudW1bcl0scz10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmcjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP3M9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3JdKTplLmVudW1EZXNjcmlwdGlvbnMmJnI8ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKHM9ZS5lbnVtRGVzY3JpcHRpb25zW3JdKSxuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjpzfSl9fSxlLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlLmVudW0pJiYhZW8oZS5jb25zdCkpe3ZhciBuPWUudHlwZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KSk6biYmKHRbbl09ITApfX0sZS5wcm90b3R5cGUuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3QmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJ7fSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoe30sdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygiZGVmYXVsdHMub2JqZWN0IiwiTmV3IG9iamVjdCIpLGRvY3VtZW50YXRpb246IiJ9KSxlLmFycmF5JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJbXSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoW10sdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygiZGVmYXVsdHMuYXJyYXkiLCJOZXcgYXJyYXkiKSxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImJvb2xlYW4iKSxsYWJlbDplPyJ0cnVlIjoiZmFsc2UiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGROdWxsVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCl7dC5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgibnVsbCIpLGxhYmVsOiJudWxsIixpbnNlcnRUZXh0OiJudWxsIitlLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKChmdW5jdGlvbihlKXtyZXR1cm4iaHR0cCI9PT1lfHwiaHR0cHMiPT09ZX0pKTtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3JldHVybiB0LmFkZCh7a2luZDpwby5Nb2R1bGUsbGFiZWw6bi5nZXRMYWJlbEZvclZhbHVlKHIpLGZpbHRlclRleHQ6bi5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUociksaW5zZXJ0VGV4dDpuLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGUpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KSl9LGUucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPUpTT04uc3RyaW5naWZ5KGUsbnVsbCwiXHQiKTtyZXR1cm4ie30iPT09bj8ieyQxfSIrdDoiW10iPT09bj8iWyQxXSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobit0KX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiAkcyhlLCIiLChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSkrdH0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBudWxsPT09ZT8iJHsxOm51bGx9Iit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCk7Y2FzZSJzdHJpbmciOnZhciBuPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiBuPW4uc3Vic3RyKDEsbi5sZW5ndGgtMiksJyIkezE6Jysobj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobikpKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9LGUucHJvdG90eXBlLmdldFN1Z2dlc3Rpb25LaW5kPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciB0PWU7ZT10Lmxlbmd0aD4wP3RbMF06dm9pZCAwfWlmKCFlKXJldHVybiBwby5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6cmV0dXJuIHBvLlZhbHVlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gcG8uTW9kdWxlO2Nhc2UicHJvcGVydHkiOnJldHVybiBwby5Qcm9wZXJ0eX19LGUucHJvdG90eXBlLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiJbXSI7Y2FzZSJvYmplY3QiOnJldHVybiJ7fSI7ZGVmYXVsdDpyZXR1cm4gdC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSxuKTtjYXNlIm9iamVjdCI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LG4pO2RlZmF1bHQ6dmFyIHI9dC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKStuO3JldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocil9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSwiIik7aWYoIW4pcmV0dXJuIGk7dmFyIG8scz1pKyI6ICIsYT0wO2lmKHQpe2lmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpKXtpZigxPT09dC5kZWZhdWx0U25pcHBldHMubGVuZ3RoKXt2YXIgbD10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5O2VvKGwpJiYobz10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUobCwiIikpfWErPXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aH1pZih0LmVudW0mJihvfHwxIT09dC5lbnVtLmxlbmd0aHx8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZW51bVswXSwiIikpLGErPXQuZW51bS5sZW5ndGgpLGVvKHQuZGVmYXVsdCkmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSksYSsrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmV4YW1wbGVzWzBdLCIiKSksYSs9dC5leGFtcGxlcy5sZW5ndGgpLDA9PT1hKXt2YXIgdT1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlWzBdOnQudHlwZTtzd2l0Y2godXx8KHQucHJvcGVydGllcz91PSJvYmplY3QiOnQuaXRlbXMmJih1PSJhcnJheSIpKSx1KXtjYXNlImJvb2xlYW4iOm89IiQxIjticmVhaztjYXNlInN0cmluZyI6bz0nIiQxIic7YnJlYWs7Y2FzZSJvYmplY3QiOm89InskMX0iO2JyZWFrO2Nhc2UiYXJyYXkiOm89IlskMV0iO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOm89IiR7MTowfSI7YnJlYWs7Y2FzZSJudWxsIjpvPSIkezE6bnVsbH0iO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGl9fX1yZXR1cm4oIW98fGE+MSkmJihvPSIkMSIpLHMrbytyfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50V29yZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LTEscj1lLmdldFRleHQoKTtuPj0wJiYtMT09PScgXHRcblxyXHYiOntbLF19Jy5pbmRleE9mKHIuY2hhckF0KG4pKTspbi0tO3JldHVybiByLnN1YnN0cmluZyhuKzEsdCl9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj16aShlLmdldFRleHQoKSwhMCk7c3dpdGNoKG4uc2V0UG9zaXRpb24odCksbi5zY2FuKCkpe2Nhc2UgNTpjYXNlIDI6Y2FzZSA0OmNhc2UgMTc6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4iLCJ9fSxlLnByb3RvdHlwZS5maW5kSXRlbUF0T2Zmc2V0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9emkodC5nZXRUZXh0KCksITApLGk9ZS5pdGVtcyxvPWkubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBzPWlbb107aWYobj5zLm9mZnNldCtzLmxlbmd0aClyZXR1cm4gci5zZXRQb3NpdGlvbihzLm9mZnNldCtzLmxlbmd0aCksNT09PXIuc2NhbigpJiZuPj1yLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpP28rMTpvO2lmKG4+PXMub2Zmc2V0KXJldHVybiBvfXJldHVybiAwfSxlLnByb3RvdHlwZS5pc0luQ29tbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9emkoZS5nZXRUZXh0KCksITEpO3Iuc2V0UG9zaXRpb24odCk7Zm9yKHZhciBpPXIuc2NhbigpOzE3IT09aSYmci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKTxuOylpPXIuc2NhbigpO3JldHVybigxMj09PWl8fDEzPT09aSkmJnIuZ2V0VG9rZW5PZmZzZXQoKTw9bn0sZS5wcm90b3R5cGUuZnJvbU1hcmt1cD1mdW5jdGlvbihlKXtpZihlJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSlyZXR1cm57a2luZDpmby5NYXJrZG93bix2YWx1ZTplfX0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe2lmKCFlbyh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNNYXJrZG93bj1lJiZlLmNvbXBsZXRpb25JdGVtJiZBcnJheS5pc0FycmF5KGUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdCkmJi0xIT09ZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0LmluZGV4T2YoZm8uTWFya2Rvd24pfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZnVuY3Rpb24oKXtpZighZW8odGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMpKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWUmJmUuY29tcGxldGlvbkl0ZW0mJiEhZS5jb21wbGV0aW9uSXRlbS5jb21taXRDaGFyYWN0ZXJzU3VwcG9ydH1yZXR1cm4gdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnN9LGV9KCksenM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlPW58fFByb21pc2V9cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUub2Zmc2V0QXQodCksaT1uLmdldE5vZGVGcm9tT2Zmc2V0KHIpO2lmKCFpfHwoIm9iamVjdCI9PT1pLnR5cGV8fCJhcnJheSI9PT1pLnR5cGUpJiZyPmkub2Zmc2V0KzEmJnI8aS5vZmZzZXQraS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCk7dmFyIG89aTtpZigic3RyaW5nIj09PWkudHlwZSl7dmFyIHM9aS5wYXJlbnQ7aWYocyYmInByb3BlcnR5Ij09PXMudHlwZSYmcy5rZXlOb2RlPT09aSYmIShpPXMudmFsdWVOb2RlKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBhPWlpLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5vZmZzZXQpLGUucG9zaXRpb25BdChvLm9mZnNldCtvLmxlbmd0aCkpLGw9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRlbnRzOmUscmFuZ2U6YX19LHU9S3MoaSksYz10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBoPXRoaXMuY29udHJpYnV0aW9uc1tjXS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLHUpO2lmKGgpcmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbihlKXtpZihlJiZpKXt2YXIgdD1uLmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxpLm9mZnNldCkscj12b2lkIDAsbz12b2lkIDAscz12b2lkIDAsYT12b2lkIDA7dC5ldmVyeSgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09aSYmIWUuaW52ZXJ0ZWQmJmUuc2NoZW1hJiYocj1yfHxlLnNjaGVtYS50aXRsZSxvPW98fGUuc2NoZW1hLm1hcmtkb3duRGVzY3JpcHRpb258fEdzKGUuc2NoZW1hLmRlc2NyaXB0aW9uKSxlLnNjaGVtYS5lbnVtKSl7dmFyIHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKERzKGkpKTtlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/cz1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKHM9R3MoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLHMmJiJzdHJpbmciIT10eXBlb2YoYT1lLnNjaGVtYS5lbnVtW3RdKSYmKGE9SlNPTi5zdHJpbmdpZnkoYSkpfXJldHVybiEwfSkpO3ZhciB1PSIiO3JldHVybiByJiYodT1HcyhyKSksbyYmKHUubGVuZ3RoPjAmJih1Kz0iXG5cbiIpLHUrPW8pLHMmJih1Lmxlbmd0aD4wJiYodSs9IlxuXG4iKSx1Kz0iYCIuY29uY2F0KGZ1bmN0aW9uKGUpe2lmKC0xIT09ZS5pbmRleE9mKCJgIikpcmV0dXJuImBgICIrZSsiIGBgIjtyZXR1cm4gZX0oYSksImA6ICIpLmNvbmNhdChzKSksbChbdV0pfXJldHVybiBudWxsfSkpfSxlfSgpO2Z1bmN0aW9uIEdzKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSwiJDFcblxuJDMiKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9dmFyIEpzPXlzKCksWHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5qc29uU2NoZW1hU2VydmljZT1lLHRoaXMucHJvbWlzZT10LHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpTaS5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIG89W10scz17fSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmFuZ2Uuc3RhcnQubGluZSsiICIrZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2UubWVzc2FnZTtzW3RdfHwoc1t0XT0hMCxvLnB1c2goZSkpfSxsPWZ1bmN0aW9uKHIpe3ZhciBzPShudWxsPT1uP3ZvaWQgMDpuLnRyYWlsaW5nQ29tbWFzKT9lYShuLnRyYWlsaW5nQ29tbWFzKTpTaS5FcnJvcixsPShudWxsPT1uP3ZvaWQgMDpuLmNvbW1lbnRzKT9lYShuLmNvbW1lbnRzKTppLmNvbW1lbnRTZXZlcml0eSx1PShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVZhbGlkYXRpb24pP2VhKG4uc2NoZW1hVmFsaWRhdGlvbik6U2kuV2FybmluZyxjPShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVJlcXVlc3QpP2VhKG4uc2NoZW1hUmVxdWVzdCk6U2kuV2FybmluZztpZihyKXtpZihyLmVycm9ycy5sZW5ndGgmJnQucm9vdCYmYyl7dmFyIGg9dC5yb290LGQ9Im9iamVjdCI9PT1oLnR5cGU/aC5wcm9wZXJ0aWVzWzBdOnZvaWQgMDtpZihkJiYiJHNjaGVtYSI9PT1kLmtleU5vZGUudmFsdWUpe3ZhciBmPWQudmFsdWVOb2RlfHxkLG09aWkuY3JlYXRlKGUucG9zaXRpb25BdChmLm9mZnNldCksZS5wb3NpdGlvbkF0KGYub2Zmc2V0K2YubGVuZ3RoKSk7YShMaS5jcmVhdGUobSxyLmVycm9yc1swXSxjLGNzLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7bT1paS5jcmVhdGUoZS5wb3NpdGlvbkF0KGgub2Zmc2V0KSxlLnBvc2l0aW9uQXQoaC5vZmZzZXQrMSkpO2EoTGkuY3JlYXRlKG0sci5lcnJvcnNbMF0sYyxjcy5TY2hlbWFSZXNvbHZlRXJyb3IpKX19ZWxzZSBpZih1KXt2YXIgZz10LnZhbGlkYXRlKGUsci5zY2hlbWEsdSk7ZyYmZy5mb3JFYWNoKGEpfVlzKHIuc2NoZW1hKSYmKGw9dm9pZCAwKSxRcyhyLnNjaGVtYSkmJihzPXZvaWQgMCl9Zm9yKHZhciBwPTAsdj10LnN5bnRheEVycm9ycztwPHYubGVuZ3RoO3ArKyl7dmFyIGI9dltwXTtpZihiLmNvZGU9PT1jcy5UcmFpbGluZ0NvbW1hKXtpZigibnVtYmVyIiE9dHlwZW9mIHMpY29udGludWU7Yi5zZXZlcml0eT1zfWEoYil9aWYoIm51bWJlciI9PXR5cGVvZiBsKXt2YXIgeT1KcygiSW52YWxpZENvbW1lbnRUb2tlbiIsIkNvbW1lbnRzIGFyZSBub3QgcGVybWl0dGVkIGluIEpTT04uIik7dC5jb21tZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXthKExpLmNyZWF0ZShlLHksbCxjcy5Db21tZW50Tm90UGVybWl0dGVkKSl9KSl9cmV0dXJuIG99O2lmKHIpe3ZhciB1PXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitacysrO3JldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEodSxbXSxyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSkpfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSkpfSxlLnByb3RvdHlwZS5nZXRMYW5ndWFnZVN0YXR1cz1mdW5jdGlvbihlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX0sZX0oKSxacz0wO2Z1bmN0aW9uIFlzKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYodG8oZS5hbGxvd0NvbW1lbnRzKSlyZXR1cm4gZS5hbGxvd0NvbW1lbnRzO2lmKGUuYWxsT2YpZm9yKHZhciB0PTAsbj1lLmFsbE9mO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1ZcyhuW3RdKTtpZih0byhyKSlyZXR1cm4gcn19fWZ1bmN0aW9uIFFzKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYodG8oZS5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gZS5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciB0PWU7aWYodG8odC5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHQuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYoZS5hbGxPZilmb3IodmFyIG49MCxyPWUuYWxsT2Y7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVFzKHJbbl0pO2lmKHRvKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gZWEoZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBTaS5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBTaS5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciB0YT00OCxuYT01NyxyYT02NSxpYT05NyxvYT0xMDI7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGU8dGE/MDplPD1uYT9lLXRhOihlPGlhJiYoZSs9aWEtcmEpLGU+PWlhJiZlPD1vYT9lLWlhKzEwOjApfWZ1bmN0aW9uIGFhKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNypzYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypzYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KnNhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KnNhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KnNhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqc2EoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqc2EoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNipzYShlLmNoYXJDb2RlQXQoMSkpK3NhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqc2EoZS5jaGFyQ29kZUF0KDMpKStzYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqc2EoZS5jaGFyQ29kZUF0KDUpKStzYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KnNhKGUuY2hhckNvZGVBdCgxKSkrc2EoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipzYShlLmNoYXJDb2RlQXQoMykpK3NhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipzYShlLmNoYXJDb2RlQXQoNSkpK3NhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqc2EoZS5jaGFyQ29kZUF0KDcpKStzYShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgbGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUscz1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PXN8fG5vKHMudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBhPVtdLGw9MCx1PWkuaXRlbXM7bDx1Lmxlbmd0aDtsKyspe3ZhciBjPXVbbF07aWYoIm9iamVjdCI9PT1jLnR5cGUpZm9yKHZhciBoPTAsZD1jLnByb3BlcnRpZXM7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07aWYoImtleSI9PT1mLmtleU5vZGUudmFsdWUmJmYudmFsdWVOb2RlKXt2YXIgbT1zaS5jcmVhdGUoZS51cmksdWEoZSxjKSk7aWYoYS5wdXNoKHtuYW1lOkRzKGYudmFsdWVOb2RlKSxraW5kOlBvLkZ1bmN0aW9uLGxvY2F0aW9uOm19KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxhfX19cmV0dXJuIGF9Zm9yKHZhciBnPVt7bm9kZTppLGNvbnRhaW5lck5hbWU6IiJ9XSxwPTAsdj0hMSxiPVtdLHk9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmZy5wdXNoKHtub2RlOmUsY29udGFpbmVyTmFtZTpufSl9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBzPXNpLmNyZWF0ZShlLnVyaSx1YShlLHQpKSxhPW4/bisiLiIrdC5rZXlOb2RlLnZhbHVlOnQua2V5Tm9kZS52YWx1ZTtiLnB1c2goe25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLGxvY2F0aW9uOnMsY29udGFpbmVyTmFtZTpufSksZy5wdXNoKHtub2RlOmksY29udGFpbmVyTmFtZTphfSl9ZWxzZSB2PSEwfSkpfTtwPGcubGVuZ3RoOyl7dmFyIEM9Z1twKytdO3koQy5ub2RlLEMuY29udGFpbmVyTmFtZSl9cmV0dXJuIHYmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxifSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLHM9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1zfHxubyhzLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgYT1bXSxsPTAsdT1pLml0ZW1zO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2lmKCJvYmplY3QiPT09Yy50eXBlKWZvcih2YXIgaD0wLGQ9Yy5wcm9wZXJ0aWVzO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2lmKCJrZXkiPT09Zi5rZXlOb2RlLnZhbHVlJiZmLnZhbHVlTm9kZSl7dmFyIG09dWEoZSxjKSxnPXVhKGUsZi5rZXlOb2RlKTtpZihhLnB1c2goe25hbWU6RHMoZi52YWx1ZU5vZGUpLGtpbmQ6UG8uRnVuY3Rpb24scmFuZ2U6bSxzZWxlY3Rpb25SYW5nZTpnfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQocyksYX19fXJldHVybiBhfWZvcih2YXIgcD1bXSx2PVt7bm9kZTppLHJlc3VsdDpwfV0sYj0wLHk9ITEsQz1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2lmKHQpaWYobz4wKXtvLS07dmFyIHM9dWEoZSx0KSxhPXMsbD17bmFtZTpTdHJpbmcoaSksa2luZDpyLmdldFN5bWJvbEtpbmQodC50eXBlKSxyYW5nZTpzLHNlbGVjdGlvblJhbmdlOmEsY2hpbGRyZW46W119O24ucHVzaChsKSx2LnB1c2goe3Jlc3VsdDpsLmNoaWxkcmVuLG5vZGU6dH0pfWVsc2UgeT0hMH0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIHM9dWEoZSx0KSxhPXVhKGUsdC5rZXlOb2RlKSxsPVtdLHU9e25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLHJhbmdlOnMsc2VsZWN0aW9uUmFuZ2U6YSxjaGlsZHJlbjpsLGRldGFpbDpyLmdldERldGFpbChpKX07bi5wdXNoKHUpLHYucHVzaCh7cmVzdWx0Omwsbm9kZTppfSl9ZWxzZSB5PSEwfSkpfTtiPHYubGVuZ3RoOyl7dmFyIF89dltiKytdO0MoXy5ub2RlLF8ucmVzdWx0KX1yZXR1cm4geSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLHB9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gUG8uTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gUG8uU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gUG8uTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBQby5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBQby5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIFBvLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3JldHVybiB0JiYodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLHQmJnQudHJpbSgpP3Q6JyInLmNvbmNhdCh0LCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbihlKXtpZihlKXJldHVybiJib29sZWFuIj09PWUudHlwZXx8Im51bWJlciI9PT1lLnR5cGV8fCJudWxsIj09PWUudHlwZXx8InN0cmluZyI9PT1lLnR5cGU/U3RyaW5nKGUudmFsdWUpOiJhcnJheSI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI6Im9iamVjdCI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSI6dm9pZCAwfSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9W107aWYocilmb3IodmFyIG89biYmIm51bWJlciI9PXR5cGVvZiBuLnJlc3VsdExpbWl0P24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxzPXt9LGE9MCxsPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKTthPGwubGVuZ3RoO2ErKyl7dmFyIHU9bFthXTtpZighdS5pbnZlcnRlZCYmdS5zY2hlbWEmJigiY29sb3IiPT09dS5zY2hlbWEuZm9ybWF0fHwiY29sb3ItaGV4Ij09PXUuc2NoZW1hLmZvcm1hdCkmJnUubm9kZSYmInN0cmluZyI9PT11Lm5vZGUudHlwZSl7dmFyIGM9U3RyaW5nKHUubm9kZS5vZmZzZXQpO2lmKCFzW2NdKXt2YXIgaD1hYShEcyh1Lm5vZGUpKTtpZihoKXt2YXIgZD11YShlLHUubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmR9KX1pZihzW2NdPSEwLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KSl9LGUucHJvdG90eXBlLmdldENvbG9yUHJlc2VudGF0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPVtdLHM9TWF0aC5yb3VuZCgyNTUqbi5yZWQpLGE9TWF0aC5yb3VuZCgyNTUqbi5ncmVlbiksbD1NYXRoLnJvdW5kKDI1NSpuLmJsdWUpO2Z1bmN0aW9uIHUoZSl7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIDIhPT10Lmxlbmd0aD8iMCIrdDp0fXJldHVybiBpPTE9PT1uLmFscGhhPyIjIi5jb25jYXQodShzKSkuY29uY2F0KHUoYSkpLmNvbmNhdCh1KGwpKToiIyIuY29uY2F0KHUocykpLmNvbmNhdCh1KGEpKS5jb25jYXQodShsKSkuY29uY2F0KHUoTWF0aC5yb3VuZCgyNTUqbi5hbHBoYSkpKSxvLnB1c2goe2xhYmVsOmksdGV4dEVkaXQ6VGkucmVwbGFjZShyLEpTT04uc3RyaW5naWZ5KGkpKX0pLG99LGV9KCk7ZnVuY3Rpb24gdWEoZSx0KXtyZXR1cm4gaWkuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIGNhLGhhLGRhLGZhLG1hLGdhLHBhPXlzKCksdmE9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxiYT17aWQ6cGEoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOnBhKCJzY2hlbWEuanNvbi4kc2NoZW1hIiwiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOnBhKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246cGEoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OnBhKCJzY2hlbWEuanNvbi5kZWZhdWx0IiwiQSBkZWZhdWx0IHZhbHVlLiBVc2VkIGJ5IHN1Z2dlc3Rpb25zLiIpLG11bHRpcGxlT2Y6cGEoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTpwYSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTpwYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWF4aW11bSIsIk1ha2VzIHRoZSBtYXhpbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtaW5pbXVtOnBhKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnBhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDpwYSgic2NoZW1hLmpzb24ubWF4TGVuZ3RoIiwiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDpwYSgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46cGEoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczpwYSgic2NoZW1hLmpzb24uYWRkaXRpb25hbEl0ZW1zIiwiRm9yIGFycmF5cywgb25seSB3aGVuIGl0ZW1zIGlzIHNldCBhcyBhbiBhcnJheS4gSWYgaXQgaXMgYSBzY2hlbWEsIHRoZW4gdGhpcyBzY2hlbWEgdmFsaWRhdGVzIGl0ZW1zIGFmdGVyIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgaXRlbXMgYXJyYXkuIElmIGl0IGlzIGZhbHNlLCB0aGVuIGFkZGl0aW9uYWwgaXRlbXMgd2lsbCBjYXVzZSB2YWxpZGF0aW9uIHRvIGZhaWwuIiksaXRlbXM6cGEoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnBhKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczpwYSgic2NoZW1hLmpzb24ubWluSXRlbXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksdW5pcXVlSXRlbXM6cGEoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5taW5Qcm9wZXJ0aWVzIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6cGEoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOnBhKCJzY2hlbWEuanNvbi5kZWZpbml0aW9ucyIsIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOnBhKCJzY2hlbWEuanNvbi5kZXBlbmRlbmNpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTpwYSgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTpwYSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6cGEoInNjaGVtYS5qc29uLmZvcm1hdCIsIkRlc2NyaWJlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciB0aGUgdmFsdWUuIiksYWxsT2Y6cGEoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6cGEoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6cGEoInNjaGVtYS5qc29uLm9uZU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxub3Q6cGEoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDpwYSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOnBhKCJzY2hlbWEuanNvbi4kcmVmIiwiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OnBhKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnBhKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczpwYSgic2NoZW1hLmpzb24uZXhhbXBsZXMiLCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6cGEoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6cGEoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6cGEoInNjaGVtYS5qc29uLmNvbnN0IiwiQW4gaW5zdGFuY2UgdmFsaWRhdGVzIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoaXMga2V5d29yZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBrZXl3b3JkLiIpLGNvbnRlbnRNZWRpYVR5cGU6cGEoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnBhKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6cGEoInNjaGVtYS5qc29uLmlmIiwnVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBvZiB0aGUgImlmIiBzdWJzY2hlbWEgY29udHJvbHMgd2hpY2ggb2YgdGhlICJ0aGVuIiBvciAiZWxzZSIga2V5d29yZHMgYXJlIGV2YWx1YXRlZC4nKSx0aGVuOnBhKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTpwYSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihtYSBpbiB2YS5zY2hlbWFzKWZvcihmYSBpbihjYT12YS5zY2hlbWFzW21hXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihoYT1jYS5wcm9wZXJ0aWVzW2ZhXSkmJihoYT1jYS5wcm9wZXJ0aWVzW2ZhXT17fSksKGRhPWJhW2ZhXSk/aGEuZGVzY3JpcHRpb249ZGE6Y29uc29sZS5sb2coIiIuY29uY2F0KGZhLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQoZmEsJ1wnLCAiIiknKSk7Z2E9KCgpPT57dmFyIGU9ezQ3MDplPT57ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuLHI9IiIsaT0wLG89LTEscz0wLGE9MDthPD1lLmxlbmd0aDsrK2Epe2lmKGE8ZS5sZW5ndGgpbj1lLmNoYXJDb2RlQXQoYSk7ZWxzZXtpZig0Nz09PW4pYnJlYWs7bj00N31pZig0Nz09PW4pe2lmKG89PT1hLTF8fDE9PT1zKTtlbHNlIGlmKG8hPT1hLTEmJjI9PT1zKXtpZihyLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpKWlmKHIubGVuZ3RoPjIpe3ZhciBsPXIubGFzdEluZGV4T2YoIi8iKTtpZihsIT09ci5sZW5ndGgtMSl7LTE9PT1sPyhyPSIiLGk9MCk6aT0ocj1yLnNsaWNlKDAsbCkpLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoIi8iKSxvPWEscz0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXtyPSIiLGk9MCxvPWEscz0wO2NvbnRpbnVlfXQmJihyLmxlbmd0aD4wP3IrPSIvLi4iOnI9Ii4uIixpPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz0iLyIrZS5zbGljZShvKzEsYSk6cj1lLnNsaWNlKG8rMSxhKSxpPWEtby0xO289YSxzPTB9ZWxzZSA0Nj09PW4mJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gcn12YXIgcj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSxyPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIHM7bz49MD9zPWFyZ3VtZW50c1tvXToodm9pZCAwPT09ZSYmKGU9cHJvY2Vzcy5jd2QoKSkscz1lKSx0KHMpLDAhPT1zLmxlbmd0aCYmKHI9cysiLyIrcixpPTQ3PT09cy5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1uKHIsIWkpLGk/ci5sZW5ndGg+MD8iLyIrcjoiLyI6ci5sZW5ndGg+MD9yOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjt2YXIgcj00Nz09PWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO3JldHVybiAwIT09KGU9bihlLCFyKSkubGVuZ3RofHxyfHwoZT0iLiIpLGUubGVuZ3RoPjAmJmkmJihlKz0iLyIpLHI/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdChlKSxlLmxlbmd0aD4wJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsbj0wO248YXJndW1lbnRzLmxlbmd0aDsrK24pe3ZhciBpPWFyZ3VtZW50c1tuXTt0KGkpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT1lP2U9aTplKz0iLyIraSl9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOnIubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLG4pe2lmKHQoZSksdChuKSxlPT09bilyZXR1cm4iIjtpZigoZT1yLnJlc29sdmUoZSkpPT09KG49ci5yZXNvbHZlKG4pKSlyZXR1cm4iIjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChpKTsrK2kpO2Zvcih2YXIgbz1lLmxlbmd0aCxzPW8taSxhPTE7YTxuLmxlbmd0aCYmNDc9PT1uLmNoYXJDb2RlQXQoYSk7KythKTtmb3IodmFyIGw9bi5sZW5ndGgtYSx1PXM8bD9zOmwsYz0tMSxoPTA7aDw9dTsrK2gpe2lmKGg9PT11KXtpZihsPnUpe2lmKDQ3PT09bi5jaGFyQ29kZUF0KGEraCkpcmV0dXJuIG4uc2xpY2UoYStoKzEpO2lmKDA9PT1oKXJldHVybiBuLnNsaWNlKGEraCl9ZWxzZSBzPnUmJig0Nz09PWUuY2hhckNvZGVBdChpK2gpP2M9aDowPT09aCYmKGM9MCkpO2JyZWFrfXZhciBkPWUuY2hhckNvZGVBdChpK2gpO2lmKGQhPT1uLmNoYXJDb2RlQXQoYStoKSlicmVhazs0Nz09PWQmJihjPWgpfXZhciBmPSIiO2ZvcihoPWkrYysxO2g8PW87KytoKWghPT1vJiY0NyE9PWUuY2hhckNvZGVBdChoKXx8KDA9PT1mLmxlbmd0aD9mKz0iLi4iOmYrPSIvLi4iKTtyZXR1cm4gZi5sZW5ndGg+MD9mK24uc2xpY2UoYStjKTooYSs9Yyw0Nz09PW4uY2hhckNvZGVBdChhKSYmKythLG4uc2xpY2UoYSkpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGRpcm5hbWU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgbj1lLmNoYXJDb2RlQXQoMCkscj00Nz09PW4saT0tMSxvPSEwLHM9ZS5sZW5ndGgtMTtzPj0xOy0tcylpZig0Nz09PShuPWUuY2hhckNvZGVBdChzKSkpe2lmKCFvKXtpPXM7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/cj8iLyI6Ii4iOnImJjE9PT1pPyIvLyI6ZS5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7dChlKTt2YXIgcixpPTAsbz0tMSxzPSEwO2lmKHZvaWQgMCE9PW4mJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD1lLmxlbmd0aCl7aWYobi5sZW5ndGg9PT1lLmxlbmd0aCYmbj09PWUpcmV0dXJuIiI7dmFyIGE9bi5sZW5ndGgtMSxsPS0xO2ZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpe3ZhciB1PWUuY2hhckNvZGVBdChyKTtpZig0Nz09PXUpe2lmKCFzKXtpPXIrMTticmVha319ZWxzZS0xPT09bCYmKHM9ITEsbD1yKzEpLGE+PTAmJih1PT09bi5jaGFyQ29kZUF0KGEpPy0xPT0tLWEmJihvPXIpOihhPS0xLG89bCkpfXJldHVybiBpPT09bz9vPWw6LTE9PT1vJiYobz1lLmxlbmd0aCksZS5zbGljZShpLG8pfWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaWYoNDc9PT1lLmNoYXJDb2RlQXQocikpe2lmKCFzKXtpPXIrMTticmVha319ZWxzZS0xPT09byYmKHM9ITEsbz1yKzEpO3JldHVybi0xPT09bz8iIjplLnNsaWNlKGksbyl9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7dChlKTtmb3IodmFyIG49LTEscj0wLGk9LTEsbz0hMCxzPTAsYT1lLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgbD1lLmNoYXJDb2RlQXQoYSk7aWYoNDchPT1sKS0xPT09aSYmKG89ITEsaT1hKzEpLDQ2PT09bD8tMT09PW4/bj1hOjEhPT1zJiYocz0xKTotMSE9PW4mJihzPS0xKTtlbHNlIGlmKCFvKXtyPWErMTticmVha319cmV0dXJuLTE9PT1ufHwtMT09PWl8fDA9PT1zfHwxPT09cyYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gbj0odD1lKS5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8KHQubmFtZXx8IiIpKyh0LmV4dHx8IiIpLG4/bj09PXQucm9vdD9uK3I6bisiLyIrcjpyO3ZhciB0LG4scn0scGFyc2U6ZnVuY3Rpb24oZSl7dChlKTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9ZS5jaGFyQ29kZUF0KDApLG89NDc9PT1pO28/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBzPS0xLGE9MCxsPS0xLHU9ITAsYz1lLmxlbmd0aC0xLGg9MDtjPj1yOy0tYylpZig0NyE9PShpPWUuY2hhckNvZGVBdChjKSkpLTE9PT1sJiYodT0hMSxsPWMrMSksNDY9PT1pPy0xPT09cz9zPWM6MSE9PWgmJihoPTEpOi0xIT09cyYmKGg9LTEpO2Vsc2UgaWYoIXUpe2E9YysxO2JyZWFrfXJldHVybi0xPT09c3x8LTE9PT1sfHwwPT09aHx8MT09PWgmJnM9PT1sLTEmJnM9PT1hKzE/LTEhPT1sJiYobi5iYXNlPW4ubmFtZT0wPT09YSYmbz9lLnNsaWNlKDEsbCk6ZS5zbGljZShhLGwpKTooMD09PWEmJm8/KG4ubmFtZT1lLnNsaWNlKDEscyksbi5iYXNlPWUuc2xpY2UoMSxsKSk6KG4ubmFtZT1lLnNsaWNlKGEscyksbi5iYXNlPWUuc2xpY2UoYSxsKSksbi5leHQ9ZS5zbGljZShzLGwpKSxhPjA/bi5kaXI9ZS5zbGljZSgwLGEtMSk6byYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLGUuZXhwb3J0cz1yfSw0NDc6KGUsdCxuKT0+e3ZhciByO2lmKG4ucih0KSxuLmQodCx7VVJJOigpPT5nLFV0aWxzOigpPT5FfSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzKXI9IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvcil7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDtyPWkuaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBvLHMsYT0obz1mdW5jdGlvbihlLHQpe3JldHVybihvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksbD0vXlx3W1x3XGQrLi1dKiQvLHU9L15cLy8sYz0vXlwvXC8vO2Z1bmN0aW9uIGgoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFsLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCF1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGMudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBkPSIiLGY9Ii8iLG09L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLG8pe3ZhciBzLGE7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fGQsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGQsdGhpcy5wYXRoPWUucGF0aHx8ZCx0aGlzLnF1ZXJ5PWUucXVlcnl8fGQsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxkKToodGhpcy5zY2hlbWU9KGE9bywocz1lKXx8YT9zOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8ZCx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PWYmJih0PWYrdCk6dD1mfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxkKSx0aGlzLnF1ZXJ5PXJ8fGQsdGhpcy5mcmFnbWVudD1pfHxkLGgodGhpcyxvKSl9cmV0dXJuIGUuaXNVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJiJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxuPWUuYXV0aG9yaXR5LHI9ZS5wYXRoLGk9ZS5xdWVyeSxvPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9ZCksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1kKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1kKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9ZCksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWQpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgdih0LG4scixpLG8pfSxlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPW0uZXhlYyhlKTtyZXR1cm4gbj9uZXcgdihuWzJdfHxkLHgobls0XXx8ZCkseChuWzVdfHxkKSx4KG5bN118fGQpLHgobls5XXx8ZCksdCk6bmV3IHYoZCxkLGQsZCxkKX0sZS5maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWQ7aWYociYmKGU9ZS5yZXBsYWNlKC9cXC9nLGYpKSxlWzBdPT09ZiYmZVsxXT09PWYpe3ZhciBuPWUuaW5kZXhPZihmLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPWYpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8Zil9cmV0dXJuIG5ldyB2KCJmaWxlIix0LGUsZCxkKX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB2KGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBoKHQsITApLHR9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksUyh0aGlzLGUpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5yZXZpdmU9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dmFyIG49bmV3IHYodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsLG4uX2ZzUGF0aD10Ll9zZXA9PT1wP3QuZnNQYXRoOm51bGwsbn1yZXR1cm4gdH0sZX0oKSxwPXI/MTp2b2lkIDAsdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Ll9mb3JtYXR0ZWQ9bnVsbCx0Ll9mc1BhdGg9bnVsbCx0fXJldHVybiBhKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPV8odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGU/Uyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVModGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPXApLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfSx0fShnKSxiPSgocz17fSlbNThdPSIlM0EiLHNbNDddPSIlMkYiLHNbNjNdPSIlM0YiLHNbMzVdPSIlMjMiLHNbOTFdPSIlNUIiLHNbOTNdPSIlNUQiLHNbNjRdPSIlNDAiLHNbMzNdPSIlMjEiLHNbMzZdPSIlMjQiLHNbMzhdPSIlMjYiLHNbMzldPSIlMjciLHNbNDBdPSIlMjgiLHNbNDFdPSIlMjkiLHNbNDJdPSIlMkEiLHNbNDNdPSIlMkIiLHNbNDRdPSIlMkMiLHNbNTldPSIlM0IiLHNbNjFdPSIlM0QiLHNbMzJdPSIlMjAiLHMpO2Z1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG49dm9pZCAwLHI9LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO3ZhciBzPWJbb107dm9pZCAwIT09cz8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXMpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9YltyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiBfKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsciYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFMoZSx0KXt2YXIgbj10P0M6eSxyPSIiLGk9ZS5zY2hlbWUsbz1lLmF1dGhvcml0eSxzPWUucGF0aCxhPWUucXVlcnksbD1lLmZyYWdtZW50O2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9ZixyKz1mKSxvKXt2YXIgdT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PXUpe3ZhciBjPW8uc3Vic3RyKDAsdSk7bz1vLnN1YnN0cih1KzEpLC0xPT09KHU9Yy5pbmRleE9mKCI6IikpP3IrPW4oYywhMSk6KHIrPW4oYy5zdWJzdHIoMCx1KSwhMSkscis9IjoiLHIrPW4oYy5zdWJzdHIodSsxKSwhMSkpLHIrPSJAIn0tMT09PSh1PShvPW8udG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsdSksITEpLHIrPW8uc3Vic3RyKHUpKX1pZihzKXtpZihzLmxlbmd0aD49MyYmNDc9PT1zLmNoYXJDb2RlQXQoMCkmJjU4PT09cy5jaGFyQ29kZUF0KDIpKShoPXMuY2hhckNvZGVBdCgxKSk+PTY1JiZoPD05MCYmKHM9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KHMuc3Vic3RyKDMpKSk7ZWxzZSBpZihzLmxlbmd0aD49MiYmNTg9PT1zLmNoYXJDb2RlQXQoMSkpe3ZhciBoOyhoPXMuY2hhckNvZGVBdCgwKSk+PTY1JiZoPD05MCYmKHM9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQocy5zdWJzdHIoMikpKX1yKz1uKHMsITApfXJldHVybiBhJiYocis9Ij8iLHIrPW4oYSwhMSkpLGwmJihyKz0iIyIscis9dD9sOnkobCwhMSkpLHJ9ZnVuY3Rpb24gdyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK3coZS5zdWJzdHIoMykpOmV9fXZhciBBPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUubWF0Y2goQSk/ZS5yZXBsYWNlKEEsKGZ1bmN0aW9uKGUpe3JldHVybiB3KGUpfSkpOmV9dmFyIEUsTCxOPW4oNDcwKSxrPWZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9LFI9Ti5wb3NpeHx8TjsoTD1FfHwoRT17fSkpLmpvaW5QYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLndpdGgoe3BhdGg6Ui5qb2luLmFwcGx5KFIsayhbZS5wYXRoXSx0LCExKSl9KX0sTC5yZXNvbHZlUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLnBhdGh8fCIvIjtyZXR1cm4gZS53aXRoKHtwYXRoOlIucmVzb2x2ZS5hcHBseShSLGsoW3JdLHQsITEpKX0pfSxMLmRpcm5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9Ui5kaXJuYW1lKGUucGF0aCk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmNDY9PT10LmNoYXJDb2RlQXQoMCk/ZTplLndpdGgoe3BhdGg6dH0pfSxMLmJhc2VuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBSLmJhc2VuYW1lKGUucGF0aCl9LEwuZXh0bmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gUi5leHRuYW1lKGUucGF0aCl9fX0sdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9cmV0dXJuIG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4oNDQ3KX0pKCk7dmFye1VSSTp5YSxVdGlsczpDYX09Z2E7ZnVuY3Rpb24gX2EoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIG4scj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLHM9ISF0JiYhIXQuZ2xvYnN0YXIsYT0hMSxsPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLHU9MCxjPXIubGVuZ3RoO3U8Yzt1Kyspc3dpdGNoKG49clt1XSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK247YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPW47YnJlYWt9Y2FzZSJ7IjppZihvKXthPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe2E9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7aSs9InwiO2JyZWFrfWkrPSJcXCIrbjticmVhaztjYXNlIioiOmZvcih2YXIgaD1yW3UtMV0sZD0xOyIqIj09PXJbdSsxXTspZCsrLHUrKzt2YXIgZj1yW3UrMV07aWYocylkPjEmJigiLyI9PT1ofHx2b2lkIDA9PT1ofHwieyI9PT1ofHwiLCI9PT1oKSYmKCIvIj09PWZ8fHZvaWQgMD09PWZ8fCIsIj09PWZ8fCJ9Ij09PWYpPygiLyI9PT1mP3UrKzoiLyI9PT1oJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI7ZWxzZSBpKz0iLioiO2JyZWFrO2RlZmF1bHQ6aSs9bn1yZXR1cm4gbCYmfmwuaW5kZXhPZigiZyIpfHwoaT0iXiIraSsiJCIpLG5ldyBSZWdFeHAoaSxsKX12YXIgU2Esd2E9eXMoKSxBYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89IiEiIT09aVswXTtvfHwoaT1pLnN1YnN0cmluZygxKSksaS5sZW5ndGg+MCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6X2EoIioqLyIraSx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOm99KSl9dGhpcy51cmlzPXR9Y2F0Y2goZSl7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49MCxyPXRoaXMuZ2xvYldyYXBwZXJzO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aS5yZWdleHAscz1pLmluY2x1ZGU7by50ZXN0KGUpJiYodD1zKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCkseGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IEVhKG4pKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQodCxlKX0pKSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX0sZX0oKSxFYT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LExhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIElzKHQpfSxlLnByb3RvdHlwZS5nZXRTZWN0aW9uUmVjdXJzaXZlPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCJib29sZWFuIj09dHlwZW9mIHR8fDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodC5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzW25dLDEpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnByb3BlcnRpZXNbbl0pO2lmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxzPXJvKG8pO2lmKG51bGw9PXM/dm9pZCAwOnMudGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tvXSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKWlmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe3ZhciBhPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihhKSYmdC5pdGVtc1thXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1thXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19LGV9KCksTmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgbj15YS5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09biYmKCFlfHxlKG4pKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IodmFyIG49ITEscj1bZT1SYShlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSkpO3IubGVuZ3RoOylmb3IodmFyIG89ci5wb3AoKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBhPWlbc107YSYmKGEudXJpPT09b3x8YS5kZXBlbmRlbmNpZXMuaGFzKG8pKSYmKGEudXJpIT09byYmci5wdXNoKGEudXJpKSxhLmNsZWFyU2NoZW1hKCkmJihuPSEwKSxpW3NdPXZvaWQgMCl9cmV0dXJuIG59LGUucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdD1lLnNjaGVtYXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPVJhKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldLGE9cy51cmlzLm1hcChSYSksbD10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24ocy5wYXR0ZXJuLGEpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2gobCl9fSxlLnByb3RvdHlwZS5hZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgeGEodGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPW4sbn0sZS5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZS5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBBYShlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobiksbn0sZS5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9UmEoZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbcl09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW3JdKSxuP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKX0sZS5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAsbj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocil9fSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbihlKXt2YXIgdD1SYShlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLmxvYWRTY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVxdWVzdFNlcnZpY2Upe3ZhciB0PXdhKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixUYShlKSk7cmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBFYSh7fSxbdF0pKX1yZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKChmdW5jdGlvbih0KXtpZighdCl7dmFyIG49d2EoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIsVGEoZSkpO3JldHVybiBuZXcgRWEoe30sW25dKX12YXIgcixpPVtdO3I9R2kodCxpKTt2YXIgbz1pLmxlbmd0aD9bd2EoImpzb24uc2NoZW1hLmludmFsaWRGb3JtYXQiLCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsVGEoZSksaVswXS5vZmZzZXQpXTpbXTtyZXR1cm4gbmV3IEVhKHIsbyl9KSwoZnVuY3Rpb24odCl7dmFyIG49dC50b1N0cmluZygpLHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLG5vKG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IEVhKHt9LFt3YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLFRhKGUpLG4pXSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuZXJyb3JzLnNsaWNlKDApLGk9ZS5zY2hlbWE7aWYoaS4kc2NoZW1hKXt2YXIgbz1SYShpLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1vKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgTGEoe30sW3dhKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PW8/ci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09byYmci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgcz10aGlzLmNvbnRleHRTZXJ2aWNlLGE9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8scyxhLGw7dm9pZCAwPT09aXx8MD09PWkubGVuZ3RoP289dDoiLyI9PT1pLmNoYXJBdCgwKT9vPWZ1bmN0aW9uKGUsdCl7dD1kZWNvZGVVUklDb21wb25lbnQodCk7dmFyIG49ZTtyZXR1cm4iLyI9PT10WzBdJiYodD10LnN1YnN0cmluZygxKSksdC5zcGxpdCgiLyIpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKG49bltlXSl9KSksbn0odCxpKToocz10LGw9aSwoYT1uKS5hbmNob3JzfHwoYS5hbmNob3JzPWMocykpLG89YS5hbmNob3JzLmdldChsKSksbz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiFlLmhhc093blByb3BlcnR5KG4pJiYiaWQiIT09biYmIiRpZCIhPT1uJiYoZVtuXT10W25dKX0oZSxvKTpyLnB1c2god2EoImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLGksbi51cmkpKX0sbD1mdW5jdGlvbihlLHQsaSxvKXtzJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdCh0KSYmKHQ9cy5yZXNvbHZlUmVsYXRpdmVQYXRoKHQsby51cmkpKSx0PVJhKHQpO3ZhciBsPW4uZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCk7cmV0dXJuIGwuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG8uZGVwZW5kZW5jaWVzLmFkZCh0KSxuLmVycm9ycy5sZW5ndGgpe3ZhciBzPWk/dCsiIyIraTp0O3IucHVzaCh3YSgianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9IixzLG4uZXJyb3JzWzBdKSl9cmV0dXJuIGEoZSxuLnNjaGVtYSxsLGkpLHUoZSxuLnNjaGVtYSxsKX0pKX0sdT1mdW5jdGlvbihlLHQscil7dmFyIGk9W107cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXtmb3IodmFyIG49bmV3IFNldDtlLiRyZWY7KXt2YXIgbz1lLiRyZWYscz1vLnNwbGl0KCIjIiwyKTtpZihkZWxldGUgZS4kcmVmLHNbMF0ubGVuZ3RoPjApcmV0dXJuIHZvaWQgaS5wdXNoKGwoZSxzWzBdLHNbMV0scikpO2lmKCFuLmhhcyhvKSl7dmFyIHU9c1sxXTthKGUsdCxyLHUpLG4uYWRkKG8pfX19KSksbi5wcm9taXNlLmFsbChpKX0sYz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7dmFyIG49ZS4kaWR8fGUuaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIyI9PT1uLmNoYXJBdCgwKSl7dmFyIGk9bi5zdWJzdHJpbmcoMSk7dC5oYXMoaSk/ci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLG4pKTp0LnNldChpLGUpfX0pKSx0fTtyZXR1cm4gdShpLGksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMYShpLHIpfSkpfSxlLnByb3RvdHlwZS50cmF2ZXJzZU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2Zvcih2YXIgbj1uZXcgU2V0LHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dOyJvYmplY3QiPT10eXBlb2YgaSYmcy5wdXNoKGkpfX0saT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXt2YXIgYT1pW29dOyJvYmplY3QiPT10eXBlb2YgYSYmcy5wdXNoKGEpfX19LG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAsYT1pO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dOyJvYmplY3QiPT10eXBlb2YgbCYmcy5wdXNoKGwpfX19LHM9W2VdLGE9cy5wb3AoKTthOyluLmhhcyhhKXx8KG4uYWRkKGEpLHQoYSkscihhLml0ZW1zLGEuYWRkaXRpb25hbEl0ZW1zLGEuYWRkaXRpb25hbFByb3BlcnRpZXMsYS5ub3QsYS5jb250YWlucyxhLnByb3BlcnR5TmFtZXMsYS5pZixhLnRoZW4sYS5lbHNlKSxpKGEuZGVmaW5pdGlvbnMsYS5wcm9wZXJ0aWVzLGEucGF0dGVyblByb3BlcnRpZXMsYS5kZXBlbmRlbmNpZXMpLG8oYS5hbnlPZixhLmFsbE9mLGEub25lT2YsYS5pdGVtcykpLGE9cy5wb3AoKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRnJvbVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZigib2JqZWN0Ij09PShudWxsPT09KG49dC5yb290KXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKSlmb3IodmFyIGk9MCxvPXQucm9vdC5wcm9wZXJ0aWVzO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO2lmKCIkc2NoZW1hIj09PXMua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShyPXMudmFsdWVOb2RlKXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSl7dmFyIGE9cy52YWx1ZU5vZGUudmFsdWU7cmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3QoYSkmJihhPXRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZVJlbGF0aXZlUGF0aChhLGUpKSxhfX19LGUucHJvdG90eXBlLmdldEFzc29jaWF0ZWRTY2hlbWFzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49W10scj1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHlhLnBhcnNlKGUpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07aWYocy5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIGE9MCxsPXMuZ2V0VVJJcygpO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1sW2FdO3RbdV18fChuLnB1c2godSksdFt1XT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9UmEobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIitrYSsrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLGthPTA7ZnVuY3Rpb24gUmEoZSl7dHJ5e3JldHVybiB5YS5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFRhKGUpe3RyeXt2YXIgdD15YS5wYXJzZShlKTtpZigiZmlsZSI9PT10LnNjaGVtZSlyZXR1cm4gdC5mc1BhdGh9Y2F0Y2goZSl7fXJldHVybiBlfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIG49W10scj1bXSxpPVtdLG89LTEscz16aShlLmdldFRleHQoKSwhMSksYT1zLnNjYW4oKTtmdW5jdGlvbiBsKGUpe24ucHVzaChlKSxyLnB1c2goaS5sZW5ndGgpfWZvcig7MTchPT1hOyl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDM6dmFyIHU9e3N0YXJ0TGluZTpkPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZW5kTGluZTpkLGtpbmQ6MT09PWE/Im9iamVjdCI6ImFycmF5In07aS5wdXNoKHUpO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6dmFyIGM9Mj09PWE/Im9iamVjdCI6ImFycmF5IjtpZihpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLmtpbmQ9PT1jKXt1PWkucG9wKCk7dmFyIGg9ZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTt1JiZoPnUuc3RhcnRMaW5lKzEmJm8hPT11LnN0YXJ0TGluZSYmKHUuZW5kTGluZT1oLTEsbCh1KSxvPXUuc3RhcnRMaW5lKX1icmVhaztjYXNlIDEzOnZhciBkPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZj1lLnBvc2l0aW9uQXQocy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTsxPT09cy5nZXRUb2tlbkVycm9yKCkmJmQrMTxlLmxpbmVDb3VudD9zLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQobmkuY3JlYXRlKGQrMSwwKSkpOmQ8ZiYmKGwoe3N0YXJ0TGluZTpkLGVuZExpbmU6ZixraW5kOnBpLkNvbW1lbnR9KSxvPWQpO2JyZWFrO2Nhc2UgMTI6dmFyIG09ZS5nZXRUZXh0KCkuc3Vic3RyKHMuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKXtoPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYobVsxXSl7dT17c3RhcnRMaW5lOmgsZW5kTGluZTpoLGtpbmQ6cGkuUmVnaW9ufTtpLnB1c2godSl9ZWxzZXtmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wJiZpW2ddLmtpbmQhPT1waS5SZWdpb247KWctLTtpZihnPj0wKXt1PWlbZ107aS5sZW5ndGg9ZyxoPnUuc3RhcnRMaW5lJiZvIT09dS5zdGFydExpbmUmJih1LmVuZExpbmU9aCxsKHUpLG89dS5zdGFydExpbmUpfX19fWE9cy5zY2FuKCl9dmFyIHA9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgcHx8bi5sZW5ndGg8PXApcmV0dXJuIG47dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciB2PVtdLGI9MCx5PXI7Yjx5Lmxlbmd0aDtiKyspeyhBPXlbYl0pPDMwJiYodltBXT0odltBXXx8MCkrMSl9dmFyIEM9MCxfPTA7Zm9yKGc9MDtnPHYubGVuZ3RoO2crKyl7dmFyIFM9dltnXTtpZihTKXtpZihTK0M+cCl7Xz1nO2JyZWFrfUMrPVN9fXZhciB3PVtdO2ZvcihnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciBBOyJudW1iZXIiPT10eXBlb2YoQT1yW2ddKSYmKEE8X3x8QT09PV8mJkMrKzxwKSYmdy5wdXNoKG5bZ10pfXJldHVybiB3fWZ1bmN0aW9uIE1hKGUsdCxuKXtmdW5jdGlvbiByKHQsbil7cmV0dXJuIGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQodCksZS5wb3NpdGlvbkF0KG4pKX12YXIgaT16aShlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBpLnNldFBvc2l0aW9uKGUpLGkuc2NhbigpPT09dD9pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpOi0xfXJldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPWUub2Zmc2V0QXQodCkscz1uLmdldE5vZGVGcm9tT2Zmc2V0KGksITApLGE9W107czspe3N3aXRjaChzLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGw9cy5vZmZzZXQrMSx1PXMub2Zmc2V0K3MubGVuZ3RoLTE7bDx1JiZpPj1sJiZpPD11JiZhLnB1c2gocihsLHUpKSxhLnB1c2gocihzLm9mZnNldCxzLm9mZnNldCtzLmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6YS5wdXNoKHIocy5vZmZzZXQscy5vZmZzZXQrcy5sZW5ndGgpKX1pZigicHJvcGVydHkiPT09cy50eXBlfHxzLnBhcmVudCYmImFycmF5Ij09PXMucGFyZW50LnR5cGUpe3ZhciBjPW8ocy5vZmZzZXQrcy5sZW5ndGgsNSk7LTEhPT1jJiZhLnB1c2gocihzLm9mZnNldCxjKSl9cz1zLnBhcmVudH1mb3IodmFyIGg9dm9pZCAwLGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSloPVFvLmNyZWF0ZShhW2RdLGgpO3JldHVybiBofHwoaD1Rby5jcmVhdGUoaWkuY3JlYXRlKHQsdCkpKSxofSkpfWZ1bmN0aW9uIElhKGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoKGZ1bmN0aW9uKHIpe3ZhciBpO2lmKCJwcm9wZXJ0eSI9PT1yLnR5cGUmJiIkcmVmIj09PXIua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShpPXIudmFsdWVOb2RlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50eXBlKSl7dmFyIG89ci52YWx1ZU5vZGUudmFsdWUscz1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWUpcmV0dXJuW107aWYoIiMiIT09ZVswXXx8Ii8iIT09ZVsxXSlyZXR1cm4gbnVsbDtyZXR1cm4gZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKFZhKX0odCk7aWYoIW4pcmV0dXJuIG51bGw7cmV0dXJuIEZhKG4sZS5yb290KX0odCxvKTtpZihzKXt2YXIgYT1lLnBvc2l0aW9uQXQocy5vZmZzZXQpO24ucHVzaCh7dGFyZ2V0OiIiLmNvbmNhdChlLnVyaSwiIyIpLmNvbmNhdChhLmxpbmUrMSwiLCIpLmNvbmNhdChhLmNoYXJhY3RlcisxKSxyYW5nZTpQYShlLHIudmFsdWVOb2RlKX0pfX1yZXR1cm4hMH0pKSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gUGEoZSx0KXtyZXR1cm4gaWkuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCsxKSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgtMSkpfWZ1bmN0aW9uIEZhKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0JiYib2JqZWN0Ij09PXQudHlwZSl7dmFyIHI9dC5wcm9wZXJ0aWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleU5vZGUudmFsdWU9PT1ufSkpO3JldHVybiByP0ZhKGUsci52YWx1ZU5vZGUpOm51bGx9aWYodCYmImFycmF5Ij09PXQudHlwZSYmbi5tYXRjaCgvXigwfFsxLTldWzAtOV0qKSQvKSl7dmFyIGk9TnVtYmVyLnBhcnNlSW50KG4pLG89dC5pdGVtc1tpXTtyZXR1cm4gbz9GYShlLG8pOm51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBEYShlKXt2YXIgdD1lLnByb21pc2VDb25zdHJ1Y3Rvcnx8UHJvbWlzZSxuPW5ldyBOYShlLnNjaGVtYVJlcXVlc3RTZXJ2aWNlLGUud29ya3NwYWNlQ29udGV4dCx0KTtuLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnModmEpO3ZhciByPW5ldyBIcyhuLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSxpPW5ldyB6cyhuLGUuY29udHJpYnV0aW9ucyx0KSxvPW5ldyBsYShuKSxzPW5ldyBYcyhuLHQpO3JldHVybntjb25maWd1cmU6ZnVuY3Rpb24oZSl7bi5jbGVhckV4dGVybmFsU2NoZW1hcygpLGUuc2NoZW1hcyYmZS5zY2hlbWFzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShlLnVyaSxlLmZpbGVNYXRjaCxlLnNjaGVtYSl9KSkscy5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiBuLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjpzLmRvVmFsaWRhdGlvbi5iaW5kKHMpLGdldExhbmd1YWdlU3RhdHVzOnMuZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChzKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gVXMoZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksbmV3IHFzKGUsdCxbXSl9KGUsdCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpvLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChvKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpvLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQobyksZmluZERvY3VtZW50Q29sb3JzOm8uZmluZERvY3VtZW50Q29sb3JzLmJpbmQobyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOm8uZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQobyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOk9hLGdldFNlbGVjdGlvblJhbmdlczpNYSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6SWEsZm9ybWF0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYodCl7dmFyIGk9ZS5vZmZzZXRBdCh0LnN0YXJ0KTtyPXtvZmZzZXQ6aSxsZW5ndGg6ZS5vZmZzZXRBdCh0LmVuZCktaX19dmFyIG89e3RhYlNpemU6bj9uLnRhYlNpemU6NCxpbnNlcnRTcGFjZXM6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRTcGFjZXMpLGluc2VydEZpbmFsTmV3bGluZTohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydEZpbmFsTmV3bGluZSksZW9sOiJcbiJ9O3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIEdyKGUsdCxuKX0oZS5nZXRUZXh0KCkscixvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBUaS5yZXBsYWNlKGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpLHQuY29udGVudCl9KSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYoU2E9ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oKGU9PmUudGV4dCgpKSl9KTt2YXIgS2E9Ii8iLmNoYXJDb2RlQXQoMCksamE9Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcWEoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1qYXx8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09amEmJm4uY2hhckNvZGVBdCgxKT09PWphP3QucG9wKCk6dC5wdXNoKG4pKTtlLmxlbmd0aD4xJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IG49dC5qb2luKCIvIik7cmV0dXJuIDA9PT1lWzBdLmxlbmd0aCYmKG49Ii8iK24pLG59c2VsZi5vbm1lc3NhZ2U9KCk9PntVcigoKGUsdCk9Pm5ldyBjbGFzc3tfY3R4O19sYW5ndWFnZVNlcnZpY2U7X2xhbmd1YWdlU2V0dGluZ3M7X2xhbmd1YWdlSWQ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZCx0aGlzLl9sYW5ndWFnZVNlcnZpY2U9RGEoe3dvcmtzcGFjZUNvbnRleHQ6e3Jlc29sdmVSZWxhdGl2ZVBhdGg6KGUsdCk9PmZ1bmN0aW9uKGUsdCl7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUthfSh0KSl7Y29uc3Qgbj15YS5wYXJzZShlKSxyPXQuc3BsaXQoIi8iKTtyZXR1cm4gbi53aXRoKHtwYXRoOnFhKHIpfSkudG9TdHJpbmcoKX1yZXR1cm4gZnVuY3Rpb24oZSwuLi50KXtjb25zdCBuPXlhLnBhcnNlKGUpLHI9bi5wYXRoLnNwbGl0KCIvIik7Zm9yKGxldCBlIG9mIHQpci5wdXNoKC4uLmUuc3BsaXQoIi8iKSk7cmV0dXJuIG4ud2l0aCh7cGF0aDpxYShyKX0pLnRvU3RyaW5nKCl9KGUsdCl9KHQuc3Vic3RyKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLGUpfSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/U2E6dm9pZCAwfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKHQpe2xldCBlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvVmFsaWRhdGlvbih0LGUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxyKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KHIsdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQociksbz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUobyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIGxzLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fShlLHQpKSl9fSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1qc29uLndvcmtlci5qcy5tYXAKCg==', null, false);
|
|
4
4
|
/* eslint-enable */
|