diff --git a/README.md b/README.md index 2982049..d4290e5 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - 一站式:提供word(.docx)、pdf、excel(.xlsx, .xls)多种文档的在线预览方案,有它就够了 - 简单:只需提供文档的src(网络地址)即可完成文档预览 - 体验好:选择每个文档的最佳预览方案,保证用户体验和性能都达到最佳状态 +- 性能好:针对数据量较大做了优化 ## 安装 ```shell diff --git a/demo-vue2/.npmrc b/demo-vue2/.npmrc new file mode 100644 index 0000000..9e31f75 --- /dev/null +++ b/demo-vue2/.npmrc @@ -0,0 +1 @@ +registry=http://registry.npmjs.com \ No newline at end of file diff --git a/demo-vue2/package.json b/demo-vue2/package.json index 20ebe7c..78d2c43 100644 --- a/demo-vue2/package.json +++ b/demo-vue2/package.json @@ -10,10 +10,10 @@ "dependencies": { "@js-preview/docx": "^1.6.0", "@js-preview/excel": "^1.7.3", - "@js-preview/pdf": "^2.0.0", + "@js-preview/pdf": "^2.0.1", "@vue-office/docx": "^1.6.0", "@vue-office/excel": "^1.7.3", - "@vue-office/pdf": "^2.0.0", + "@vue-office/pdf": "^2.0.1", "core-js": "^3.8.3", "element-ui": "^2.15.14", "vue": "^2.7.16", diff --git a/demo-vue2/pnpm-lock.yaml b/demo-vue2/pnpm-lock.yaml new file mode 100644 index 0000000..4415e9b --- /dev/null +++ b/demo-vue2/pnpm-lock.yaml @@ -0,0 +1,9169 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@js-preview/docx': + specifier: ^1.6.0 + version: registry.npmjs.org/@js-preview/docx@1.6.0 + '@js-preview/excel': + specifier: ^1.7.3 + version: registry.npmjs.org/@js-preview/excel@1.7.5 + '@js-preview/pdf': + specifier: ^2.0.1 + version: registry.npmjs.org/@js-preview/pdf@2.0.1 + '@vue-office/docx': + specifier: ^1.6.0 + version: registry.npmjs.org/@vue-office/docx@1.6.0(vue-demi@0.14.7)(vue@2.7.16) + '@vue-office/excel': + specifier: ^1.7.3 + version: registry.npmjs.org/@vue-office/excel@1.7.6(vue-demi@0.14.7)(vue@2.7.16) + '@vue-office/pdf': + specifier: ^2.0.1 + version: registry.npmjs.org/@vue-office/pdf@2.0.1(vue-demi@0.14.7)(vue@2.7.16) + core-js: + specifier: ^3.8.3 + version: registry.npmjs.org/core-js@3.37.0 + element-ui: + specifier: ^2.15.14 + version: registry.npmjs.org/element-ui@2.15.14(vue@2.7.16) + vue: + specifier: ^2.7.16 + version: registry.npmjs.org/vue@2.7.16 + vue-demi: + specifier: ^0.14.6 + version: registry.npmjs.org/vue-demi@0.14.7(vue@2.7.16) + vue-router: + specifier: ^3.6.5 + version: registry.npmjs.org/vue-router@3.6.5(vue@2.7.16) + +devDependencies: + '@babel/core': + specifier: ^7.12.16 + version: registry.npmjs.org/@babel/core@7.24.4 + '@babel/eslint-parser': + specifier: ^7.12.16 + version: registry.npmjs.org/@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@7.32.0) + '@vue/cli-plugin-babel': + specifier: ~5.0.0 + version: registry.npmjs.org/@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8)(core-js@3.37.0)(vue@2.7.16) + '@vue/cli-plugin-eslint': + specifier: ~5.0.0 + version: registry.npmjs.org/@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8)(eslint@7.32.0) + '@vue/cli-service': + specifier: ~5.0.0 + version: registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16) + eslint: + specifier: ^7.32.0 + version: registry.npmjs.org/eslint@7.32.0 + eslint-plugin-vue: + specifier: ^8.0.3 + version: registry.npmjs.org/eslint-plugin-vue@8.7.1(eslint@7.32.0) + vue-template-compiler: + specifier: ^2.6.14 + version: registry.npmjs.org/vue-template-compiler@2.7.16 + +packages: + + registry.npmjs.org/@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz} + name: '@aashutoshrathi/word-wrap' + version: 1.2.6 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/@achrinza/node-ipc@9.2.8: + resolution: {integrity: sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz} + name: '@achrinza/node-ipc' + version: 9.2.8 + engines: {node: 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21} + dependencies: + '@node-ipc/js-queue': registry.npmjs.org/@node-ipc/js-queue@2.0.3 + event-pubsub: registry.npmjs.org/event-pubsub@4.3.0 + js-message: registry.npmjs.org/js-message@1.0.7 + dev: true + + registry.npmjs.org/@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz} + name: '@ampproject/remapping' + version: 2.3.0 + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.5 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.25 + dev: true + + registry.npmjs.org/@babel/code-frame@7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz} + name: '@babel/code-frame' + version: 7.12.11 + dependencies: + '@babel/highlight': registry.npmjs.org/@babel/highlight@7.24.2 + dev: true + + registry.npmjs.org/@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz} + name: '@babel/code-frame' + version: 7.24.2 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': registry.npmjs.org/@babel/highlight@7.24.2 + picocolors: registry.npmjs.org/picocolors@1.0.0 + dev: true + + registry.npmjs.org/@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz} + name: '@babel/compat-data' + version: 7.24.4 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz} + name: '@babel/core' + version: 7.24.4 + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping@2.3.0 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.24.2 + '@babel/generator': registry.npmjs.org/@babel/generator@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4) + '@babel/helpers': registry.npmjs.org/@babel/helpers@7.24.4 + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + '@babel/traverse': registry.npmjs.org/@babel/traverse@7.24.1 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + convert-source-map: registry.npmjs.org/convert-source-map@2.0.0 + debug: registry.npmjs.org/debug@4.3.4 + gensync: registry.npmjs.org/gensync@1.0.0-beta.2 + json5: registry.npmjs.org/json5@2.2.3 + semver: registry.npmjs.org/semver@6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@7.32.0): + resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz} + id: registry.npmjs.org/@babel/eslint-parser/7.24.1 + name: '@babel/eslint-parser' + version: 7.24.1 + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@nicolo-ribaudo/eslint-scope-5-internals': registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1 + eslint: registry.npmjs.org/eslint@7.32.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@2.1.0 + semver: registry.npmjs.org/semver@6.3.1 + dev: true + + registry.npmjs.org/@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz} + name: '@babel/generator' + version: 7.24.4 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.5 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.25 + jsesc: registry.npmjs.org/jsesc@2.5.2 + dev: true + + registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz} + name: '@babel/helper-annotate-as-pure' + version: 7.22.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz} + name: '@babel/helper-builder-binary-assignment-operator-visitor' + version: 7.22.15 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz} + name: '@babel/helper-compilation-targets' + version: 7.23.6 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': registry.npmjs.org/@babel/compat-data@7.24.4 + '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option@7.23.5 + browserslist: registry.npmjs.org/browserslist@4.23.0 + lru-cache: registry.npmjs.org/lru-cache@5.1.1 + semver: registry.npmjs.org/semver@6.3.1 + dev: true + + registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz} + id: registry.npmjs.org/@babel/helper-create-class-features-plugin/7.24.4 + name: '@babel/helper-create-class-features-plugin' + version: 7.24.4 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.23.0 + '@babel/helper-member-expression-to-functions': registry.npmjs.org/@babel/helper-member-expression-to-functions@7.23.0 + '@babel/helper-optimise-call-expression': registry.npmjs.org/@babel/helper-optimise-call-expression@7.22.5 + '@babel/helper-replace-supers': registry.npmjs.org/@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4) + '@babel/helper-skip-transparent-expression-wrappers': registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5 + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + semver: registry.npmjs.org/semver@6.3.1 + dev: true + + registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz} + id: registry.npmjs.org/@babel/helper-create-regexp-features-plugin/7.22.15 + name: '@babel/helper-create-regexp-features-plugin' + version: 7.22.15 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5 + regexpu-core: registry.npmjs.org/regexpu-core@5.3.2 + semver: registry.npmjs.org/semver@6.3.1 + dev: true + + registry.npmjs.org/@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz} + id: registry.npmjs.org/@babel/helper-define-polyfill-provider/0.6.1 + name: '@babel/helper-define-polyfill-provider' + version: 0.6.1 + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + debug: registry.npmjs.org/debug@4.3.4 + lodash.debounce: registry.npmjs.org/lodash.debounce@4.0.8 + resolve: registry.npmjs.org/resolve@1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz} + name: '@babel/helper-environment-visitor' + version: 7.22.20 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz} + name: '@babel/helper-function-name' + version: 7.23.0 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz} + name: '@babel/helper-hoist-variables' + version: 7.22.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz} + name: '@babel/helper-member-expression-to-functions' + version: 7.23.0 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz} + name: '@babel/helper-module-imports' + version: 7.22.15 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz} + name: '@babel/helper-module-imports' + version: 7.24.3 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz} + id: registry.npmjs.org/@babel/helper-module-transforms/7.23.3 + name: '@babel/helper-module-transforms' + version: 7.23.3 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.24.3 + '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access@7.22.5 + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.20 + dev: true + + registry.npmjs.org/@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz} + name: '@babel/helper-optimise-call-expression' + version: 7.22.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz} + name: '@babel/helper-plugin-utils' + version: 7.24.0 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz} + id: registry.npmjs.org/@babel/helper-remap-async-to-generator/7.22.20 + name: '@babel/helper-remap-async-to-generator' + version: 7.22.20 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-wrap-function': registry.npmjs.org/@babel/helper-wrap-function@7.22.20 + dev: true + + registry.npmjs.org/@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz} + id: registry.npmjs.org/@babel/helper-replace-supers/7.24.1 + name: '@babel/helper-replace-supers' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-member-expression-to-functions': registry.npmjs.org/@babel/helper-member-expression-to-functions@7.23.0 + '@babel/helper-optimise-call-expression': registry.npmjs.org/@babel/helper-optimise-call-expression@7.22.5 + dev: true + + registry.npmjs.org/@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz} + name: '@babel/helper-simple-access' + version: 7.22.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz} + name: '@babel/helper-skip-transparent-expression-wrappers' + version: 7.22.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz} + name: '@babel/helper-split-export-declaration' + version: 7.22.6 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz} + name: '@babel/helper-string-parser' + version: 7.24.1 + engines: {node: '>=6.9.0'} + + registry.npmjs.org/@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz} + name: '@babel/helper-validator-identifier' + version: 7.22.20 + engines: {node: '>=6.9.0'} + + registry.npmjs.org/@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz} + name: '@babel/helper-validator-option' + version: 7.23.5 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz} + name: '@babel/helper-wrap-function' + version: 7.22.20 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.23.0 + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz} + name: '@babel/helpers' + version: 7.24.4 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + '@babel/traverse': registry.npmjs.org/@babel/traverse@7.24.1 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz} + name: '@babel/highlight' + version: 7.24.2 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.20 + chalk: registry.npmjs.org/chalk@2.4.2 + js-tokens: registry.npmjs.org/js-tokens@4.0.0 + picocolors: registry.npmjs.org/picocolors@1.0.0 + dev: true + + registry.npmjs.org/@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz} + name: '@babel/parser' + version: 7.24.4 + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + + registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz} + id: registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/7.24.4 + name: '@babel/plugin-bugfix-firefox-class-in-computed-class-key' + version: 7.24.4 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.24.1 + name: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.24.1 + name: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5 + '@babel/plugin-transform-optional-chaining': registry.npmjs.org/@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/7.24.1 + name: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz} + id: registry.npmjs.org/@babel/plugin-proposal-class-properties/7.18.6 + name: '@babel/plugin-proposal-class-properties' + version: 7.18.6 + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-proposal-decorators/7.24.1 + name: '@babel/plugin-proposal-decorators' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-decorators': registry.npmjs.org/@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz} + id: registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/7.21.0-placeholder-for-preset-env.2 + name: '@babel/plugin-proposal-private-property-in-object' + version: 7.21.0-placeholder-for-preset-env.2 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-async-generators/7.8.4 + name: '@babel/plugin-syntax-async-generators' + version: 7.8.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-class-properties/7.12.13 + name: '@babel/plugin-syntax-class-properties' + version: 7.12.13 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-class-static-block/7.14.5 + name: '@babel/plugin-syntax-class-static-block' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-decorators/7.24.1 + name: '@babel/plugin-syntax-decorators' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-dynamic-import/7.8.3 + name: '@babel/plugin-syntax-dynamic-import' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/7.8.3 + name: '@babel/plugin-syntax-export-namespace-from' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-import-assertions/7.24.1 + name: '@babel/plugin-syntax-import-assertions' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-import-attributes/7.24.1 + name: '@babel/plugin-syntax-import-attributes' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-import-meta/7.10.4 + name: '@babel/plugin-syntax-import-meta' + version: 7.10.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-json-strings/7.8.3 + name: '@babel/plugin-syntax-json-strings' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-jsx/7.24.1 + name: '@babel/plugin-syntax-jsx' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/7.10.4 + name: '@babel/plugin-syntax-logical-assignment-operators' + version: 7.10.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3 + name: '@babel/plugin-syntax-nullish-coalescing-operator' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-numeric-separator/7.10.4 + name: '@babel/plugin-syntax-numeric-separator' + version: 7.10.4 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/7.8.3 + name: '@babel/plugin-syntax-object-rest-spread' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/7.8.3 + name: '@babel/plugin-syntax-optional-catch-binding' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-optional-chaining/7.8.3 + name: '@babel/plugin-syntax-optional-chaining' + version: 7.8.3 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/7.14.5 + name: '@babel/plugin-syntax-private-property-in-object' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-top-level-await/7.14.5 + name: '@babel/plugin-syntax-top-level-await' + version: 7.14.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz} + id: registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/7.18.6 + name: '@babel/plugin-syntax-unicode-sets-regex' + version: 7.18.6 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-arrow-functions/7.24.1 + name: '@babel/plugin-transform-arrow-functions' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz} + id: registry.npmjs.org/@babel/plugin-transform-async-generator-functions/7.24.3 + name: '@babel/plugin-transform-async-generator-functions' + version: 7.24.3 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-remap-async-to-generator': registry.npmjs.org/@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': registry.npmjs.org/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-async-to-generator/7.24.1 + name: '@babel/plugin-transform-async-to-generator' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.24.3 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-remap-async-to-generator': registry.npmjs.org/@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/7.24.1 + name: '@babel/plugin-transform-block-scoped-functions' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz} + id: registry.npmjs.org/@babel/plugin-transform-block-scoping/7.24.4 + name: '@babel/plugin-transform-block-scoping' + version: 7.24.4 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-class-properties/7.24.1 + name: '@babel/plugin-transform-class-properties' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz} + id: registry.npmjs.org/@babel/plugin-transform-class-static-block/7.24.4 + name: '@babel/plugin-transform-class-static-block' + version: 7.24.4 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-class-static-block': registry.npmjs.org/@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-classes/7.24.1 + name: '@babel/plugin-transform-classes' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.23.0 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-replace-supers': registry.npmjs.org/@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4) + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + globals: registry.npmjs.org/globals@11.12.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-computed-properties/7.24.1 + name: '@babel/plugin-transform-computed-properties' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-destructuring/7.24.1 + name: '@babel/plugin-transform-destructuring' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-dotall-regex/7.24.1 + name: '@babel/plugin-transform-dotall-regex' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-duplicate-keys/7.24.1 + name: '@babel/plugin-transform-duplicate-keys' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-dynamic-import/7.24.1 + name: '@babel/plugin-transform-dynamic-import' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-dynamic-import': registry.npmjs.org/@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/7.24.1 + name: '@babel/plugin-transform-exponentiation-operator' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-builder-binary-assignment-operator-visitor': registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor@7.22.15 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-export-namespace-from/7.24.1 + name: '@babel/plugin-transform-export-namespace-from' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-export-namespace-from': registry.npmjs.org/@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-for-of/7.24.1 + name: '@babel/plugin-transform-for-of' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5 + dev: true + + registry.npmjs.org/@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-function-name/7.24.1 + name: '@babel/plugin-transform-function-name' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.23.0 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-json-strings/7.24.1 + name: '@babel/plugin-transform-json-strings' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-json-strings': registry.npmjs.org/@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-literals/7.24.1 + name: '@babel/plugin-transform-literals' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/7.24.1 + name: '@babel/plugin-transform-logical-assignment-operators' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-member-expression-literals/7.24.1 + name: '@babel/plugin-transform-member-expression-literals' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-modules-amd/7.24.1 + name: '@babel/plugin-transform-modules-amd' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-modules-commonjs/7.24.1 + name: '@babel/plugin-transform-modules-commonjs' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access@7.22.5 + dev: true + + registry.npmjs.org/@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-modules-systemjs/7.24.1 + name: '@babel/plugin-transform-modules-systemjs' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables@7.22.5 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.20 + dev: true + + registry.npmjs.org/@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-modules-umd/7.24.1 + name: '@babel/plugin-transform-modules-umd' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz} + id: registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/7.22.5 + name: '@babel/plugin-transform-named-capturing-groups-regex' + version: 7.22.5 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-new-target/7.24.1 + name: '@babel/plugin-transform-new-target' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/7.24.1 + name: '@babel/plugin-transform-nullish-coalescing-operator' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-numeric-separator/7.24.1 + name: '@babel/plugin-transform-numeric-separator' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-numeric-separator': registry.npmjs.org/@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-object-rest-spread/7.24.1 + name: '@babel/plugin-transform-object-rest-spread' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-object-rest-spread': registry.npmjs.org/@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': registry.npmjs.org/@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-object-super/7.24.1 + name: '@babel/plugin-transform-object-super' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-replace-supers': registry.npmjs.org/@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/7.24.1 + name: '@babel/plugin-transform-optional-catch-binding' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-optional-catch-binding': registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-optional-chaining/7.24.1 + name: '@babel/plugin-transform-optional-chaining' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5 + '@babel/plugin-syntax-optional-chaining': registry.npmjs.org/@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-parameters/7.24.1 + name: '@babel/plugin-transform-parameters' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-private-methods/7.24.1 + name: '@babel/plugin-transform-private-methods' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-private-property-in-object/7.24.1 + name: '@babel/plugin-transform-private-property-in-object' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure@7.22.5 + '@babel/helper-create-class-features-plugin': registry.npmjs.org/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-private-property-in-object': registry.npmjs.org/@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-property-literals/7.24.1 + name: '@babel/plugin-transform-property-literals' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-regenerator/7.24.1 + name: '@babel/plugin-transform-regenerator' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + regenerator-transform: registry.npmjs.org/regenerator-transform@0.15.2 + dev: true + + registry.npmjs.org/@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-reserved-words/7.24.1 + name: '@babel/plugin-transform-reserved-words' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz} + id: registry.npmjs.org/@babel/plugin-transform-runtime/7.24.3 + name: '@babel/plugin-transform-runtime' + version: 7.24.3 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.24.3 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + babel-plugin-polyfill-corejs2: registry.npmjs.org/babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: registry.npmjs.org/babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: registry.npmjs.org/babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4) + semver: registry.npmjs.org/semver@6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-shorthand-properties/7.24.1 + name: '@babel/plugin-transform-shorthand-properties' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-spread/7.24.1 + name: '@babel/plugin-transform-spread' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers@7.22.5 + dev: true + + registry.npmjs.org/@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-sticky-regex/7.24.1 + name: '@babel/plugin-transform-sticky-regex' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-template-literals/7.24.1 + name: '@babel/plugin-transform-template-literals' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-typeof-symbol/7.24.1 + name: '@babel/plugin-transform-typeof-symbol' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-unicode-escapes/7.24.1 + name: '@babel/plugin-transform-unicode-escapes' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/7.24.1 + name: '@babel/plugin-transform-unicode-property-regex' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-unicode-regex/7.24.1 + name: '@babel/plugin-transform-unicode-regex' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz} + id: registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/7.24.1 + name: '@babel/plugin-transform-unicode-sets-regex' + version: 7.24.1 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-create-regexp-features-plugin': registry.npmjs.org/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + dev: true + + registry.npmjs.org/@babel/preset-env@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz} + id: registry.npmjs.org/@babel/preset-env/7.24.4 + name: '@babel/preset-env' + version: 7.24.4 + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': registry.npmjs.org/@babel/compat-data@7.24.4 + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option@7.23.5 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': registry.npmjs.org/@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': registry.npmjs.org/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': registry.npmjs.org/@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': registry.npmjs.org/@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': registry.npmjs.org/@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': registry.npmjs.org/@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': registry.npmjs.org/@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': registry.npmjs.org/@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': registry.npmjs.org/@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': registry.npmjs.org/@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': registry.npmjs.org/@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': registry.npmjs.org/@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': registry.npmjs.org/@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': registry.npmjs.org/@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': registry.npmjs.org/@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': registry.npmjs.org/@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': registry.npmjs.org/@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': registry.npmjs.org/@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': registry.npmjs.org/@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': registry.npmjs.org/@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': registry.npmjs.org/@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': registry.npmjs.org/@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': registry.npmjs.org/@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': registry.npmjs.org/@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': registry.npmjs.org/@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': registry.npmjs.org/@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': registry.npmjs.org/@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': registry.npmjs.org/@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': registry.npmjs.org/@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': registry.npmjs.org/@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': registry.npmjs.org/@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': registry.npmjs.org/@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': registry.npmjs.org/@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': registry.npmjs.org/@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': registry.npmjs.org/@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': registry.npmjs.org/@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': registry.npmjs.org/@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': registry.npmjs.org/@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': registry.npmjs.org/@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': registry.npmjs.org/@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': registry.npmjs.org/@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': registry.npmjs.org/@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': registry.npmjs.org/@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': registry.npmjs.org/@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': registry.npmjs.org/@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': registry.npmjs.org/@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': registry.npmjs.org/@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': registry.npmjs.org/@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': registry.npmjs.org/@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': registry.npmjs.org/@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': registry.npmjs.org/@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': registry.npmjs.org/@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': registry.npmjs.org/@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': registry.npmjs.org/@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': registry.npmjs.org/@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': registry.npmjs.org/@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': registry.npmjs.org/@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': registry.npmjs.org/@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': registry.npmjs.org/@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': registry.npmjs.org/@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: registry.npmjs.org/babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: registry.npmjs.org/babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: registry.npmjs.org/babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4) + core-js-compat: registry.npmjs.org/core-js-compat@3.37.0 + semver: registry.npmjs.org/semver@6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz} + id: registry.npmjs.org/@babel/preset-modules/0.1.6-no-external-plugins + name: '@babel/preset-modules' + version: 0.1.6-no-external-plugins + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + esutils: registry.npmjs.org/esutils@2.0.3 + dev: true + + registry.npmjs.org/@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz} + name: '@babel/regjsgen' + version: 0.8.0 + dev: true + + registry.npmjs.org/@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz} + name: '@babel/runtime' + version: 7.24.4 + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: registry.npmjs.org/regenerator-runtime@0.14.1 + dev: true + + registry.npmjs.org/@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz} + name: '@babel/template' + version: 7.24.0 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.24.2 + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + dev: true + + registry.npmjs.org/@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz} + name: '@babel/traverse' + version: 7.24.1 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.24.2 + '@babel/generator': registry.npmjs.org/@babel/generator@7.24.4 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.20 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.23.0 + '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables@7.22.5 + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + debug: registry.npmjs.org/debug@4.3.4 + globals: registry.npmjs.org/globals@11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz} + name: '@babel/types' + version: 7.24.0 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser@7.24.1 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.20 + to-fast-properties: registry.npmjs.org/to-fast-properties@2.0.0 + + registry.npmjs.org/@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz} + name: '@discoveryjs/json-ext' + version: 0.5.7 + engines: {node: '>=10.0.0'} + dev: true + + registry.npmjs.org/@eslint/eslintrc@0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz} + name: '@eslint/eslintrc' + version: 0.4.3 + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + ajv: registry.npmjs.org/ajv@6.12.6 + debug: registry.npmjs.org/debug@4.3.4 + espree: registry.npmjs.org/espree@7.3.1 + globals: registry.npmjs.org/globals@13.24.0 + ignore: registry.npmjs.org/ignore@4.0.6 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + js-yaml: registry.npmjs.org/js-yaml@3.14.1 + minimatch: registry.npmjs.org/minimatch@3.1.2 + strip-json-comments: registry.npmjs.org/strip-json-comments@3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz} + name: '@hapi/hoek' + version: 9.3.0 + dev: true + + registry.npmjs.org/@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz} + name: '@hapi/topo' + version: 5.1.0 + dependencies: + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 + dev: true + + registry.npmjs.org/@humanwhocodes/config-array@0.5.0: + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz} + name: '@humanwhocodes/config-array' + version: 0.5.0 + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': registry.npmjs.org/@humanwhocodes/object-schema@1.2.1 + debug: registry.npmjs.org/debug@4.3.4 + minimatch: registry.npmjs.org/minimatch@3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz} + name: '@humanwhocodes/object-schema' + version: 1.2.1 + dev: true + + registry.npmjs.org/@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz} + name: '@jridgewell/gen-mapping' + version: 0.3.5 + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array@1.2.1 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.25 + dev: true + + registry.npmjs.org/@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz} + name: '@jridgewell/resolve-uri' + version: 3.1.2 + engines: {node: '>=6.0.0'} + dev: true + + registry.npmjs.org/@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz} + name: '@jridgewell/set-array' + version: 1.2.1 + engines: {node: '>=6.0.0'} + dev: true + + registry.npmjs.org/@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz} + name: '@jridgewell/source-map' + version: 0.3.6 + dependencies: + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.5 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.25 + dev: true + + registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz} + name: '@jridgewell/sourcemap-codec' + version: 1.4.15 + dev: true + + registry.npmjs.org/@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz} + name: '@jridgewell/trace-mapping' + version: 0.3.25 + dependencies: + '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri@3.1.2 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + dev: true + + registry.npmjs.org/@js-preview/docx@1.6.0: + resolution: {integrity: sha512-ACK9lk2ySe1MIlBv1HwA6NUZH4qenMQ8sozbQVz+Y5Vty0MqPz6Nd8NGJHSmP86IUOsn1eCBkIaD3K5pHnZBUw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@js-preview/docx/-/docx-1.6.0.tgz} + name: '@js-preview/docx' + version: 1.6.0 + dev: false + + registry.npmjs.org/@js-preview/excel@1.7.5: + resolution: {integrity: sha512-P2v/rKwqkk45HuQClm5JChcD7+rGRXfsafYlyKAnFiARl8Xh2CNER6YOHpC2xCeRqdAGy1QBAckQvComj17KCA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@js-preview/excel/-/excel-1.7.5.tgz} + name: '@js-preview/excel' + version: 1.7.5 + dev: false + + registry.npmjs.org/@js-preview/pdf@2.0.1: + resolution: {integrity: sha512-cPj02nnKHMDwTUzAUqELCkbFkEusPQ1aADUv+Wt84tIkbtIqEf6+ZZZIh2/0G9p1wksYFso3OJzWo9qfYiCA9g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@js-preview/pdf/-/pdf-2.0.1.tgz} + name: '@js-preview/pdf' + version: 2.0.1 + dev: false + + registry.npmjs.org/@leichtgewicht/ip-codec@2.0.5: + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz} + name: '@leichtgewicht/ip-codec' + version: 2.0.5 + dev: true + + registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz} + name: '@nicolo-ribaudo/eslint-scope-5-internals' + version: 5.1.1-v1 + dependencies: + eslint-scope: registry.npmjs.org/eslint-scope@5.1.1 + dev: true + + registry.npmjs.org/@node-ipc/js-queue@2.0.3: + resolution: {integrity: sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz} + name: '@node-ipc/js-queue' + version: 2.0.3 + engines: {node: '>=1.0.0'} + dependencies: + easy-stack: registry.npmjs.org/easy-stack@1.0.1 + dev: true + + registry.npmjs.org/@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} + name: '@nodelib/fs.scandir' + version: 2.1.5 + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': registry.npmjs.org/@nodelib/fs.stat@2.0.5 + run-parallel: registry.npmjs.org/run-parallel@1.2.0 + dev: true + + registry.npmjs.org/@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} + name: '@nodelib/fs.stat' + version: 2.0.5 + engines: {node: '>= 8'} + dev: true + + registry.npmjs.org/@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} + name: '@nodelib/fs.walk' + version: 1.2.8 + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': registry.npmjs.org/@nodelib/fs.scandir@2.1.5 + fastq: registry.npmjs.org/fastq@1.17.1 + dev: true + + registry.npmjs.org/@polka/url@1.0.0-next.25: + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz} + name: '@polka/url' + version: 1.0.0-next.25 + dev: true + + registry.npmjs.org/@sideway/address@4.1.5: + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz} + name: '@sideway/address' + version: 4.1.5 + dependencies: + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 + dev: true + + registry.npmjs.org/@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz} + name: '@sideway/formula' + version: 3.0.1 + dev: true + + registry.npmjs.org/@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz} + name: '@sideway/pinpoint' + version: 2.0.0 + dev: true + + registry.npmjs.org/@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.91.0): + resolution: {integrity: sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz} + id: registry.npmjs.org/@soda/friendly-errors-webpack-plugin/1.8.1 + name: '@soda/friendly-errors-webpack-plugin' + version: 1.8.1 + engines: {node: '>=8.0.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + chalk: registry.npmjs.org/chalk@3.0.0 + error-stack-parser: registry.npmjs.org/error-stack-parser@2.1.4 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/@soda/get-current-script@1.0.2: + resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz} + name: '@soda/get-current-script' + version: 1.0.2 + dev: true + + registry.npmjs.org/@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz} + name: '@trysound/sax' + version: 0.2.0 + engines: {node: '>=10.13.0'} + dev: true + + registry.npmjs.org/@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz} + name: '@types/body-parser' + version: 1.19.5 + dependencies: + '@types/connect': registry.npmjs.org/@types/connect@3.4.38 + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz} + name: '@types/bonjour' + version: 3.5.13 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz} + name: '@types/connect-history-api-fallback' + version: 1.5.4 + dependencies: + '@types/express-serve-static-core': registry.npmjs.org/@types/express-serve-static-core@4.19.0 + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz} + name: '@types/connect' + version: 3.4.38 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz} + name: '@types/eslint-scope' + version: 3.7.7 + dependencies: + '@types/eslint': registry.npmjs.org/@types/eslint@8.56.9 + '@types/estree': registry.npmjs.org/@types/estree@1.0.5 + dev: true + + registry.npmjs.org/@types/eslint@8.56.9: + resolution: {integrity: sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz} + name: '@types/eslint' + version: 8.56.9 + dependencies: + '@types/estree': registry.npmjs.org/@types/estree@1.0.5 + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + dev: true + + registry.npmjs.org/@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz} + name: '@types/estree' + version: 1.0.5 + dev: true + + registry.npmjs.org/@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz} + name: '@types/express-serve-static-core' + version: 4.19.0 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + '@types/qs': registry.npmjs.org/@types/qs@6.9.15 + '@types/range-parser': registry.npmjs.org/@types/range-parser@1.2.7 + '@types/send': registry.npmjs.org/@types/send@0.17.4 + dev: true + + registry.npmjs.org/@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz} + name: '@types/express' + version: 4.17.21 + dependencies: + '@types/body-parser': registry.npmjs.org/@types/body-parser@1.19.5 + '@types/express-serve-static-core': registry.npmjs.org/@types/express-serve-static-core@4.19.0 + '@types/qs': registry.npmjs.org/@types/qs@6.9.15 + '@types/serve-static': registry.npmjs.org/@types/serve-static@1.15.7 + dev: true + + registry.npmjs.org/@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz} + name: '@types/html-minifier-terser' + version: 6.1.0 + dev: true + + registry.npmjs.org/@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz} + name: '@types/http-errors' + version: 2.0.4 + dev: true + + registry.npmjs.org/@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz} + name: '@types/http-proxy' + version: 1.17.14 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} + name: '@types/json-schema' + version: 7.0.15 + dev: true + + registry.npmjs.org/@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz} + name: '@types/mime' + version: 1.3.5 + dev: true + + registry.npmjs.org/@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz} + name: '@types/minimist' + version: 1.2.5 + dev: true + + registry.npmjs.org/@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz} + name: '@types/node-forge' + version: 1.3.11 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz} + name: '@types/node' + version: 20.12.7 + dependencies: + undici-types: registry.npmjs.org/undici-types@5.26.5 + dev: true + + registry.npmjs.org/@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz} + name: '@types/normalize-package-data' + version: 2.4.4 + dev: true + + registry.npmjs.org/@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz} + name: '@types/parse-json' + version: 4.0.2 + dev: true + + registry.npmjs.org/@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz} + name: '@types/qs' + version: 6.9.15 + dev: true + + registry.npmjs.org/@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz} + name: '@types/range-parser' + version: 1.2.7 + dev: true + + registry.npmjs.org/@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz} + name: '@types/retry' + version: 0.12.0 + dev: true + + registry.npmjs.org/@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz} + name: '@types/send' + version: 0.17.4 + dependencies: + '@types/mime': registry.npmjs.org/@types/mime@1.3.5 + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz} + name: '@types/serve-index' + version: 1.9.4 + dependencies: + '@types/express': registry.npmjs.org/@types/express@4.17.21 + dev: true + + registry.npmjs.org/@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz} + name: '@types/serve-static' + version: 1.15.7 + dependencies: + '@types/http-errors': registry.npmjs.org/@types/http-errors@2.0.4 + '@types/node': registry.npmjs.org/@types/node@20.12.7 + '@types/send': registry.npmjs.org/@types/send@0.17.4 + dev: true + + registry.npmjs.org/@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz} + name: '@types/sockjs' + version: 0.3.36 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz} + name: '@types/ws' + version: 8.5.10 + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + dev: true + + registry.npmjs.org/@vue-office/docx@1.6.0(vue-demi@0.14.7)(vue@2.7.16): + resolution: {integrity: sha512-OKEapOPq223uszA8mRSOWPhdfBchJa6sIqP46eMrMMe5RSUrG9m3QE/o0JBIaMgxDrtNd7aI9CvF2kDvb7G2hw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue-office/docx/-/docx-1.6.0.tgz} + id: registry.npmjs.org/@vue-office/docx/1.6.0 + name: '@vue-office/docx' + version: 1.6.0 + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.7.1 + vue: ^2.0.0 || >=3.0.0 + vue-demi: ^0.14.6 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: registry.npmjs.org/vue@2.7.16 + vue-demi: registry.npmjs.org/vue-demi@0.14.7(vue@2.7.16) + dev: false + + registry.npmjs.org/@vue-office/excel@1.7.6(vue-demi@0.14.7)(vue@2.7.16): + resolution: {integrity: sha512-HbhzudczlmPu5/p6ES4lAQDN6L9kQ0zoZOjDzCYmHxKj9O+IwAjzSwNIEAE1e0lolHQofZvvjtWDMZ/LNvKgTA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue-office/excel/-/excel-1.7.6.tgz} + id: registry.npmjs.org/@vue-office/excel/1.7.6 + name: '@vue-office/excel' + version: 1.7.6 + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.7.1 + vue: ^2.0.0 || >=3.0.0 + vue-demi: ^0.14.6 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: registry.npmjs.org/vue@2.7.16 + vue-demi: registry.npmjs.org/vue-demi@0.14.7(vue@2.7.16) + dev: false + + registry.npmjs.org/@vue-office/pdf@2.0.1(vue-demi@0.14.7)(vue@2.7.16): + resolution: {integrity: sha512-lddmgwqbApKoKmdhZhrzmg8gfv/MRq9eG6TLhqYDEENCLJ5TKpxtcOrEi/Kq/ZcZawkXP5WYAUdqGxP8FP4W7g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue-office/pdf/-/pdf-2.0.1.tgz} + id: registry.npmjs.org/@vue-office/pdf/2.0.1 + name: '@vue-office/pdf' + version: 2.0.1 + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.7.1 + vue: ^2.0.0 || >=3.0.0 + vue-demi: ^0.14.6 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: registry.npmjs.org/vue@2.7.16 + vue-demi: registry.npmjs.org/vue-demi@0.14.7(vue@2.7.16) + dev: false + + registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props@1.4.0: + resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz} + name: '@vue/babel-helper-vue-jsx-merge-props' + version: 1.4.0 + dev: true + + registry.npmjs.org/@vue/babel-helper-vue-transform-on@1.2.2: + resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz} + name: '@vue/babel-helper-vue-transform-on' + version: 1.2.2 + dev: true + + registry.npmjs.org/@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.4): + resolution: {integrity: sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz} + id: registry.npmjs.org/@vue/babel-plugin-jsx/1.2.2 + name: '@vue/babel-plugin-jsx' + version: 1.2.2 + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.22.15 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + '@babel/template': registry.npmjs.org/@babel/template@7.24.0 + '@babel/traverse': registry.npmjs.org/@babel/traverse@7.24.1 + '@babel/types': registry.npmjs.org/@babel/types@7.24.0 + '@vue/babel-helper-vue-transform-on': registry.npmjs.org/@vue/babel-helper-vue-transform-on@1.2.2 + '@vue/babel-plugin-resolve-type': registry.npmjs.org/@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.4) + camelcase: registry.npmjs.org/camelcase@6.3.0 + html-tags: registry.npmjs.org/html-tags@3.3.1 + svg-tags: registry.npmjs.org/svg-tags@1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.4): + resolution: {integrity: sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz} + id: registry.npmjs.org/@vue/babel-plugin-resolve-type/1.2.2 + name: '@vue/babel-plugin-resolve-type' + version: 1.2.2 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.24.2 + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.22.15 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.24.0 + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@vue/compiler-sfc': registry.npmjs.org/@vue/compiler-sfc@3.4.23 + dev: true + + registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/1.4.0 + name: '@vue/babel-plugin-transform-vue-jsx' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.24.3 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + '@vue/babel-helper-vue-jsx-merge-props': registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props@1.4.0 + html-tags: registry.npmjs.org/html-tags@2.0.0 + lodash.kebabcase: registry.npmjs.org/lodash.kebabcase@4.1.1 + svg-tags: registry.npmjs.org/svg-tags@1.0.0 + dev: true + + registry.npmjs.org/@vue/babel-preset-app@5.0.8(@babel/core@7.24.4)(core-js@3.37.0)(vue@2.7.16): + resolution: {integrity: sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz} + id: registry.npmjs.org/@vue/babel-preset-app/5.0.8 + name: '@vue/babel-preset-app' + version: 5.0.8 + peerDependencies: + '@babel/core': '*' + core-js: ^3 + vue: ^2 || ^3.2.13 + peerDependenciesMeta: + core-js: + optional: true + vue: + optional: true + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.24.3 + '@babel/plugin-proposal-class-properties': registry.npmjs.org/@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-decorators': registry.npmjs.org/@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': registry.npmjs.org/@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-runtime': registry.npmjs.org/@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4) + '@babel/preset-env': registry.npmjs.org/@babel/preset-env@7.24.4(@babel/core@7.24.4) + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.24.4 + '@vue/babel-plugin-jsx': registry.npmjs.org/@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.4) + '@vue/babel-preset-jsx': registry.npmjs.org/@vue/babel-preset-jsx@1.4.0(@babel/core@7.24.4)(vue@2.7.16) + babel-plugin-dynamic-import-node: registry.npmjs.org/babel-plugin-dynamic-import-node@2.3.3 + core-js: registry.npmjs.org/core-js@3.37.0 + core-js-compat: registry.npmjs.org/core-js-compat@3.37.0 + semver: registry.npmjs.org/semver@7.6.0 + vue: registry.npmjs.org/vue@2.7.16 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@vue/babel-preset-jsx@1.4.0(@babel/core@7.24.4)(vue@2.7.16): + resolution: {integrity: sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-preset-jsx/1.4.0 + name: '@vue/babel-preset-jsx' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + vue: '*' + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@vue/babel-helper-vue-jsx-merge-props': registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props@1.4.0 + '@vue/babel-plugin-transform-vue-jsx': registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-composition-api-inject-h': registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-composition-api-render-instance': registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-functional-vue': registry.npmjs.org/@vue/babel-sugar-functional-vue@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-inject-h': registry.npmjs.org/@vue/babel-sugar-inject-h@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-v-model': registry.npmjs.org/@vue/babel-sugar-v-model@1.4.0(@babel/core@7.24.4) + '@vue/babel-sugar-v-on': registry.npmjs.org/@vue/babel-sugar-v-on@1.4.0(@babel/core@7.24.4) + vue: registry.npmjs.org/vue@2.7.16 + dev: true + + registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/1.4.0 + name: '@vue/babel-sugar-composition-api-inject-h' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/1.4.0 + name: '@vue/babel-sugar-composition-api-render-instance' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@vue/babel-sugar-functional-vue@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-functional-vue/1.4.0 + name: '@vue/babel-sugar-functional-vue' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@vue/babel-sugar-inject-h@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-inject-h/1.4.0 + name: '@vue/babel-sugar-inject-h' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + dev: true + + registry.npmjs.org/@vue/babel-sugar-v-model@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-v-model/1.4.0 + name: '@vue/babel-sugar-v-model' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + '@vue/babel-helper-vue-jsx-merge-props': registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props@1.4.0 + '@vue/babel-plugin-transform-vue-jsx': registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.4) + camelcase: registry.npmjs.org/camelcase@5.3.1 + html-tags: registry.npmjs.org/html-tags@2.0.0 + svg-tags: registry.npmjs.org/svg-tags@1.0.0 + dev: true + + registry.npmjs.org/@vue/babel-sugar-v-on@1.4.0(@babel/core@7.24.4): + resolution: {integrity: sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz} + id: registry.npmjs.org/@vue/babel-sugar-v-on/1.4.0 + name: '@vue/babel-sugar-v-on' + version: 1.4.0 + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4) + '@vue/babel-plugin-transform-vue-jsx': registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.4) + camelcase: registry.npmjs.org/camelcase@5.3.1 + dev: true + + registry.npmjs.org/@vue/cli-overlay@5.0.8: + resolution: {integrity: sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz} + name: '@vue/cli-overlay' + version: 5.0.8 + dev: true + + registry.npmjs.org/@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8)(core-js@3.37.0)(vue@2.7.16): + resolution: {integrity: sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz} + id: registry.npmjs.org/@vue/cli-plugin-babel/5.0.8 + name: '@vue/cli-plugin-babel' + version: 5.0.8 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@vue/babel-preset-app': registry.npmjs.org/@vue/babel-preset-app@5.0.8(@babel/core@7.24.4)(core-js@3.37.0)(vue@2.7.16) + '@vue/cli-service': registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16) + '@vue/cli-shared-utils': registry.npmjs.org/@vue/cli-shared-utils@5.0.8 + babel-loader: registry.npmjs.org/babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0) + thread-loader: registry.npmjs.org/thread-loader@3.0.4(webpack@5.91.0) + webpack: registry.npmjs.org/webpack@5.91.0 + transitivePeerDependencies: + - '@swc/core' + - core-js + - encoding + - esbuild + - supports-color + - uglify-js + - vue + - webpack-cli + dev: true + + registry.npmjs.org/@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8)(eslint@7.32.0): + resolution: {integrity: sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz} + id: registry.npmjs.org/@vue/cli-plugin-eslint/5.0.8 + name: '@vue/cli-plugin-eslint' + version: 5.0.8 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 + eslint: '>=7.5.0' + dependencies: + '@vue/cli-service': registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16) + '@vue/cli-shared-utils': registry.npmjs.org/@vue/cli-shared-utils@5.0.8 + eslint: registry.npmjs.org/eslint@7.32.0 + eslint-webpack-plugin: registry.npmjs.org/eslint-webpack-plugin@3.2.0(eslint@7.32.0)(webpack@5.91.0) + globby: registry.npmjs.org/globby@11.1.0 + webpack: registry.npmjs.org/webpack@5.91.0 + yorkie: registry.npmjs.org/yorkie@2.0.0 + transitivePeerDependencies: + - '@swc/core' + - encoding + - esbuild + - uglify-js + - webpack-cli + dev: true + + registry.npmjs.org/@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8): + resolution: {integrity: sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz} + id: registry.npmjs.org/@vue/cli-plugin-router/5.0.8 + name: '@vue/cli-plugin-router' + version: 5.0.8 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 + dependencies: + '@vue/cli-service': registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16) + '@vue/cli-shared-utils': registry.npmjs.org/@vue/cli-shared-utils@5.0.8 + transitivePeerDependencies: + - encoding + dev: true + + registry.npmjs.org/@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8): + resolution: {integrity: sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz} + id: registry.npmjs.org/@vue/cli-plugin-vuex/5.0.8 + name: '@vue/cli-plugin-vuex' + version: 5.0.8 + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 + dependencies: + '@vue/cli-service': registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16) + dev: true + + registry.npmjs.org/@vue/cli-service@5.0.8(vue-template-compiler@2.7.16)(vue@2.7.16): + resolution: {integrity: sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz} + id: registry.npmjs.org/@vue/cli-service/5.0.8 + name: '@vue/cli-service' + version: 5.0.8 + engines: {node: ^12.0.0 || >= 14.0.0} + hasBin: true + peerDependencies: + cache-loader: '*' + less-loader: '*' + pug-plain-loader: '*' + raw-loader: '*' + sass-loader: '*' + stylus-loader: '*' + vue-template-compiler: ^2.0.0 + webpack-sources: '*' + peerDependenciesMeta: + cache-loader: + optional: true + less-loader: + optional: true + pug-plain-loader: + optional: true + raw-loader: + optional: true + sass-loader: + optional: true + stylus-loader: + optional: true + vue-template-compiler: + optional: true + webpack-sources: + optional: true + dependencies: + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.23.6 + '@soda/friendly-errors-webpack-plugin': registry.npmjs.org/@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.91.0) + '@soda/get-current-script': registry.npmjs.org/@soda/get-current-script@1.0.2 + '@types/minimist': registry.npmjs.org/@types/minimist@1.2.5 + '@vue/cli-overlay': registry.npmjs.org/@vue/cli-overlay@5.0.8 + '@vue/cli-plugin-router': registry.npmjs.org/@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8) + '@vue/cli-plugin-vuex': registry.npmjs.org/@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8) + '@vue/cli-shared-utils': registry.npmjs.org/@vue/cli-shared-utils@5.0.8 + '@vue/component-compiler-utils': registry.npmjs.org/@vue/component-compiler-utils@3.3.0 + '@vue/vue-loader-v15': registry.npmjs.org/vue-loader@15.11.1(css-loader@6.11.0)(vue-template-compiler@2.7.16)(webpack@5.91.0) + '@vue/web-component-wrapper': registry.npmjs.org/@vue/web-component-wrapper@1.3.0 + acorn: registry.npmjs.org/acorn@8.11.3 + acorn-walk: registry.npmjs.org/acorn-walk@8.3.2 + address: registry.npmjs.org/address@1.2.2 + autoprefixer: registry.npmjs.org/autoprefixer@10.4.19(postcss@8.4.38) + browserslist: registry.npmjs.org/browserslist@4.23.0 + case-sensitive-paths-webpack-plugin: registry.npmjs.org/case-sensitive-paths-webpack-plugin@2.4.0 + cli-highlight: registry.npmjs.org/cli-highlight@2.1.11 + clipboardy: registry.npmjs.org/clipboardy@2.3.0 + cliui: registry.npmjs.org/cliui@7.0.4 + copy-webpack-plugin: registry.npmjs.org/copy-webpack-plugin@9.1.0(webpack@5.91.0) + css-loader: registry.npmjs.org/css-loader@6.11.0(webpack@5.91.0) + css-minimizer-webpack-plugin: registry.npmjs.org/css-minimizer-webpack-plugin@3.4.1(webpack@5.91.0) + cssnano: registry.npmjs.org/cssnano@5.1.15(postcss@8.4.38) + debug: registry.npmjs.org/debug@4.3.4 + default-gateway: registry.npmjs.org/default-gateway@6.0.3 + dotenv: registry.npmjs.org/dotenv@10.0.0 + dotenv-expand: registry.npmjs.org/dotenv-expand@5.1.0 + fs-extra: registry.npmjs.org/fs-extra@9.1.0 + globby: registry.npmjs.org/globby@11.1.0 + hash-sum: registry.npmjs.org/hash-sum@2.0.0 + html-webpack-plugin: registry.npmjs.org/html-webpack-plugin@5.6.0(webpack@5.91.0) + is-file-esm: registry.npmjs.org/is-file-esm@1.0.0 + launch-editor-middleware: registry.npmjs.org/launch-editor-middleware@2.6.1 + lodash.defaultsdeep: registry.npmjs.org/lodash.defaultsdeep@4.6.1 + lodash.mapvalues: registry.npmjs.org/lodash.mapvalues@4.6.0 + mini-css-extract-plugin: registry.npmjs.org/mini-css-extract-plugin@2.9.0(webpack@5.91.0) + minimist: registry.npmjs.org/minimist@1.2.8 + module-alias: registry.npmjs.org/module-alias@2.2.3 + portfinder: registry.npmjs.org/portfinder@1.0.32 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-loader: registry.npmjs.org/postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0) + progress-webpack-plugin: registry.npmjs.org/progress-webpack-plugin@1.0.16(webpack@5.91.0) + ssri: registry.npmjs.org/ssri@8.0.1 + terser-webpack-plugin: registry.npmjs.org/terser-webpack-plugin@5.3.10(webpack@5.91.0) + thread-loader: registry.npmjs.org/thread-loader@3.0.4(webpack@5.91.0) + vue-loader: registry.npmjs.org/vue-loader@17.4.2(vue@2.7.16)(webpack@5.91.0) + vue-style-loader: registry.npmjs.org/vue-style-loader@4.1.3 + vue-template-compiler: registry.npmjs.org/vue-template-compiler@2.7.16 + webpack: registry.npmjs.org/webpack@5.91.0 + webpack-bundle-analyzer: registry.npmjs.org/webpack-bundle-analyzer@4.10.2 + webpack-chain: registry.npmjs.org/webpack-chain@6.5.1 + webpack-dev-server: registry.npmjs.org/webpack-dev-server@4.15.2(debug@4.3.4)(webpack@5.91.0) + webpack-merge: registry.npmjs.org/webpack-merge@5.10.0 + webpack-virtual-modules: registry.npmjs.org/webpack-virtual-modules@0.4.6 + whatwg-fetch: registry.npmjs.org/whatwg-fetch@3.6.20 + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@vue/compiler-sfc' + - arc-templates + - atpl + - babel-core + - bracket-template + - bufferutil + - clean-css + - coffee-script + - csso + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - encoding + - esbuild + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jade + - jazz + - jqtpl + - just + - liquid-node + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - prettier + - pug + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - slm + - squirrelly + - supports-color + - swig + - swig-templates + - teacup + - templayed + - then-jade + - then-pug + - tinyliquid + - toffee + - twig + - twing + - uglify-js + - underscore + - utf-8-validate + - vash + - velocityjs + - vue + - walrus + - webpack-cli + - whiskers + dev: true + + registry.npmjs.org/@vue/cli-shared-utils@5.0.8: + resolution: {integrity: sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz} + name: '@vue/cli-shared-utils' + version: 5.0.8 + dependencies: + '@achrinza/node-ipc': registry.npmjs.org/@achrinza/node-ipc@9.2.8 + chalk: registry.npmjs.org/chalk@4.1.2 + execa: registry.npmjs.org/execa@1.0.0 + joi: registry.npmjs.org/joi@17.12.3 + launch-editor: registry.npmjs.org/launch-editor@2.6.1 + lru-cache: registry.npmjs.org/lru-cache@6.0.0 + node-fetch: registry.npmjs.org/node-fetch@2.7.0 + open: registry.npmjs.org/open@8.4.2 + ora: registry.npmjs.org/ora@5.4.1 + read-pkg: registry.npmjs.org/read-pkg@5.2.0 + semver: registry.npmjs.org/semver@7.6.0 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + transitivePeerDependencies: + - encoding + dev: true + + registry.npmjs.org/@vue/compiler-core@3.4.23: + resolution: {integrity: sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.23.tgz} + name: '@vue/compiler-core' + version: 3.4.23 + dependencies: + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@vue/shared': registry.npmjs.org/@vue/shared@3.4.23 + entities: registry.npmjs.org/entities@4.5.0 + estree-walker: registry.npmjs.org/estree-walker@2.0.2 + source-map-js: registry.npmjs.org/source-map-js@1.2.0 + dev: true + + registry.npmjs.org/@vue/compiler-dom@3.4.23: + resolution: {integrity: sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz} + name: '@vue/compiler-dom' + version: 3.4.23 + dependencies: + '@vue/compiler-core': registry.npmjs.org/@vue/compiler-core@3.4.23 + '@vue/shared': registry.npmjs.org/@vue/shared@3.4.23 + dev: true + + registry.npmjs.org/@vue/compiler-sfc@2.7.16: + resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz} + name: '@vue/compiler-sfc' + version: 2.7.16 + dependencies: + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + postcss: registry.npmjs.org/postcss@8.4.38 + source-map: registry.npmjs.org/source-map@0.6.1 + optionalDependencies: + prettier: registry.npmjs.org/prettier@2.8.8 + + registry.npmjs.org/@vue/compiler-sfc@3.4.23: + resolution: {integrity: sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz} + name: '@vue/compiler-sfc' + version: 3.4.23 + dependencies: + '@babel/parser': registry.npmjs.org/@babel/parser@7.24.4 + '@vue/compiler-core': registry.npmjs.org/@vue/compiler-core@3.4.23 + '@vue/compiler-dom': registry.npmjs.org/@vue/compiler-dom@3.4.23 + '@vue/compiler-ssr': registry.npmjs.org/@vue/compiler-ssr@3.4.23 + '@vue/shared': registry.npmjs.org/@vue/shared@3.4.23 + estree-walker: registry.npmjs.org/estree-walker@2.0.2 + magic-string: registry.npmjs.org/magic-string@0.30.10 + postcss: registry.npmjs.org/postcss@8.4.38 + source-map-js: registry.npmjs.org/source-map-js@1.2.0 + dev: true + + registry.npmjs.org/@vue/compiler-ssr@3.4.23: + resolution: {integrity: sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz} + name: '@vue/compiler-ssr' + version: 3.4.23 + dependencies: + '@vue/compiler-dom': registry.npmjs.org/@vue/compiler-dom@3.4.23 + '@vue/shared': registry.npmjs.org/@vue/shared@3.4.23 + dev: true + + registry.npmjs.org/@vue/component-compiler-utils@3.3.0: + resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz} + name: '@vue/component-compiler-utils' + version: 3.3.0 + dependencies: + consolidate: registry.npmjs.org/consolidate@0.15.1 + hash-sum: registry.npmjs.org/hash-sum@1.0.2 + lru-cache: registry.npmjs.org/lru-cache@4.1.5 + merge-source-map: registry.npmjs.org/merge-source-map@1.1.0 + postcss: registry.npmjs.org/postcss@7.0.39 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + source-map: registry.npmjs.org/source-map@0.6.1 + vue-template-es2015-compiler: registry.npmjs.org/vue-template-es2015-compiler@1.9.1 + optionalDependencies: + prettier: registry.npmjs.org/prettier@2.8.8 + transitivePeerDependencies: + - arc-templates + - atpl + - babel-core + - bracket-template + - coffee-script + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jade + - jazz + - jqtpl + - just + - liquid-node + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - slm + - squirrelly + - swig + - swig-templates + - teacup + - templayed + - then-jade + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + dev: true + + registry.npmjs.org/@vue/shared@3.4.23: + resolution: {integrity: sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/shared/-/shared-3.4.23.tgz} + name: '@vue/shared' + version: 3.4.23 + dev: true + + registry.npmjs.org/@vue/web-component-wrapper@1.3.0: + resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz} + name: '@vue/web-component-wrapper' + version: 1.3.0 + dev: true + + registry.npmjs.org/@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz} + name: '@webassemblyjs/ast' + version: 1.12.1 + dependencies: + '@webassemblyjs/helper-numbers': registry.npmjs.org/@webassemblyjs/helper-numbers@1.11.6 + '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz} + name: '@webassemblyjs/floating-point-hex-parser' + version: 1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz} + name: '@webassemblyjs/helper-api-error' + version: 1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz} + name: '@webassemblyjs/helper-buffer' + version: 1.12.1 + dev: true + + registry.npmjs.org/@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz} + name: '@webassemblyjs/helper-numbers' + version: 1.11.6 + dependencies: + '@webassemblyjs/floating-point-hex-parser': registry.npmjs.org/@webassemblyjs/floating-point-hex-parser@1.11.6 + '@webassemblyjs/helper-api-error': registry.npmjs.org/@webassemblyjs/helper-api-error@1.11.6 + '@xtuc/long': registry.npmjs.org/@xtuc/long@4.2.2 + dev: true + + registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz} + name: '@webassemblyjs/helper-wasm-bytecode' + version: 1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz} + name: '@webassemblyjs/helper-wasm-section' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer@1.12.1 + '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6 + '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen@1.12.1 + dev: true + + registry.npmjs.org/@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz} + name: '@webassemblyjs/ieee754' + version: 1.11.6 + dependencies: + '@xtuc/ieee754': registry.npmjs.org/@xtuc/ieee754@1.2.0 + dev: true + + registry.npmjs.org/@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz} + name: '@webassemblyjs/leb128' + version: 1.11.6 + dependencies: + '@xtuc/long': registry.npmjs.org/@xtuc/long@4.2.2 + dev: true + + registry.npmjs.org/@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz} + name: '@webassemblyjs/utf8' + version: 1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz} + name: '@webassemblyjs/wasm-edit' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer@1.12.1 + '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6 + '@webassemblyjs/helper-wasm-section': registry.npmjs.org/@webassemblyjs/helper-wasm-section@1.12.1 + '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen@1.12.1 + '@webassemblyjs/wasm-opt': registry.npmjs.org/@webassemblyjs/wasm-opt@1.12.1 + '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser@1.12.1 + '@webassemblyjs/wast-printer': registry.npmjs.org/@webassemblyjs/wast-printer@1.12.1 + dev: true + + registry.npmjs.org/@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz} + name: '@webassemblyjs/wasm-gen' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6 + '@webassemblyjs/ieee754': registry.npmjs.org/@webassemblyjs/ieee754@1.11.6 + '@webassemblyjs/leb128': registry.npmjs.org/@webassemblyjs/leb128@1.11.6 + '@webassemblyjs/utf8': registry.npmjs.org/@webassemblyjs/utf8@1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz} + name: '@webassemblyjs/wasm-opt' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer@1.12.1 + '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen@1.12.1 + '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser@1.12.1 + dev: true + + registry.npmjs.org/@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz} + name: '@webassemblyjs/wasm-parser' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/helper-api-error': registry.npmjs.org/@webassemblyjs/helper-api-error@1.11.6 + '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode@1.11.6 + '@webassemblyjs/ieee754': registry.npmjs.org/@webassemblyjs/ieee754@1.11.6 + '@webassemblyjs/leb128': registry.npmjs.org/@webassemblyjs/leb128@1.11.6 + '@webassemblyjs/utf8': registry.npmjs.org/@webassemblyjs/utf8@1.11.6 + dev: true + + registry.npmjs.org/@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz} + name: '@webassemblyjs/wast-printer' + version: 1.12.1 + dependencies: + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@xtuc/long': registry.npmjs.org/@xtuc/long@4.2.2 + dev: true + + registry.npmjs.org/@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz} + name: '@xtuc/ieee754' + version: 1.2.0 + dev: true + + registry.npmjs.org/@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz} + name: '@xtuc/long' + version: 4.2.2 + dev: true + + registry.npmjs.org/accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz} + name: accepts + version: 1.3.8 + engines: {node: '>= 0.6'} + dependencies: + mime-types: registry.npmjs.org/mime-types@2.1.35 + negotiator: registry.npmjs.org/negotiator@0.6.3 + dev: true + + registry.npmjs.org/acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz} + id: registry.npmjs.org/acorn-import-assertions/1.9.0 + name: acorn-import-assertions + version: 1.9.0 + peerDependencies: + acorn: ^8 + dependencies: + acorn: registry.npmjs.org/acorn@8.11.3 + dev: true + + registry.npmjs.org/acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} + id: registry.npmjs.org/acorn-jsx/5.3.2 + name: acorn-jsx + version: 5.3.2 + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: registry.npmjs.org/acorn@7.4.1 + dev: true + + registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} + id: registry.npmjs.org/acorn-jsx/5.3.2 + name: acorn-jsx + version: 5.3.2 + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: registry.npmjs.org/acorn@8.11.3 + dev: true + + registry.npmjs.org/acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz} + name: acorn-walk + version: 8.3.2 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmjs.org/acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz} + name: acorn + version: 7.4.1 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmjs.org/acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz} + name: acorn + version: 8.11.3 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmjs.org/address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/address/-/address-1.2.2.tgz} + name: address + version: 1.2.2 + engines: {node: '>= 10.0.0'} + dev: true + + registry.npmjs.org/ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz} + id: registry.npmjs.org/ajv-formats/2.1.1 + name: ajv-formats + version: 2.1.1 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: registry.npmjs.org/ajv@8.12.0 + dev: true + + registry.npmjs.org/ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz} + id: registry.npmjs.org/ajv-keywords/3.5.2 + name: ajv-keywords + version: 3.5.2 + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: registry.npmjs.org/ajv@6.12.6 + dev: true + + registry.npmjs.org/ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz} + id: registry.npmjs.org/ajv-keywords/5.1.0 + name: ajv-keywords + version: 5.1.0 + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: registry.npmjs.org/ajv@8.12.0 + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + dev: true + + registry.npmjs.org/ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz} + name: ajv + version: 6.12.6 + dependencies: + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + fast-json-stable-stringify: registry.npmjs.org/fast-json-stable-stringify@2.1.0 + json-schema-traverse: registry.npmjs.org/json-schema-traverse@0.4.1 + uri-js: registry.npmjs.org/uri-js@4.4.1 + dev: true + + registry.npmjs.org/ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz} + name: ajv + version: 8.12.0 + dependencies: + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + json-schema-traverse: registry.npmjs.org/json-schema-traverse@1.0.0 + require-from-string: registry.npmjs.org/require-from-string@2.0.2 + uri-js: registry.npmjs.org/uri-js@4.4.1 + dev: true + + registry.npmjs.org/ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz} + name: ansi-colors + version: 4.1.3 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz} + name: ansi-escapes + version: 3.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz} + name: ansi-html-community + version: 0.0.8 + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + registry.npmjs.org/ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz} + name: ansi-regex + version: 3.0.1 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz} + name: ansi-regex + version: 5.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz} + name: ansi-styles + version: 3.2.1 + engines: {node: '>=4'} + dependencies: + color-convert: registry.npmjs.org/color-convert@1.9.3 + dev: true + + registry.npmjs.org/ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} + name: ansi-styles + version: 4.3.0 + engines: {node: '>=8'} + dependencies: + color-convert: registry.npmjs.org/color-convert@2.0.1 + dev: true + + registry.npmjs.org/any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz} + name: any-promise + version: 1.3.0 + dev: true + + registry.npmjs.org/anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz} + name: anymatch + version: 3.1.3 + engines: {node: '>= 8'} + dependencies: + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + picomatch: registry.npmjs.org/picomatch@2.3.1 + dev: true + + registry.npmjs.org/arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/arch/-/arch-2.2.0.tgz} + name: arch + version: 2.2.0 + dev: true + + registry.npmjs.org/argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz} + name: argparse + version: 1.0.10 + dependencies: + sprintf-js: registry.npmjs.org/sprintf-js@1.0.3 + dev: true + + registry.npmjs.org/array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz} + name: array-flatten + version: 1.1.1 + dev: true + + registry.npmjs.org/array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz} + name: array-union + version: 2.1.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz} + name: astral-regex + version: 2.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/async-validator@1.8.5: + resolution: {integrity: sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz} + name: async-validator + version: 1.8.5 + dependencies: + babel-runtime: registry.npmjs.org/babel-runtime@6.26.0 + dev: false + + registry.npmjs.org/async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/async/-/async-2.6.4.tgz} + name: async + version: 2.6.4 + dependencies: + lodash: registry.npmjs.org/lodash@4.17.21 + dev: true + + registry.npmjs.org/at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz} + name: at-least-node + version: 1.0.0 + engines: {node: '>= 4.0.0'} + dev: true + + registry.npmjs.org/autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz} + id: registry.npmjs.org/autoprefixer/10.4.19 + name: autoprefixer + version: 10.4.19 + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001611 + fraction.js: registry.npmjs.org/fraction.js@4.3.7 + normalize-range: registry.npmjs.org/normalize-range@0.1.2 + picocolors: registry.npmjs.org/picocolors@1.0.0 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/babel-helper-vue-jsx-merge-props@2.0.3: + resolution: {integrity: sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz} + name: babel-helper-vue-jsx-merge-props + version: 2.0.3 + dev: false + + registry.npmjs.org/babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0): + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz} + id: registry.npmjs.org/babel-loader/8.3.0 + name: babel-loader + version: 8.3.0 + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + find-cache-dir: registry.npmjs.org/find-cache-dir@3.3.2 + loader-utils: registry.npmjs.org/loader-utils@2.0.4 + make-dir: registry.npmjs.org/make-dir@3.1.0 + schema-utils: registry.npmjs.org/schema-utils@2.7.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/babel-plugin-dynamic-import-node@2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz} + name: babel-plugin-dynamic-import-node + version: 2.3.3 + dependencies: + object.assign: registry.npmjs.org/object.assign@4.1.5 + dev: true + + registry.npmjs.org/babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): + resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz} + id: registry.npmjs.org/babel-plugin-polyfill-corejs2/0.4.10 + name: babel-plugin-polyfill-corejs2 + version: 0.4.10 + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': registry.npmjs.org/@babel/compat-data@7.24.4 + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-define-polyfill-provider': registry.npmjs.org/@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4) + semver: registry.npmjs.org/semver@6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz} + id: registry.npmjs.org/babel-plugin-polyfill-corejs3/0.10.4 + name: babel-plugin-polyfill-corejs3 + version: 0.10.4 + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-define-polyfill-provider': registry.npmjs.org/@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4) + core-js-compat: registry.npmjs.org/core-js-compat@3.37.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz} + id: registry.npmjs.org/babel-plugin-polyfill-regenerator/0.6.1 + name: babel-plugin-polyfill-regenerator + version: 0.6.1 + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.24.4 + '@babel/helper-define-polyfill-provider': registry.npmjs.org/@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4) + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz} + name: babel-runtime + version: 6.26.0 + dependencies: + core-js: registry.npmjs.org/core-js@2.6.12 + regenerator-runtime: registry.npmjs.org/regenerator-runtime@0.11.1 + dev: false + + registry.npmjs.org/balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} + name: balanced-match + version: 1.0.2 + dev: true + + registry.npmjs.org/base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz} + name: base64-js + version: 1.5.1 + dev: true + + registry.npmjs.org/batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/batch/-/batch-0.6.1.tgz} + name: batch + version: 0.6.1 + dev: true + + registry.npmjs.org/big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz} + name: big.js + version: 5.2.2 + dev: true + + registry.npmjs.org/binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz} + name: binary-extensions + version: 2.3.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/bl/-/bl-4.1.0.tgz} + name: bl + version: 4.1.0 + dependencies: + buffer: registry.npmjs.org/buffer@5.7.1 + inherits: registry.npmjs.org/inherits@2.0.4 + readable-stream: registry.npmjs.org/readable-stream@3.6.2 + dev: true + + registry.npmjs.org/bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz} + name: bluebird + version: 3.7.2 + dev: true + + registry.npmjs.org/body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz} + name: body-parser + version: 1.20.2 + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: registry.npmjs.org/bytes@3.1.2 + content-type: registry.npmjs.org/content-type@1.0.5 + debug: registry.npmjs.org/debug@2.6.9 + depd: registry.npmjs.org/depd@2.0.0 + destroy: registry.npmjs.org/destroy@1.2.0 + http-errors: registry.npmjs.org/http-errors@2.0.0 + iconv-lite: registry.npmjs.org/iconv-lite@0.4.24 + on-finished: registry.npmjs.org/on-finished@2.4.1 + qs: registry.npmjs.org/qs@6.11.0 + raw-body: registry.npmjs.org/raw-body@2.5.2 + type-is: registry.npmjs.org/type-is@1.6.18 + unpipe: registry.npmjs.org/unpipe@1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz} + name: bonjour-service + version: 1.2.1 + dependencies: + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + multicast-dns: registry.npmjs.org/multicast-dns@7.2.5 + dev: true + + registry.npmjs.org/boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz} + name: boolbase + version: 1.0.0 + dev: true + + registry.npmjs.org/brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz} + name: brace-expansion + version: 1.1.11 + dependencies: + balanced-match: registry.npmjs.org/balanced-match@1.0.2 + concat-map: registry.npmjs.org/concat-map@0.0.1 + dev: true + + registry.npmjs.org/braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/braces/-/braces-3.0.2.tgz} + name: braces + version: 3.0.2 + engines: {node: '>=8'} + dependencies: + fill-range: registry.npmjs.org/fill-range@7.0.1 + dev: true + + registry.npmjs.org/browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz} + name: browserslist + version: 4.23.0 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001611 + electron-to-chromium: registry.npmjs.org/electron-to-chromium@1.4.740 + node-releases: registry.npmjs.org/node-releases@2.0.14 + update-browserslist-db: registry.npmjs.org/update-browserslist-db@1.0.13(browserslist@4.23.0) + dev: true + + registry.npmjs.org/buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz} + name: buffer-from + version: 1.1.2 + dev: true + + registry.npmjs.org/buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz} + name: buffer + version: 5.7.1 + dependencies: + base64-js: registry.npmjs.org/base64-js@1.5.1 + ieee754: registry.npmjs.org/ieee754@1.2.1 + dev: true + + registry.npmjs.org/bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz} + name: bytes + version: 3.0.0 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz} + name: bytes + version: 3.1.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz} + name: call-bind + version: 1.0.7 + engines: {node: '>= 0.4'} + dependencies: + es-define-property: registry.npmjs.org/es-define-property@1.0.0 + es-errors: registry.npmjs.org/es-errors@1.3.0 + function-bind: registry.npmjs.org/function-bind@1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.4 + set-function-length: registry.npmjs.org/set-function-length@1.2.2 + dev: true + + registry.npmjs.org/callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} + name: callsites + version: 3.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz} + name: camel-case + version: 4.1.2 + dependencies: + pascal-case: registry.npmjs.org/pascal-case@3.1.2 + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz} + name: camelcase + version: 5.3.1 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz} + name: camelcase + version: 6.3.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz} + name: caniuse-api + version: 3.0.0 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001611 + lodash.memoize: registry.npmjs.org/lodash.memoize@4.1.2 + lodash.uniq: registry.npmjs.org/lodash.uniq@4.5.0 + dev: true + + registry.npmjs.org/caniuse-lite@1.0.30001611: + resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz} + name: caniuse-lite + version: 1.0.30001611 + dev: true + + registry.npmjs.org/case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz} + name: case-sensitive-paths-webpack-plugin + version: 2.4.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} + name: chalk + version: 2.4.2 + engines: {node: '>=4'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles@3.2.1 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@1.0.5 + supports-color: registry.npmjs.org/supports-color@5.5.0 + dev: true + + registry.npmjs.org/chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz} + name: chalk + version: 3.0.0 + engines: {node: '>=8'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + supports-color: registry.npmjs.org/supports-color@7.2.0 + dev: true + + registry.npmjs.org/chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} + name: chalk + version: 4.1.2 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + supports-color: registry.npmjs.org/supports-color@7.2.0 + dev: true + + registry.npmjs.org/chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz} + name: chokidar + version: 3.6.0 + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: registry.npmjs.org/anymatch@3.1.3 + braces: registry.npmjs.org/braces@3.0.2 + glob-parent: registry.npmjs.org/glob-parent@5.1.2 + is-binary-path: registry.npmjs.org/is-binary-path@2.1.0 + is-glob: registry.npmjs.org/is-glob@4.0.3 + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + readdirp: registry.npmjs.org/readdirp@3.6.0 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents@2.3.3 + dev: true + + registry.npmjs.org/chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz} + name: chrome-trace-event + version: 1.0.3 + engines: {node: '>=6.0'} + dev: true + + registry.npmjs.org/ci-info@1.6.0: + resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz} + name: ci-info + version: 1.6.0 + dev: true + + registry.npmjs.org/clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz} + name: clean-css + version: 5.3.3 + engines: {node: '>= 10.0'} + dependencies: + source-map: registry.npmjs.org/source-map@0.6.1 + dev: true + + registry.npmjs.org/cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz} + name: cli-cursor + version: 2.1.0 + engines: {node: '>=4'} + dependencies: + restore-cursor: registry.npmjs.org/restore-cursor@2.0.0 + dev: true + + registry.npmjs.org/cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz} + name: cli-cursor + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + restore-cursor: registry.npmjs.org/restore-cursor@3.1.0 + dev: true + + registry.npmjs.org/cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz} + name: cli-highlight + version: 2.1.11 + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: registry.npmjs.org/chalk@4.1.2 + highlight.js: registry.npmjs.org/highlight.js@10.7.3 + mz: registry.npmjs.org/mz@2.7.0 + parse5: registry.npmjs.org/parse5@5.1.1 + parse5-htmlparser2-tree-adapter: registry.npmjs.org/parse5-htmlparser2-tree-adapter@6.0.1 + yargs: registry.npmjs.org/yargs@16.2.0 + dev: true + + registry.npmjs.org/cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz} + name: cli-spinners + version: 2.9.2 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/clipboardy@2.3.0: + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz} + name: clipboardy + version: 2.3.0 + engines: {node: '>=8'} + dependencies: + arch: registry.npmjs.org/arch@2.2.0 + execa: registry.npmjs.org/execa@1.0.0 + is-wsl: registry.npmjs.org/is-wsl@2.2.0 + dev: true + + registry.npmjs.org/cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz} + name: cliui + version: 7.0.4 + dependencies: + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wrap-ansi: registry.npmjs.org/wrap-ansi@7.0.0 + dev: true + + registry.npmjs.org/clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz} + name: clone-deep + version: 4.0.1 + engines: {node: '>=6'} + dependencies: + is-plain-object: registry.npmjs.org/is-plain-object@2.0.4 + kind-of: registry.npmjs.org/kind-of@6.0.3 + shallow-clone: registry.npmjs.org/shallow-clone@3.0.1 + dev: true + + registry.npmjs.org/clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/clone/-/clone-1.0.4.tgz} + name: clone + version: 1.0.4 + engines: {node: '>=0.8'} + dev: true + + registry.npmjs.org/color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz} + name: color-convert + version: 1.9.3 + dependencies: + color-name: registry.npmjs.org/color-name@1.1.3 + dev: true + + registry.npmjs.org/color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} + name: color-convert + version: 2.0.1 + engines: {node: '>=7.0.0'} + dependencies: + color-name: registry.npmjs.org/color-name@1.1.4 + dev: true + + registry.npmjs.org/color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz} + name: color-name + version: 1.1.3 + dev: true + + registry.npmjs.org/color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} + name: color-name + version: 1.1.4 + dev: true + + registry.npmjs.org/colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/colord/-/colord-2.9.3.tgz} + name: colord + version: 2.9.3 + dev: true + + registry.npmjs.org/colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz} + name: colorette + version: 2.0.20 + dev: true + + registry.npmjs.org/commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/commander/-/commander-2.20.3.tgz} + name: commander + version: 2.20.3 + dev: true + + registry.npmjs.org/commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/commander/-/commander-7.2.0.tgz} + name: commander + version: 7.2.0 + engines: {node: '>= 10'} + dev: true + + registry.npmjs.org/commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/commander/-/commander-8.3.0.tgz} + name: commander + version: 8.3.0 + engines: {node: '>= 12'} + dev: true + + registry.npmjs.org/commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz} + name: commondir + version: 1.0.1 + dev: true + + registry.npmjs.org/compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz} + name: compressible + version: 2.0.18 + engines: {node: '>= 0.6'} + dependencies: + mime-db: registry.npmjs.org/mime-db@1.52.0 + dev: true + + registry.npmjs.org/compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/compression/-/compression-1.7.4.tgz} + name: compression + version: 1.7.4 + engines: {node: '>= 0.8.0'} + dependencies: + accepts: registry.npmjs.org/accepts@1.3.8 + bytes: registry.npmjs.org/bytes@3.0.0 + compressible: registry.npmjs.org/compressible@2.0.18 + debug: registry.npmjs.org/debug@2.6.9 + on-headers: registry.npmjs.org/on-headers@1.0.2 + safe-buffer: registry.npmjs.org/safe-buffer@5.1.2 + vary: registry.npmjs.org/vary@1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} + name: concat-map + version: 0.0.1 + dev: true + + registry.npmjs.org/connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz} + name: connect-history-api-fallback + version: 2.0.0 + engines: {node: '>=0.8'} + dev: true + + registry.npmjs.org/consolidate@0.15.1: + resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz} + name: consolidate + version: 0.15.1 + engines: {node: '>= 0.10.0'} + deprecated: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog + peerDependencies: + arc-templates: ^0.5.3 + atpl: '>=0.7.6' + babel-core: ^6.26.3 + bracket-template: ^1.1.5 + coffee-script: ^1.12.7 + dot: ^1.1.3 + dust: ^0.3.0 + dustjs-helpers: ^1.7.4 + dustjs-linkedin: ^2.7.5 + eco: ^1.1.0-rc-3 + ect: ^0.5.9 + ejs: ^3.1.5 + haml-coffee: ^1.14.1 + hamlet: ^0.3.3 + hamljs: ^0.6.2 + handlebars: ^4.7.6 + hogan.js: ^3.0.2 + htmling: ^0.0.8 + jade: ^1.11.0 + jazz: ^0.0.18 + jqtpl: ~1.1.0 + just: ^0.1.8 + liquid-node: ^3.0.1 + liquor: ^0.0.5 + lodash: ^4.17.20 + marko: ^3.14.4 + mote: ^0.2.0 + mustache: ^3.0.0 + nunjucks: ^3.2.2 + plates: ~0.4.11 + pug: ^3.0.0 + qejs: ^3.0.5 + ractive: ^1.3.12 + razor-tmpl: ^1.3.1 + react: ^16.13.1 + react-dom: ^16.13.1 + slm: ^2.0.0 + squirrelly: ^5.1.0 + swig: ^1.4.2 + swig-templates: ^2.0.3 + teacup: ^2.0.0 + templayed: '>=0.2.3' + then-jade: '*' + then-pug: '*' + tinyliquid: ^0.2.34 + toffee: ^0.3.6 + twig: ^1.15.2 + twing: ^5.0.2 + underscore: ^1.11.0 + vash: ^0.13.0 + velocityjs: ^2.0.1 + walrus: ^0.10.1 + whiskers: ^0.4.0 + peerDependenciesMeta: + arc-templates: + optional: true + atpl: + optional: true + babel-core: + optional: true + bracket-template: + optional: true + coffee-script: + optional: true + dot: + optional: true + dust: + optional: true + dustjs-helpers: + optional: true + dustjs-linkedin: + optional: true + eco: + optional: true + ect: + optional: true + ejs: + optional: true + haml-coffee: + optional: true + hamlet: + optional: true + hamljs: + optional: true + handlebars: + optional: true + hogan.js: + optional: true + htmling: + optional: true + jade: + optional: true + jazz: + optional: true + jqtpl: + optional: true + just: + optional: true + liquid-node: + optional: true + liquor: + optional: true + lodash: + optional: true + marko: + optional: true + mote: + optional: true + mustache: + optional: true + nunjucks: + optional: true + plates: + optional: true + pug: + optional: true + qejs: + optional: true + ractive: + optional: true + razor-tmpl: + optional: true + react: + optional: true + react-dom: + optional: true + slm: + optional: true + squirrelly: + optional: true + swig: + optional: true + swig-templates: + optional: true + teacup: + optional: true + templayed: + optional: true + then-jade: + optional: true + then-pug: + optional: true + tinyliquid: + optional: true + toffee: + optional: true + twig: + optional: true + twing: + optional: true + underscore: + optional: true + vash: + optional: true + velocityjs: + optional: true + walrus: + optional: true + whiskers: + optional: true + dependencies: + bluebird: registry.npmjs.org/bluebird@3.7.2 + dev: true + + registry.npmjs.org/content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz} + name: content-disposition + version: 0.5.4 + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + dev: true + + registry.npmjs.org/content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz} + name: content-type + version: 1.0.5 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz} + name: convert-source-map + version: 2.0.0 + dev: true + + registry.npmjs.org/cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz} + name: cookie-signature + version: 1.0.6 + dev: true + + registry.npmjs.org/cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz} + name: cookie + version: 0.6.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/copy-webpack-plugin@9.1.0(webpack@5.91.0): + resolution: {integrity: sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz} + id: registry.npmjs.org/copy-webpack-plugin/9.1.0 + name: copy-webpack-plugin + version: 9.1.0 + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.1.0 + dependencies: + fast-glob: registry.npmjs.org/fast-glob@3.3.2 + glob-parent: registry.npmjs.org/glob-parent@6.0.2 + globby: registry.npmjs.org/globby@11.1.0 + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + schema-utils: registry.npmjs.org/schema-utils@3.3.0 + serialize-javascript: registry.npmjs.org/serialize-javascript@6.0.2 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz} + name: core-js-compat + version: 3.37.0 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + dev: true + + registry.npmjs.org/core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz} + name: core-js + version: 2.6.12 + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: false + + registry.npmjs.org/core-js@3.37.0: + resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz} + name: core-js + version: 3.37.0 + requiresBuild: true + + registry.npmjs.org/core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz} + name: core-util-is + version: 1.0.3 + dev: true + + registry.npmjs.org/cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz} + name: cosmiconfig + version: 7.1.0 + engines: {node: '>=10'} + dependencies: + '@types/parse-json': registry.npmjs.org/@types/parse-json@4.0.2 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + parse-json: registry.npmjs.org/parse-json@5.2.0 + path-type: registry.npmjs.org/path-type@4.0.0 + yaml: registry.npmjs.org/yaml@1.10.2 + dev: true + + registry.npmjs.org/cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz} + name: cross-spawn + version: 5.1.0 + dependencies: + lru-cache: registry.npmjs.org/lru-cache@4.1.5 + shebang-command: registry.npmjs.org/shebang-command@1.2.0 + which: registry.npmjs.org/which@1.3.1 + dev: true + + registry.npmjs.org/cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz} + name: cross-spawn + version: 6.0.5 + engines: {node: '>=4.8'} + dependencies: + nice-try: registry.npmjs.org/nice-try@1.0.5 + path-key: registry.npmjs.org/path-key@2.0.1 + semver: registry.npmjs.org/semver@5.7.2 + shebang-command: registry.npmjs.org/shebang-command@1.2.0 + which: registry.npmjs.org/which@1.3.1 + dev: true + + registry.npmjs.org/cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz} + name: cross-spawn + version: 7.0.3 + engines: {node: '>= 8'} + dependencies: + path-key: registry.npmjs.org/path-key@3.1.1 + shebang-command: registry.npmjs.org/shebang-command@2.0.0 + which: registry.npmjs.org/which@2.0.2 + dev: true + + registry.npmjs.org/css-declaration-sorter@6.4.1(postcss@8.4.38): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz} + id: registry.npmjs.org/css-declaration-sorter/6.4.1 + name: css-declaration-sorter + version: 6.4.1 + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/css-loader@6.11.0(webpack@5.91.0): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz} + id: registry.npmjs.org/css-loader/6.11.0 + name: css-loader + version: 6.11.0 + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + icss-utils: registry.npmjs.org/icss-utils@5.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-modules-extract-imports: registry.npmjs.org/postcss-modules-extract-imports@3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: registry.npmjs.org/postcss-modules-local-by-default@4.0.5(postcss@8.4.38) + postcss-modules-scope: registry.npmjs.org/postcss-modules-scope@3.2.0(postcss@8.4.38) + postcss-modules-values: registry.npmjs.org/postcss-modules-values@4.0.0(postcss@8.4.38) + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + semver: registry.npmjs.org/semver@7.6.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/css-minimizer-webpack-plugin@3.4.1(webpack@5.91.0): + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz} + id: registry.npmjs.org/css-minimizer-webpack-plugin/3.4.1 + name: css-minimizer-webpack-plugin + version: 3.4.1 + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: registry.npmjs.org/cssnano@5.1.15(postcss@8.4.38) + jest-worker: registry.npmjs.org/jest-worker@27.5.1 + postcss: registry.npmjs.org/postcss@8.4.38 + schema-utils: registry.npmjs.org/schema-utils@4.2.0 + serialize-javascript: registry.npmjs.org/serialize-javascript@6.0.2 + source-map: registry.npmjs.org/source-map@0.6.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz} + name: css-select + version: 4.3.0 + dependencies: + boolbase: registry.npmjs.org/boolbase@1.0.0 + css-what: registry.npmjs.org/css-what@6.1.0 + domhandler: registry.npmjs.org/domhandler@4.3.1 + domutils: registry.npmjs.org/domutils@2.8.0 + nth-check: registry.npmjs.org/nth-check@2.1.1 + dev: true + + registry.npmjs.org/css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz} + name: css-tree + version: 1.1.3 + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: registry.npmjs.org/mdn-data@2.0.14 + source-map: registry.npmjs.org/source-map@0.6.1 + dev: true + + registry.npmjs.org/css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz} + name: css-what + version: 6.1.0 + engines: {node: '>= 6'} + dev: true + + registry.npmjs.org/cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} + name: cssesc + version: 3.0.0 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmjs.org/cssnano-preset-default@5.2.14(postcss@8.4.38): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz} + id: registry.npmjs.org/cssnano-preset-default/5.2.14 + name: cssnano-preset-default + version: 5.2.14 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: registry.npmjs.org/css-declaration-sorter@6.4.1(postcss@8.4.38) + cssnano-utils: registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-calc: registry.npmjs.org/postcss-calc@8.2.4(postcss@8.4.38) + postcss-colormin: registry.npmjs.org/postcss-colormin@5.3.1(postcss@8.4.38) + postcss-convert-values: registry.npmjs.org/postcss-convert-values@5.1.3(postcss@8.4.38) + postcss-discard-comments: registry.npmjs.org/postcss-discard-comments@5.1.2(postcss@8.4.38) + postcss-discard-duplicates: registry.npmjs.org/postcss-discard-duplicates@5.1.0(postcss@8.4.38) + postcss-discard-empty: registry.npmjs.org/postcss-discard-empty@5.1.1(postcss@8.4.38) + postcss-discard-overridden: registry.npmjs.org/postcss-discard-overridden@5.1.0(postcss@8.4.38) + postcss-merge-longhand: registry.npmjs.org/postcss-merge-longhand@5.1.7(postcss@8.4.38) + postcss-merge-rules: registry.npmjs.org/postcss-merge-rules@5.1.4(postcss@8.4.38) + postcss-minify-font-values: registry.npmjs.org/postcss-minify-font-values@5.1.0(postcss@8.4.38) + postcss-minify-gradients: registry.npmjs.org/postcss-minify-gradients@5.1.1(postcss@8.4.38) + postcss-minify-params: registry.npmjs.org/postcss-minify-params@5.1.4(postcss@8.4.38) + postcss-minify-selectors: registry.npmjs.org/postcss-minify-selectors@5.2.1(postcss@8.4.38) + postcss-normalize-charset: registry.npmjs.org/postcss-normalize-charset@5.1.0(postcss@8.4.38) + postcss-normalize-display-values: registry.npmjs.org/postcss-normalize-display-values@5.1.0(postcss@8.4.38) + postcss-normalize-positions: registry.npmjs.org/postcss-normalize-positions@5.1.1(postcss@8.4.38) + postcss-normalize-repeat-style: registry.npmjs.org/postcss-normalize-repeat-style@5.1.1(postcss@8.4.38) + postcss-normalize-string: registry.npmjs.org/postcss-normalize-string@5.1.0(postcss@8.4.38) + postcss-normalize-timing-functions: registry.npmjs.org/postcss-normalize-timing-functions@5.1.0(postcss@8.4.38) + postcss-normalize-unicode: registry.npmjs.org/postcss-normalize-unicode@5.1.1(postcss@8.4.38) + postcss-normalize-url: registry.npmjs.org/postcss-normalize-url@5.1.0(postcss@8.4.38) + postcss-normalize-whitespace: registry.npmjs.org/postcss-normalize-whitespace@5.1.1(postcss@8.4.38) + postcss-ordered-values: registry.npmjs.org/postcss-ordered-values@5.1.3(postcss@8.4.38) + postcss-reduce-initial: registry.npmjs.org/postcss-reduce-initial@5.1.2(postcss@8.4.38) + postcss-reduce-transforms: registry.npmjs.org/postcss-reduce-transforms@5.1.0(postcss@8.4.38) + postcss-svgo: registry.npmjs.org/postcss-svgo@5.1.0(postcss@8.4.38) + postcss-unique-selectors: registry.npmjs.org/postcss-unique-selectors@5.1.1(postcss@8.4.38) + dev: true + + registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz} + id: registry.npmjs.org/cssnano-utils/3.1.0 + name: cssnano-utils + version: 3.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/cssnano@5.1.15(postcss@8.4.38): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz} + id: registry.npmjs.org/cssnano/5.1.15 + name: cssnano + version: 5.1.15 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: registry.npmjs.org/cssnano-preset-default@5.2.14(postcss@8.4.38) + lilconfig: registry.npmjs.org/lilconfig@2.1.0 + postcss: registry.npmjs.org/postcss@8.4.38 + yaml: registry.npmjs.org/yaml@1.10.2 + dev: true + + registry.npmjs.org/csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/csso/-/csso-4.2.0.tgz} + name: csso + version: 4.2.0 + engines: {node: '>=8.0.0'} + dependencies: + css-tree: registry.npmjs.org/css-tree@1.1.3 + dev: true + + registry.npmjs.org/csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz} + name: csstype + version: 3.1.3 + + registry.npmjs.org/de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz} + name: de-indent + version: 1.0.2 + dev: true + + registry.npmjs.org/debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz} + name: debounce + version: 1.2.1 + dev: true + + registry.npmjs.org/debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-2.6.9.tgz} + name: debug + version: 2.6.9 + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmjs.org/ms@2.0.0 + dev: true + + registry.npmjs.org/debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-3.2.7.tgz} + name: debug + version: 3.2.7 + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmjs.org/ms@2.1.3 + dev: true + + registry.npmjs.org/debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} + name: debug + version: 4.3.4 + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmjs.org/ms@2.1.2 + dev: true + + registry.npmjs.org/deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} + name: deep-is + version: 0.1.4 + dev: true + + registry.npmjs.org/deepmerge@1.5.2: + resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz} + name: deepmerge + version: 1.5.2 + engines: {node: '>=0.10.0'} + + registry.npmjs.org/default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz} + name: default-gateway + version: 6.0.3 + engines: {node: '>= 10'} + dependencies: + execa: registry.npmjs.org/execa@5.1.1 + dev: true + + registry.npmjs.org/defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz} + name: defaults + version: 1.0.4 + dependencies: + clone: registry.npmjs.org/clone@1.0.4 + dev: true + + registry.npmjs.org/define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz} + name: define-data-property + version: 1.1.4 + engines: {node: '>= 0.4'} + dependencies: + es-define-property: registry.npmjs.org/es-define-property@1.0.0 + es-errors: registry.npmjs.org/es-errors@1.3.0 + gopd: registry.npmjs.org/gopd@1.0.1 + dev: true + + registry.npmjs.org/define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz} + name: define-lazy-prop + version: 2.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz} + name: define-properties + version: 1.2.1 + engines: {node: '>= 0.4'} + dependencies: + define-data-property: registry.npmjs.org/define-data-property@1.1.4 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.2 + object-keys: registry.npmjs.org/object-keys@1.1.1 + dev: true + + registry.npmjs.org/depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/depd/-/depd-1.1.2.tgz} + name: depd + version: 1.1.2 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/depd/-/depd-2.0.0.tgz} + name: depd + version: 2.0.0 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz} + name: destroy + version: 1.2.0 + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: true + + registry.npmjs.org/detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz} + name: detect-node + version: 2.1.0 + dev: true + + registry.npmjs.org/dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz} + name: dir-glob + version: 3.0.1 + engines: {node: '>=8'} + dependencies: + path-type: registry.npmjs.org/path-type@4.0.0 + dev: true + + registry.npmjs.org/dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz} + name: dns-packet + version: 5.6.1 + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': registry.npmjs.org/@leichtgewicht/ip-codec@2.0.5 + dev: true + + registry.npmjs.org/doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz} + name: doctrine + version: 3.0.0 + engines: {node: '>=6.0.0'} + dependencies: + esutils: registry.npmjs.org/esutils@2.0.3 + dev: true + + registry.npmjs.org/dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz} + name: dom-converter + version: 0.2.0 + dependencies: + utila: registry.npmjs.org/utila@0.4.0 + dev: true + + registry.npmjs.org/dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz} + name: dom-serializer + version: 1.4.1 + dependencies: + domelementtype: registry.npmjs.org/domelementtype@2.3.0 + domhandler: registry.npmjs.org/domhandler@4.3.1 + entities: registry.npmjs.org/entities@2.2.0 + dev: true + + registry.npmjs.org/domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz} + name: domelementtype + version: 2.3.0 + dev: true + + registry.npmjs.org/domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz} + name: domhandler + version: 4.3.1 + engines: {node: '>= 4'} + dependencies: + domelementtype: registry.npmjs.org/domelementtype@2.3.0 + dev: true + + registry.npmjs.org/domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz} + name: domutils + version: 2.8.0 + dependencies: + dom-serializer: registry.npmjs.org/dom-serializer@1.4.1 + domelementtype: registry.npmjs.org/domelementtype@2.3.0 + domhandler: registry.npmjs.org/domhandler@4.3.1 + dev: true + + registry.npmjs.org/dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz} + name: dot-case + version: 3.0.4 + dependencies: + no-case: registry.npmjs.org/no-case@3.0.4 + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz} + name: dotenv-expand + version: 5.1.0 + dev: true + + registry.npmjs.org/dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz} + name: dotenv + version: 10.0.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz} + name: duplexer + version: 0.1.2 + dev: true + + registry.npmjs.org/easy-stack@1.0.1: + resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz} + name: easy-stack + version: 1.0.1 + engines: {node: '>=6.0.0'} + dev: true + + registry.npmjs.org/ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz} + name: ee-first + version: 1.1.1 + dev: true + + registry.npmjs.org/electron-to-chromium@1.4.740: + resolution: {integrity: sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.740.tgz} + name: electron-to-chromium + version: 1.4.740 + dev: true + + registry.npmjs.org/element-ui@2.15.14(vue@2.7.16): + resolution: {integrity: sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/element-ui/-/element-ui-2.15.14.tgz} + id: registry.npmjs.org/element-ui/2.15.14 + name: element-ui + version: 2.15.14 + peerDependencies: + vue: ^2.5.17 + dependencies: + async-validator: registry.npmjs.org/async-validator@1.8.5 + babel-helper-vue-jsx-merge-props: registry.npmjs.org/babel-helper-vue-jsx-merge-props@2.0.3 + deepmerge: registry.npmjs.org/deepmerge@1.5.2 + normalize-wheel: registry.npmjs.org/normalize-wheel@1.0.1 + resize-observer-polyfill: registry.npmjs.org/resize-observer-polyfill@1.5.1 + throttle-debounce: registry.npmjs.org/throttle-debounce@1.1.0 + vue: registry.npmjs.org/vue@2.7.16 + dev: false + + registry.npmjs.org/emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz} + name: emoji-regex + version: 8.0.0 + dev: true + + registry.npmjs.org/emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz} + name: emojis-list + version: 3.0.0 + engines: {node: '>= 4'} + dev: true + + registry.npmjs.org/encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz} + name: encodeurl + version: 1.0.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz} + name: end-of-stream + version: 1.4.4 + dependencies: + once: registry.npmjs.org/once@1.4.0 + dev: true + + registry.npmjs.org/enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz} + name: enhanced-resolve + version: 5.16.0 + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + tapable: registry.npmjs.org/tapable@2.2.1 + dev: true + + registry.npmjs.org/enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz} + name: enquirer + version: 2.4.1 + engines: {node: '>=8.6'} + dependencies: + ansi-colors: registry.npmjs.org/ansi-colors@4.1.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + dev: true + + registry.npmjs.org/entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/entities/-/entities-2.2.0.tgz} + name: entities + version: 2.2.0 + dev: true + + registry.npmjs.org/entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/entities/-/entities-4.5.0.tgz} + name: entities + version: 4.5.0 + engines: {node: '>=0.12'} + dev: true + + registry.npmjs.org/error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz} + name: error-ex + version: 1.3.2 + dependencies: + is-arrayish: registry.npmjs.org/is-arrayish@0.2.1 + dev: true + + registry.npmjs.org/error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz} + name: error-stack-parser + version: 2.1.4 + dependencies: + stackframe: registry.npmjs.org/stackframe@1.3.4 + dev: true + + registry.npmjs.org/es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz} + name: es-define-property + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.4 + dev: true + + registry.npmjs.org/es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz} + name: es-errors + version: 1.3.0 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz} + name: es-module-lexer + version: 1.5.0 + dev: true + + registry.npmjs.org/escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz} + name: escalade + version: 3.1.2 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz} + name: escape-html + version: 1.0.3 + dev: true + + registry.npmjs.org/escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} + name: escape-string-regexp + version: 1.0.5 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmjs.org/escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} + name: escape-string-regexp + version: 4.0.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/eslint-plugin-vue@8.7.1(eslint@7.32.0): + resolution: {integrity: sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz} + id: registry.npmjs.org/eslint-plugin-vue/8.7.1 + name: eslint-plugin-vue + version: 8.7.1 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: registry.npmjs.org/eslint@7.32.0 + eslint-utils: registry.npmjs.org/eslint-utils@3.0.0(eslint@7.32.0) + natural-compare: registry.npmjs.org/natural-compare@1.4.0 + nth-check: registry.npmjs.org/nth-check@2.1.1 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + semver: registry.npmjs.org/semver@7.6.0 + vue-eslint-parser: registry.npmjs.org/vue-eslint-parser@8.3.0(eslint@7.32.0) + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz} + name: eslint-scope + version: 5.1.1 + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: registry.npmjs.org/esrecurse@4.3.0 + estraverse: registry.npmjs.org/estraverse@4.3.0 + dev: true + + registry.npmjs.org/eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz} + name: eslint-scope + version: 7.2.2 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: registry.npmjs.org/esrecurse@4.3.0 + estraverse: registry.npmjs.org/estraverse@5.3.0 + dev: true + + registry.npmjs.org/eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz} + name: eslint-utils + version: 2.1.0 + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@1.3.0 + dev: true + + registry.npmjs.org/eslint-utils@3.0.0(eslint@7.32.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz} + id: registry.npmjs.org/eslint-utils/3.0.0 + name: eslint-utils + version: 3.0.0 + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: registry.npmjs.org/eslint@7.32.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@2.1.0 + dev: true + + registry.npmjs.org/eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz} + name: eslint-visitor-keys + version: 1.3.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz} + name: eslint-visitor-keys + version: 2.1.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} + name: eslint-visitor-keys + version: 3.4.3 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + registry.npmjs.org/eslint-webpack-plugin@3.2.0(eslint@7.32.0)(webpack@5.91.0): + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz} + id: registry.npmjs.org/eslint-webpack-plugin/3.2.0 + name: eslint-webpack-plugin + version: 3.2.0 + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': registry.npmjs.org/@types/eslint@8.56.9 + eslint: registry.npmjs.org/eslint@7.32.0 + jest-worker: registry.npmjs.org/jest-worker@28.1.3 + micromatch: registry.npmjs.org/micromatch@4.0.5 + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + schema-utils: registry.npmjs.org/schema-utils@4.2.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/eslint@7.32.0: + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz} + name: eslint + version: 7.32.0 + engines: {node: ^10.12.0 || >=12.0.0} + hasBin: true + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.12.11 + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc@0.4.3 + '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array@0.5.0 + ajv: registry.npmjs.org/ajv@6.12.6 + chalk: registry.npmjs.org/chalk@4.1.2 + cross-spawn: registry.npmjs.org/cross-spawn@7.0.3 + debug: registry.npmjs.org/debug@4.3.4 + doctrine: registry.npmjs.org/doctrine@3.0.0 + enquirer: registry.npmjs.org/enquirer@2.4.1 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@4.0.0 + eslint-scope: registry.npmjs.org/eslint-scope@5.1.1 + eslint-utils: registry.npmjs.org/eslint-utils@2.1.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@2.1.0 + espree: registry.npmjs.org/espree@7.3.1 + esquery: registry.npmjs.org/esquery@1.5.0 + esutils: registry.npmjs.org/esutils@2.0.3 + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + file-entry-cache: registry.npmjs.org/file-entry-cache@6.0.1 + functional-red-black-tree: registry.npmjs.org/functional-red-black-tree@1.0.1 + glob-parent: registry.npmjs.org/glob-parent@5.1.2 + globals: registry.npmjs.org/globals@13.24.0 + ignore: registry.npmjs.org/ignore@4.0.6 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + imurmurhash: registry.npmjs.org/imurmurhash@0.1.4 + is-glob: registry.npmjs.org/is-glob@4.0.3 + js-yaml: registry.npmjs.org/js-yaml@3.14.1 + json-stable-stringify-without-jsonify: registry.npmjs.org/json-stable-stringify-without-jsonify@1.0.1 + levn: registry.npmjs.org/levn@0.4.1 + lodash.merge: registry.npmjs.org/lodash.merge@4.6.2 + minimatch: registry.npmjs.org/minimatch@3.1.2 + natural-compare: registry.npmjs.org/natural-compare@1.4.0 + optionator: registry.npmjs.org/optionator@0.9.3 + progress: registry.npmjs.org/progress@2.0.3 + regexpp: registry.npmjs.org/regexpp@3.2.0 + semver: registry.npmjs.org/semver@7.6.0 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + strip-json-comments: registry.npmjs.org/strip-json-comments@3.1.1 + table: registry.npmjs.org/table@6.8.2 + text-table: registry.npmjs.org/text-table@0.2.0 + v8-compile-cache: registry.npmjs.org/v8-compile-cache@2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/espree@7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-7.3.1.tgz} + name: espree + version: 7.3.1 + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: registry.npmjs.org/acorn@7.4.1 + acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@7.4.1) + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@1.3.0 + dev: true + + registry.npmjs.org/espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.6.1.tgz} + name: espree + version: 9.6.1 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: registry.npmjs.org/acorn@8.11.3 + acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.11.3) + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + dev: true + + registry.npmjs.org/esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} + name: esprima + version: 4.0.1 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmjs.org/esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz} + name: esquery + version: 1.5.0 + engines: {node: '>=0.10'} + dependencies: + estraverse: registry.npmjs.org/estraverse@5.3.0 + dev: true + + registry.npmjs.org/esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} + name: esrecurse + version: 4.3.0 + engines: {node: '>=4.0'} + dependencies: + estraverse: registry.npmjs.org/estraverse@5.3.0 + dev: true + + registry.npmjs.org/estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz} + name: estraverse + version: 4.3.0 + engines: {node: '>=4.0'} + dev: true + + registry.npmjs.org/estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} + name: estraverse + version: 5.3.0 + engines: {node: '>=4.0'} + dev: true + + registry.npmjs.org/estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz} + name: estree-walker + version: 2.0.2 + dev: true + + registry.npmjs.org/esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} + name: esutils + version: 2.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/etag/-/etag-1.8.1.tgz} + name: etag + version: 1.8.1 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/event-pubsub@4.3.0: + resolution: {integrity: sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz} + name: event-pubsub + version: 4.3.0 + engines: {node: '>=4.0.0'} + dev: true + + registry.npmjs.org/eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz} + name: eventemitter3 + version: 4.0.7 + dev: true + + registry.npmjs.org/events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} + name: events + version: 3.3.0 + engines: {node: '>=0.8.x'} + dev: true + + registry.npmjs.org/execa@0.8.0: + resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/execa/-/execa-0.8.0.tgz} + name: execa + version: 0.8.0 + engines: {node: '>=4'} + dependencies: + cross-spawn: registry.npmjs.org/cross-spawn@5.1.0 + get-stream: registry.npmjs.org/get-stream@3.0.0 + is-stream: registry.npmjs.org/is-stream@1.1.0 + npm-run-path: registry.npmjs.org/npm-run-path@2.0.2 + p-finally: registry.npmjs.org/p-finally@1.0.0 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + strip-eof: registry.npmjs.org/strip-eof@1.0.0 + dev: true + + registry.npmjs.org/execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/execa/-/execa-1.0.0.tgz} + name: execa + version: 1.0.0 + engines: {node: '>=6'} + dependencies: + cross-spawn: registry.npmjs.org/cross-spawn@6.0.5 + get-stream: registry.npmjs.org/get-stream@4.1.0 + is-stream: registry.npmjs.org/is-stream@1.1.0 + npm-run-path: registry.npmjs.org/npm-run-path@2.0.2 + p-finally: registry.npmjs.org/p-finally@1.0.0 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + strip-eof: registry.npmjs.org/strip-eof@1.0.0 + dev: true + + registry.npmjs.org/execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/execa/-/execa-5.1.1.tgz} + name: execa + version: 5.1.1 + engines: {node: '>=10'} + dependencies: + cross-spawn: registry.npmjs.org/cross-spawn@7.0.3 + get-stream: registry.npmjs.org/get-stream@6.0.1 + human-signals: registry.npmjs.org/human-signals@2.1.0 + is-stream: registry.npmjs.org/is-stream@2.0.1 + merge-stream: registry.npmjs.org/merge-stream@2.0.0 + npm-run-path: registry.npmjs.org/npm-run-path@4.0.1 + onetime: registry.npmjs.org/onetime@5.1.2 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + strip-final-newline: registry.npmjs.org/strip-final-newline@2.0.0 + dev: true + + registry.npmjs.org/express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/express/-/express-4.19.2.tgz} + name: express + version: 4.19.2 + engines: {node: '>= 0.10.0'} + dependencies: + accepts: registry.npmjs.org/accepts@1.3.8 + array-flatten: registry.npmjs.org/array-flatten@1.1.1 + body-parser: registry.npmjs.org/body-parser@1.20.2 + content-disposition: registry.npmjs.org/content-disposition@0.5.4 + content-type: registry.npmjs.org/content-type@1.0.5 + cookie: registry.npmjs.org/cookie@0.6.0 + cookie-signature: registry.npmjs.org/cookie-signature@1.0.6 + debug: registry.npmjs.org/debug@2.6.9 + depd: registry.npmjs.org/depd@2.0.0 + encodeurl: registry.npmjs.org/encodeurl@1.0.2 + escape-html: registry.npmjs.org/escape-html@1.0.3 + etag: registry.npmjs.org/etag@1.8.1 + finalhandler: registry.npmjs.org/finalhandler@1.2.0 + fresh: registry.npmjs.org/fresh@0.5.2 + http-errors: registry.npmjs.org/http-errors@2.0.0 + merge-descriptors: registry.npmjs.org/merge-descriptors@1.0.1 + methods: registry.npmjs.org/methods@1.1.2 + on-finished: registry.npmjs.org/on-finished@2.4.1 + parseurl: registry.npmjs.org/parseurl@1.3.3 + path-to-regexp: registry.npmjs.org/path-to-regexp@0.1.7 + proxy-addr: registry.npmjs.org/proxy-addr@2.0.7 + qs: registry.npmjs.org/qs@6.11.0 + range-parser: registry.npmjs.org/range-parser@1.2.1 + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + send: registry.npmjs.org/send@0.18.0 + serve-static: registry.npmjs.org/serve-static@1.15.0 + setprototypeof: registry.npmjs.org/setprototypeof@1.2.0 + statuses: registry.npmjs.org/statuses@2.0.1 + type-is: registry.npmjs.org/type-is@1.6.18 + utils-merge: registry.npmjs.org/utils-merge@1.0.1 + vary: registry.npmjs.org/vary@1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} + name: fast-deep-equal + version: 3.1.3 + dev: true + + registry.npmjs.org/fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz} + name: fast-glob + version: 3.3.2 + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': registry.npmjs.org/@nodelib/fs.stat@2.0.5 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk@1.2.8 + glob-parent: registry.npmjs.org/glob-parent@5.1.2 + merge2: registry.npmjs.org/merge2@1.4.1 + micromatch: registry.npmjs.org/micromatch@4.0.5 + dev: true + + registry.npmjs.org/fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} + name: fast-json-stable-stringify + version: 2.1.0 + dev: true + + registry.npmjs.org/fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + name: fast-levenshtein + version: 2.0.6 + dev: true + + registry.npmjs.org/fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz} + name: fastq + version: 1.17.1 + dependencies: + reusify: registry.npmjs.org/reusify@1.0.4 + dev: true + + registry.npmjs.org/faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz} + name: faye-websocket + version: 0.11.4 + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: registry.npmjs.org/websocket-driver@0.7.4 + dev: true + + registry.npmjs.org/figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/figures/-/figures-2.0.0.tgz} + name: figures + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + escape-string-regexp: registry.npmjs.org/escape-string-regexp@1.0.5 + dev: true + + registry.npmjs.org/file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz} + name: file-entry-cache + version: 6.0.1 + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: registry.npmjs.org/flat-cache@3.2.0 + dev: true + + registry.npmjs.org/fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz} + name: fill-range + version: 7.0.1 + engines: {node: '>=8'} + dependencies: + to-regex-range: registry.npmjs.org/to-regex-range@5.0.1 + dev: true + + registry.npmjs.org/finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz} + name: finalhandler + version: 1.2.0 + engines: {node: '>= 0.8'} + dependencies: + debug: registry.npmjs.org/debug@2.6.9 + encodeurl: registry.npmjs.org/encodeurl@1.0.2 + escape-html: registry.npmjs.org/escape-html@1.0.3 + on-finished: registry.npmjs.org/on-finished@2.4.1 + parseurl: registry.npmjs.org/parseurl@1.3.3 + statuses: registry.npmjs.org/statuses@2.0.1 + unpipe: registry.npmjs.org/unpipe@1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz} + name: find-cache-dir + version: 3.3.2 + engines: {node: '>=8'} + dependencies: + commondir: registry.npmjs.org/commondir@1.0.1 + make-dir: registry.npmjs.org/make-dir@3.1.0 + pkg-dir: registry.npmjs.org/pkg-dir@4.2.0 + dev: true + + registry.npmjs.org/find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz} + name: find-up + version: 4.1.0 + engines: {node: '>=8'} + dependencies: + locate-path: registry.npmjs.org/locate-path@5.0.0 + path-exists: registry.npmjs.org/path-exists@4.0.0 + dev: true + + registry.npmjs.org/flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz} + name: flat-cache + version: 3.2.0 + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: registry.npmjs.org/flatted@3.3.1 + keyv: registry.npmjs.org/keyv@4.5.4 + rimraf: registry.npmjs.org/rimraf@3.0.2 + dev: true + + registry.npmjs.org/flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/flat/-/flat-5.0.2.tgz} + name: flat + version: 5.0.2 + hasBin: true + dev: true + + registry.npmjs.org/flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz} + name: flatted + version: 3.3.1 + dev: true + + registry.npmjs.org/follow-redirects@1.15.6(debug@4.3.4): + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz} + id: registry.npmjs.org/follow-redirects/1.15.6 + name: follow-redirects + version: 1.15.6 + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: registry.npmjs.org/debug@4.3.4 + dev: true + + registry.npmjs.org/forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz} + name: forwarded + version: 0.2.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz} + name: fraction.js + version: 4.3.7 + dev: true + + registry.npmjs.org/fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz} + name: fresh + version: 0.5.2 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz} + name: fs-extra + version: 9.1.0 + engines: {node: '>=10'} + dependencies: + at-least-node: registry.npmjs.org/at-least-node@1.0.0 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + jsonfile: registry.npmjs.org/jsonfile@6.1.0 + universalify: registry.npmjs.org/universalify@2.0.1 + dev: true + + registry.npmjs.org/fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz} + name: fs-monkey + version: 1.0.5 + dev: true + + registry.npmjs.org/fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz} + name: fs.realpath + version: 1.0.0 + dev: true + + registry.npmjs.org/fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} + name: fsevents + version: 2.3.3 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz} + name: function-bind + version: 1.1.2 + dev: true + + registry.npmjs.org/functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz} + name: functional-red-black-tree + version: 1.0.1 + dev: true + + registry.npmjs.org/gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz} + name: gensync + version: 1.0.0-beta.2 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz} + name: get-caller-file + version: 2.0.5 + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + registry.npmjs.org/get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz} + name: get-intrinsic + version: 1.2.4 + engines: {node: '>= 0.4'} + dependencies: + es-errors: registry.npmjs.org/es-errors@1.3.0 + function-bind: registry.npmjs.org/function-bind@1.1.2 + has-proto: registry.npmjs.org/has-proto@1.0.3 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + hasown: registry.npmjs.org/hasown@2.0.2 + dev: true + + registry.npmjs.org/get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz} + name: get-stream + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz} + name: get-stream + version: 4.1.0 + engines: {node: '>=6'} + dependencies: + pump: registry.npmjs.org/pump@3.0.0 + dev: true + + registry.npmjs.org/get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz} + name: get-stream + version: 6.0.1 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} + name: glob-parent + version: 5.1.2 + engines: {node: '>= 6'} + dependencies: + is-glob: registry.npmjs.org/is-glob@4.0.3 + dev: true + + registry.npmjs.org/glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} + name: glob-parent + version: 6.0.2 + engines: {node: '>=10.13.0'} + dependencies: + is-glob: registry.npmjs.org/is-glob@4.0.3 + dev: true + + registry.npmjs.org/glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} + name: glob-to-regexp + version: 0.4.1 + dev: true + + registry.npmjs.org/glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-7.2.3.tgz} + name: glob + version: 7.2.3 + dependencies: + fs.realpath: registry.npmjs.org/fs.realpath@1.0.0 + inflight: registry.npmjs.org/inflight@1.0.6 + inherits: registry.npmjs.org/inherits@2.0.4 + minimatch: registry.npmjs.org/minimatch@3.1.2 + once: registry.npmjs.org/once@1.4.0 + path-is-absolute: registry.npmjs.org/path-is-absolute@1.0.1 + dev: true + + registry.npmjs.org/globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-11.12.0.tgz} + name: globals + version: 11.12.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-13.24.0.tgz} + name: globals + version: 13.24.0 + engines: {node: '>=8'} + dependencies: + type-fest: registry.npmjs.org/type-fest@0.20.2 + dev: true + + registry.npmjs.org/globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/globby/-/globby-11.1.0.tgz} + name: globby + version: 11.1.0 + engines: {node: '>=10'} + dependencies: + array-union: registry.npmjs.org/array-union@2.1.0 + dir-glob: registry.npmjs.org/dir-glob@3.0.1 + fast-glob: registry.npmjs.org/fast-glob@3.3.2 + ignore: registry.npmjs.org/ignore@5.3.1 + merge2: registry.npmjs.org/merge2@1.4.1 + slash: registry.npmjs.org/slash@3.0.0 + dev: true + + registry.npmjs.org/gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz} + name: gopd + version: 1.0.1 + dependencies: + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.4 + dev: true + + registry.npmjs.org/graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} + name: graceful-fs + version: 4.2.11 + dev: true + + registry.npmjs.org/gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz} + name: gzip-size + version: 6.0.0 + engines: {node: '>=10'} + dependencies: + duplexer: registry.npmjs.org/duplexer@0.1.2 + dev: true + + registry.npmjs.org/handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz} + name: handle-thing + version: 2.0.1 + dev: true + + registry.npmjs.org/has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz} + name: has-flag + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} + name: has-flag + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz} + name: has-property-descriptors + version: 1.0.2 + dependencies: + es-define-property: registry.npmjs.org/es-define-property@1.0.0 + dev: true + + registry.npmjs.org/has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz} + name: has-proto + version: 1.0.3 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz} + name: has-symbols + version: 1.0.3 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/hash-sum@1.0.2: + resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz} + name: hash-sum + version: 1.0.2 + dev: true + + registry.npmjs.org/hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz} + name: hash-sum + version: 2.0.0 + dev: true + + registry.npmjs.org/hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz} + name: hasown + version: 2.0.2 + engines: {node: '>= 0.4'} + dependencies: + function-bind: registry.npmjs.org/function-bind@1.1.2 + dev: true + + registry.npmjs.org/he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/he/-/he-1.2.0.tgz} + name: he + version: 1.2.0 + hasBin: true + dev: true + + registry.npmjs.org/highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz} + name: highlight.js + version: 10.7.3 + dev: true + + registry.npmjs.org/hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz} + name: hosted-git-info + version: 2.8.9 + dev: true + + registry.npmjs.org/hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz} + name: hpack.js + version: 2.1.6 + dependencies: + inherits: registry.npmjs.org/inherits@2.0.4 + obuf: registry.npmjs.org/obuf@1.1.2 + readable-stream: registry.npmjs.org/readable-stream@2.3.8 + wbuf: registry.npmjs.org/wbuf@1.7.3 + dev: true + + registry.npmjs.org/html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz} + name: html-entities + version: 2.5.2 + dev: true + + registry.npmjs.org/html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz} + name: html-escaper + version: 2.0.2 + dev: true + + registry.npmjs.org/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz} + name: html-minifier-terser + version: 6.1.0 + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: registry.npmjs.org/camel-case@4.1.2 + clean-css: registry.npmjs.org/clean-css@5.3.3 + commander: registry.npmjs.org/commander@8.3.0 + he: registry.npmjs.org/he@1.2.0 + param-case: registry.npmjs.org/param-case@3.0.4 + relateurl: registry.npmjs.org/relateurl@0.2.7 + terser: registry.npmjs.org/terser@5.30.3 + dev: true + + registry.npmjs.org/html-tags@2.0.0: + resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz} + name: html-tags + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz} + name: html-tags + version: 3.3.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/html-webpack-plugin@5.6.0(webpack@5.91.0): + resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz} + id: registry.npmjs.org/html-webpack-plugin/5.6.0 + name: html-webpack-plugin + version: 5.6.0 + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + '@types/html-minifier-terser': registry.npmjs.org/@types/html-minifier-terser@6.1.0 + html-minifier-terser: registry.npmjs.org/html-minifier-terser@6.1.0 + lodash: registry.npmjs.org/lodash@4.17.21 + pretty-error: registry.npmjs.org/pretty-error@4.0.0 + tapable: registry.npmjs.org/tapable@2.2.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz} + name: htmlparser2 + version: 6.1.0 + dependencies: + domelementtype: registry.npmjs.org/domelementtype@2.3.0 + domhandler: registry.npmjs.org/domhandler@4.3.1 + domutils: registry.npmjs.org/domutils@2.8.0 + entities: registry.npmjs.org/entities@2.2.0 + dev: true + + registry.npmjs.org/http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz} + name: http-deceiver + version: 1.2.7 + dev: true + + registry.npmjs.org/http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz} + name: http-errors + version: 1.6.3 + engines: {node: '>= 0.6'} + dependencies: + depd: registry.npmjs.org/depd@1.1.2 + inherits: registry.npmjs.org/inherits@2.0.3 + setprototypeof: registry.npmjs.org/setprototypeof@1.1.0 + statuses: registry.npmjs.org/statuses@1.5.0 + dev: true + + registry.npmjs.org/http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz} + name: http-errors + version: 2.0.0 + engines: {node: '>= 0.8'} + dependencies: + depd: registry.npmjs.org/depd@2.0.0 + inherits: registry.npmjs.org/inherits@2.0.4 + setprototypeof: registry.npmjs.org/setprototypeof@1.2.0 + statuses: registry.npmjs.org/statuses@2.0.1 + toidentifier: registry.npmjs.org/toidentifier@1.0.1 + dev: true + + registry.npmjs.org/http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz} + name: http-parser-js + version: 0.5.8 + dev: true + + registry.npmjs.org/http-proxy-middleware@2.0.6(@types/express@4.17.21)(debug@4.3.4): + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz} + id: registry.npmjs.org/http-proxy-middleware/2.0.6 + name: http-proxy-middleware + version: 2.0.6 + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': registry.npmjs.org/@types/express@4.17.21 + '@types/http-proxy': registry.npmjs.org/@types/http-proxy@1.17.14 + http-proxy: registry.npmjs.org/http-proxy@1.18.1(debug@4.3.4) + is-glob: registry.npmjs.org/is-glob@4.0.3 + is-plain-obj: registry.npmjs.org/is-plain-obj@3.0.0 + micromatch: registry.npmjs.org/micromatch@4.0.5 + transitivePeerDependencies: + - debug + dev: true + + registry.npmjs.org/http-proxy@1.18.1(debug@4.3.4): + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz} + id: registry.npmjs.org/http-proxy/1.18.1 + name: http-proxy + version: 1.18.1 + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: registry.npmjs.org/eventemitter3@4.0.7 + follow-redirects: registry.npmjs.org/follow-redirects@1.15.6(debug@4.3.4) + requires-port: registry.npmjs.org/requires-port@1.0.0 + transitivePeerDependencies: + - debug + dev: true + + registry.npmjs.org/human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz} + name: human-signals + version: 2.1.0 + engines: {node: '>=10.17.0'} + dev: true + + registry.npmjs.org/iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz} + name: iconv-lite + version: 0.4.24 + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: registry.npmjs.org/safer-buffer@2.1.2 + dev: true + + registry.npmjs.org/icss-utils@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz} + id: registry.npmjs.org/icss-utils/5.1.0 + name: icss-utils + version: 5.1.0 + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz} + name: ieee754 + version: 1.2.1 + dev: true + + registry.npmjs.org/ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz} + name: ignore + version: 4.0.6 + engines: {node: '>= 4'} + dev: true + + registry.npmjs.org/ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz} + name: ignore + version: 5.3.1 + engines: {node: '>= 4'} + dev: true + + registry.npmjs.org/import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz} + name: import-fresh + version: 3.3.0 + engines: {node: '>=6'} + dependencies: + parent-module: registry.npmjs.org/parent-module@1.0.1 + resolve-from: registry.npmjs.org/resolve-from@4.0.0 + dev: true + + registry.npmjs.org/imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} + name: imurmurhash + version: 0.1.4 + engines: {node: '>=0.8.19'} + dev: true + + registry.npmjs.org/inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz} + name: inflight + version: 1.0.6 + dependencies: + once: registry.npmjs.org/once@1.4.0 + wrappy: registry.npmjs.org/wrappy@1.0.2 + dev: true + + registry.npmjs.org/inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz} + name: inherits + version: 2.0.3 + dev: true + + registry.npmjs.org/inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz} + name: inherits + version: 2.0.4 + dev: true + + registry.npmjs.org/ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz} + name: ipaddr.js + version: 1.9.1 + engines: {node: '>= 0.10'} + dev: true + + registry.npmjs.org/ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz} + name: ipaddr.js + version: 2.1.0 + engines: {node: '>= 10'} + dev: true + + registry.npmjs.org/is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz} + name: is-arrayish + version: 0.2.1 + dev: true + + registry.npmjs.org/is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz} + name: is-binary-path + version: 2.1.0 + engines: {node: '>=8'} + dependencies: + binary-extensions: registry.npmjs.org/binary-extensions@2.3.0 + dev: true + + registry.npmjs.org/is-ci@1.2.1: + resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz} + name: is-ci + version: 1.2.1 + hasBin: true + dependencies: + ci-info: registry.npmjs.org/ci-info@1.6.0 + dev: true + + registry.npmjs.org/is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz} + name: is-core-module + version: 2.13.1 + dependencies: + hasown: registry.npmjs.org/hasown@2.0.2 + dev: true + + registry.npmjs.org/is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz} + name: is-docker + version: 2.2.1 + engines: {node: '>=8'} + hasBin: true + dev: true + + registry.npmjs.org/is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} + name: is-extglob + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/is-file-esm@1.0.0: + resolution: {integrity: sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz} + name: is-file-esm + version: 1.0.0 + dependencies: + read-pkg-up: registry.npmjs.org/read-pkg-up@7.0.1 + dev: true + + registry.npmjs.org/is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz} + name: is-fullwidth-code-point + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} + name: is-fullwidth-code-point + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} + name: is-glob + version: 4.0.3 + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: registry.npmjs.org/is-extglob@2.1.1 + dev: true + + registry.npmjs.org/is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz} + name: is-interactive + version: 1.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} + name: is-number + version: 7.0.0 + engines: {node: '>=0.12.0'} + dev: true + + registry.npmjs.org/is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz} + name: is-plain-obj + version: 3.0.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz} + name: is-plain-object + version: 2.0.4 + engines: {node: '>=0.10.0'} + dependencies: + isobject: registry.npmjs.org/isobject@3.0.1 + dev: true + + registry.npmjs.org/is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz} + name: is-stream + version: 1.1.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz} + name: is-stream + version: 2.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz} + name: is-unicode-supported + version: 0.1.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz} + name: is-wsl + version: 2.2.0 + engines: {node: '>=8'} + dependencies: + is-docker: registry.npmjs.org/is-docker@2.2.1 + dev: true + + registry.npmjs.org/isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz} + name: isarray + version: 1.0.0 + dev: true + + registry.npmjs.org/isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} + name: isexe + version: 2.0.0 + dev: true + + registry.npmjs.org/isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz} + name: isobject + version: 3.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz} + name: javascript-stringify + version: 2.1.0 + dev: true + + registry.npmjs.org/jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz} + name: jest-worker + version: 27.5.1 + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + merge-stream: registry.npmjs.org/merge-stream@2.0.0 + supports-color: registry.npmjs.org/supports-color@8.1.1 + dev: true + + registry.npmjs.org/jest-worker@28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz} + name: jest-worker + version: 28.1.3 + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': registry.npmjs.org/@types/node@20.12.7 + merge-stream: registry.npmjs.org/merge-stream@2.0.0 + supports-color: registry.npmjs.org/supports-color@8.1.1 + dev: true + + registry.npmjs.org/joi@17.12.3: + resolution: {integrity: sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/joi/-/joi-17.12.3.tgz} + name: joi + version: 17.12.3 + dependencies: + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 + '@hapi/topo': registry.npmjs.org/@hapi/topo@5.1.0 + '@sideway/address': registry.npmjs.org/@sideway/address@4.1.5 + '@sideway/formula': registry.npmjs.org/@sideway/formula@3.0.1 + '@sideway/pinpoint': registry.npmjs.org/@sideway/pinpoint@2.0.0 + dev: true + + registry.npmjs.org/js-message@1.0.7: + resolution: {integrity: sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz} + name: js-message + version: 1.0.7 + engines: {node: '>=0.6.0'} + dev: true + + registry.npmjs.org/js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} + name: js-tokens + version: 4.0.0 + dev: true + + registry.npmjs.org/js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz} + name: js-yaml + version: 3.14.1 + hasBin: true + dependencies: + argparse: registry.npmjs.org/argparse@1.0.10 + esprima: registry.npmjs.org/esprima@4.0.1 + dev: true + + registry.npmjs.org/jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz} + name: jsesc + version: 0.5.0 + hasBin: true + dev: true + + registry.npmjs.org/jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz} + name: jsesc + version: 2.5.2 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmjs.org/json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz} + name: json-buffer + version: 3.0.1 + dev: true + + registry.npmjs.org/json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz} + name: json-parse-better-errors + version: 1.0.2 + dev: true + + registry.npmjs.org/json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} + name: json-parse-even-better-errors + version: 2.3.1 + dev: true + + registry.npmjs.org/json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} + name: json-schema-traverse + version: 0.4.1 + dev: true + + registry.npmjs.org/json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz} + name: json-schema-traverse + version: 1.0.0 + dev: true + + registry.npmjs.org/json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} + name: json-stable-stringify-without-jsonify + version: 1.0.1 + dev: true + + registry.npmjs.org/json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json5/-/json5-1.0.2.tgz} + name: json5 + version: 1.0.2 + hasBin: true + dependencies: + minimist: registry.npmjs.org/minimist@1.2.8 + dev: true + + registry.npmjs.org/json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/json5/-/json5-2.2.3.tgz} + name: json5 + version: 2.2.3 + engines: {node: '>=6'} + hasBin: true + dev: true + + registry.npmjs.org/jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz} + name: jsonfile + version: 6.1.0 + dependencies: + universalify: registry.npmjs.org/universalify@2.0.1 + optionalDependencies: + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + dev: true + + registry.npmjs.org/keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz} + name: keyv + version: 4.5.4 + dependencies: + json-buffer: registry.npmjs.org/json-buffer@3.0.1 + dev: true + + registry.npmjs.org/kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz} + name: kind-of + version: 6.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/klona/-/klona-2.0.6.tgz} + name: klona + version: 2.0.6 + engines: {node: '>= 8'} + dev: true + + registry.npmjs.org/launch-editor-middleware@2.6.1: + resolution: {integrity: sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz} + name: launch-editor-middleware + version: 2.6.1 + dependencies: + launch-editor: registry.npmjs.org/launch-editor@2.6.1 + dev: true + + registry.npmjs.org/launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz} + name: launch-editor + version: 2.6.1 + dependencies: + picocolors: registry.npmjs.org/picocolors@1.0.0 + shell-quote: registry.npmjs.org/shell-quote@1.8.1 + dev: true + + registry.npmjs.org/levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} + name: levn + version: 0.4.1 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 + type-check: registry.npmjs.org/type-check@0.4.0 + dev: true + + registry.npmjs.org/lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} + name: lilconfig + version: 2.1.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz} + name: lines-and-columns + version: 1.2.4 + dev: true + + registry.npmjs.org/loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz} + name: loader-runner + version: 4.3.0 + engines: {node: '>=6.11.5'} + dev: true + + registry.npmjs.org/loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz} + name: loader-utils + version: 1.4.2 + engines: {node: '>=4.0.0'} + dependencies: + big.js: registry.npmjs.org/big.js@5.2.2 + emojis-list: registry.npmjs.org/emojis-list@3.0.0 + json5: registry.npmjs.org/json5@1.0.2 + dev: true + + registry.npmjs.org/loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz} + name: loader-utils + version: 2.0.4 + engines: {node: '>=8.9.0'} + dependencies: + big.js: registry.npmjs.org/big.js@5.2.2 + emojis-list: registry.npmjs.org/emojis-list@3.0.0 + json5: registry.npmjs.org/json5@2.2.3 + dev: true + + registry.npmjs.org/locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz} + name: locate-path + version: 5.0.0 + engines: {node: '>=8'} + dependencies: + p-locate: registry.npmjs.org/p-locate@4.1.0 + dev: true + + registry.npmjs.org/lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz} + name: lodash.debounce + version: 4.0.8 + dev: true + + registry.npmjs.org/lodash.defaultsdeep@4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz} + name: lodash.defaultsdeep + version: 4.6.1 + dev: true + + registry.npmjs.org/lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz} + name: lodash.kebabcase + version: 4.1.1 + dev: true + + registry.npmjs.org/lodash.mapvalues@4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz} + name: lodash.mapvalues + version: 4.6.0 + dev: true + + registry.npmjs.org/lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz} + name: lodash.memoize + version: 4.1.2 + dev: true + + registry.npmjs.org/lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} + name: lodash.merge + version: 4.6.2 + dev: true + + registry.npmjs.org/lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz} + name: lodash.truncate + version: 4.4.2 + dev: true + + registry.npmjs.org/lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz} + name: lodash.uniq + version: 4.5.0 + dev: true + + registry.npmjs.org/lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz} + name: lodash + version: 4.17.21 + dev: true + + registry.npmjs.org/log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz} + name: log-symbols + version: 4.1.0 + engines: {node: '>=10'} + dependencies: + chalk: registry.npmjs.org/chalk@4.1.2 + is-unicode-supported: registry.npmjs.org/is-unicode-supported@0.1.0 + dev: true + + registry.npmjs.org/log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz} + name: log-update + version: 2.3.0 + engines: {node: '>=4'} + dependencies: + ansi-escapes: registry.npmjs.org/ansi-escapes@3.2.0 + cli-cursor: registry.npmjs.org/cli-cursor@2.1.0 + wrap-ansi: registry.npmjs.org/wrap-ansi@3.0.1 + dev: true + + registry.npmjs.org/lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz} + name: lower-case + version: 2.0.2 + dependencies: + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz} + name: lru-cache + version: 4.1.5 + dependencies: + pseudomap: registry.npmjs.org/pseudomap@1.0.2 + yallist: registry.npmjs.org/yallist@2.1.2 + dev: true + + registry.npmjs.org/lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz} + name: lru-cache + version: 5.1.1 + dependencies: + yallist: registry.npmjs.org/yallist@3.1.1 + dev: true + + registry.npmjs.org/lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz} + name: lru-cache + version: 6.0.0 + engines: {node: '>=10'} + dependencies: + yallist: registry.npmjs.org/yallist@4.0.0 + dev: true + + registry.npmjs.org/magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz} + name: magic-string + version: 0.30.10 + dependencies: + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + dev: true + + registry.npmjs.org/make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz} + name: make-dir + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + semver: registry.npmjs.org/semver@6.3.1 + dev: true + + registry.npmjs.org/mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz} + name: mdn-data + version: 2.0.14 + dev: true + + registry.npmjs.org/media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz} + name: media-typer + version: 0.3.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz} + name: memfs + version: 3.5.3 + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: registry.npmjs.org/fs-monkey@1.0.5 + dev: true + + registry.npmjs.org/merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz} + name: merge-descriptors + version: 1.0.1 + dev: true + + registry.npmjs.org/merge-source-map@1.1.0: + resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz} + name: merge-source-map + version: 1.1.0 + dependencies: + source-map: registry.npmjs.org/source-map@0.6.1 + dev: true + + registry.npmjs.org/merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz} + name: merge-stream + version: 2.0.0 + dev: true + + registry.npmjs.org/merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz} + name: merge2 + version: 1.4.1 + engines: {node: '>= 8'} + dev: true + + registry.npmjs.org/methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/methods/-/methods-1.1.2.tgz} + name: methods + version: 1.1.2 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz} + name: micromatch + version: 4.0.5 + engines: {node: '>=8.6'} + dependencies: + braces: registry.npmjs.org/braces@3.0.2 + picomatch: registry.npmjs.org/picomatch@2.3.1 + dev: true + + registry.npmjs.org/mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz} + name: mime-db + version: 1.52.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz} + name: mime-types + version: 2.1.35 + engines: {node: '>= 0.6'} + dependencies: + mime-db: registry.npmjs.org/mime-db@1.52.0 + dev: true + + registry.npmjs.org/mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime/-/mime-1.6.0.tgz} + name: mime + version: 1.6.0 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmjs.org/mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz} + name: mimic-fn + version: 1.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz} + name: mimic-fn + version: 2.1.0 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/mini-css-extract-plugin@2.9.0(webpack@5.91.0): + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz} + id: registry.npmjs.org/mini-css-extract-plugin/2.9.0 + name: mini-css-extract-plugin + version: 2.9.0 + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: registry.npmjs.org/schema-utils@4.2.0 + tapable: registry.npmjs.org/tapable@2.2.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz} + name: minimalistic-assert + version: 1.0.1 + dev: true + + registry.npmjs.org/minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz} + name: minimatch + version: 3.1.2 + dependencies: + brace-expansion: registry.npmjs.org/brace-expansion@1.1.11 + dev: true + + registry.npmjs.org/minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz} + name: minimist + version: 1.2.8 + dev: true + + registry.npmjs.org/minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz} + name: minipass + version: 3.3.6 + engines: {node: '>=8'} + dependencies: + yallist: registry.npmjs.org/yallist@4.0.0 + dev: true + + registry.npmjs.org/mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz} + name: mkdirp + version: 0.5.6 + hasBin: true + dependencies: + minimist: registry.npmjs.org/minimist@1.2.8 + dev: true + + registry.npmjs.org/module-alias@2.2.3: + resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz} + name: module-alias + version: 2.2.3 + dev: true + + registry.npmjs.org/mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz} + name: mrmime + version: 2.0.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.0.0.tgz} + name: ms + version: 2.0.0 + dev: true + + registry.npmjs.org/ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} + name: ms + version: 2.1.2 + dev: true + + registry.npmjs.org/ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} + name: ms + version: 2.1.3 + dev: true + + registry.npmjs.org/multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz} + name: multicast-dns + version: 7.2.5 + hasBin: true + dependencies: + dns-packet: registry.npmjs.org/dns-packet@5.6.1 + thunky: registry.npmjs.org/thunky@1.1.0 + dev: true + + registry.npmjs.org/mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/mz/-/mz-2.7.0.tgz} + name: mz + version: 2.7.0 + dependencies: + any-promise: registry.npmjs.org/any-promise@1.3.0 + object-assign: registry.npmjs.org/object-assign@4.1.1 + thenify-all: registry.npmjs.org/thenify-all@1.6.0 + dev: true + + registry.npmjs.org/nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz} + name: nanoid + version: 3.3.7 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + registry.npmjs.org/natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} + name: natural-compare + version: 1.4.0 + dev: true + + registry.npmjs.org/negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz} + name: negotiator + version: 0.6.3 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz} + name: neo-async + version: 2.6.2 + dev: true + + registry.npmjs.org/nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz} + name: nice-try + version: 1.0.5 + dev: true + + registry.npmjs.org/no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} + name: no-case + version: 3.0.4 + dependencies: + lower-case: registry.npmjs.org/lower-case@2.0.2 + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz} + name: node-fetch + version: 2.7.0 + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: registry.npmjs.org/whatwg-url@5.0.0 + dev: true + + registry.npmjs.org/node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz} + name: node-forge + version: 1.3.1 + engines: {node: '>= 6.13.0'} + dev: true + + registry.npmjs.org/node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz} + name: node-releases + version: 2.0.14 + dev: true + + registry.npmjs.org/normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz} + name: normalize-package-data + version: 2.5.0 + dependencies: + hosted-git-info: registry.npmjs.org/hosted-git-info@2.8.9 + resolve: registry.npmjs.org/resolve@1.22.8 + semver: registry.npmjs.org/semver@5.7.2 + validate-npm-package-license: registry.npmjs.org/validate-npm-package-license@3.0.4 + dev: true + + registry.npmjs.org/normalize-path@1.0.0: + resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz} + name: normalize-path + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz} + name: normalize-path + version: 3.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz} + name: normalize-range + version: 0.1.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz} + name: normalize-url + version: 6.1.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/normalize-wheel@1.0.1: + resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz} + name: normalize-wheel + version: 1.0.1 + dev: false + + registry.npmjs.org/npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz} + name: npm-run-path + version: 2.0.2 + engines: {node: '>=4'} + dependencies: + path-key: registry.npmjs.org/path-key@2.0.1 + dev: true + + registry.npmjs.org/npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz} + name: npm-run-path + version: 4.0.1 + engines: {node: '>=8'} + dependencies: + path-key: registry.npmjs.org/path-key@3.1.1 + dev: true + + registry.npmjs.org/nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz} + name: nth-check + version: 2.1.1 + dependencies: + boolbase: registry.npmjs.org/boolbase@1.0.0 + dev: true + + registry.npmjs.org/object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz} + name: object-assign + version: 4.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz} + name: object-inspect + version: 1.13.1 + dev: true + + registry.npmjs.org/object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz} + name: object-keys + version: 1.1.1 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz} + name: object.assign + version: 4.1.5 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.7 + define-properties: registry.npmjs.org/define-properties@1.2.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + object-keys: registry.npmjs.org/object-keys@1.1.1 + dev: true + + registry.npmjs.org/obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz} + name: obuf + version: 1.1.2 + dev: true + + registry.npmjs.org/on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz} + name: on-finished + version: 2.4.1 + engines: {node: '>= 0.8'} + dependencies: + ee-first: registry.npmjs.org/ee-first@1.1.1 + dev: true + + registry.npmjs.org/on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz} + name: on-headers + version: 1.0.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/once/-/once-1.4.0.tgz} + name: once + version: 1.4.0 + dependencies: + wrappy: registry.npmjs.org/wrappy@1.0.2 + dev: true + + registry.npmjs.org/onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz} + name: onetime + version: 2.0.1 + engines: {node: '>=4'} + dependencies: + mimic-fn: registry.npmjs.org/mimic-fn@1.2.0 + dev: true + + registry.npmjs.org/onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz} + name: onetime + version: 5.1.2 + engines: {node: '>=6'} + dependencies: + mimic-fn: registry.npmjs.org/mimic-fn@2.1.0 + dev: true + + registry.npmjs.org/open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/open/-/open-8.4.2.tgz} + name: open + version: 8.4.2 + engines: {node: '>=12'} + dependencies: + define-lazy-prop: registry.npmjs.org/define-lazy-prop@2.0.0 + is-docker: registry.npmjs.org/is-docker@2.2.1 + is-wsl: registry.npmjs.org/is-wsl@2.2.0 + dev: true + + registry.npmjs.org/opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/opener/-/opener-1.5.2.tgz} + name: opener + version: 1.5.2 + hasBin: true + dev: true + + registry.npmjs.org/optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz} + name: optionator + version: 0.9.3 + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': registry.npmjs.org/@aashutoshrathi/word-wrap@1.2.6 + deep-is: registry.npmjs.org/deep-is@0.1.4 + fast-levenshtein: registry.npmjs.org/fast-levenshtein@2.0.6 + levn: registry.npmjs.org/levn@0.4.1 + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 + type-check: registry.npmjs.org/type-check@0.4.0 + dev: true + + registry.npmjs.org/ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ora/-/ora-5.4.1.tgz} + name: ora + version: 5.4.1 + engines: {node: '>=10'} + dependencies: + bl: registry.npmjs.org/bl@4.1.0 + chalk: registry.npmjs.org/chalk@4.1.2 + cli-cursor: registry.npmjs.org/cli-cursor@3.1.0 + cli-spinners: registry.npmjs.org/cli-spinners@2.9.2 + is-interactive: registry.npmjs.org/is-interactive@1.0.0 + is-unicode-supported: registry.npmjs.org/is-unicode-supported@0.1.0 + log-symbols: registry.npmjs.org/log-symbols@4.1.0 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wcwidth: registry.npmjs.org/wcwidth@1.0.1 + dev: true + + registry.npmjs.org/p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz} + name: p-finally + version: 1.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz} + name: p-limit + version: 2.3.0 + engines: {node: '>=6'} + dependencies: + p-try: registry.npmjs.org/p-try@2.2.0 + dev: true + + registry.npmjs.org/p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz} + name: p-locate + version: 4.1.0 + engines: {node: '>=8'} + dependencies: + p-limit: registry.npmjs.org/p-limit@2.3.0 + dev: true + + registry.npmjs.org/p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz} + name: p-retry + version: 4.6.2 + engines: {node: '>=8'} + dependencies: + '@types/retry': registry.npmjs.org/@types/retry@0.12.0 + retry: registry.npmjs.org/retry@0.13.1 + dev: true + + registry.npmjs.org/p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz} + name: p-try + version: 2.2.0 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz} + name: param-case + version: 3.0.4 + dependencies: + dot-case: registry.npmjs.org/dot-case@3.0.4 + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} + name: parent-module + version: 1.0.1 + engines: {node: '>=6'} + dependencies: + callsites: registry.npmjs.org/callsites@3.1.0 + dev: true + + registry.npmjs.org/parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} + name: parse-json + version: 5.2.0 + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.24.2 + error-ex: registry.npmjs.org/error-ex@1.3.2 + json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors@2.3.1 + lines-and-columns: registry.npmjs.org/lines-and-columns@1.2.4 + dev: true + + registry.npmjs.org/parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz} + name: parse5-htmlparser2-tree-adapter + version: 6.0.1 + dependencies: + parse5: registry.npmjs.org/parse5@6.0.1 + dev: true + + registry.npmjs.org/parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz} + name: parse5 + version: 5.1.1 + dev: true + + registry.npmjs.org/parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz} + name: parse5 + version: 6.0.1 + dev: true + + registry.npmjs.org/parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz} + name: parseurl + version: 1.3.3 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz} + name: pascal-case + version: 3.1.2 + dependencies: + no-case: registry.npmjs.org/no-case@3.0.4 + tslib: registry.npmjs.org/tslib@2.6.2 + dev: true + + registry.npmjs.org/path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} + name: path-exists + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz} + name: path-is-absolute + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz} + name: path-key + version: 2.0.1 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} + name: path-key + version: 3.1.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz} + name: path-parse + version: 1.0.7 + dev: true + + registry.npmjs.org/path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz} + name: path-to-regexp + version: 0.1.7 + dev: true + + registry.npmjs.org/path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz} + name: path-type + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz} + name: picocolors + version: 0.2.1 + dev: true + + registry.npmjs.org/picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz} + name: picocolors + version: 1.0.0 + + registry.npmjs.org/picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz} + name: picomatch + version: 2.3.1 + engines: {node: '>=8.6'} + dev: true + + registry.npmjs.org/pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz} + name: pkg-dir + version: 4.2.0 + engines: {node: '>=8'} + dependencies: + find-up: registry.npmjs.org/find-up@4.1.0 + dev: true + + registry.npmjs.org/portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz} + name: portfinder + version: 1.0.32 + engines: {node: '>= 0.12.0'} + dependencies: + async: registry.npmjs.org/async@2.6.4 + debug: registry.npmjs.org/debug@3.2.7 + mkdirp: registry.npmjs.org/mkdirp@0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/postcss-calc@8.2.4(postcss@8.4.38): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz} + id: registry.npmjs.org/postcss-calc/8.2.4 + name: postcss-calc + version: 8.2.4 + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-colormin@5.3.1(postcss@8.4.38): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz} + id: registry.npmjs.org/postcss-colormin/5.3.1 + name: postcss-colormin + version: 5.3.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + caniuse-api: registry.npmjs.org/caniuse-api@3.0.0 + colord: registry.npmjs.org/colord@2.9.3 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-convert-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz} + id: registry.npmjs.org/postcss-convert-values/5.1.3 + name: postcss-convert-values + version: 5.1.3 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-discard-comments@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz} + id: registry.npmjs.org/postcss-discard-comments/5.1.2 + name: postcss-discard-comments + version: 5.1.2 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-discard-duplicates@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz} + id: registry.npmjs.org/postcss-discard-duplicates/5.1.0 + name: postcss-discard-duplicates + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-discard-empty@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz} + id: registry.npmjs.org/postcss-discard-empty/5.1.1 + name: postcss-discard-empty + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-discard-overridden@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz} + id: registry.npmjs.org/postcss-discard-overridden/5.1.0 + name: postcss-discard-overridden + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0): + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz} + id: registry.npmjs.org/postcss-loader/6.2.1 + name: postcss-loader + version: 6.2.1 + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: registry.npmjs.org/cosmiconfig@7.1.0 + klona: registry.npmjs.org/klona@2.0.6 + postcss: registry.npmjs.org/postcss@8.4.38 + semver: registry.npmjs.org/semver@7.6.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/postcss-merge-longhand@5.1.7(postcss@8.4.38): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz} + id: registry.npmjs.org/postcss-merge-longhand/5.1.7 + name: postcss-merge-longhand + version: 5.1.7 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + stylehacks: registry.npmjs.org/stylehacks@5.1.1(postcss@8.4.38) + dev: true + + registry.npmjs.org/postcss-merge-rules@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz} + id: registry.npmjs.org/postcss-merge-rules/5.1.4 + name: postcss-merge-rules + version: 5.1.4 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + caniuse-api: registry.npmjs.org/caniuse-api@3.0.0 + cssnano-utils: registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + dev: true + + registry.npmjs.org/postcss-minify-font-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz} + id: registry.npmjs.org/postcss-minify-font-values/5.1.0 + name: postcss-minify-font-values + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-minify-gradients@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz} + id: registry.npmjs.org/postcss-minify-gradients/5.1.1 + name: postcss-minify-gradients + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: registry.npmjs.org/colord@2.9.3 + cssnano-utils: registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-minify-params@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz} + id: registry.npmjs.org/postcss-minify-params/5.1.4 + name: postcss-minify-params + version: 5.1.4 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + cssnano-utils: registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-minify-selectors@5.2.1(postcss@8.4.38): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz} + id: registry.npmjs.org/postcss-minify-selectors/5.2.1 + name: postcss-minify-selectors + version: 5.2.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + dev: true + + registry.npmjs.org/postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz} + id: registry.npmjs.org/postcss-modules-extract-imports/3.1.0 + name: postcss-modules-extract-imports + version: 3.1.0 + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz} + id: registry.npmjs.org/postcss-modules-local-by-default/4.0.5 + name: postcss-modules-local-by-default + version: 4.0.5 + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: registry.npmjs.org/icss-utils@5.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz} + id: registry.npmjs.org/postcss-modules-scope/3.2.0 + name: postcss-modules-scope + version: 3.2.0 + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + dev: true + + registry.npmjs.org/postcss-modules-values@4.0.0(postcss@8.4.38): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz} + id: registry.npmjs.org/postcss-modules-values/4.0.0 + name: postcss-modules-values + version: 4.0.0 + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: registry.npmjs.org/icss-utils@5.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-normalize-charset@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz} + id: registry.npmjs.org/postcss-normalize-charset/5.1.0 + name: postcss-normalize-charset + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-normalize-display-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz} + id: registry.npmjs.org/postcss-normalize-display-values/5.1.0 + name: postcss-normalize-display-values + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-positions@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz} + id: registry.npmjs.org/postcss-normalize-positions/5.1.1 + name: postcss-normalize-positions + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz} + id: registry.npmjs.org/postcss-normalize-repeat-style/5.1.1 + name: postcss-normalize-repeat-style + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-string@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz} + id: registry.npmjs.org/postcss-normalize-string/5.1.0 + name: postcss-normalize-string + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz} + id: registry.npmjs.org/postcss-normalize-timing-functions/5.1.0 + name: postcss-normalize-timing-functions + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-unicode@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz} + id: registry.npmjs.org/postcss-normalize-unicode/5.1.1 + name: postcss-normalize-unicode + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-url@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz} + id: registry.npmjs.org/postcss-normalize-url/5.1.0 + name: postcss-normalize-url + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: registry.npmjs.org/normalize-url@6.1.0 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-normalize-whitespace@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz} + id: registry.npmjs.org/postcss-normalize-whitespace/5.1.1 + name: postcss-normalize-whitespace + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-ordered-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz} + id: registry.npmjs.org/postcss-ordered-values/5.1.3 + name: postcss-ordered-values + version: 5.1.3 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: registry.npmjs.org/cssnano-utils@3.1.0(postcss@8.4.38) + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-reduce-initial@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz} + id: registry.npmjs.org/postcss-reduce-initial/5.1.2 + name: postcss-reduce-initial + version: 5.1.2 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + caniuse-api: registry.npmjs.org/caniuse-api@3.0.0 + postcss: registry.npmjs.org/postcss@8.4.38 + dev: true + + registry.npmjs.org/postcss-reduce-transforms@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz} + id: registry.npmjs.org/postcss-reduce-transforms/5.1.0 + name: postcss-reduce-transforms + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + dev: true + + registry.npmjs.org/postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz} + name: postcss-selector-parser + version: 6.0.16 + engines: {node: '>=4'} + dependencies: + cssesc: registry.npmjs.org/cssesc@3.0.0 + util-deprecate: registry.npmjs.org/util-deprecate@1.0.2 + dev: true + + registry.npmjs.org/postcss-svgo@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz} + id: registry.npmjs.org/postcss-svgo/5.1.0 + name: postcss-svgo + version: 5.1.0 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + svgo: registry.npmjs.org/svgo@2.8.0 + dev: true + + registry.npmjs.org/postcss-unique-selectors@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz} + id: registry.npmjs.org/postcss-unique-selectors/5.1.1 + name: postcss-unique-selectors + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + dev: true + + registry.npmjs.org/postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} + name: postcss-value-parser + version: 4.2.0 + dev: true + + registry.npmjs.org/postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz} + name: postcss + version: 7.0.39 + engines: {node: '>=6.0.0'} + dependencies: + picocolors: registry.npmjs.org/picocolors@0.2.1 + source-map: registry.npmjs.org/source-map@0.6.1 + dev: true + + registry.npmjs.org/postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz} + name: postcss + version: 8.4.38 + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: registry.npmjs.org/nanoid@3.3.7 + picocolors: registry.npmjs.org/picocolors@1.0.0 + source-map-js: registry.npmjs.org/source-map-js@1.2.0 + + registry.npmjs.org/prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} + name: prelude-ls + version: 1.2.1 + engines: {node: '>= 0.8.0'} + dev: true + + registry.npmjs.org/prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz} + name: prettier + version: 2.8.8 + engines: {node: '>=10.13.0'} + hasBin: true + requiresBuild: true + optional: true + + registry.npmjs.org/pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz} + name: pretty-error + version: 4.0.0 + dependencies: + lodash: registry.npmjs.org/lodash@4.17.21 + renderkid: registry.npmjs.org/renderkid@3.0.0 + dev: true + + registry.npmjs.org/process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz} + name: process-nextick-args + version: 2.0.1 + dev: true + + registry.npmjs.org/progress-webpack-plugin@1.0.16(webpack@5.91.0): + resolution: {integrity: sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz} + id: registry.npmjs.org/progress-webpack-plugin/1.0.16 + name: progress-webpack-plugin + version: 1.0.16 + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + dependencies: + chalk: registry.npmjs.org/chalk@2.4.2 + figures: registry.npmjs.org/figures@2.0.0 + log-update: registry.npmjs.org/log-update@2.3.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/progress/-/progress-2.0.3.tgz} + name: progress + version: 2.0.3 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmjs.org/proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz} + name: proxy-addr + version: 2.0.7 + engines: {node: '>= 0.10'} + dependencies: + forwarded: registry.npmjs.org/forwarded@0.2.0 + ipaddr.js: registry.npmjs.org/ipaddr.js@1.9.1 + dev: true + + registry.npmjs.org/pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz} + name: pseudomap + version: 1.0.2 + dev: true + + registry.npmjs.org/pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/pump/-/pump-3.0.0.tgz} + name: pump + version: 3.0.0 + dependencies: + end-of-stream: registry.npmjs.org/end-of-stream@1.4.4 + once: registry.npmjs.org/once@1.4.0 + dev: true + + registry.npmjs.org/punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} + name: punycode + version: 2.3.1 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/qs/-/qs-6.11.0.tgz} + name: qs + version: 6.11.0 + engines: {node: '>=0.6'} + dependencies: + side-channel: registry.npmjs.org/side-channel@1.0.6 + dev: true + + registry.npmjs.org/queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz} + name: queue-microtask + version: 1.2.3 + dev: true + + registry.npmjs.org/randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz} + name: randombytes + version: 2.1.0 + dependencies: + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + dev: true + + registry.npmjs.org/range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz} + name: range-parser + version: 1.2.1 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz} + name: raw-body + version: 2.5.2 + engines: {node: '>= 0.8'} + dependencies: + bytes: registry.npmjs.org/bytes@3.1.2 + http-errors: registry.npmjs.org/http-errors@2.0.0 + iconv-lite: registry.npmjs.org/iconv-lite@0.4.24 + unpipe: registry.npmjs.org/unpipe@1.0.0 + dev: true + + registry.npmjs.org/read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz} + name: read-pkg-up + version: 7.0.1 + engines: {node: '>=8'} + dependencies: + find-up: registry.npmjs.org/find-up@4.1.0 + read-pkg: registry.npmjs.org/read-pkg@5.2.0 + type-fest: registry.npmjs.org/type-fest@0.8.1 + dev: true + + registry.npmjs.org/read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz} + name: read-pkg + version: 5.2.0 + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': registry.npmjs.org/@types/normalize-package-data@2.4.4 + normalize-package-data: registry.npmjs.org/normalize-package-data@2.5.0 + parse-json: registry.npmjs.org/parse-json@5.2.0 + type-fest: registry.npmjs.org/type-fest@0.6.0 + dev: true + + registry.npmjs.org/readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz} + name: readable-stream + version: 2.3.8 + dependencies: + core-util-is: registry.npmjs.org/core-util-is@1.0.3 + inherits: registry.npmjs.org/inherits@2.0.4 + isarray: registry.npmjs.org/isarray@1.0.0 + process-nextick-args: registry.npmjs.org/process-nextick-args@2.0.1 + safe-buffer: registry.npmjs.org/safe-buffer@5.1.2 + string_decoder: registry.npmjs.org/string_decoder@1.1.1 + util-deprecate: registry.npmjs.org/util-deprecate@1.0.2 + dev: true + + registry.npmjs.org/readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz} + name: readable-stream + version: 3.6.2 + engines: {node: '>= 6'} + dependencies: + inherits: registry.npmjs.org/inherits@2.0.4 + string_decoder: registry.npmjs.org/string_decoder@1.3.0 + util-deprecate: registry.npmjs.org/util-deprecate@1.0.2 + dev: true + + registry.npmjs.org/readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz} + name: readdirp + version: 3.6.0 + engines: {node: '>=8.10.0'} + dependencies: + picomatch: registry.npmjs.org/picomatch@2.3.1 + dev: true + + registry.npmjs.org/regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz} + name: regenerate-unicode-properties + version: 10.1.1 + engines: {node: '>=4'} + dependencies: + regenerate: registry.npmjs.org/regenerate@1.4.2 + dev: true + + registry.npmjs.org/regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz} + name: regenerate + version: 1.4.2 + dev: true + + registry.npmjs.org/regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz} + name: regenerator-runtime + version: 0.11.1 + dev: false + + registry.npmjs.org/regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz} + name: regenerator-runtime + version: 0.14.1 + dev: true + + registry.npmjs.org/regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz} + name: regenerator-transform + version: 0.15.2 + dependencies: + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.24.4 + dev: true + + registry.npmjs.org/regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz} + name: regexpp + version: 3.2.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz} + name: regexpu-core + version: 5.3.2 + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': registry.npmjs.org/@babel/regjsgen@0.8.0 + regenerate: registry.npmjs.org/regenerate@1.4.2 + regenerate-unicode-properties: registry.npmjs.org/regenerate-unicode-properties@10.1.1 + regjsparser: registry.npmjs.org/regjsparser@0.9.1 + unicode-match-property-ecmascript: registry.npmjs.org/unicode-match-property-ecmascript@2.0.0 + unicode-match-property-value-ecmascript: registry.npmjs.org/unicode-match-property-value-ecmascript@2.1.0 + dev: true + + registry.npmjs.org/regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz} + name: regjsparser + version: 0.9.1 + hasBin: true + dependencies: + jsesc: registry.npmjs.org/jsesc@0.5.0 + dev: true + + registry.npmjs.org/relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz} + name: relateurl + version: 0.2.7 + engines: {node: '>= 0.10'} + dev: true + + registry.npmjs.org/renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz} + name: renderkid + version: 3.0.0 + dependencies: + css-select: registry.npmjs.org/css-select@4.3.0 + dom-converter: registry.npmjs.org/dom-converter@0.2.0 + htmlparser2: registry.npmjs.org/htmlparser2@6.1.0 + lodash: registry.npmjs.org/lodash@4.17.21 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + dev: true + + registry.npmjs.org/require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz} + name: require-directory + version: 2.1.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz} + name: require-from-string + version: 2.0.2 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz} + name: requires-port + version: 1.0.0 + dev: true + + registry.npmjs.org/resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz} + name: resize-observer-polyfill + version: 1.5.1 + dev: false + + registry.npmjs.org/resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz} + name: resolve-from + version: 4.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz} + name: resolve + version: 1.22.8 + hasBin: true + dependencies: + is-core-module: registry.npmjs.org/is-core-module@2.13.1 + path-parse: registry.npmjs.org/path-parse@1.0.7 + supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0 + dev: true + + registry.npmjs.org/restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz} + name: restore-cursor + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + onetime: registry.npmjs.org/onetime@2.0.1 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + dev: true + + registry.npmjs.org/restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz} + name: restore-cursor + version: 3.1.0 + engines: {node: '>=8'} + dependencies: + onetime: registry.npmjs.org/onetime@5.1.2 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + dev: true + + registry.npmjs.org/retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/retry/-/retry-0.13.1.tgz} + name: retry + version: 0.13.1 + engines: {node: '>= 4'} + dev: true + + registry.npmjs.org/reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz} + name: reusify + version: 1.0.4 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + registry.npmjs.org/rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz} + name: rimraf + version: 3.0.2 + hasBin: true + dependencies: + glob: registry.npmjs.org/glob@7.2.3 + dev: true + + registry.npmjs.org/run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz} + name: run-parallel + version: 1.2.0 + dependencies: + queue-microtask: registry.npmjs.org/queue-microtask@1.2.3 + dev: true + + registry.npmjs.org/safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz} + name: safe-buffer + version: 5.1.2 + dev: true + + registry.npmjs.org/safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} + name: safe-buffer + version: 5.2.1 + dev: true + + registry.npmjs.org/safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} + name: safer-buffer + version: 2.1.2 + dev: true + + registry.npmjs.org/schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz} + name: schema-utils + version: 2.7.1 + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + ajv: registry.npmjs.org/ajv@6.12.6 + ajv-keywords: registry.npmjs.org/ajv-keywords@3.5.2(ajv@6.12.6) + dev: true + + registry.npmjs.org/schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz} + name: schema-utils + version: 3.3.0 + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + ajv: registry.npmjs.org/ajv@6.12.6 + ajv-keywords: registry.npmjs.org/ajv-keywords@3.5.2(ajv@6.12.6) + dev: true + + registry.npmjs.org/schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz} + name: schema-utils + version: 4.2.0 + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + ajv: registry.npmjs.org/ajv@8.12.0 + ajv-formats: registry.npmjs.org/ajv-formats@2.1.1(ajv@8.12.0) + ajv-keywords: registry.npmjs.org/ajv-keywords@5.1.0(ajv@8.12.0) + dev: true + + registry.npmjs.org/select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz} + name: select-hose + version: 2.0.0 + dev: true + + registry.npmjs.org/selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz} + name: selfsigned + version: 2.4.1 + engines: {node: '>=10'} + dependencies: + '@types/node-forge': registry.npmjs.org/@types/node-forge@1.3.11 + node-forge: registry.npmjs.org/node-forge@1.3.1 + dev: true + + registry.npmjs.org/semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-5.7.2.tgz} + name: semver + version: 5.7.2 + hasBin: true + dev: true + + registry.npmjs.org/semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.1.tgz} + name: semver + version: 6.3.1 + hasBin: true + dev: true + + registry.npmjs.org/semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.6.0.tgz} + name: semver + version: 7.6.0 + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: registry.npmjs.org/lru-cache@6.0.0 + dev: true + + registry.npmjs.org/send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/send/-/send-0.18.0.tgz} + name: send + version: 0.18.0 + engines: {node: '>= 0.8.0'} + dependencies: + debug: registry.npmjs.org/debug@2.6.9 + depd: registry.npmjs.org/depd@2.0.0 + destroy: registry.npmjs.org/destroy@1.2.0 + encodeurl: registry.npmjs.org/encodeurl@1.0.2 + escape-html: registry.npmjs.org/escape-html@1.0.3 + etag: registry.npmjs.org/etag@1.8.1 + fresh: registry.npmjs.org/fresh@0.5.2 + http-errors: registry.npmjs.org/http-errors@2.0.0 + mime: registry.npmjs.org/mime@1.6.0 + ms: registry.npmjs.org/ms@2.1.3 + on-finished: registry.npmjs.org/on-finished@2.4.1 + range-parser: registry.npmjs.org/range-parser@1.2.1 + statuses: registry.npmjs.org/statuses@2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz} + name: serialize-javascript + version: 6.0.2 + dependencies: + randombytes: registry.npmjs.org/randombytes@2.1.0 + dev: true + + registry.npmjs.org/serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz} + name: serve-index + version: 1.9.1 + engines: {node: '>= 0.8.0'} + dependencies: + accepts: registry.npmjs.org/accepts@1.3.8 + batch: registry.npmjs.org/batch@0.6.1 + debug: registry.npmjs.org/debug@2.6.9 + escape-html: registry.npmjs.org/escape-html@1.0.3 + http-errors: registry.npmjs.org/http-errors@1.6.3 + mime-types: registry.npmjs.org/mime-types@2.1.35 + parseurl: registry.npmjs.org/parseurl@1.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz} + name: serve-static + version: 1.15.0 + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: registry.npmjs.org/encodeurl@1.0.2 + escape-html: registry.npmjs.org/escape-html@1.0.3 + parseurl: registry.npmjs.org/parseurl@1.3.3 + send: registry.npmjs.org/send@0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz} + name: set-function-length + version: 1.2.2 + engines: {node: '>= 0.4'} + dependencies: + define-data-property: registry.npmjs.org/define-data-property@1.1.4 + es-errors: registry.npmjs.org/es-errors@1.3.0 + function-bind: registry.npmjs.org/function-bind@1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.4 + gopd: registry.npmjs.org/gopd@1.0.1 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.2 + dev: true + + registry.npmjs.org/setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz} + name: setprototypeof + version: 1.1.0 + dev: true + + registry.npmjs.org/setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz} + name: setprototypeof + version: 1.2.0 + dev: true + + registry.npmjs.org/shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz} + name: shallow-clone + version: 3.0.1 + engines: {node: '>=8'} + dependencies: + kind-of: registry.npmjs.org/kind-of@6.0.3 + dev: true + + registry.npmjs.org/shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz} + name: shebang-command + version: 1.2.0 + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: registry.npmjs.org/shebang-regex@1.0.0 + dev: true + + registry.npmjs.org/shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} + name: shebang-command + version: 2.0.0 + engines: {node: '>=8'} + dependencies: + shebang-regex: registry.npmjs.org/shebang-regex@3.0.0 + dev: true + + registry.npmjs.org/shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz} + name: shebang-regex + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} + name: shebang-regex + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz} + name: shell-quote + version: 1.8.1 + dev: true + + registry.npmjs.org/side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz} + name: side-channel + version: 1.0.6 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.7 + es-errors: registry.npmjs.org/es-errors@1.3.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.4 + object-inspect: registry.npmjs.org/object-inspect@1.13.1 + dev: true + + registry.npmjs.org/signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz} + name: signal-exit + version: 3.0.7 + dev: true + + registry.npmjs.org/sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz} + name: sirv + version: 2.0.4 + engines: {node: '>= 10'} + dependencies: + '@polka/url': registry.npmjs.org/@polka/url@1.0.0-next.25 + mrmime: registry.npmjs.org/mrmime@2.0.0 + totalist: registry.npmjs.org/totalist@3.0.1 + dev: true + + registry.npmjs.org/slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-3.0.0.tgz} + name: slash + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz} + name: slice-ansi + version: 4.0.0 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + astral-regex: registry.npmjs.org/astral-regex@2.0.0 + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@3.0.0 + dev: true + + registry.npmjs.org/sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz} + name: sockjs + version: 0.3.24 + dependencies: + faye-websocket: registry.npmjs.org/faye-websocket@0.11.4 + uuid: registry.npmjs.org/uuid@8.3.2 + websocket-driver: registry.npmjs.org/websocket-driver@0.7.4 + dev: true + + registry.npmjs.org/source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz} + name: source-map-js + version: 1.2.0 + engines: {node: '>=0.10.0'} + + registry.npmjs.org/source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz} + name: source-map-support + version: 0.5.21 + dependencies: + buffer-from: registry.npmjs.org/buffer-from@1.1.2 + source-map: registry.npmjs.org/source-map@0.6.1 + dev: true + + registry.npmjs.org/source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz} + name: source-map + version: 0.6.1 + engines: {node: '>=0.10.0'} + + registry.npmjs.org/spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz} + name: spdx-correct + version: 3.2.0 + dependencies: + spdx-expression-parse: registry.npmjs.org/spdx-expression-parse@3.0.1 + spdx-license-ids: registry.npmjs.org/spdx-license-ids@3.0.17 + dev: true + + registry.npmjs.org/spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz} + name: spdx-exceptions + version: 2.5.0 + dev: true + + registry.npmjs.org/spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz} + name: spdx-expression-parse + version: 3.0.1 + dependencies: + spdx-exceptions: registry.npmjs.org/spdx-exceptions@2.5.0 + spdx-license-ids: registry.npmjs.org/spdx-license-ids@3.0.17 + dev: true + + registry.npmjs.org/spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz} + name: spdx-license-ids + version: 3.0.17 + dev: true + + registry.npmjs.org/spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz} + name: spdy-transport + version: 3.0.0 + dependencies: + debug: registry.npmjs.org/debug@4.3.4 + detect-node: registry.npmjs.org/detect-node@2.1.0 + hpack.js: registry.npmjs.org/hpack.js@2.1.6 + obuf: registry.npmjs.org/obuf@1.1.2 + readable-stream: registry.npmjs.org/readable-stream@3.6.2 + wbuf: registry.npmjs.org/wbuf@1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz} + name: spdy + version: 4.0.2 + engines: {node: '>=6.0.0'} + dependencies: + debug: registry.npmjs.org/debug@4.3.4 + handle-thing: registry.npmjs.org/handle-thing@2.0.1 + http-deceiver: registry.npmjs.org/http-deceiver@1.2.7 + select-hose: registry.npmjs.org/select-hose@2.0.0 + spdy-transport: registry.npmjs.org/spdy-transport@3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz} + name: sprintf-js + version: 1.0.3 + dev: true + + registry.npmjs.org/ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz} + name: ssri + version: 8.0.1 + engines: {node: '>= 8'} + dependencies: + minipass: registry.npmjs.org/minipass@3.3.6 + dev: true + + registry.npmjs.org/stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/stable/-/stable-0.1.8.tgz} + name: stable + version: 0.1.8 + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + registry.npmjs.org/stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz} + name: stackframe + version: 1.3.4 + dev: true + + registry.npmjs.org/statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz} + name: statuses + version: 1.5.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz} + name: statuses + version: 2.0.1 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz} + name: string-width + version: 2.1.1 + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@2.0.0 + strip-ansi: registry.npmjs.org/strip-ansi@4.0.0 + dev: true + + registry.npmjs.org/string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz} + name: string-width + version: 4.2.3 + engines: {node: '>=8'} + dependencies: + emoji-regex: registry.npmjs.org/emoji-regex@8.0.0 + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@3.0.0 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + dev: true + + registry.npmjs.org/string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz} + name: string_decoder + version: 1.1.1 + dependencies: + safe-buffer: registry.npmjs.org/safe-buffer@5.1.2 + dev: true + + registry.npmjs.org/string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz} + name: string_decoder + version: 1.3.0 + dependencies: + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + dev: true + + registry.npmjs.org/strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz} + name: strip-ansi + version: 4.0.0 + engines: {node: '>=4'} + dependencies: + ansi-regex: registry.npmjs.org/ansi-regex@3.0.1 + dev: true + + registry.npmjs.org/strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz} + name: strip-ansi + version: 6.0.1 + engines: {node: '>=8'} + dependencies: + ansi-regex: registry.npmjs.org/ansi-regex@5.0.1 + dev: true + + registry.npmjs.org/strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz} + name: strip-eof + version: 1.0.0 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz} + name: strip-final-newline + version: 2.0.0 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/strip-indent@2.0.0: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz} + name: strip-indent + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} + name: strip-json-comments + version: 3.1.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/stylehacks@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz} + id: registry.npmjs.org/stylehacks/5.1.1 + name: stylehacks + version: 5.1.1 + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + postcss: registry.npmjs.org/postcss@8.4.38 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.16 + dev: true + + registry.npmjs.org/supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz} + name: supports-color + version: 5.5.0 + engines: {node: '>=4'} + dependencies: + has-flag: registry.npmjs.org/has-flag@3.0.0 + dev: true + + registry.npmjs.org/supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz} + name: supports-color + version: 7.2.0 + engines: {node: '>=8'} + dependencies: + has-flag: registry.npmjs.org/has-flag@4.0.0 + dev: true + + registry.npmjs.org/supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz} + name: supports-color + version: 8.1.1 + engines: {node: '>=10'} + dependencies: + has-flag: registry.npmjs.org/has-flag@4.0.0 + dev: true + + registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} + name: supports-preserve-symlinks-flag + version: 1.0.0 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz} + name: svg-tags + version: 1.0.0 + dev: true + + registry.npmjs.org/svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz} + name: svgo + version: 2.8.0 + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': registry.npmjs.org/@trysound/sax@0.2.0 + commander: registry.npmjs.org/commander@7.2.0 + css-select: registry.npmjs.org/css-select@4.3.0 + css-tree: registry.npmjs.org/css-tree@1.1.3 + csso: registry.npmjs.org/csso@4.2.0 + picocolors: registry.npmjs.org/picocolors@1.0.0 + stable: registry.npmjs.org/stable@0.1.8 + dev: true + + registry.npmjs.org/table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/table/-/table-6.8.2.tgz} + name: table + version: 6.8.2 + engines: {node: '>=10.0.0'} + dependencies: + ajv: registry.npmjs.org/ajv@8.12.0 + lodash.truncate: registry.npmjs.org/lodash.truncate@4.4.2 + slice-ansi: registry.npmjs.org/slice-ansi@4.0.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + dev: true + + registry.npmjs.org/tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} + name: tapable + version: 2.2.1 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/terser-webpack-plugin@5.3.10(webpack@5.91.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz} + id: registry.npmjs.org/terser-webpack-plugin/5.3.10 + name: terser-webpack-plugin + version: 5.3.10 + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.25 + jest-worker: registry.npmjs.org/jest-worker@27.5.1 + schema-utils: registry.npmjs.org/schema-utils@3.3.0 + serialize-javascript: registry.npmjs.org/serialize-javascript@6.0.2 + terser: registry.npmjs.org/terser@5.30.3 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/terser@5.30.3: + resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.30.3.tgz} + name: terser + version: 5.30.3 + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map@0.3.6 + acorn: registry.npmjs.org/acorn@8.11.3 + commander: registry.npmjs.org/commander@2.20.3 + source-map-support: registry.npmjs.org/source-map-support@0.5.21 + dev: true + + registry.npmjs.org/text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz} + name: text-table + version: 0.2.0 + dev: true + + registry.npmjs.org/thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz} + name: thenify-all + version: 1.6.0 + engines: {node: '>=0.8'} + dependencies: + thenify: registry.npmjs.org/thenify@3.3.1 + dev: true + + registry.npmjs.org/thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz} + name: thenify + version: 3.3.1 + dependencies: + any-promise: registry.npmjs.org/any-promise@1.3.0 + dev: true + + registry.npmjs.org/thread-loader@3.0.4(webpack@5.91.0): + resolution: {integrity: sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz} + id: registry.npmjs.org/thread-loader/3.0.4 + name: thread-loader + version: 3.0.4 + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + dependencies: + json-parse-better-errors: registry.npmjs.org/json-parse-better-errors@1.0.2 + loader-runner: registry.npmjs.org/loader-runner@4.3.0 + loader-utils: registry.npmjs.org/loader-utils@2.0.4 + neo-async: registry.npmjs.org/neo-async@2.6.2 + schema-utils: registry.npmjs.org/schema-utils@3.3.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/throttle-debounce@1.1.0: + resolution: {integrity: sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz} + name: throttle-debounce + version: 1.1.0 + engines: {node: '>=4'} + dev: false + + registry.npmjs.org/thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz} + name: thunky + version: 1.1.0 + dev: true + + registry.npmjs.org/to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz} + name: to-fast-properties + version: 2.0.0 + engines: {node: '>=4'} + + registry.npmjs.org/to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz} + name: to-regex-range + version: 5.0.1 + engines: {node: '>=8.0'} + dependencies: + is-number: registry.npmjs.org/is-number@7.0.0 + dev: true + + registry.npmjs.org/toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz} + name: toidentifier + version: 1.0.1 + engines: {node: '>=0.6'} + dev: true + + registry.npmjs.org/totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} + name: totalist + version: 3.0.1 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz} + name: tr46 + version: 0.0.3 + dev: true + + registry.npmjs.org/tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz} + name: tslib + version: 2.6.2 + dev: true + + registry.npmjs.org/type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} + name: type-check + version: 0.4.0 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 + dev: true + + registry.npmjs.org/type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz} + name: type-fest + version: 0.20.2 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz} + name: type-fest + version: 0.6.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz} + name: type-fest + version: 0.8.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz} + name: type-is + version: 1.6.18 + engines: {node: '>= 0.6'} + dependencies: + media-typer: registry.npmjs.org/media-typer@0.3.0 + mime-types: registry.npmjs.org/mime-types@2.1.35 + dev: true + + registry.npmjs.org/undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz} + name: undici-types + version: 5.26.5 + dev: true + + registry.npmjs.org/unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz} + name: unicode-canonical-property-names-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz} + name: unicode-match-property-ecmascript + version: 2.0.0 + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: registry.npmjs.org/unicode-canonical-property-names-ecmascript@2.0.0 + unicode-property-aliases-ecmascript: registry.npmjs.org/unicode-property-aliases-ecmascript@2.1.0 + dev: true + + registry.npmjs.org/unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz} + name: unicode-match-property-value-ecmascript + version: 2.1.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz} + name: unicode-property-aliases-ecmascript + version: 2.1.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz} + name: universalify + version: 2.0.1 + engines: {node: '>= 10.0.0'} + dev: true + + registry.npmjs.org/unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz} + name: unpipe + version: 1.0.0 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz} + id: registry.npmjs.org/update-browserslist-db/1.0.13 + name: update-browserslist-db + version: 1.0.13 + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: registry.npmjs.org/browserslist@4.23.0 + escalade: registry.npmjs.org/escalade@3.1.2 + picocolors: registry.npmjs.org/picocolors@1.0.0 + dev: true + + registry.npmjs.org/uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} + name: uri-js + version: 4.4.1 + dependencies: + punycode: registry.npmjs.org/punycode@2.3.1 + dev: true + + registry.npmjs.org/util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} + name: util-deprecate + version: 1.0.2 + dev: true + + registry.npmjs.org/utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/utila/-/utila-0.4.0.tgz} + name: utila + version: 0.4.0 + dev: true + + registry.npmjs.org/utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz} + name: utils-merge + version: 1.0.1 + engines: {node: '>= 0.4.0'} + dev: true + + registry.npmjs.org/uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz} + name: uuid + version: 8.3.2 + hasBin: true + dev: true + + registry.npmjs.org/v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz} + name: v8-compile-cache + version: 2.4.0 + dev: true + + registry.npmjs.org/validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz} + name: validate-npm-package-license + version: 3.0.4 + dependencies: + spdx-correct: registry.npmjs.org/spdx-correct@3.2.0 + spdx-expression-parse: registry.npmjs.org/spdx-expression-parse@3.0.1 + dev: true + + registry.npmjs.org/vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vary/-/vary-1.1.2.tgz} + name: vary + version: 1.1.2 + engines: {node: '>= 0.8'} + dev: true + + registry.npmjs.org/vue-demi@0.14.7(vue@2.7.16): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz} + id: registry.npmjs.org/vue-demi/0.14.7 + name: vue-demi + version: 0.14.7 + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: registry.npmjs.org/vue@2.7.16 + dev: false + + registry.npmjs.org/vue-eslint-parser@8.3.0(eslint@7.32.0): + resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz} + id: registry.npmjs.org/vue-eslint-parser/8.3.0 + name: vue-eslint-parser + version: 8.3.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: registry.npmjs.org/debug@4.3.4 + eslint: registry.npmjs.org/eslint@7.32.0 + eslint-scope: registry.npmjs.org/eslint-scope@7.2.2 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + espree: registry.npmjs.org/espree@9.6.1 + esquery: registry.npmjs.org/esquery@1.5.0 + lodash: registry.npmjs.org/lodash@4.17.21 + semver: registry.npmjs.org/semver@7.6.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/vue-hot-reload-api@2.3.4: + resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz} + name: vue-hot-reload-api + version: 2.3.4 + dev: true + + registry.npmjs.org/vue-loader@15.11.1(css-loader@6.11.0)(vue-template-compiler@2.7.16)(webpack@5.91.0): + resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz} + id: registry.npmjs.org/vue-loader/15.11.1 + name: vue-loader + version: 15.11.1 + peerDependencies: + '@vue/compiler-sfc': ^3.0.8 + cache-loader: '*' + css-loader: '*' + prettier: '*' + vue-template-compiler: '*' + webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + cache-loader: + optional: true + prettier: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@vue/component-compiler-utils': registry.npmjs.org/@vue/component-compiler-utils@3.3.0 + css-loader: registry.npmjs.org/css-loader@6.11.0(webpack@5.91.0) + hash-sum: registry.npmjs.org/hash-sum@1.0.2 + loader-utils: registry.npmjs.org/loader-utils@1.4.2 + vue-hot-reload-api: registry.npmjs.org/vue-hot-reload-api@2.3.4 + vue-style-loader: registry.npmjs.org/vue-style-loader@4.1.3 + vue-template-compiler: registry.npmjs.org/vue-template-compiler@2.7.16 + webpack: registry.npmjs.org/webpack@5.91.0 + transitivePeerDependencies: + - arc-templates + - atpl + - babel-core + - bracket-template + - coffee-script + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jade + - jazz + - jqtpl + - just + - liquid-node + - liquor + - lodash + - marko + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - razor-tmpl + - react + - react-dom + - slm + - squirrelly + - swig + - swig-templates + - teacup + - templayed + - then-jade + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + dev: true + + registry.npmjs.org/vue-loader@17.4.2(vue@2.7.16)(webpack@5.91.0): + resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz} + id: registry.npmjs.org/vue-loader/17.4.2 + name: vue-loader + version: 17.4.2 + peerDependencies: + '@vue/compiler-sfc': '*' + vue: '*' + webpack: ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + vue: + optional: true + dependencies: + chalk: registry.npmjs.org/chalk@4.1.2 + hash-sum: registry.npmjs.org/hash-sum@2.0.0 + vue: registry.npmjs.org/vue@2.7.16 + watchpack: registry.npmjs.org/watchpack@2.4.1 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/vue-router@3.6.5(vue@2.7.16): + resolution: {integrity: sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz} + id: registry.npmjs.org/vue-router/3.6.5 + name: vue-router + version: 3.6.5 + peerDependencies: + vue: ^2 + dependencies: + vue: registry.npmjs.org/vue@2.7.16 + dev: false + + registry.npmjs.org/vue-style-loader@4.1.3: + resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz} + name: vue-style-loader + version: 4.1.3 + dependencies: + hash-sum: registry.npmjs.org/hash-sum@1.0.2 + loader-utils: registry.npmjs.org/loader-utils@1.4.2 + dev: true + + registry.npmjs.org/vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz} + name: vue-template-compiler + version: 2.7.16 + dependencies: + de-indent: registry.npmjs.org/de-indent@1.0.2 + he: registry.npmjs.org/he@1.2.0 + dev: true + + registry.npmjs.org/vue-template-es2015-compiler@1.9.1: + resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz} + name: vue-template-es2015-compiler + version: 1.9.1 + dev: true + + registry.npmjs.org/vue@2.7.16: + resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/vue/-/vue-2.7.16.tgz} + name: vue + version: 2.7.16 + deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details. + dependencies: + '@vue/compiler-sfc': registry.npmjs.org/@vue/compiler-sfc@2.7.16 + csstype: registry.npmjs.org/csstype@3.1.3 + + registry.npmjs.org/watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz} + name: watchpack + version: 2.4.1 + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: registry.npmjs.org/glob-to-regexp@0.4.1 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + dev: true + + registry.npmjs.org/wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz} + name: wbuf + version: 1.7.3 + dependencies: + minimalistic-assert: registry.npmjs.org/minimalistic-assert@1.0.1 + dev: true + + registry.npmjs.org/wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz} + name: wcwidth + version: 1.0.1 + dependencies: + defaults: registry.npmjs.org/defaults@1.0.4 + dev: true + + registry.npmjs.org/webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz} + name: webidl-conversions + version: 3.0.1 + dev: true + + registry.npmjs.org/webpack-bundle-analyzer@4.10.2: + resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz} + name: webpack-bundle-analyzer + version: 4.10.2 + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + '@discoveryjs/json-ext': registry.npmjs.org/@discoveryjs/json-ext@0.5.7 + acorn: registry.npmjs.org/acorn@8.11.3 + acorn-walk: registry.npmjs.org/acorn-walk@8.3.2 + commander: registry.npmjs.org/commander@7.2.0 + debounce: registry.npmjs.org/debounce@1.2.1 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@4.0.0 + gzip-size: registry.npmjs.org/gzip-size@6.0.0 + html-escaper: registry.npmjs.org/html-escaper@2.0.2 + opener: registry.npmjs.org/opener@1.5.2 + picocolors: registry.npmjs.org/picocolors@1.0.0 + sirv: registry.npmjs.org/sirv@2.0.4 + ws: registry.npmjs.org/ws@7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + registry.npmjs.org/webpack-chain@6.5.1: + resolution: {integrity: sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz} + name: webpack-chain + version: 6.5.1 + engines: {node: '>=8'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + deepmerge: registry.npmjs.org/deepmerge@1.5.2 + javascript-stringify: registry.npmjs.org/javascript-stringify@2.1.0 + dev: true + + registry.npmjs.org/webpack-dev-middleware@5.3.4(webpack@5.91.0): + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz} + id: registry.npmjs.org/webpack-dev-middleware/5.3.4 + name: webpack-dev-middleware + version: 5.3.4 + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: registry.npmjs.org/colorette@2.0.20 + memfs: registry.npmjs.org/memfs@3.5.3 + mime-types: registry.npmjs.org/mime-types@2.1.35 + range-parser: registry.npmjs.org/range-parser@1.2.1 + schema-utils: registry.npmjs.org/schema-utils@4.2.0 + webpack: registry.npmjs.org/webpack@5.91.0 + dev: true + + registry.npmjs.org/webpack-dev-server@4.15.2(debug@4.3.4)(webpack@5.91.0): + resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz} + id: registry.npmjs.org/webpack-dev-server/4.15.2 + name: webpack-dev-server + version: 4.15.2 + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': registry.npmjs.org/@types/bonjour@3.5.13 + '@types/connect-history-api-fallback': registry.npmjs.org/@types/connect-history-api-fallback@1.5.4 + '@types/express': registry.npmjs.org/@types/express@4.17.21 + '@types/serve-index': registry.npmjs.org/@types/serve-index@1.9.4 + '@types/serve-static': registry.npmjs.org/@types/serve-static@1.15.7 + '@types/sockjs': registry.npmjs.org/@types/sockjs@0.3.36 + '@types/ws': registry.npmjs.org/@types/ws@8.5.10 + ansi-html-community: registry.npmjs.org/ansi-html-community@0.0.8 + bonjour-service: registry.npmjs.org/bonjour-service@1.2.1 + chokidar: registry.npmjs.org/chokidar@3.6.0 + colorette: registry.npmjs.org/colorette@2.0.20 + compression: registry.npmjs.org/compression@1.7.4 + connect-history-api-fallback: registry.npmjs.org/connect-history-api-fallback@2.0.0 + default-gateway: registry.npmjs.org/default-gateway@6.0.3 + express: registry.npmjs.org/express@4.19.2 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + html-entities: registry.npmjs.org/html-entities@2.5.2 + http-proxy-middleware: registry.npmjs.org/http-proxy-middleware@2.0.6(@types/express@4.17.21)(debug@4.3.4) + ipaddr.js: registry.npmjs.org/ipaddr.js@2.1.0 + launch-editor: registry.npmjs.org/launch-editor@2.6.1 + open: registry.npmjs.org/open@8.4.2 + p-retry: registry.npmjs.org/p-retry@4.6.2 + rimraf: registry.npmjs.org/rimraf@3.0.2 + schema-utils: registry.npmjs.org/schema-utils@4.2.0 + selfsigned: registry.npmjs.org/selfsigned@2.4.1 + serve-index: registry.npmjs.org/serve-index@1.9.1 + sockjs: registry.npmjs.org/sockjs@0.3.24 + spdy: registry.npmjs.org/spdy@4.0.2 + webpack: registry.npmjs.org/webpack@5.91.0 + webpack-dev-middleware: registry.npmjs.org/webpack-dev-middleware@5.3.4(webpack@5.91.0) + ws: registry.npmjs.org/ws@8.16.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + + registry.npmjs.org/webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz} + name: webpack-merge + version: 5.10.0 + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: registry.npmjs.org/clone-deep@4.0.1 + flat: registry.npmjs.org/flat@5.0.2 + wildcard: registry.npmjs.org/wildcard@2.0.1 + dev: true + + registry.npmjs.org/webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz} + name: webpack-sources + version: 3.2.3 + engines: {node: '>=10.13.0'} + dev: true + + registry.npmjs.org/webpack-virtual-modules@0.4.6: + resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz} + name: webpack-virtual-modules + version: 0.4.6 + dev: true + + registry.npmjs.org/webpack@5.91.0: + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz} + name: webpack + version: 5.91.0 + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': registry.npmjs.org/@types/eslint-scope@3.7.7 + '@types/estree': registry.npmjs.org/@types/estree@1.0.5 + '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast@1.12.1 + '@webassemblyjs/wasm-edit': registry.npmjs.org/@webassemblyjs/wasm-edit@1.12.1 + '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser@1.12.1 + acorn: registry.npmjs.org/acorn@8.11.3 + acorn-import-assertions: registry.npmjs.org/acorn-import-assertions@1.9.0(acorn@8.11.3) + browserslist: registry.npmjs.org/browserslist@4.23.0 + chrome-trace-event: registry.npmjs.org/chrome-trace-event@1.0.3 + enhanced-resolve: registry.npmjs.org/enhanced-resolve@5.16.0 + es-module-lexer: registry.npmjs.org/es-module-lexer@1.5.0 + eslint-scope: registry.npmjs.org/eslint-scope@5.1.1 + events: registry.npmjs.org/events@3.3.0 + glob-to-regexp: registry.npmjs.org/glob-to-regexp@0.4.1 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors@2.3.1 + loader-runner: registry.npmjs.org/loader-runner@4.3.0 + mime-types: registry.npmjs.org/mime-types@2.1.35 + neo-async: registry.npmjs.org/neo-async@2.6.2 + schema-utils: registry.npmjs.org/schema-utils@3.3.0 + tapable: registry.npmjs.org/tapable@2.2.1 + terser-webpack-plugin: registry.npmjs.org/terser-webpack-plugin@5.3.10(webpack@5.91.0) + watchpack: registry.npmjs.org/watchpack@2.4.1 + webpack-sources: registry.npmjs.org/webpack-sources@3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + registry.npmjs.org/websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz} + name: websocket-driver + version: 0.7.4 + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: registry.npmjs.org/http-parser-js@0.5.8 + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + websocket-extensions: registry.npmjs.org/websocket-extensions@0.1.4 + dev: true + + registry.npmjs.org/websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz} + name: websocket-extensions + version: 0.1.4 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmjs.org/whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz} + name: whatwg-fetch + version: 3.6.20 + dev: true + + registry.npmjs.org/whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz} + name: whatwg-url + version: 5.0.0 + dependencies: + tr46: registry.npmjs.org/tr46@0.0.3 + webidl-conversions: registry.npmjs.org/webidl-conversions@3.0.1 + dev: true + + registry.npmjs.org/which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/which/-/which-1.3.1.tgz} + name: which + version: 1.3.1 + hasBin: true + dependencies: + isexe: registry.npmjs.org/isexe@2.0.0 + dev: true + + registry.npmjs.org/which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} + name: which + version: 2.0.2 + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: registry.npmjs.org/isexe@2.0.0 + dev: true + + registry.npmjs.org/wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz} + name: wildcard + version: 2.0.1 + dev: true + + registry.npmjs.org/wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz} + name: wrap-ansi + version: 3.0.1 + engines: {node: '>=4'} + dependencies: + string-width: registry.npmjs.org/string-width@2.1.1 + strip-ansi: registry.npmjs.org/strip-ansi@4.0.0 + dev: true + + registry.npmjs.org/wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz} + name: wrap-ansi + version: 7.0.0 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + dev: true + + registry.npmjs.org/wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz} + name: wrappy + version: 1.0.2 + dev: true + + registry.npmjs.org/ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ws/-/ws-7.5.9.tgz} + name: ws + version: 7.5.9 + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + registry.npmjs.org/ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/ws/-/ws-8.16.0.tgz} + name: ws + version: 8.16.0 + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + registry.npmjs.org/y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz} + name: y18n + version: 5.0.8 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz} + name: yallist + version: 2.1.2 + dev: true + + registry.npmjs.org/yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz} + name: yallist + version: 3.1.1 + dev: true + + registry.npmjs.org/yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz} + name: yallist + version: 4.0.0 + dev: true + + registry.npmjs.org/yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz} + name: yaml + version: 1.10.2 + engines: {node: '>= 6'} + dev: true + + registry.npmjs.org/yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz} + name: yargs-parser + version: 20.2.9 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz} + name: yargs + version: 16.2.0 + engines: {node: '>=10'} + dependencies: + cliui: registry.npmjs.org/cliui@7.0.4 + escalade: registry.npmjs.org/escalade@3.1.2 + get-caller-file: registry.npmjs.org/get-caller-file@2.0.5 + require-directory: registry.npmjs.org/require-directory@2.1.1 + string-width: registry.npmjs.org/string-width@4.2.3 + y18n: registry.npmjs.org/y18n@5.0.8 + yargs-parser: registry.npmjs.org/yargs-parser@20.2.9 + dev: true + + registry.npmjs.org/yorkie@2.0.0: + resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==, registry: http://registry.npmjs.com/, tarball: https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz} + name: yorkie + version: 2.0.0 + engines: {node: '>=4'} + requiresBuild: true + dependencies: + execa: registry.npmjs.org/execa@0.8.0 + is-ci: registry.npmjs.org/is-ci@1.2.1 + normalize-path: registry.npmjs.org/normalize-path@1.0.0 + strip-indent: registry.npmjs.org/strip-indent@2.0.0 + dev: true diff --git a/examples/dist/assets/DocxDemo-e0bbec93.js b/examples/dist/assets/DocxDemo-e0bbec93.js new file mode 100644 index 0000000..22c5a01 --- /dev/null +++ b/examples/dist/assets/DocxDemo-e0bbec93.js @@ -0,0 +1 @@ +import{d as r}from"./docx-471e1e1f.js";import{d as p}from"./url-de9b02cf.js";import{d as x,_ as l,r as _,o as h,w as v,a as m,c as g,b as D,e as w,f as y,g as O,u as B}from"./index-bf0149c5.js";import{P as R,u}from"./PreviewWrapper-079442e3.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(e,...o){setTimeout(()=>e(o))});const $=x({name:"VueOfficeDocx",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:o}){const n=_(null);let c=null;function a(){let t=n.value;r.getData(e.src,e.requestOptions).then(async i=>{c=await r.getBlob(i),r.render(c,t,e.options).then(()=>{o("rendered")}).catch(f=>{r.render("",t,e.options),o("error",f)})}).catch(i=>{r.render("",t,e.options),o("error",i)})}h(()=>{e.src&&a()}),v(()=>e.src,()=>{e.src?a():r.render("",n.value,e.options).then(()=>{o("rendered")})});function s(t){p(t||`vue-office-docx-${new Date().getTime()}.docx`,c)}return{rootRef:n,save:s}}}),b={class:"vue-office-docx"},V={class:"vue-office-docx-main",ref:"rootRef"};function k(e,o,n,c,a,s){return m(),g("div",b,[D("div",V,null,512)])}const d=l($,[["render",k]]);d.install=function(e){e.component(d.name,d)};const q={__name:"DocxDemo",setup(e){function o(){u.hideLoading()}function n(t){console.log("出差",t),u.hideLoading()}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.docx",a=_(),s={headers:{"component-name":"VueOfficeDocx"}};return(t,i)=>(m(),w(R,{accept:".docx",placeholder:"请输入docx文件地址","default-src":c},{default:y(f=>[O(B(d),{ref_key:"docxRef",ref:a,src:f.src,"request-options":s,style:{flex:"1",height:"0"},onRendered:o,onError:n},null,8,["src"])]),_:1}))}},N=l(q,[["__scopeId","data-v-844ea5ef"]]);export{N as default}; diff --git a/examples/dist/assets/ExcelDemo-5a689eb7.js b/examples/dist/assets/ExcelDemo-5a689eb7.js new file mode 100644 index 0000000..c5117e7 --- /dev/null +++ b/examples/dist/assets/ExcelDemo-5a689eb7.js @@ -0,0 +1 @@ +import{l as C,r as R,S as B,a as x,g as p,b as $,t as L,c as S}from"./hack-77e78dc2.js";import{d as q}from"./url-de9b02cf.js";import{d as F,_ as V,r as b,o as W,n as j,h as I,w as M,a as O,c as N,b as A,i as H,e as P,f as U,j as z,g as G,u as J}from"./index-bf0149c5.js";import{P as K,u as y}from"./PreviewWrapper-079442e3.js";import"./_commonjs-dynamic-modules-302442b1.js";const E={xls:!1,minColLength:20},Q=F({name:"VueOfficeExcel",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({...E})}},emits:["rendered","error","switchSheet"],setup(t,{emit:n}){const u=b(null),f=b(null);let a={_worksheets:[]},o=[],d=0,_=null,e=null,s=null,l=null;function c(h){l=h,$(h,t.options.xls).then(i=>{if(!i._worksheets||i._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");t.options.beforeTransformData&&typeof t.options.beforeTransformData=="function"&&(i=t.options.beforeTransformData(i));let{workbookData:m,medias:g,workbookSource:r}=L(i,{...E,...t.options});t.options.transformData&&typeof t.options.transformData=="function"&&(m=t.options.transformData(m)),o=g,a=r,s=null,d=0,S(),e.loadData(m),x(_,o,a._worksheets[d],s,t.options),n("rendered"),n("switchSheet",0)}).catch(i=>{console.warn(i),o=[],a={_worksheets:[]},S(),e&&e.loadData({}),n("error",i),n("switchSheet",0)})}const w=C.debounce(R,200).bind(this,f.value),D=new MutationObserver(w),k={attributes:!0,childList:!0,subtree:!0};W(()=>{j(()=>{D.observe(f.value,k),w(f),e=new B(f.value,{mode:"read",showToolbar:!1,showContextmenu:t.options.showContextmenu||!1,view:{height:()=>u.value&&u.value.clientHeight||300,width:()=>u.value&&u.value.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let h=e.bottombar.swapFunc;e.bottombar.swapFunc=function(r){h.call(e.bottombar,r),d=r,setTimeout(()=>{e.reRender(),x(_,o,a._worksheets[d],s,t.options),n("switchSheet",r)})};let i=e.sheet.editor.clear;e.sheet.editor.clear=function(...r){i.apply(e.sheet.editor,r),setTimeout(()=>{x(_,o,a._worksheets[d],s,t.options)})};let m=e.sheet.editor.setOffset;e.sheet.editor.setOffset=function(...r){m.apply(e.sheet.editor,r),s=r[0],x(_,o,a._worksheets[d],s,t.options)},_=f.value.querySelector("canvas").getContext("2d"),t.src&&p(t.src,t.requestOptions).then(c).catch(r=>{o=[],a={_worksheets:[]},e.loadData({}),n("error",r)})})}),I(()=>{D.disconnect(),e=null}),M(()=>t.src,()=>{t.src?p(t.src,t.requestOptions).then(c).catch(h=>{o=[],a={_worksheets:[]},e.loadData({}),n("error",h)}):(o=[],a={_worksheets:[]},e.loadData({}),n("error",new Error("src属性不能为空")))});function T(h){q(h||`vue-office-excel-${new Date().getTime()}.xlsx`,l)}return{wrapperRef:u,rootRef:f,save:T}}}),X={class:"vue-office-excel",ref:"wrapperRef"},Y={class:"vue-office-excel-main",ref:"rootRef"};function Z(t,n,u,f,a,o){return O(),N("div",X,[A("div",Y,null,512)],512)}const v=V(Q,[["render",Z]]);v.install=function(t){t.component(v.name,v)};const re={__name:"ExcelDemo",setup(t){function n(){y.hideLoading()}function u(e){console.log("出差",e),y.hideLoading()}function f(e){return console.log("transformData",e),e}const a=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.xlsx",o=b();function d(e){return console.log("beforeTransformData",e,o),e._worksheets.forEach(s=>{let l=0;if(s._rows[l]&&s._rows[l]._cells)for(let c=0;c{const l=H("loading");return O(),P(K,{accept:".xlsx,.xls",placeholder:"请输入xlsx文件地址","default-src":a},{default:U(c=>[z(G(J(v),{ref_key:"docxRef",ref:o,src:c.src,options:{beforeTransformData:d,transformData:f,xls:c.xls},style:{flex:"1",height:"0"},onRendered:n,onError:u,onSwitchSheet:_},null,8,["src","options"]),[[l,!0]])]),_:1})}}};export{re as default}; diff --git a/examples/dist/assets/JsDocxDemo-c52eb6fd.js b/examples/dist/assets/JsDocxDemo-c52eb6fd.js new file mode 100644 index 0000000..0f62a39 --- /dev/null +++ b/examples/dist/assets/JsDocxDemo-c52eb6fd.js @@ -0,0 +1 @@ +var p=Object.defineProperty;var c=(i,e,t)=>e in i?p(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>(c(i,typeof e!="symbol"?e+"":e,t),t);import{d as r}from"./docx-471e1e1f.js";import{d as l}from"./url-de9b02cf.js";import{r as h,o as d,a as u,c as m}from"./index-bf0149c5.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(i,...e){setTimeout(()=>i(e))});class w{constructor(e,t={},s={}){n(this,"container",null);n(this,"wrapper",null);n(this,"wrapperMain",null);n(this,"options",{});n(this,"requestOptions",{});n(this,"fileData",null);this.container=e,this.options=t,this.requestOptions=s,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-docx",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-docx-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,s)=>{r.getData(e,this.requestOptions).then(async o=>{this.fileData=await r.getBlob(o),r.render(this.fileData,this.wrapperMain,this.options).then(()=>{t()}).catch(a=>{r.render("",this.wrapperMain,this.options),s(a)})}).catch(o=>{r.render("",this.wrapperMain,this.options),s(o)})})}save(e){l(e||`js-preview-docx-${new Date().getTime()}.docx`,this.fileData)}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options=null,this.requestOptions=null}}function f(i,e,t){return new w(i,e,t)}const v={init:f};const q={__name:"JsDocxDemo",setup(i){const e=h(null);return d(()=>{let t=v.init(e.value);t.preview("/vue-office/examples/dist/static/test-files/test.docx").then(s=>{console.log("docx preview done"),setTimeout(()=>{t.preview("/vue-office/examples/dist/static/test-files/test2.docx")},3e3)}).catch(s=>{console.log("err",s)})}),(t,s)=>(u(),m("div",{ref_key:"dom",ref:e},null,512))}};export{q as default}; diff --git a/examples/dist/assets/JsExcelDemo-ea62349d.js b/examples/dist/assets/JsExcelDemo-ea62349d.js new file mode 100644 index 0000000..bc15406 --- /dev/null +++ b/examples/dist/assets/JsExcelDemo-ea62349d.js @@ -0,0 +1 @@ +var c=Object.defineProperty;var p=(o,e,t)=>e in o?c(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var s=(o,e,t)=>(p(o,typeof e!="symbol"?e+"":e,t),t);import{S as u,a as h,b as d,t as w,c as l,l as f,r as m,g as x}from"./hack-77e78dc2.js";import{d as b}from"./url-de9b02cf.js";/* empty css */import{r as D,o as k,a as v,c as S}from"./index-bf0149c5.js";import"./_commonjs-dynamic-modules-302442b1.js";const _={xls:!1,minColLength:20};class E{constructor(e,t={},r={}){s(this,"container",null);s(this,"wrapper",null);s(this,"wrapperMain",null);s(this,"options",{});s(this,"requestOptions",{});s(this,"mediasSource",[]);s(this,"workbookDataSource",{_worksheets:[]});s(this,"sheetIndex",1);s(this,"ctx",null);s(this,"xs",null);s(this,"offset",null);s(this,"observer",null);s(this,"fileData",null);this.container=e,this.options={..._,...t},this.requestOptions=r,this.createWrapper(),this.initSpreadsheet(),this.hack()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-excel",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-excel-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}initSpreadsheet(){this.xs=new u(this.wrapperMain,{mode:"read",showToolbar:!1,showContextmenu:this.options.showContextmenu||!1,view:{height:()=>this.wrapper&&this.wrapper.clientHeight||300,width:()=>this.wrapper&&this.wrapper.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let e=this,t=this.xs.bottombar.swapFunc;this.xs.bottombar.swapFunc=function(a){t.call(e.xs.bottombar,a),e.sheetIndex=a,setTimeout(()=>{e.xs.reRender(),h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let r=this.xs.sheet.editor.clear;this.xs.sheet.editor.clear=function(...a){r.apply(e.xs.sheet.editor,a),setTimeout(()=>{h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let i=this.xs.sheet.editor.setOffset;this.xs.sheet.editor.setOffset=function(...a){i.apply(e.xs.sheet.editor,a),e.offset=a[0],h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)};const n=this.wrapperMain.querySelector("canvas");this.ctx=n.getContext("2d")}renderExcel(e){return this.fileData=e,d(e,this.options.xls).then(t=>{if(!t._worksheets||t._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");this.options.beforeTransformData&&typeof this.options.beforeTransformData=="function"&&(t=this.options.beforeTransformData(t));let{workbookData:r,medias:i,workbookSource:n}=w(t,this.options);this.options.transformData&&typeof this.options.transformData=="function"&&(r=this.options.transformData(r)),this.mediasSource=i,this.workbookDataSource=n,this.offset=null,this.sheetIndex=0,l(),this.xs.loadData(r),h(this.ctx,this.mediasSource,this.workbookDataSource._worksheets[this.sheetIndex],this.offset)}).catch(t=>(this.mediasSource=[],this.workbookDataSource={_worksheets:[]},l(),this.xs.loadData({}),Promise.reject(t)))}hack(){const e=f.debounce(m,200).bind(this,this.wrapperMain);this.observer=new MutationObserver(e);const t={attributes:!0,childList:!0,subtree:!0};this.observer.observe(this.wrapperMain,t),e(this.wrapperMain)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,r)=>{x(e,this.requestOptions).then(i=>{this.renderExcel(i).then(t).catch(n=>{this.mediasSource=[],this.workbookDataSource={_worksheets:[]},this.xs.loadData({}),r(n)})}).catch(i=>{this.mediasSource=[],this.workbookDataSource={_worksheets:[]},this.xs.loadData({}),r(i)})})}save(e){b(e||`js-preview-excel-${new Date().getTime()}.xlsx`,this.fileData)}destroy(){this.observer.disconnect(),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.ctx=null,this.xs=null,this.observer=null,this.options=null,this.requestOptions=null,this.mediasSource=null,this.workbookDataSource=null}}function g(o,e,t){return new E(o,e,t)}const O={init:g},P={__name:"JsExcelDemo",setup(o){const e=D(null);return k(()=>{window.myExcelPreview=O.init(e.value,{transformData:function(t){return console.log("transformData",t),t}}),window.myExcelPreview.preview("/vue-office/examples/dist/static/test-files/test.xlsx").then(t=>{console.log("excel preview done",window.myExcelPreview)}).catch(t=>{console.log("err",t)})}),(t,r)=>(v(),S("div",{ref_key:"dom",ref:e,style:{height:"calc(100vh - 50px)"}},null,512))}};export{P as default}; diff --git a/examples/dist/assets/JsPdfDemo-751f66ab.js b/examples/dist/assets/JsPdfDemo-751f66ab.js new file mode 100644 index 0000000..a5b834c --- /dev/null +++ b/examples/dist/assets/JsPdfDemo-751f66ab.js @@ -0,0 +1 @@ +var h=Object.defineProperty;var s=(Y,Z,l)=>Z in Y?h(Y,Z,{enumerable:!0,configurable:!0,writable:!0,value:l}):Y[Z]=l;var i=(Y,Z,l)=>(s(Y,typeof Z!="symbol"?Z+"":Z,l),l);import{l as u,g as p,d as J}from"./url-de9b02cf.js";import{_ as S,o as R}from"./function-411940b9.js";/* empty css */import{r as N,o as x,a as K,c as M}from"./index-bf0149c5.js";const a="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgd29ya2VyLmpzLkxJQ0VOU0UudHh0ICovCnZhciBlLHQ7ZT1nbG9iYWxUaGlzLHQ9KCk9PigoKT0+e3ZhciBlPVssKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTM3KSxzPXIoMjAwKSxjPXIoMTk0KSx1PXIoNCksbD1yKDIzMSksZj1yKDIzMik7ZnVuY3Rpb24gaCgpe2g9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTtjKHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoUChbXSkpKTttJiZtIT09dCYmci5jYWxsKG0saSkmJih2PW0pO3ZhciB3PWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YihmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxuKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPWMoZyxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB5KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGcoZSx0KXx8cCgpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHYoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT92KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24geShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxiKGUpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1iKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3codGhpcyxlKSx0aGlzLm5hbWU9dCx0aGlzLnRlcm1pbmF0ZWQ9ITEsdGhpcy5fY2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImZpbmlzaGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmluaXNoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGVybWluYXRlZD0hMH19LHtrZXk6ImVuc3VyZU5vdFRlcm1pbmF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19XSksZX0oKTt0LldvcmtlclRhc2s9eDt2YXIgTyxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3codGhpcyxlKX1yZXR1cm4gUyhlLG51bGwsW3trZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPSExO3Qub24oInRlc3QiLChmdW5jdGlvbihlKXthfHwoYT0hMCx0LnNlbmQoInRlc3QiLGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksdC5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLHQub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVEb2N1bWVudEhhbmRsZXIodCxyKX0pKX19LHtrZXk6ImNyZWF0ZURvY3VtZW50SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcix2PSExLGI9bnVsbCx3PVtdLGs9KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSxTPWUsTz1TLmRvY0lkLEE9Uy5hcGlWZXJzaW9uLEM9IjMuMi4wIjtpZihBIT09Qyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBUEkgdmVyc2lvbiAiJy5jb25jYXQoQSwnIiBkb2VzIG5vdCBtYXRjaCAnKSsndGhlIFdvcmtlciB2ZXJzaW9uICInLmNvbmNhdChDLCciLicpKTt2YXIgRj1bXTtmb3IodmFyIFAgaW5bXSlGLnB1c2goUCk7aWYoRi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIrRi5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtKXt2YXIgVD0iVGhlIGJyb3dzZXIvZW52aXJvbm1lbnQgbGFja3MgbmF0aXZlIHN1cHBvcnQgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgUERGLmpzIGxpYnJhcnkgKGUuZy4gYFJlYWRhYmxlU3RyZWFtYCk7ICI7aWYodS5pc05vZGVKUyl0aHJvdyBuZXcgRXJyb3IoVCsicGxlYXNlIHVzZSBhIGBsZWdhY3lgLWJ1aWxkIGluc3RlYWQuIik7dGhyb3cgbmV3IEVycm9yKFQrInBsZWFzZSB1cGRhdGUgdG8gYSBzdXBwb3J0ZWQgYnJvd3Nlci4iKX12YXIgST1PKyJfd29ya2VyIixFPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKEksTyx0KTtmdW5jdGlvbiBqKCl7aWYodil0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIE0oZSl7dy5wdXNoKGUpfWZ1bmN0aW9uIF8oZSl7ZS5maW5pc2goKTt2YXIgdD13LmluZGV4T2YoZSk7dy5zcGxpY2UodCwxKX1mdW5jdGlvbiBMKGUpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7dmFyIGU7cmV0dXJuIGU9aCgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG4sYSxpLG8scyxjLHU7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW3RdKTtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCxyLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW3RdKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIsci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2Nhc2UgMTI6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xODticmVha31yZXR1cm4gTShhPW5ldyB4KCJsb2FkWGZhRm9udHMiKSksZS5uZXh0PTE4LFByb21pc2UuYWxsKFtyLmxvYWRYZmFGb250cyhFLGEpLmNhdGNoKChmdW5jdGlvbihlKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gXyhhKX0pKSxyLmxvYWRYZmFJbWFnZXMoKV0pO2Nhc2UgMTg6cmV0dXJuIGUubmV4dD0yMCxQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoIm51bVBhZ2VzIiksci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7Y2FzZSAyMDppZihpPWUuc2VudCxvPWQoaSwyKSxzPW9bMF0sYz1vWzFdLCFuKXtlLm5leHQ9MzA7YnJlYWt9cmV0dXJuIGUubmV4dD0yNyxyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpO2Nhc2UgMjc6ZS50MD1lLnNlbnQsZS5uZXh0PTMxO2JyZWFrO2Nhc2UgMzA6ZS50MD1udWxsO2Nhc2UgMzE6cmV0dXJuIHU9ZS50MCxlLmFicnVwdCgicmV0dXJuIix7bnVtUGFnZXM6cyxmaW5nZXJwcmludHM6YyxodG1sRm9yWGZhOnV9KTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksUj1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gRS5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmUoZSwicm90YXRlIiksci5lbnN1cmUoZSwicmVmIiksci5lbnN1cmUoZSwidXNlclVuaXQiKSxyLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1kKGUsNCk7cmV0dXJue3JvdGF0ZTp0WzBdLHJlZjp0WzFdLHVzZXJVbml0OnRbMl0sdmlldzp0WzNdfX0pKX0pKX0pKSxFLm9uKCJHZXRQYWdlSW5kZXgiLChmdW5jdGlvbihlKXt2YXIgdD1hLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLEUub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksRS5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxFLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksRS5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLEUub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksRS5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLEUub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksRS5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksRS5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4O3JldHVybiByLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpLEUub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKSxFLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKSxFLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSksRS5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxyLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKSxFLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSksRS5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKSxFLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiR2V0QW5ub3RhdGlvbnM6IHBhZ2UgIi5jb25jYXQodCkpO3JldHVybiBNKHIpLGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEUscixuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gXyhyKSxlfSksKGZ1bmN0aW9uKGUpe18ocil9KSl9KSl9KSksRS5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKSxFLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpLEUub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKSxFLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbihlKXt2YXIgdD1lLmlzUHVyZVhmYSxvPWUubnVtUGFnZXMscz1lLmFubm90YXRpb25TdG9yYWdlLHU9ZS5maWxlbmFtZSxsPVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJ4cmVmIiksci5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxmPXQ/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihmKXt2YXIgaCx2PWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1nKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZik7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIGU9ZChoLnZhbHVlLDIpLHQ9ZVswXSxuPWVbMV07bC5wdXNoKHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiU2F2ZSAoZWRpdG9yKTogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGUuc2F2ZU5ld0Fubm90YXRpb25zKEUscixuKS5maW5hbGx5KChmdW5jdGlvbigpe18ocil9KSl9KSkpfTtmb3Iodi5zKCk7IShoPXYubigpKS5kb25lOyltKCl9Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9fWlmKHQpbC5wdXNoKHIuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IodmFyIGI9ZnVuY3Rpb24oZSl7bC5wdXNoKHIuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1uZXcgeCgiU2F2ZTogcGFnZSAiLmNvbmNhdChlKSk7cmV0dXJuIHQuc2F2ZShFLHIscykuZmluYWxseSgoZnVuY3Rpb24oKXtfKHIpfSkpfSkpKX0sdz0wO3c8bzt3KyspYih3KTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHIsaT15KHI9ZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fGcocil8fHAoKSxvPWlbMF0scz1pWzFdLGw9aVsyXSxmPWlbM10saD1pWzRdLGQ9aS5zbGljZSg1KSx2PVtdLG09bnVsbDtpZih0KXtpZighKG09ZFswXSkpcmV0dXJuIG8uYnl0ZXN9ZWxzZSBpZigwPT09KHY9ZC5mbGF0KDIpKS5sZW5ndGgpcmV0dXJuIG8uYnl0ZXM7dmFyIGI9bCYmcyBpbnN0YW5jZW9mIGEuRGljdCYmdi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWVkQXBwZWFyYW5jZXN9KSksdz1zIGluc3RhbmNlb2YgYS5EaWN0JiZzLmdldCgiWEZBIil8fG51bGwsaz1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheSh3KSl7Zm9yKHZhciB4PTAsTz13Lmxlbmd0aDt4PE87eCs9MikiZGF0YXNldHMiPT09d1t4XSYmKGs9d1t4KzFdLFM9ITApO251bGw9PT1rJiYoaz1mLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIHcmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO3ZhciBBPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZi50cmFpbGVyKXt2YXIgQz1PYmplY3QuY3JlYXRlKG51bGwpLEY9Zi50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO0YgaW5zdGFuY2VvZiBhLkRpY3QmJkYuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJihDW2VdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpKX0pKSxBPXtyb290UmVmOmYudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmYudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zi5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmYudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOkMsZmlsZUlkczpmLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpoLGZpbGVuYW1lOnV9fXRyeXtyZXR1cm4oMCxjLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOm8uYnl0ZXMseHJlZkluZm86QSxuZXdSZWZzOnYseHJlZjpmLGhhc1hmYTohIXcseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OlMsbmVlZEFwcGVhcmFuY2VzOmIsYWNyb0Zvcm1SZWY6bCxhY3JvRm9ybTpzLHhmYURhdGE6bX0pfWZpbmFsbHl7Zi5yZXNldE5ld1RlbXBvcmFyeVJlZigpfX0pKX0pKSxFLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe3ZhciBhPWUucGFnZUluZGV4O3IuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgeCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtNKGkpO3ZhciBvPWs+PW4uVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSIpKyIiLmNvbmNhdChEYXRlLm5vdygpLW8sIm1zLCBsZW49IikuY29uY2F0KGUubGVuZ3RoKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9bmV3IHgoIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7TShpKTt2YXIgbz1rPj1uLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDtyLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjpFLHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrIiIuY29uY2F0KERhdGUubm93KCktbywibXMiKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLEUub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLEUpfSkpLEUub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxFLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXt2PSEwO3ZhciB0PVtdO2lmKHIpe3IudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3ZhciBhPXIuY2xlYW51cCgpO3QucHVzaChhKSxyPW51bGx9ZWxzZSgwLHMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7YiYmYihuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IodmFyIGk9MCxvPXc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07dC5wdXNoKGMuZmluaXNoZWQpLGMudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7RS5kZXN0cm95KCksRT1udWxsfSkpfSkpLEUub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aigpLEUuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gYShlKXtpZihqKCksZSBpbnN0YW5jZW9mIG4uUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyB4KCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIi5jb25jYXQoZS5jb2RlKSk7TSh0KSxFLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1lLnBhc3N3b3JkO18odCksci51cGRhdGVQYXNzd29yZChuKSxzKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7Xyh0KSxFLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygbi5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVua25vd25FcnJvckV4Y2VwdGlvbj9FLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6RS5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBuLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcygpe2ooKSxMKCExKS50aGVuKHQsKGZ1bmN0aW9uKGUpe2ooKSxlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/ci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtqKCksTCghMCkudGhlbih0LGEpfSkpOmEoZSl9KSl9aigpLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5kYXRhLGE9ZS5wYXNzd29yZCxpPWUuZGlzYWJsZUF1dG9GZXRjaCxzPWUucmFuZ2VDaHVua1NpemUsYz1lLmxlbmd0aCx1PWUuZG9jQmFzZVVybCxsPWUuZW5hYmxlWGZhLGg9ZS5ldmFsdWF0b3JPcHRpb25zLGQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtpZihyKXt0cnl7dD1uZXcgby5Mb2NhbFBkZk1hbmFnZXIoTyxyLGEsRSxoLGwsdSksZC5yZXNvbHZlKHQpfWNhdGNoKGUpe2QucmVqZWN0KGUpfXJldHVybiBkLnByb21pc2V9dmFyIHAsZz1bXTt0cnl7cD1uZXcgZi5QREZXb3JrZXJTdHJlYW0oRSl9Y2F0Y2goZSl7cmV0dXJuIGQucmVqZWN0KGUpLGQucHJvbWlzZX12YXIgdj1wLmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7aT1pfHx2LmlzU3RyZWFtaW5nU3VwcG9ydGVkLHQ9bmV3IG8uTmV0d29ya1BkZk1hbmFnZXIoTyxwLHttc2dIYW5kbGVyOkUscGFzc3dvcmQ6YSxsZW5ndGg6di5jb250ZW50TGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpzfSxoLGwsdSk7Zm9yKHZhciBlPTAscj1nO2U8ci5sZW5ndGg7ZSsrKXt2YXIgbj1yW2VdO3Quc2VuZFByb2dyZXNzaXZlRGF0YShuKX1nPVtdLGQucmVzb2x2ZSh0KSxiPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtkLnJlamVjdChlKSxiPW51bGx9KSk7dmFyIHk9MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7di5yZWFkKCkudGhlbigoZnVuY3Rpb24gZShpKXt2YXIgcz1pLnZhbHVlLGY9aS5kb25lO3RyeXtpZihqKCksZilyZXR1cm4gdHx8ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmFycmF5c1RvQnl0ZXMpKGcpO2MmJmUubGVuZ3RoIT09YyYmKDAsbi53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e3Q9bmV3IG8uTG9jYWxQZGZNYW5hZ2VyKE8sZSxhLEUsaCxsLHUpLGQucmVzb2x2ZSh0KX1jYXRjaChlKXtkLnJlamVjdChlKX1nPVtdfSgpLHZvaWQoYj1udWxsKTt5Kz0oMCxuLmFycmF5Qnl0ZUxlbmd0aCkocyksdi5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8RS5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp5LHRvdGFsOk1hdGgubWF4KHksdi5jb250ZW50TGVuZ3RofHwwKX0pLHQ/dC5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHMpOmcucHVzaChzKSx2LnJlYWQoKS50aGVuKGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ZC5yZWplY3QoZSksYj1udWxsfSkpLGI9ZnVuY3Rpb24oZSl7cC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX0sZC5wcm9taXNlfShlKS50aGVuKChmdW5jdGlvbihlKXtpZih2KXRocm93IGUudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpLG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7KHI9ZSkucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZnVuY3Rpb24oZSl7RS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocyxhKX0oZSksZT1udWxsfSkpLEl9fSx7a2V5OiJpbml0aWFsaXplRnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIix0KTtlLnNldHVwKHIsdCksci5zZW5kKCJyZWFkeSIsbnVsbCl9fV0pLGV9KCk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1BLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhdS5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YoTz1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBPJiZBLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGkoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGkoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW8oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1vKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09byhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQoZSk7aWYodCl7dmFyIGE9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1vKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMCx0LmFycmF5Qnl0ZUxlbmd0aD1QLHQuYXJyYXlzVG9CeXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtmb3IodmFyIHI9MCxuPTA7bjx0O24rKylyKz1QKGVbbl0pO2Zvcih2YXIgYT0wLGk9bmV3IFVpbnQ4QXJyYXkociksbz0wO288dDtvKyspe3ZhciBzPWVbb107cyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChzPSJzdHJpbmciPT10eXBlb2Ygcz9GKHMpOm5ldyBVaW50OEFycmF5KHMpKTt2YXIgYz1zLmJ5dGVMZW5ndGg7aS5zZXQocyxhKSxhKz1jfXJldHVybiBpfSx0LmFzc2VydD1mdW5jdGlvbihlLHQpe2V8fHkodCl9LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXsib2JqZWN0Ij09PW8oZSkmJm51bGwhPT1lJiZ2b2lkIDAhPT1lLmxlbmd0aHx8eSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO3ZhciB0PWUubGVuZ3RoLHI9ODE5MjtpZih0PHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIG49W10sYT0wO2E8dDthKz1yKXt2YXIgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9LHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9ITE7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR0bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSksZS5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UucmVzb2x2ZT1mdW5jdGlvbihlKXt0PSEwLHIoZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3Q9ITAsbihlKX19KSksZX0sdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXt2YXIgbj1lLm1hdGNoKC9cLi9nKTtuJiZuLmxlbmd0aD49MiYmKGU9Imh0dHA6Ly8iLmNvbmNhdChlKSl9aWYoci50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9TShlKX1jYXRjaChlKXt9fXZhciBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBnfSx0LmluZm89ZnVuY3Rpb24oZSl7Zz49cC5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09byhlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWEoZSkpKXtyJiYoZT1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxzPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBzPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBvfX19fShlKTt0cnl7Zm9yKGkucygpOyEodD1pLm4oKSkuZG9uZTspe3ZhciBvPShyPXQudmFsdWUsMixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHIpfHxhKHIsMil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkscz1vWzBdLGM9b1sxXTtuW3NdPWN9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBufSx0Lm9iamVjdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH0sdC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoZz1lKX0sdC5zaGFkb3c9bSx0LnN0cmluZzMyPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSx0LnN0cmluZ1RvQnl0ZXM9Rix0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGVbMF0+PSLDryImJigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCkpdHJ5e3ZhciByPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLG49RihlKTtyZXR1cm4gci5kZWNvZGUobil9Y2F0Y2goZSl7dignc3RyaW5nVG9QREZTdHJpbmc6ICInLmNvbmNhdChlLCciLicpKX1mb3IodmFyIGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyl7dmFyIHM9altlLmNoYXJDb2RlQXQoaSldO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiBhLmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGOFN0cmluZz1NLHQudW5yZWFjaGFibGU9eSx0LnV0ZjhTdHJpbmdUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sdC53YXJuPXYsZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZHx8KGdsb2JhbFRoaXMuX3BkZmpzQ29tcGF0aWJpbGl0eUNoZWNrZWQ9ITAscigzKSksdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9LHQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn0sdC5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifSx0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifSx0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfSx0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9LHQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX0sdC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSx0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx0LlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifSx0LkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O3ZhciBwPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9cCx0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX0sdC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX0sdC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07dmFyIGc9cC5XQVJOSU5HUztmdW5jdGlvbiB2KGUpe2c+PXAuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24geShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWUmJnkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIiksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPXJ9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LkJhc2VFeGNlcHRpb249Yjt2YXIgdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJQYXNzd29yZEV4Y2VwdGlvbiIpKS5jb2RlPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5QYXNzd29yZEV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpKS5kZXRhaWxzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249azt2YXIgUz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0LkludmFsaWRQREZFeGNlcHRpb249Uzt2YXIgeD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0Lk1pc3NpbmdQREZFeGNlcHRpb249eDt2YXIgTz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKSkuc3RhdHVzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Tzt2YXIgQT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRm9ybWF0RXJyb3IiKX1yZXR1cm4gYyhyKX0oYik7dC5Gb3JtYXRFcnJvcj1BO3ZhciBDPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJBYm9ydEV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTtmdW5jdGlvbiBGKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmeSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09MjU1JmUuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBQKGUpe3JldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9lLmxlbmd0aDp2b2lkIDAhPT1lLmJ5dGVMZW5ndGg/ZS5ieXRlTGVuZ3RoOnZvaWQgeSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9dC5BYm9ydEV4Y2VwdGlvbj1DO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6ImlzTGl0dGxlRW5kaWFuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsKChlPW5ldyBVaW50OEFycmF5KDQpKVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXSkpO3ZhciBlfX0se2tleToiaXNFdmFsU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9fSx7a2V5OiJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX19LHtrZXk6InBsYXRmb3JtIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9tKHRoaXMsInBsYXRmb3JtIix7aXNXaW46ITEsaXNNYWM6ITF9KTptKHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9fV0pLGV9KCk7dC5GZWF0dXJlVGVzdD1UO3ZhciBJPW4oQXJyYXkoMjU2KS5rZXlzKCkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0pKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6Im1ha2VIZXhDb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiIjIi5jb25jYXQoSVtlXSkuY29uY2F0KElbdF0pLmNvbmNhdChJW3JdKX19LHtrZXk6InNjYWxlTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO2VbMF0/KGVbMF08MCYmKHI9dFswXSx0WzBdPXRbMV0sdFsxXT1yKSx0WzBdKj1lWzBdLHRbMV0qPWVbMF0sZVszXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbM10sdFszXSo9ZVszXSk6KHI9dFswXSx0WzBdPXRbMl0sdFsyXT1yLHI9dFsxXSx0WzFdPXRbM10sdFszXT1yLGVbMV08MCYmKHI9dFsyXSx0WzJdPXRbM10sdFszXT1yKSx0WzJdKj1lWzFdLHRbM10qPWVbMV0sZVsyXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMl0sdFsxXSo9ZVsyXSksdFswXSs9ZVs0XSx0WzFdKz1lWzRdLHRbMl0rPWVbNV0sdFszXSs9ZVs1XX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX19LHtrZXk6ImFwcGx5VHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX19LHtrZXk6ImFwcGx5SW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX19LHtrZXk6ImdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX19LHtrZXk6ImludmVyc2VUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX19LHtrZXk6InNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydChNYXRoLnBvdyhyK2ksMiktNCoocippLWEqbikpLzIsYz1vK3N8fDEsdT1vLXN8fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQodSldfX0se2tleToibm9ybWFsaXplUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH19LHtrZXk6ImludGVyc2VjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7dmFyIGE9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIGE+aT9udWxsOltyLGEsbixpXX19LHtrZXk6ImJlemllckJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzLGMpe2Zvcih2YXIgdSxsLGYsaCxkLHAsZyx2LHk9W10sbT1bW10sW11dLGI9MDtiPDI7KytiKWlmKDA9PT1iPyhsPTYqZS0xMipyKzYqaSx1PS0zKmUrOSpyLTkqaSszKnMsZj0zKnItMyplKToobD02KnQtMTIqYSs2Km8sdT0tMyp0KzkqYS05Km8rMypjLGY9MyphLTMqdCksTWF0aC5hYnModSk8MWUtMTIpe2lmKE1hdGguYWJzKGwpPDFlLTEyKWNvbnRpbnVlOzA8KGg9LWYvbCkmJmg8MSYmeS5wdXNoKGgpfWVsc2UgZz1sKmwtNCpmKnUsdj1NYXRoLnNxcnQoZyksZzwwfHwoMDwoZD0oLWwrdikvKDIqdSkpJiZkPDEmJnkucHVzaChkKSwwPChwPSgtbC12KS8oMip1KSkmJnA8MSYmeS5wdXNoKHApKTtmb3IodmFyIHcsaz15Lmxlbmd0aCxTPWs7ay0tOyl3PTEtKGg9eVtrXSksbVswXVtrXT13KncqdyplKzMqdyp3KmgqciszKncqaCpoKmkraCpoKmgqcyxtWzFdW2tdPXcqdyp3KnQrMyp3KncqaCphKzMqdypoKmgqbytoKmgqaCpjO3JldHVybiBtWzBdW1NdPWUsbVsxXVtTXT10LG1bMF1bUysxXT1zLG1bMV1bUysxXT1jLG1bMF0ubGVuZ3RoPW1bMV0ubGVuZ3RoPVMrMixbTWF0aC5taW4uYXBwbHkoTWF0aCxuKG1bMF0pKSxNYXRoLm1pbi5hcHBseShNYXRoLG4obVsxXSkpLE1hdGgubWF4LmFwcGx5KE1hdGgsbihtWzBdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKG1bMV0pKV19fV0pLGV9KCk7dC5VdGlsPUU7dmFyIGo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCk7IWdsb2JhbFRoaXMuYnRvYSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYnRvYT1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWdsb2JhbFRoaXMuYXRvYiYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYXRvYj1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSksIWdsb2JhbFRoaXMuRE9NTWF0cml4JiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5ET01NYXRyaXg9cmVxdWlyZSgiY2FudmFzIikuRE9NTWF0cml4KSwhZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW09cmVxdWlyZSgid2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb255ZmlsbC5qcyIpLlJlYWRhYmxlU3RyZWFtKSxBcnJheS5wcm90b3R5cGUuYXR8fHIoNSksVWludDhBcnJheS5wcm90b3R5cGUuYXR8fHIoNzkpLGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lfHxyKDg5KX0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzTm9kZUpTPXZvaWQgMDt2YXIgbj0hKCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgcHJvY2Vzcz8idW5kZWZpbmVkIjpyKHByb2Nlc3MpKXx8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1ufSwoZSx0LHIpPT57cig2KTt2YXIgbj1yKDc4KTtlLmV4cG9ydHM9bigiQXJyYXkiLCJhdCIpfSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoNDQpLGk9cig2OCksbz1yKDY2KSxzPXIoNzMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1vKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfX0pLHMoImF0Iil9LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig5KS5mLGk9cig0OCksbz1yKDUyKSxzPXIoNDIpLGM9cig2MCksdT1yKDcyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixsLGYsaCxkLHA9ZS50YXJnZXQsZz1lLmdsb2JhbCx2PWUuc3RhdDtpZihyPWc/bjp2P25bcF18fHMocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gdCl7aWYoaD10W2xdLGY9ZS5kb250Q2FsbEdldFNldD8oZD1hKHIsbCkpJiZkLnZhbHVlOnJbbF0sIXUoZz9sOnArKHY/Ii4iOiIjIikrbCxlLmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBoPT10eXBlb2YgZiljb250aW51ZTtjKGgsZil9KGUuc2hhbXx8ZiYmZi5zaGFtKSYmaShoLCJzaGFtIiwhMCksbyhyLGwsaCxlKX19fSxlPT57dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDEyKSxpPXIoMTQpLG89cigxNSkscz1yKDE2KSxjPXIoMjIpLHU9cig0MyksbD1yKDQ2KSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/ZjpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWModCksbCl0cnl7cmV0dXJuIGYoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBvKCFhKGkuZixlLHQpLGVbdF0pfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSwoZSx0LHIpPT57dmFyIG49cigxMSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTcpLGE9cigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigxMSksaT1yKDE5KSxvPU9iamVjdCxzPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFvKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/cyhlLCIiKTpvKGUpfTpvfSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwsbz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPW4oe30udG9TdHJpbmcpLGk9bigiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGEoZSksOCwtMSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwoZSx0LHIpPT57dmFyIG49cigyMyksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLCJzdHJpbmciKTtyZXR1cm4gYSh0KT90OnQrIiJ9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMjcpLG89cigzNCkscz1yKDM3KSxjPXIoMzgpLHU9VHlwZUVycm9yLGw9YygidG9QcmltaXRpdmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighYShlKXx8aShlKSlyZXR1cm4gZTt2YXIgcixjPW8oZSxsKTtpZihjKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLHI9bihjLGUsdCksIWEocil8fGkocikpcmV0dXJuIHI7dGhyb3cgdSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PSJudW1iZXIiKSxzKGUsdCl9fSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1yKDI2KSxpPWEuYWxsO2UuZXhwb3J0cz1hLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl8fGU9PT1pfTpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LChlLHQscik9Pnt2YXIgbj1yKDI2KSxhPW4uYWxsO2UuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LGU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwscj12b2lkIDA9PT10JiZ2b2lkIDAhPT10O2UuZXhwb3J0cz17YWxsOnQsSVNfSFRNTEREQTpyfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjgpLGE9cigyNSksaT1yKDI5KSxvPXIoMzApLHM9T2JqZWN0O2UuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9bigiU3ltYm9sIik7cmV0dXJuIGEodCkmJmkodC5wcm90b3R5cGUscyhlKSl9fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KHI9bltlXSxhKHIpP3I6dm9pZCAwKTpuW2VdJiZuW2VdW3RdO3ZhciByfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1uKHt9LmlzUHJvdG90eXBlT2YpfSwoZSx0LHIpPT57dmFyIG49cigzMSk7ZS5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPXIoMTEpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig4KSxvPXIoMzMpLHM9aS5wcm9jZXNzLGM9aS5EZW5vLHU9cyYmcy52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGw9dSYmdS52ODtsJiYoYT0obj1sLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJm8mJighKG49by5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49by5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSwoZSx0LHIpPT57dmFyIG49cigyOCk7ZS5leHBvcnRzPW4oIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sKGUsdCxyKT0+e3ZhciBuPXIoMzUpLGE9cigyMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMzYpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSxlPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigyNSksaT1yKDI0KSxvPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzO2lmKCJzdHJpbmciPT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShzPW4ocixlKSkpcmV0dXJuIHM7aWYoYShyPWUudmFsdWVPZikmJiFpKHM9bihyLGUpKSlyZXR1cm4gcztpZigic3RyaW5nIiE9PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkocz1uKHIsZSkpKXJldHVybiBzO3Rocm93IG8oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDM5KSxpPXIoNDMpLG89cig0NSkscz1yKDMxKSxjPXIoMzApLHU9YSgid2tzIiksbD1uLlN5bWJvbCxmPWwmJmwuZm9yLGg9Yz9sOmwmJmwud2l0aG91dFNldHRlcnx8bztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkodSxlKXx8IXMmJiJzdHJpbmciIT10eXBlb2YgdVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7cyYmaShsLGUpP3VbZV09bFtlXTp1W2VdPWMmJmY/Zih0KTpoKHQpfXJldHVybiB1W2VdfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDApLGE9cig0MSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4yNi4xIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIyIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjI2LjEvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sZT0+e2UuZXhwb3J0cz0hMX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDQyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLG89bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9b30sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2EobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoNDQpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDIwKSxhPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEobihlKSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT0wLGk9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitvKCsrYStpLDM2KX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpLGk9cig0Nyk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI0KSxpPW4uZG9jdW1lbnQsbz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDkpLGk9cigxNSk7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmYoZSx0LGkoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDQ2KSxpPXIoNTApLG89cig1MSkscz1yKDIyKSxjPVR5cGVFcnJvcix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj0iZW51bWVyYWJsZSIsaD0iY29uZmlndXJhYmxlIixkPSJ3cml0YWJsZSI7dC5mPW4/aT9mdW5jdGlvbihlLHQscil7aWYobyhlKSx0PXModCksbyhyKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gciYmZCBpbiByJiYhcltkXSl7dmFyIG49bChlLHQpO24mJm5bZF0mJihlW3RdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOmggaW4gcj9yW2hdOm5baF0sZW51bWVyYWJsZTpmIGluIHI/cltmXTpuW2ZdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHUoZSx0LHIpfTp1OmZ1bmN0aW9uKGUsdCxyKXtpZihvKGUpLHQ9cyh0KSxvKHIpLGEpdHJ5e3JldHVybiB1KGUsdCxyKX1jYXRjaChlKXt9aWYoImdldCJpbiByfHwic2V0ImluIHIpdGhyb3cgYygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKGVbdF09ci52YWx1ZSksZX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpO2UuZXhwb3J0cz1uJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoNDkpLGk9cig1Myksbz1yKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7c3x8KHM9e30pO3ZhciBjPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6dDtpZihuKHIpJiZpKHIsdSxzKSxzLmdsb2JhbCljP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7cy51bnNhZmU/ZVt0XSYmKGM9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31jP2VbdF09cjphLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigyNSksaT1yKDQzKSxvPXIoMTApLHM9cig1NCkuQ09ORklHVVJBQkxFLGM9cig1NSksdT1yKDU2KSxsPXUuZW5mb3JjZSxmPXUuZ2V0LGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1oKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHA9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLGc9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1TdHJpbmcodCkuc2xpY2UoMCw3KSYmKHQ9IlsiK1N0cmluZyh0KS5yZXBsYWNlKC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksciYmci5nZXR0ZXImJih0PSJnZXQgIit0KSxyJiZyLnNldHRlciYmKHQ9InNldCAiK3QpLCghaShlLCJuYW1lIil8fHMmJmUubmFtZSE9PXQpJiYobz9oKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSxkJiZyJiZpKHIsImFyaXR5IikmJmUubGVuZ3RoIT09ci5hcml0eSYmaChlLCJsZW5ndGgiLHt2YWx1ZTpyLmFyaXR5fSk7dHJ5e3ImJmkociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3Rvcj9vJiZoKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgbj1sKGUpO3JldHVybiBpKG4sInNvdXJjZSIpfHwobi5zb3VyY2U9cC5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSksZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWcoKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykmJmYodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDMpLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWEoaSwibmFtZSIpLGM9cyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSx1PXMmJighbnx8biYmbyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTp1fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigyNSksaT1yKDQxKSxvPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDU3KSxzPXIoOCksYz1yKDI0KSx1PXIoNDgpLGw9cig0MyksZj1yKDQxKSxoPXIoNTgpLGQ9cig1OSkscD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLGc9cy5UeXBlRXJyb3Isdj1zLldlYWtNYXA7aWYob3x8Zi5zdGF0ZSl7dmFyIHk9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IHYpO3kuZ2V0PXkuZ2V0LHkuaGFzPXkuaGFzLHkuc2V0PXkuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZih5LmhhcyhlKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHkuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4geS5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiB5LmhhcyhlKX19ZWxzZXt2YXIgbT1oKCJzdGF0ZSIpO2RbbV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGwoZSxtKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHUoZSxtLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IGcoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI1KSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoNDUpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig0MyksYT1yKDYxKSxpPXIoOSksbz1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgcz1hKHQpLGM9by5mLHU9aS5mLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGY9c1tsXTtuKGUsZil8fHImJm4ocixmKXx8YyhlLGYsdSh0LGYpKX19fSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDE4KSxpPXIoNjIpLG89cig3MSkscz1yKDUxKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKHMoZSkpLHI9by5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpLGE9cig3MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT1yKDQzKSxpPXIoMTYpLG89cig2NCkuaW5kZXhPZixzPXIoNTkpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksdT0wLGw9W107Zm9yKHIgaW4gbikhYShzLHIpJiZhKG4scikmJmMobCxyKTtmb3IoO3QubGVuZ3RoPnU7KWEobixyPXRbdSsrXSkmJih+byhsLHIpfHxjKGwscikpO3JldHVybiBsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9cig2NSksaT1yKDY4KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIHMsYz1uKHQpLHU9aShjKSxsPWEobyx1KTtpZihlJiZyIT1yKXtmb3IoO3U+bDspaWYoKHM9Y1tsKytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigoZXx8bCBpbiBjKSYmY1tsXT09PXIpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDExKSxhPXIoMjUpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPWNbcyhlKV07cmV0dXJuIHI9PWx8fHIhPXUmJihhKHQpP24odCk6ISF0KX0scz1vLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9by5kYXRhPXt9LHU9by5OQVRJVkU9Ik4iLGw9by5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPW99LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoNzQpLGk9cig0OSkuZixvPW4oInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7bnVsbD09c1tvXSYmaShzLG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Nbb11bZV09ITB9fSwoZSx0LHIpPT57dmFyIG4sYT1yKDUxKSxpPXIoNzUpLG89cig3MCkscz1yKDU5KSxjPXIoNzcpLHU9cig0NyksbD1yKDU4KSxmPSJwcm90b3R5cGUiLGg9InNjcmlwdCIsZD1sKCJJRV9QUk9UTyIpLHA9ZnVuY3Rpb24oKXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2grIj4iK2UrIjwvIitoKyI+In0sdj1mdW5jdGlvbihlKXtlLndyaXRlKGcoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0seT1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7eT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj92KG4pOih0PXUoImlmcmFtZSIpLHI9ImphdmEiK2grIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShnKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTp2KG4pO2Zvcih2YXIgYT1vLmxlbmd0aDthLS07KWRlbGV0ZSB5W2ZdW29bYV1dO3JldHVybiB5KCl9O3NbZF09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhwW2ZdPWEoZSkscj1uZXcgcCxwW2ZdPW51bGwscltkXT1lKTpyPXkoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDUwKSxpPXIoNDkpLG89cig1MSkscz1yKDE2KSxjPXIoNzYpO3QuZj1uJiYhYT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49cyh0KSxhPWModCksdT1hLmxlbmd0aCxsPTA7dT5sOylpLmYoZSxyPWFbbCsrXSxuW3JdKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDYzKSxhPXIoNzApO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LChlLHQscik9Pnt2YXIgbj1yKDI4KTtlLmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShuW2VdLnByb3RvdHlwZVt0XSl9fSwoZSx0LHIpPT57cig4MCl9LChlLHQscik9Pnt2YXIgbj1yKDgxKSxhPXIoNjgpLGk9cig2Niksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxyPWEodCksbj1pKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfSkpfSwoZSx0LHIpPT57dmFyIG4sYSxpLG89cig4Mikscz1yKDEwKSxjPXIoOCksdT1yKDI1KSxsPXIoMjQpLGY9cig0MyksaD1yKDgzKSxkPXIoMzYpLHA9cig0OCksZz1yKDUyKSx2PXIoNDkpLmYseT1yKDI5KSxtPXIoODUpLGI9cig4Nyksdz1yKDM4KSxrPXIoNDUpLFM9cig1NikseD1TLmVuZm9yY2UsTz1TLmdldCxBPWMuSW50OEFycmF5LEM9QSYmQS5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LFA9RiYmRi5wcm90b3R5cGUsVD1BJiZtKEEpLEk9QyYmbShDKSxFPU9iamVjdC5wcm90b3R5cGUsaj1jLlR5cGVFcnJvcixNPXcoInRvU3RyaW5nVGFnIiksXz1rKCJUWVBFRF9BUlJBWV9UQUciKSxMPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFI9byYmISFiJiYiT3BlcmEiIT09aChjLm9wZXJhKSxOPSExLEQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxCPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpO2lmKGwodCkpe3ZhciByPU8odCk7cmV0dXJuIHImJmYocixMKT9yW0xdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIGYoRCx0KXx8ZihCLHQpfTtmb3IobiBpbiBEKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/eChpKVtMXT1hOlI9ITE7Zm9yKG4gaW4gQikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoeChpKVtMXT1hKTtpZigoIVJ8fCF1KFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBqKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxSKSlmb3IobiBpbiBEKWNbbl0mJmIoY1tuXSxUKTtpZigoIVJ8fCFJfHxJPT09RSkmJihJPVQucHJvdG90eXBlLFIpKWZvcihuIGluIEQpY1tuXSYmYihjW25dLnByb3RvdHlwZSxJKTtpZihSJiZtKFApIT09SSYmYihQLEkpLHMmJiFmKEksTSkpZm9yKG4gaW4gTj0hMCx2KEksTSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tfXTp2b2lkIDB9fSksRCljW25dJiZwKGNbbl0sXyxuKTtlLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6UixUWVBFRF9BUlJBWV9UQUc6TiYmXyxhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZigkKGUpKXJldHVybiBlO3Rocm93IGooIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJighYnx8eShULGUpKSlyZXR1cm4gZTt0aHJvdyBqKGQoZSkrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKHMpe2lmKHIpZm9yKHZhciBhIGluIEQpe3ZhciBpPWNbYV07aWYoaSYmZihpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKHIpe3RyeXtpLnByb3RvdHlwZVtlXT10fWNhdGNoKGUpe319fUlbZV0mJiFyfHxnKEksZSxyP3Q6UiYmQ1tlXXx8dCxuKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7aWYocyl7aWYoYil7aWYocilmb3IobiBpbiBEKWlmKChhPWNbbl0pJiZmKGEsZSkpdHJ5e2RlbGV0ZSBhW2VdfWNhdGNoKGUpe31pZihUW2VdJiYhcilyZXR1cm47dHJ5e3JldHVybiBnKFQsZSxyP3Q6UiYmVFtlXXx8dCl9Y2F0Y2goZSl7fX1mb3IobiBpbiBEKSEoYT1jW25dKXx8YVtlXSYmIXJ8fGcoYSxlLHQpfX0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOlUsaXNWaWV3OmZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGYoRCx0KXx8ZihCLHQpfSxpc1R5cGVkQXJyYXk6JCxUeXBlZEFycmF5OlQsVHlwZWRBcnJheVByb3RvdHlwZTpJfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDI1KSxpPXIoMTkpLG89cigzOCkoInRvU3RyaW5nVGFnIikscz1PYmplY3QsYz0iQXJndW1lbnRzIj09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1zKGUpLG8pKT9yOmM/aSh0KToiT2JqZWN0Ij09KG49aSh0KSkmJmEodC5jYWxsZWUpPyJBcmd1bWVudHMiOm59fSwoZSx0LHIpPT57dmFyIG49e307bltyKDM4KSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobil9LChlLHQscik9Pnt2YXIgbj1yKDQzKSxhPXIoMjUpLGk9cig0NCksbz1yKDU4KSxzPXIoODYpLGM9bygiSUVfUFJPVE8iKSx1PU9iamVjdCxsPXUucHJvdG90eXBlO2UuZXhwb3J0cz1zP3UuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHU/bDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cig1MSksaT1yKDg4KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIithKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQscik9PntyKDkwKSxyKDk3KSxyKDk5KSxyKDEyMikscigxMjQpO3ZhciBuPXIoMTMzKTtlLmV4cG9ydHM9bi5zdHJ1Y3R1cmVkQ2xvbmV9LChlLHQscik9Pnt2YXIgbj1yKDE2KSxhPXIoNzMpLGk9cig5MSksbz1yKDU2KSxzPXIoNDkpLmYsYz1yKDkyKSx1PXIoOTYpLGw9cig0MCksZj1yKDEwKSxoPSJBcnJheSBJdGVyYXRvciIsZD1vLnNldCxwPW8uZ2V0dGVyRm9yKGgpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7ZCh0aGlzLHt0eXBlOmgsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx1KHZvaWQgMCwhMCkpOnUoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIGc9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFsJiZmJiYidmFsdWVzIiE9PWcubmFtZSl0cnl7cyhnLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTIpLGk9cig0MCksbz1yKDU0KSxzPXIoMjUpLGM9cig5MyksdT1yKDg1KSxsPXIoODcpLGY9cig5NSksaD1yKDQ4KSxkPXIoNTIpLHA9cigzOCksZz1yKDkxKSx2PXIoOTQpLHk9by5QUk9QRVIsbT1vLkNPTkZJR1VSQUJMRSxiPXYuSXRlcmF0b3JQcm90b3R5cGUsdz12LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsaz1wKCJpdGVyYXRvciIpLFM9ImtleXMiLHg9InZhbHVlcyIsTz0iZW50cmllcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLHYsQyl7YyhyLHQsbyk7dmFyIEYsUCxULEk9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJkwpcmV0dXJuIEw7aWYoIXcmJmUgaW4gTSlyZXR1cm4gTVtlXTtzd2l0Y2goZSl7Y2FzZSBTOmNhc2UgeDpjYXNlIE86cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LEU9dCsiIEl0ZXJhdG9yIixqPSExLE09ZS5wcm90b3R5cGUsXz1NW2tdfHxNWyJAQGl0ZXJhdG9yIl18fHAmJk1bcF0sTD0hdyYmX3x8SShwKSxSPSJBcnJheSI9PXQmJk0uZW50cmllc3x8XztpZihSJiYoRj11KFIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJkYubmV4dCYmKGl8fHUoRik9PT1ifHwobD9sKEYsYik6cyhGW2tdKXx8ZChGLGssQSkpLGYoRixFLCEwLCEwKSxpJiYoZ1tFXT1BKSkseSYmcD09eCYmXyYmXy5uYW1lIT09eCYmKCFpJiZtP2goTSwibmFtZSIseCk6KGo9ITAsTD1mdW5jdGlvbigpe3JldHVybiBhKF8sdGhpcyl9KSkscClpZihQPXt2YWx1ZXM6SSh4KSxrZXlzOnY/TDpJKFMpLGVudHJpZXM6SShPKX0sQylmb3IoVCBpbiBQKSh3fHxqfHwhKFQgaW4gTSkpJiZkKE0sVCxQW1RdKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp3fHxqfSxQKTtyZXR1cm4gaSYmIUN8fE1ba109PT1MfHxkKE0sayxMLHtuYW1lOnB9KSxnW3RdPUwsUH19LChlLHQscik9Pnt2YXIgbj1yKDk0KS5JdGVyYXRvclByb3RvdHlwZSxhPXIoNzQpLGk9cigxNSksbz1yKDk1KSxzPXIoOTEpLGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHUpe3ZhciBsPXQrIiBJdGVyYXRvciI7cmV0dXJuIGUucHJvdG90eXBlPWEobix7bmV4dDppKCshdSxyKX0pLG8oZSxsLCExLCEwKSxzW2xdPWMsZX19LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDExKSxzPXIoMjUpLGM9cigyNCksdT1yKDc0KSxsPXIoODUpLGY9cig1MiksaD1yKDM4KSxkPXIoNDApLHA9aCgiaXRlcmF0b3IiKSxnPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9bChsKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpnPSEwKSwhYyhuKXx8bygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltwXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmQmJihuPXUobikpLHMobltwXSl8fGYobixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmd9fSwoZSx0LHIpPT57dmFyIG49cig0OSkuZixhPXIoNDMpLGk9cigzOCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFhKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDUyKSxpPXIoOTgpO258fGEoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDgzKTtlLmV4cG9ydHM9bj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrYSh0aGlzKSsiXSJ9fSwoZSx0LHIpPT57cigxMDApfSwoZSx0LHIpPT57cigxMDEpKCJNYXAiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTkpKX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDgpLGk9cigxOCksbz1yKDcyKSxzPXIoNTIpLGM9cigxMDIpLHU9cigxMDkpLGw9cigxMTYpLGY9cigyNSksaD1yKDIxKSxkPXIoMjQpLHA9cigxMSksZz1yKDExNyksdj1yKDk1KSx5PXIoMTE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtPS0xIT09ZS5pbmRleE9mKCJNYXAiKSxiPS0xIT09ZS5pbmRleE9mKCJXZWFrIiksdz1tPyJzZXQiOiJhZGQiLGs9YVtlXSxTPWsmJmsucHJvdG90eXBlLHg9ayxPPXt9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShTW2VdKTtzKFMsZSwiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShiJiYhZChlKSkmJnQodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4gYiYmIWQoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGImJiFkKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZihvKGUsIWYoayl8fCEoYnx8Uy5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IGspLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PXIuZ2V0Q29uc3RydWN0b3IodCxlLG0sdyksYy5lbmFibGUoKTtlbHNlIGlmKG8oZSwhMCkpe3ZhciBDPW5ldyB4LEY9Q1t3XShiP3t9Oi0wLDEpIT1DLFA9cCgoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxUPWcoKGZ1bmN0aW9uKGUpe25ldyBrKGUpfSkpLEk9IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBrLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1R8fCgoeD10KChmdW5jdGlvbihlLHQpe2woZSxTKTt2YXIgcj15KG5ldyBrLGUseCk7cmV0dXJuIGgodCl8fHUodCxyW3ddLHt0aGF0OnIsQVNfRU5UUklFUzptfSkscn0pKSkucHJvdG90eXBlPVMsUy5jb25zdHJ1Y3Rvcj14KSwoUHx8SSkmJihBKCJkZWxldGUiKSxBKCJoYXMiKSxtJiZBKCJnZXQiKSksKEl8fEYpJiZBKHcpLGImJlMuY2xlYXImJmRlbGV0ZSBTLmNsZWFyfXJldHVybiBPW2VdPXgsbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDp4IT1rfSxPKSx2KHgsZSksYnx8ci5zZXRTdHJvbmcoeCxlLG0pLHh9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTgpLGk9cig1OSksbz1yKDI0KSxzPXIoNDMpLGM9cig0OSkuZix1PXIoNjIpLGw9cigxMDMpLGY9cigxMDYpLGg9cig0NSksZD1yKDEwOCkscD0hMSxnPWgoIm1ldGEiKSx2PTAseT1mdW5jdGlvbihlKXtjKGUsZyx7dmFsdWU6e29iamVjdElEOiJPIit2Kyssd2Vha0RhdGE6e319fSl9LG09ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXttLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgZT11LmYsdD1hKFtdLnNwbGljZSkscj17fTtyW2ddPTEsZShyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUociksYT0wLGk9bi5sZW5ndGg7YTxpO2ErKylpZihuW2FdPT09Zyl7dChuLGEsMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6bC5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUsZykpe2lmKCFmKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7eShlKX1yZXR1cm4gZVtnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighcyhlLGcpKXtpZighZihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTt5KGUpfXJldHVybiBlW2ddLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZCYmcCYmZihlKSYmIXMoZSxnKSYmeShlKSxlfX07aVtnXT0hMH0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9cigxNiksaT1yKDYyKS5mLG89cigxMDQpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBvKHMpfX0oZSk6aShhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KSxhPXIoNjgpLGk9cigxMDUpLG89QXJyYXkscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYz1hKGUpLHU9bih0LGMpLGw9bih2b2lkIDA9PT1yP2M6cixjKSxmPW8ocyhsLXUsMCkpLGg9MDt1PGw7dSsrLGgrKylpKGYsaCxlW3VdKTtyZXR1cm4gZi5sZW5ndGg9aCxmfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjIpLGE9cig0OSksaT1yKDE1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPW4odCk7byBpbiBlP2EuZihlLG8saSgwLHIpKTplW29dPXJ9fSwoZSx0LHIpPT57dmFyIG49cigxMSksYT1yKDI0KSxpPXIoMTkpLG89cigxMDcpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxjPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTtlLmV4cG9ydHM9Y3x8bz9mdW5jdGlvbihlKXtyZXR1cm4hIWEoZSkmJighb3x8IkFycmF5QnVmZmVyIiE9aShlKSkmJighc3x8cyhlKSl9OnN9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDExMCksYT1yKDEyKSxpPXIoNTEpLG89cigzNikscz1yKDExMiksYz1yKDY4KSx1PXIoMjkpLGw9cigxMTMpLGY9cigxMTQpLGg9cigxMTUpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxnPXAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHYseSxtLGIsdyxrLFMseD1yJiZyLnRoYXQsTz0hKCFyfHwhci5BU19FTlRSSUVTKSxBPSEoIXJ8fCFyLklTX1JFQ09SRCksQz0hKCFyfHwhci5JU19JVEVSQVRPUiksRj0hKCFyfHwhci5JTlRFUlJVUFRFRCksUD1uKHQseCksVD1mdW5jdGlvbihlKXtyZXR1cm4gdiYmaCh2LCJub3JtYWwiLGUpLG5ldyBwKCEwLGUpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBPPyhpKGUpLEY/UChlWzBdLGVbMV0sVCk6UChlWzBdLGVbMV0pKTpGP1AoZSxUKTpQKGUpfTtpZihBKXY9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpdj1lO2Vsc2V7aWYoISh5PWYoZSkpKXRocm93IGQobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMoeSkpe2ZvcihtPTAsYj1jKGUpO2I+bTttKyspaWYoKHc9SShlW21dKSkmJnUoZyx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfXY9bChlLHkpfWZvcihrPUE/ZS5uZXh0OnYubmV4dDshKFM9YShrLHYpKS5kb25lOyl7dHJ5e3c9SShTLnZhbHVlKX1jYXRjaChlKXtoKHYsInRocm93IixlKX1pZigib2JqZWN0Ij09dHlwZW9mIHcmJncmJnUoZyx3KSlyZXR1cm4gd31yZXR1cm4gbmV3IHAoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoMzUpLGk9cigxMyksbz1uKG4uYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSksdm9pZCAwPT09dD9lOmk/byhlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoOTEpLGk9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8b1tpXT09PWUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigzNSksaT1yKDUxKSxvPXIoMzYpLHM9cigxMTQpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoODMpLGE9cigzNCksaT1yKDIxKSxvPXIoOTEpLHM9cigzOCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiBhKGUscyl8fGEoZSwiQEBpdGVyYXRvciIpfHxvW24oZSldfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig1MSksaT1yKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHM7YShlKTt0cnl7aWYoIShvPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBhKG8pLHJ9fSwoZSx0LHIpPT57dmFyIG49cigyOSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobih0LGUpKXJldHVybiBlO3Rocm93IGEoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwoZSx0LHIpPT57dmFyIG49cigzOCkoIml0ZXJhdG9yIiksYT0hMTt0cnl7dmFyIGk9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXthPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFhKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgaT17fTtpW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMjQpLGk9cig4Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzO3JldHVybiBpJiZuKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1yJiZhKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmkoZSxzKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLmYsYT1yKDc0KSxpPXIoMTIwKSxvPXIoMTEwKSxzPXIoMTE2KSxjPXIoMjEpLHU9cigxMDkpLGw9cig5MiksZj1yKDk2KSxoPXIoMTIxKSxkPXIoMTApLHA9cigxMDIpLmZhc3RLZXksZz1yKDU2KSx2PWcuc2V0LHk9Zy5nZXR0ZXJGb3I7ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQscixsKXt2YXIgZj1lKChmdW5jdGlvbihlLG4pe3MoZSxoKSx2KGUse3R5cGU6dCxpbmRleDphKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxkfHwoZS5zaXplPTApLGMobil8fHUobixlW2xdLHt0aGF0OmUsQVNfRU5UUklFUzpyfSl9KSksaD1mLnByb3RvdHlwZSxnPXkodCksbT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWcoZSksbz1iKGUsdCk7cmV0dXJuIG8/by52YWx1ZT1yOihpLmxhc3Q9bz17aW5kZXg6YT1wKHQsITApLGtleTp0LHZhbHVlOnIscHJldmlvdXM6bj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9byksbiYmKG4ubmV4dD1vKSxkP2kuc2l6ZSsrOmUuc2l6ZSsrLCJGIiE9PWEmJihpLmluZGV4W2FdPW8pKSxlfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1nKGUpLGE9cCh0KTtpZigiRiIhPT1hKXJldHVybiBuLmluZGV4W2FdO2ZvcihyPW4uZmlyc3Q7cjtyPXIubmV4dClpZihyLmtleT09dClyZXR1cm4gcn07cmV0dXJuIGkoaCx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9Zyh0aGlzKSx0PWUuaW5kZXgscj1lLmZpcnN0O3I7KXIucmVtb3ZlZD0hMCxyLnByZXZpb3VzJiYoci5wcmV2aW91cz1yLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgdFtyLmluZGV4XSxyPXIubmV4dDtlLmZpcnN0PWUubGFzdD12b2lkIDAsZD9lLnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1nKHQpLG49Yih0LGUpO2lmKG4pe3ZhciBhPW4ubmV4dCxpPW4ucHJldmlvdXM7ZGVsZXRlIHIuaW5kZXhbbi5pbmRleF0sbi5yZW1vdmVkPSEwLGkmJihpLm5leHQ9YSksYSYmKGEucHJldmlvdXM9aSksci5maXJzdD09biYmKHIuZmlyc3Q9YSksci5sYXN0PT1uJiYoci5sYXN0PWkpLGQ/ci5zaXplLS06dC5zaXplLS19cmV0dXJuISFufSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWcodGhpcyksbj1vKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3Q9dD90Lm5leHQ6ci5maXJzdDspZm9yKG4odC52YWx1ZSx0LmtleSx0aGlzKTt0JiZ0LnJlbW92ZWQ7KXQ9dC5wcmV2aW91c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhYih0aGlzLGUpfX0pLGkoaCxyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLGUpO3JldHVybiB0JiZ0LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0aGlzLDA9PT1lPzA6ZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG0odGhpcyxlPTA9PT1lPzA6ZSxlKX19KSxkJiZuKGgsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKS5zaXplfX0pLGZ9LHNldFN0cm9uZzpmdW5jdGlvbihlLHQscil7dmFyIG49dCsiIEl0ZXJhdG9yIixhPXkodCksaT15KG4pO2woZSx0LChmdW5jdGlvbihlLHQpe3YodGhpcyx7dHlwZTpuLHRhcmdldDplLHN0YXRlOmEoZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxyPWUubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9cj1yP3IubmV4dDplLnN0YXRlLmZpcnN0KT9mKCJrZXlzIj09dD9yLmtleToidmFsdWVzIj09dD9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KGUudGFyZ2V0PXZvaWQgMCxmKHZvaWQgMCwhMCkpfSkscj8iZW50cmllcyI6InZhbHVlcyIsIXIsITApLGgodCl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDI4KSxhPXIoNDkpLGk9cigzOCksbz1yKDEwKSxzPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPWEuZjtvJiZ0JiYhdFtzXSYmcih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LChlLHQscik9PntyKDEyMyl9LChlLHQscik9PntyKDEwMSkoIlNldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxyKDExOSkpfSwoZSx0LHIpPT57dmFyIG4sYT1yKDQwKSxpPXIoNyksbz1yKDgpLHM9cigyOCksYz1yKDE4KSx1PXIoMTEpLGw9cig0NSksZj1yKDI1KSxoPXIoMTI1KSxkPXIoMjEpLHA9cigyNCksZz1yKDI3KSx2PXIoMTA5KSx5PXIoNTEpLG09cig4MyksYj1yKDQzKSx3PXIoMTA1KSxrPXIoNDgpLFM9cig2OCkseD1yKDEyNiksTz1yKDEyNyksQT1yKDEyOSksQz1yKDMyKSxGPXIoMTMwKSxQPXIoMTMxKSxUPXIoMTMyKSxJPW8uT2JqZWN0LEU9by5EYXRlLGo9by5FcnJvcixNPW8uRXZhbEVycm9yLF89by5SYW5nZUVycm9yLEw9by5SZWZlcmVuY2VFcnJvcixSPW8uU3ludGF4RXJyb3IsTj1vLlR5cGVFcnJvcixEPW8uVVJJRXJyb3IsQj1vLlBlcmZvcm1hbmNlTWFyayxVPW8uV2ViQXNzZW1ibHksJD1VJiZVLkNvbXBpbGVFcnJvcnx8aixYPVUmJlUuTGlua0Vycm9yfHxqLEg9VSYmVS5SdW50aW1lRXJyb3J8fGoscT1zKCJET01FeGNlcHRpb24iKSxHPXMoIlNldCIpLHo9cygiTWFwIiksVz16LnByb3RvdHlwZSxWPWMoVy5oYXMpLFk9YyhXLmdldCksSz1jKFcuc2V0KSxKPWMoRy5wcm90b3R5cGUuYWRkKSxaPXMoIk9iamVjdCIsImtleXMiKSxRPWMoW10ucHVzaCksZWU9YygoITApLnZhbHVlT2YpLHRlPWMoMS4udmFsdWVPZikscmU9YygiIi52YWx1ZU9mKSxuZT1jKEUucHJvdG90eXBlLmdldFRpbWUpLGFlPWwoInN0cnVjdHVyZWRDbG9uZSIpLGllPSJEYXRhQ2xvbmVFcnJvciIsb2U9IlRyYW5zZmVycmluZyIsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8uU2V0KFs3XSkscj1lKHQpLG49ZShJKDcpKTtyZXR1cm4gcj09dHx8IXIuaGFzKDcpfHwib2JqZWN0IiE9dHlwZW9mIG58fDchPW59KSkmJmV9LGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IHQsbj1lKHthOnIsYjpyfSk7cmV0dXJuIShuJiZuLmE9PT1uLmImJm4uYSBpbnN0YW5jZW9mIHQmJm4uYS5zdGFjaz09PXIuc3RhY2spfSkpfSx1ZT1vLnN0cnVjdHVyZWRDbG9uZSxsZT1hfHwhY2UodWUsail8fCFjZSh1ZSxxKXx8KG49dWUsISF1KChmdW5jdGlvbigpe3ZhciBlPW4obmV3IG8uQWdncmVnYXRlRXJyb3IoWzFdLGFlLHtjYXVzZTozfSkpO3JldHVybiJBZ2dyZWdhdGVFcnJvciIhPWUubmFtZXx8MSE9ZS5lcnJvcnNbMF18fGUubWVzc2FnZSE9YWV8fDMhPWUuY2F1c2V9KSkpLGZlPSF1ZSYmc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihhZSx7ZGV0YWlsOmV9KS5kZXRhaWx9KSksaGU9c2UodWUpfHxmZSxkZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgiVW5jbG9uZWFibGUgdHlwZTogIitlLGllKX0scGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgcSgodHx8IkNsb25pbmciKSsiIG9mICIrZSsiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lIixpZSl9LGdlPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSYmZGUoIlN5bWJvbCIpLCFwKGUpKXJldHVybiBlO2lmKHQpe2lmKFYodCxlKSlyZXR1cm4gWSh0LGUpfWVsc2UgdD1uZXcgejt2YXIgcixuLGEsaSxjLHUsbCxoLGQsdix5PW0oZSkseD0hMTtzd2l0Y2goeSl7Y2FzZSJBcnJheSI6YT1bXSx4PSEwO2JyZWFrO2Nhc2UiT2JqZWN0IjphPXt9LHg9ITA7YnJlYWs7Y2FzZSJNYXAiOmE9bmV3IHoseD0hMDticmVhaztjYXNlIlNldCI6YT1uZXcgRyx4PSEwO2JyZWFrO2Nhc2UiUmVnRXhwIjphPW5ldyBSZWdFeHAoZS5zb3VyY2UsTyhlKSk7YnJlYWs7Y2FzZSJFcnJvciI6c3dpdGNoKG49ZS5uYW1lKXtjYXNlIkFnZ3JlZ2F0ZUVycm9yIjphPXMoIkFnZ3JlZ2F0ZUVycm9yIikoW10pO2JyZWFrO2Nhc2UiRXZhbEVycm9yIjphPU0oKTticmVhaztjYXNlIlJhbmdlRXJyb3IiOmE9XygpO2JyZWFrO2Nhc2UiUmVmZXJlbmNlRXJyb3IiOmE9TCgpO2JyZWFrO2Nhc2UiU3ludGF4RXJyb3IiOmE9UigpO2JyZWFrO2Nhc2UiVHlwZUVycm9yIjphPU4oKTticmVhaztjYXNlIlVSSUVycm9yIjphPUQoKTticmVhaztjYXNlIkNvbXBpbGVFcnJvciI6YT0kKCk7YnJlYWs7Y2FzZSJMaW5rRXJyb3IiOmE9WCgpO2JyZWFrO2Nhc2UiUnVudGltZUVycm9yIjphPUgoKTticmVhaztkZWZhdWx0OmE9aigpfXg9ITA7YnJlYWs7Y2FzZSJET01FeGNlcHRpb24iOmE9bmV3IHEoZS5tZXNzYWdlLGUubmFtZSkseD0hMDticmVhaztjYXNlIkRhdGFWaWV3IjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkJpZ0ludDY0QXJyYXkiOmNhc2UiQmlnVWludDY0QXJyYXkiOnI9b1t5XSxwKHIpfHxwZSh5KSxhPW5ldyByKGdlKGUuYnVmZmVyLHQpLGUuYnl0ZU9mZnNldCwiRGF0YVZpZXciPT09eT9lLmJ5dGVMZW5ndGg6ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiRE9NUXVhZCI6dHJ5e2E9bmV3IERPTVF1YWQoZ2UoZS5wMSx0KSxnZShlLnAyLHQpLGdlKGUucDMsdCksZ2UoZS5wNCx0KSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztjYXNlIkZpbGVMaXN0IjppZihpPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9bmV3IG8uRGF0YVRyYW5zZmVyfWNhdGNoKHQpe3RyeXtlPW5ldyBvLkNsaXBib2FyZEV2ZW50KCIiKS5jbGlwYm9hcmREYXRhfWNhdGNoKGUpe319cmV0dXJuIGUmJmUuaXRlbXMmJmUuZmlsZXM/ZTpudWxsfSgpKXtmb3IoYz0wLHU9UyhlKTtjPHU7YysrKWkuaXRlbXMuYWRkKGdlKGVbY10sdCkpO2E9aS5maWxlc31lbHNlIGhlP2E9aGUoZSk6cGUoeSk7YnJlYWs7Y2FzZSJJbWFnZURhdGEiOnRyeXthPW5ldyBJbWFnZURhdGEoZ2UoZS5kYXRhLHQpLGUud2lkdGgsZS5oZWlnaHQse2NvbG9yU3BhY2U6ZS5jb2xvclNwYWNlfSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztkZWZhdWx0OmlmKGhlKWE9aGUoZSk7ZWxzZSBzd2l0Y2goeSl7Y2FzZSJCaWdJbnQiOmE9SShlLnZhbHVlT2YoKSk7YnJlYWs7Y2FzZSJCb29sZWFuIjphPUkoZWUoZSkpO2JyZWFrO2Nhc2UiTnVtYmVyIjphPUkodGUoZSkpO2JyZWFrO2Nhc2UiU3RyaW5nIjphPUkocmUoZSkpO2JyZWFrO2Nhc2UiRGF0ZSI6YT1uZXcgRShuZShlKSk7YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6KHI9by5EYXRhVmlldyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlfHxwZSh5KTt0cnl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UpYT1lLnNsaWNlKDApO2Vsc2UgZm9yKHU9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKHUpLGQ9bmV3IHIoZSksdj1uZXcgcihhKSxjPTA7Yzx1O2MrKyl2LnNldFVpbnQ4KGMsZC5nZXRVaW50OChjKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHEoIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkIixpZSl9YnJlYWs7Y2FzZSJTaGFyZWRBcnJheUJ1ZmZlciI6YT1lO2JyZWFrO2Nhc2UiQmxvYiI6dHJ5e2E9ZS5zbGljZSgwLGUuc2l6ZSxlLnR5cGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NUG9pbnQiOmNhc2UiRE9NUG9pbnRSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVBvaW50P3IuZnJvbVBvaW50KGUpOm5ldyByKGUueCxlLnksZS56LGUudyl9Y2F0Y2goZSl7cGUoeSl9YnJlYWs7Y2FzZSJET01SZWN0IjpjYXNlIkRPTVJlY3RSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVJlY3Q/ci5mcm9tUmVjdChlKTpuZXcgcihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NTWF0cml4IjpjYXNlIkRPTU1hdHJpeFJlYWRPbmx5IjpyPW9beV07dHJ5e2E9ci5mcm9tTWF0cml4P3IuZnJvbU1hdHJpeChlKTpuZXcgcihlKX1jYXRjaChlKXtwZSh5KX1icmVhaztjYXNlIkF1ZGlvRGF0YSI6Y2FzZSJWaWRlb0ZyYW1lIjpmKGUuY2xvbmUpfHxwZSh5KTt0cnl7YT1lLmNsb25lKCl9Y2F0Y2goZSl7ZGUoeSl9YnJlYWs7Y2FzZSJGaWxlIjp0cnl7YT1uZXcgRmlsZShbZV0sZS5uYW1lLGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiQ3JvcFRhcmdldCI6Y2FzZSJDcnlwdG9LZXkiOmNhc2UiRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtRmlsZUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtSGFuZGxlIjpjYXNlIkdQVUNvbXBpbGF0aW9uSW5mbyI6Y2FzZSJHUFVDb21waWxhdGlvbk1lc3NhZ2UiOmNhc2UiSW1hZ2VCaXRtYXAiOmNhc2UiUlRDQ2VydGlmaWNhdGUiOmNhc2UiV2ViQXNzZW1ibHkuTW9kdWxlIjpwZSh5KTtkZWZhdWx0OmRlKHkpfX1pZihLKHQsZSxhKSx4KXN3aXRjaCh5KXtjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Zm9yKGw9WihlKSxjPTAsdT1TKGwpO2M8dTtjKyspaD1sW2NdLHcoYSxoLGdlKGVbaF0sdCkpO2JyZWFrO2Nhc2UiTWFwIjplLmZvckVhY2goKGZ1bmN0aW9uKGUscil7SyhhLGdlKHIsdCksZ2UoZSx0KSl9KSk7YnJlYWs7Y2FzZSJTZXQiOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLGdlKGUsdCkpfSkpO2JyZWFrO2Nhc2UiRXJyb3IiOmsoYSwibWVzc2FnZSIsZ2UoZS5tZXNzYWdlLHQpKSxiKGUsImNhdXNlIikmJmsoYSwiY2F1c2UiLGdlKGUuY2F1c2UsdCkpLCJBZ2dyZWdhdGVFcnJvciI9PW4mJihhLmVycm9ycz1nZShlLmVycm9ycyx0KSk7Y2FzZSJET01FeGNlcHRpb24iOkEmJmsoYSwic3RhY2siLGdlKGUuc3RhY2ssdCkpfXJldHVybiBhfSx2ZT11ZSYmIXUoKGZ1bmN0aW9uKCl7aWYoUCYmQz45Mnx8VCYmQz45NHx8RiYmQz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD11ZShlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9ZS5ieXRlTGVuZ3RofHw4IT10LmJ5dGVMZW5ndGh9KSk7aSh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsc2hhbTohdmUsZm9yY2VkOmxlfSx7c3RydWN0dXJlZENsb25lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eChhcmd1bWVudHMubGVuZ3RoLDEpPjEmJiFkKGFyZ3VtZW50c1sxXSk/eShhcmd1bWVudHNbMV0pOnZvaWQgMCxuPXI/ci50cmFuc2Zlcjp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW4mJmZ1bmN0aW9uKGUsdCl7aWYoIXAoZSkpdGhyb3cgTigiVHJhbnNmZXIgb3B0aW9uIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSIpO3ZhciByPVtdO3YoZSwoZnVuY3Rpb24oZSl7UShyLHkoZSkpfSkpO3ZhciBuLGEsaSxzLGMsdSxsPTAsZD1TKHIpO2lmKHZlKWZvcihzPXVlKHIse3RyYW5zZmVyOnJ9KTtsPGQ7KUsodCxyW2xdLHNbbCsrXSk7ZWxzZSBmb3IoO2w8ZDspe2lmKG49cltsKytdLFYodCxuKSl0aHJvdyBuZXcgcSgiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSIsaWUpO3N3aXRjaChhPW0obikpe2Nhc2UiSW1hZ2VCaXRtYXAiOmk9by5PZmZzY3JlZW5DYW52YXMsaChpKXx8cGUoYSxvZSk7dHJ5eyh1PW5ldyBpKG4ud2lkdGgsbi5oZWlnaHQpKS5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKG4pLGM9dS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6ZihuLmNsb25lKSYmZihuLmNsb3NlKXx8cGUoYSxvZSk7dHJ5e2M9bi5jbG9uZSgpLG4uY2xvc2UoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6Y2FzZSJNZWRpYVNvdXJjZUhhbmRsZSI6Y2FzZSJNZXNzYWdlUG9ydCI6Y2FzZSJPZmZzY3JlZW5DYW52YXMiOmNhc2UiUmVhZGFibGVTdHJlYW0iOmNhc2UiVHJhbnNmb3JtU3RyZWFtIjpjYXNlIldyaXRhYmxlU3RyZWFtIjpwZShhLG9lKX1pZih2b2lkIDA9PT1jKXRocm93IG5ldyBxKCJUaGlzIG9iamVjdCBjYW5ub3QgYmUgdHJhbnNmZXJyZWQ6ICIrYSxpZSk7Syh0LG4sYyl9fShuLHQ9bmV3IHopLGdlKGUsdCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoMTEpLGk9cigyNSksbz1yKDgzKSxzPXIoMjgpLGM9cig1NSksdT1mdW5jdGlvbigpe30sbD1bXSxmPXMoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxoPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGQ9bihoLmV4ZWMpLHA9IWguZXhlYyh1KSxnPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3RyeXtyZXR1cm4gZih1LGwsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx2PWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChvKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiBwfHwhIWQoaCxjKGUpKX1jYXRjaChlKXtyZXR1cm4hMH19O3Yuc2hhbT0hMCxlLmV4cG9ydHM9IWZ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGcoZy5jYWxsKXx8IWcoT2JqZWN0KXx8IWcoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT92Omd9LGU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDQzKSxpPXIoMjkpLG89cigxMjgpLHM9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncztyZXR1cm4gdm9pZCAwIT09dHx8ImZsYWdzImluIHN8fGEoZSwiZmxhZ3MiKXx8IWkocyxlKT90Om4obyxlKX19LChlLHQscik9Pnt2YXIgbj1yKDUxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHQ9IiI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPSJkIiksZS5nbG9iYWwmJih0Kz0iZyIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuZG90QWxsJiYodCs9InMiKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUudW5pY29kZVNldHMmJih0Kz0idiIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigxNSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLGEoMSw3KSksNyE9PWUuc3RhY2spfSkpfSwoZSx0LHIpPT57dmFyIG49cigxMzEpLGE9cigxMzIpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoOCk7ZS5leHBvcnRzPSJwcm9jZXNzIj09bihhLnByb2Nlc3MpfSwoZSx0LHIpPT57dmFyIG49cig4KTtlLmV4cG9ydHM9bn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtiLl9jbGVhckNhY2hlKCkseS5fY2xlYXJDYWNoZSgpLHguX2NsZWFyQ2FjaGUoKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgYiYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBrJiYodm9pZCAwPT09dHx8QyhlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9Qyx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGkobixvLHMsYyl7dmFyIHU9aChlW25dLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YShmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodixjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LGMsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1wO3ZhciBnPVN5bWJvbCgiRU9GIik7dC5FT0Y9Zzt2YXIgdix5PSh2PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLm5hbWU9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF18fCh2W3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3Y9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5OYW1lPXk7dmFyIG0sYj0obT1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jbWQ9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF18fChtW3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe209T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5DbWQ9Yjt2YXIgdz1mdW5jdGlvbigpe3JldHVybiB3fSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2YodGhpcyxlKSx0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9dCx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXd9dmFyIHQscjtyZXR1cm4gZChlLFt7a2V5OiJhc3NpZ25YcmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWY9ZX19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmdm9pZCAwPT09KG49dGhpcy5fbWFwW3RdKSYmdm9pZCAwIT09ciYmKG49dGhpcy5fbWFwW3JdKSxuIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChuLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpufX0se2tleToiZ2V0QXN5bmMiLHZhbHVlOih0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHZvaWQgMD09PShhPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJnZvaWQgMD09PShhPXRoaXMuX21hcFtyXSkmJnZvaWQgMCE9PW4mJihhPXRoaXMuX21hcFtuXSksIShhIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkscj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJnZvaWQgMD09PShuPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSksbiBpbnN0YW5jZW9mIHgmJnRoaXMueHJlZiYmKG49dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKSxBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgYT0wLGk9KG49bi5zbGljZSgpKS5sZW5ndGg7YTxpO2ErKyluW2FdaW5zdGFuY2VvZiB4JiZ0aGlzLnhyZWYmJihuW2FdPXRoaXMueHJlZi5mZXRjaChuW2FdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7cmV0dXJuIG59fSx7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJnZXRLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfX0se2tleToiZ2V0UmF3VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9fV0sW3trZXk6ImVtcHR5IixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZShudWxsKTtyZXR1cm4gdC5zZXQ9ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLHQpfX0se2tleToibWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLG49dC54cmVmLGE9dC5kaWN0QXJyYXkscz10Lm1lcmdlU3ViRGljdHMsYz12b2lkIDAhPT1zJiZzLHU9bmV3IGUobiksbD1uZXcgTWFwLGY9byhhKTt0cnl7Zm9yKGYucygpOyEocj1mLm4oKSkuZG9uZTspe3ZhciBoPXIudmFsdWU7aWYoaCBpbnN0YW5jZW9mIGUpZm9yKHZhciBkPTAscD1PYmplY3QuZW50cmllcyhoLl9tYXApO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1pKHBbZF0sMiksdj1nWzBdLHk9Z1sxXSxtPWwuZ2V0KHYpO2lmKHZvaWQgMD09PW0pbT1bXSxsLnNldCh2LG0pO2Vsc2UgaWYoIShjJiZ5IGluc3RhbmNlb2YgZSkpY29udGludWU7bS5wdXNoKHkpfX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9dmFyIGIsdz1vKGwpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIGs9aShiLnZhbHVlLDIpLFM9a1swXSx4PWtbMV07aWYoMSE9PXgubGVuZ3RoJiZ4WzBdaW5zdGFuY2VvZiBlKXt2YXIgTyxBPW5ldyBlKG4pLEM9byh4KTt0cnl7Zm9yKEMucygpOyEoTz1DLm4oKSkuZG9uZTspZm9yKHZhciBGPU8udmFsdWUsUD0wLFQ9T2JqZWN0LmVudHJpZXMoRi5fbWFwKTtQPFQubGVuZ3RoO1ArKyl7dmFyIEk9aShUW1BdLDIpLEU9SVswXSxqPUlbMV07dm9pZCAwPT09QS5fbWFwW0VdJiYoQS5fbWFwW0VdPWopfX1jYXRjaChlKXtDLmUoZSl9ZmluYWxseXtDLmYoKX1BLnNpemU+MCYmKHUuX21hcFtTXT1BKX1lbHNlIHUuX21hcFtTXT14WzBdfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX1yZXR1cm4gbC5jbGVhcigpLHUuc2l6ZT4wP3U6ZS5lbXB0eX19XSksZX0oKTt0LkRpY3Q9azt2YXIgUyx4PShTPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubnVtPXQsdGhpcy5nZW49cn1yZXR1cm4gZChlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZ2VuPyIiLmNvbmNhdCh0aGlzLm51bSwiUiIpOiIiLmNvbmNhdCh0aGlzLm51bSwiUiIpLmNvbmNhdCh0aGlzLmdlbil9fV0sW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj0wPT09cj8iIi5jb25jYXQodCwiUiIpOiIiLmNvbmNhdCh0LCJSIikuY29uY2F0KHIpO3JldHVybiBTW25dfHwoU1tuXT1uZXcgZSh0LHIpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe1M9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5SZWY9eDt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Zih0aGlzLHQpLHRoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9cmV0dXJuIGQodCxbe2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfX0se2tleToicHV0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldC5jbGVhcigpfX1dKSx0fSgpO3QuUmVmU2V0PU87dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KSx0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gZCh0LFt7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJwdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9fSx7a2V5OiJwdXRBbGlhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX19XSksdH0oKTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5JiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9dC5SZWZTZXRDYWNoZT1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMCx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLG89Uyh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihvKWZvcih2YXIgYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgdT1vW2NdO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBsLGY9cyh1LmdldEtleXMoKSk7dHJ5e2ZvcihmLnMoKTshKGw9Zi5uKCkpLmRvbmU7KXt2YXIgaD1sLnZhbHVlLGQ9cltoXTtpZihkKXt2YXIgcD11LmdldFJhdyhoKSxnPW5ldyBpLlJlZlNldCx2PVtdO08ocCxlLHYsZyksdi5sZW5ndGg+MCYmKG5bZF09dil9fX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX19fWlmKHQuaGFzKCJBIikpe3ZhciB5PVtdO08odC5nZXQoIkEiKSxlLHksbmV3IGkuUmVmU2V0KSx5Lmxlbmd0aD4wJiYobi5BY3Rpb249eSl9cmV0dXJuKDAsYS5vYmplY3RTaXplKShuKT4wP246bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWkmJmk8PTEyNil7dmFyIG89QVtpXTtvJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKG8pLHI9bisxKX1lbHNlIHI8biYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsbikpLHQucHVzaCgiJiN4Ii5jb25jYXQoaS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiOyIpKSxpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKyxyPW4rMX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlUERGTmFtZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTsoaTwzM3x8aT4xMjZ8fDM1PT09aXx8NDA9PT1pfHw0MT09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8NDc9PT1pfHwzNz09PWkpJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCIjIi5jb25jYXQoaS50b1N0cmluZygxNikpKSxyPW4rMSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9lOihyPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcocixlLmxlbmd0aCkpLHQuam9pbigiIikpfSx0LmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWygpXFxcblxyXSkvZywoZnVuY3Rpb24oZSl7cmV0dXJuIlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6IlxcIi5jb25jYXQoZSl9KSl9LHQuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIHI9ZSgpO2U9bnVsbCx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bis9Mil0W3Jbbl1dPXJbbisxXTtyPW51bGx9cmV0dXJuIHR9fSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Uyx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBNYXAsaT1zKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89KHI9dC52YWx1ZSwyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dCwwOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0ocil8fGMociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PW9bMF0sbD1vWzFdO2lmKHUuc3RhcnRzV2l0aChhLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKXt2YXIgZj1uLmdldChsLnBhZ2VJbmRleCk7Znx8KGY9W10sbi5zZXQobC5wYWdlSW5kZXgsZikpLGYucHVzaChsKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBuLnNpemU+MD9uOm51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9LHQucGFyc2VYRkFQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWF0Y2godCk7cmV0dXJuIHI/e25hbWU6clsxXSxwb3M6cGFyc2VJbnQoclsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfSx0LnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH0sdC5yZWFkVWludDE2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfSx0LnJlYWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9LHQucmVjb3ZlckpzVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQmJnRbMl0pe3ZhciByPXRbMl0sbj0hMTtyZXR1cm4idHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYobj0hMCkse3VybDpyLG5ld1dpbmRvdzpufX1yZXR1cm4gbnVsbH0sdC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGMTZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxhLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Zm9yKHZhciByLG49W107ZT49MWUzOyllLT0xZTMsbi5wdXNoKCJNIik7cj1lLzEwMHwwLGUlPTEwMCxuLnB1c2goeFtyXSkscj1lLzEwfDAsZSU9MTAsbi5wdXNoKHhbMTArcl0pLG4ucHVzaCh4WzIwK2VdKTt2YXIgaT1uLmpvaW4oIiIpO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfSx0LnZhbGlkYXRlQ1NTRm9udD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiMTAwMCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIl0pLHI9ZS5mb250RmFtaWx5LG49ZS5mb250V2VpZ2h0LGk9ZS5pdGFsaWNBbmdsZTtpZigvXiIuKiIkLy50ZXN0KHIpKXtpZigvW15cXF0iLy50ZXN0KHIuc2xpY2UoMSxyLmxlbmd0aC0xKSkpcmV0dXJuKDAsYS53YXJuKSgnWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAnLmNvbmNhdChyLCIuIikpLCExfWVsc2UgaWYoL14nLionJC8udGVzdChyKSl7aWYoL1teXFxdJy8udGVzdChyLnNsaWNlKDEsci5sZW5ndGgtMSkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogIi5jb25jYXQociwiLiIpKSwhMX1lbHNle3ZhciBvLGM9cyhyLnNwbGl0KC9bIFx0XSsvKSk7dHJ5e2ZvcihjLnMoKTshKG89Yy5uKCkpLmRvbmU7KXt2YXIgdT1vLnZhbHVlO2lmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QodSl8fCEvXltcdy1cXF0rJC8udGVzdCh1KSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogIi5jb25jYXQociwiLiIpKSwhMX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fXZhciBsPW4/bi50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhsKT9sOiI0MDAiO3ZhciBmPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGUuaXRhbGljQW5nbGU9aXNOYU4oZil8fGY8LTkwfHxmPjkwPyIxNCI6aS50b1N0cmluZygpLCEwfTt2YXIgYT1yKDIpLGk9cigxMzQpLG89cigxMzYpO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT12KGUpO2lmKHQpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdihlKX10LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO3ZhciB5PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gaCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJNaXNzaW5nIGRhdGEgWyIuY29uY2F0KGUsIiwgIikuY29uY2F0KG4sIikiKSwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKSkuYmVnaW49ZSxhLmVuZD1uLGF9cmV0dXJuIGYocil9KGEuQmFzZUV4Y2VwdGlvbik7dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj15O3ZhciBtPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlBhcnNlckVPRkV4Y2VwdGlvbj1tO3ZhciBiPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmRW50cnlFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj1iO3ZhciB3PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZQYXJzZUV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtoKHRoaXMsZSksdGhpcy5faGFuZGxlcj10LHRoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQsdGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9cmV0dXJuIGYoZSxbe2tleToiX3NlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXModGhpcy5fc3RyZWFtVHlwZXMpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl0W2UudmFsdWVdPSEwfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBhLGk9cyh0aGlzLl9mb250VHlwZXMpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOylyW2EudmFsdWVdPSEwfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMuX2hhbmRsZXIuc2VuZCgiRG9jU3RhdHMiLHtzdHJlYW1UeXBlczp0LGZvbnRUeXBlczpyfSl9fSx7a2V5OiJhZGRTdHJlYW1UeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSl8fCh0aGlzLl9zdHJlYW1UeXBlcy5hZGQoZSksdGhpcy5fc2VuZCgpKX19LHtrZXk6ImFkZEZvbnRUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9mb250VHlwZXMuaGFzKGUpfHwodGhpcy5fZm9udFR5cGVzLmFkZChlKSx0aGlzLl9zZW5kKCkpfX1dKSxlfSgpO2Z1bmN0aW9uIFMoZSl7Zm9yKHZhciB0LHI9ZS5kaWN0LG49ZS5rZXksYT1lLmdldEFycmF5LG89dm9pZCAwIT09YSYmYSxzPWUuc3RvcFdoZW5Gb3VuZCxjPXZvaWQgMD09PXN8fHMsdT1uZXcgaS5SZWZTZXQ7ciBpbnN0YW5jZW9mIGkuRGljdCYmKCFyLm9iaklkfHwhdS5oYXMoci5vYmpJZCkpOyl7ci5vYmpJZCYmdS5wdXQoci5vYmpJZCk7dmFyIGw9bz9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWwpe2lmKGMpcmV0dXJuIGw7dHx8KHQ9W10pLHQucHVzaChsKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LkRvY1N0YXRzPWs7dmFyIHg9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBPKGUsdCxyLG4pe2lmKGUpe3ZhciBjPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihuLmhhcyhlKSlyZXR1cm47Yz1lLG4ucHV0KGMpLGU9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdSxsPXMoZSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KU8odS52YWx1ZSx0LHIsbil9Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7aWYoKDAsaS5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7dmFyIGYsaD1lLmdldCgiSlMiKTtoIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2Y9aC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIGgmJihmPWgpLChmPWYmJigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKSkmJnIucHVzaChmKX1PKGUuZ2V0UmF3KCJOZXh0IiksdCxyLG4pfWMmJm4ucmVtb3ZlKGMpfX12YXIgQT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9fSx7a2V5OiJpc0VtcHR5IixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfX0se2tleToiaXNEYXRhTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX19LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xIT09ZSYmdGhpcy5wb3MtLSxlfX0se2tleToicGVla0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEJ5dGVzKGUpO3JldHVybiB0aGlzLnBvcy09dC5sZW5ndGgsdH19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fX0se2tleToiZ2V0SW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX19LHtrZXk6ImdldEJ5dGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPWV8fDF9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9fSx7a2V5OiJtb3ZlU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX19LHtrZXk6Im1ha2VTdWJTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJnZXRCYXNlU3RyZWFtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSkmJmkodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkJhc2VTdHJlYW09b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzgpLGk9cigxMzUpLG89cigxNDApLHM9cigxMzkpO2Z1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWgoZSk7aWYodCl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmKGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBmKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGQoZSl9ZnVuY3Rpb24gcCgpe3A9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09ZChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7ZyhpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7ZyhpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1kKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQmJm0oZS5wcm90b3R5cGUsdCksciYmbShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdyhlKXtpZihlKXt2YXIgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxuLndhcm4pKCdJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gbnVsbH12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt5KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJkb2NJZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0lkfX0se2tleToicGFzc3dvcmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXNzd29yZH19LHtrZXk6ImRvY0Jhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZztyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jQmFzZVVybCIsZS5iYXNlVXJsfHx0aGlzLl9kb2NCYXNlVXJsKX19LHtrZXk6ImVuc3VyZURvYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfX0se2tleToiZW5zdXJlWFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9fSx7a2V5OiJlbnN1cmVDYXRhbG9nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJsb2FkWGZhRm9udHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGUsdCl9fSx7a2V5OiJsb2FkWGZhSW1hZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFJbWFnZXMoKX19LHtrZXk6InNlcmlhbGl6ZVhmYURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX19LHtrZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDooMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fV0pLGV9KCksUz1mdW5jdGlvbihlKXtjKG4sZSk7dmFyIHQscj1sKG4pO2Z1bmN0aW9uIG4oZSx0LGEsaSxjLHUsbCl7dmFyIGg7eSh0aGlzLG4pLChoPXIuY2FsbCh0aGlzKSkuX2RvY0lkPWUsaC5fcGFzc3dvcmQ9YSxoLl9kb2NCYXNlVXJsPXcobCksaC5tc2dIYW5kbGVyPWksaC5ldmFsdWF0b3JPcHRpb25zPWMsaC5lbmFibGVYZmE9dTt2YXIgZD1uZXcgcy5TdHJlYW0odCk7cmV0dXJuIGgucGRmRG9jdW1lbnQ9bmV3IG8uUERGRG9jdW1lbnQoZihoKSxkKSxoLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZShkKSxofXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJyZXF1ZXN0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX1dKSxufShrKTt0LkxvY2FsUGRmTWFuYWdlcj1TO3ZhciB4PWZ1bmN0aW9uKGUpe2MobixlKTt2YXIgdCxyPWwobik7ZnVuY3Rpb24gbihlLHQsaSxzLGMsdSl7dmFyIGw7cmV0dXJuIHkodGhpcyxuKSwobD1yLmNhbGwodGhpcykpLl9kb2NJZD1lLGwuX3Bhc3N3b3JkPWkucGFzc3dvcmQsbC5fZG9jQmFzZVVybD13KHUpLGwubXNnSGFuZGxlcj1pLm1zZ0hhbmRsZXIsbC5ldmFsdWF0b3JPcHRpb25zPXMsbC5lbmFibGVYZmE9YyxsLnN0cmVhbU1hbmFnZXI9bmV3IGEuQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjppLm1zZ0hhbmRsZXIsbGVuZ3RoOmkubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemV9KSxsLnBkZkRvY3VtZW50PW5ldyBvLlBERkRvY3VtZW50KGYobCksbC5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKSxsfXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19XSksbn0oayk7dC5OZXR3b3JrUGRmTWFuYWdlcj14fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciBhPXIoMiksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfXZhciBkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9KG8sZSk7dmFyIHQscixhPSh0PW8scj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPWgodCk7aWYocil7dmFyIGk9aCh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIG47cmV0dXJuIGModGhpcyxvKSwobj1hLmNhbGwodGhpcyxuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCkpLmNodW5rU2l6ZT10LG4uX2xvYWRlZENodW5rcz1uZXcgU2V0LG4ubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLG4ubWFuYWdlcj1yLG4ucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsbi5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMSxufXJldHVybiBsKG8sW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfX0se2tleToibnVtQ2h1bmtzTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9fSx7a2V5OiJpc0RhdGFMb2FkZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfX0se2tleToib25SZWNlaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNodW5rU2l6ZTtpZihlJXIhPTApdGhyb3cgbmV3IEVycm9yKCJCYWQgYmVnaW4gb2Zmc2V0OiAiLmNvbmNhdChlKSk7dmFyIG49ZSt0LmJ5dGVMZW5ndGg7aWYobiVyIT0wJiZuIT09dGhpcy5ieXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCYWQgZW5kIG9mZnNldDogIi5jb25jYXQobikpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KHQpLGUpO2Zvcih2YXIgYT1NYXRoLmZsb29yKGUvciksaT1NYXRoLmZsb29yKChuLTEpL3IpKzEsbz1hO288aTsrK28pdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChvKX19LHtrZXk6Im9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgscj1NYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGUpLHQpLHQrPWUuYnl0ZUxlbmd0aCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD10O2Zvcih2YXIgbj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpLGE9cjthPG47KythKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoYSl9fSx7a2V5OiJlbnN1cmVCeXRlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpKXt2YXIgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX19fSx7a2V5OiJlbnN1cmVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGU+PXR8fHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSl7dmFyIHI9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHI+dGhpcy5udW1DaHVua3MpKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKSxhPXI7YTxuOysrYSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX19LHtrZXk6Im5leHRFbXB0eUNodW5rIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5udW1DaHVua3Mscj0wO3I8dDsrK3Ipe3ZhciBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zO3JldHVybiBlPj10aGlzLmVuZD8tMTooZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSx0aGlzLmJ5dGVzW3RoaXMucG9zKytdKX19LHtrZXk6ImdldEJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzLHI9dGhpcy5wb3Msbj10aGlzLmVuZDtpZighZSlyZXR1cm4gbj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLG4pLHQuc3ViYXJyYXkocixuKTt2YXIgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksYT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLGEpLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtmdW5jdGlvbiBuKCl7fXQ/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyksbi5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxyPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEsbj1bXSxhPXQ7YTxyOysrYSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGEpfHxuLnB1c2goYSk7cmV0dXJuIG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXNdfX1dKSxvfShyKDEzOSkuU3RyZWFtKTt0LkNodW5rZWRTdHJlYW09ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtjKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgZCh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGwoZSxbe2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO24uaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChuLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO3ZhciBpPVtdLG89MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhjKXt0cnl7aWYoIWMuZG9uZSl7dmFyIHU9Yy52YWx1ZTtyZXR1cm4gaS5wdXNoKHUpLG8rPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKSh1KSxuLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBuLnJlYWQoKS50aGVuKHMsdCl9dmFyIGw9KDAsYS5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZShsKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5jdXJyUmVxdWVzdElkKyssbj1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocixuKTt2YXIgaSxzPW8oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO3RoaXMuc3RyZWFtLmhhc0NodW5rKGMpfHxuLmFkZChjKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMD09PW4uc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIHU9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocix1KTt2YXIgbCxmPVtdLGg9byhuKTt0cnl7Zm9yKGgucygpOyEobD1oLm4oKSkuZG9uZTspe3ZhciBkPWwudmFsdWUscD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGQpO3B8fChwPVtdLHRoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZCxwKSxmLnB1c2goZCkpLHAucHVzaChyKX19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9aWYoZi5sZW5ndGg+MCl7dmFyIGcsdj1vKHRoaXMuZ3JvdXBDaHVua3MoZikpO3RyeXtmb3Iodi5zKCk7IShnPXYubigpKS5kb25lOyl7dmFyIHk9Zy52YWx1ZSxtPXkuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxiPU1hdGgubWluKHkuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QobSxiKS5jYXRjaCh1LnJlamVjdCl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfX1yZXR1cm4gdS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5hYm9ydGVkKXRocm93IGV9KSl9fSx7a2V5OiJnZXRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZWFtfX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxuPXRoaXMuZ2V0RW5kQ2h1bmsodCksYT1bXSxpPXI7aTxuOysraSlhLnB1c2goaSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9fSx7a2V5OiJyZXF1ZXN0UmFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1vKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWZvcih2YXIgbj1lLnZhbHVlLGE9dGhpcy5nZXRCZWdpbkNodW5rKG4uYmVnaW4pLGk9dGhpcy5nZXRFbmRDaHVuayhuLmVuZCkscz1hO3M8aTsrK3MpdC5pbmNsdWRlcyhzKXx8dC5wdXNoKHMpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSx0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfX0se2tleToiZ3JvdXBDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49LTEsYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7dmFyIG89ZVthXTtyPDAmJihyPW8pLG4+PTAmJm4rMSE9PW8mJih0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpuKzF9KSxyPW8pLGErMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpvKzF9KSxuPW99cmV0dXJuIHR9fSx7a2V5OiJvblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9fSx7a2V5OiJvblJlY2VpdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNodW5rLHI9dm9pZCAwPT09ZS5iZWdpbixuPXI/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixhPW4rdC5ieXRlTGVuZ3RoLGk9TWF0aC5mbG9vcihuL3RoaXMuY2h1bmtTaXplKSxzPWE8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoYS90aGlzLmNodW5rU2l6ZSk7cj8odGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWEpOnRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEobix0KSx0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Zm9yKHZhciBjPVtdLHU9aTt1PHM7Kyt1KXt2YXIgbD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KHUpO2lmKGwpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUodSk7dmFyIGYsaD1vKGwpO3RyeXtmb3IoaC5zKCk7IShmPWgubigpKS5kb25lOyl7dmFyIGQ9Zi52YWx1ZSxwPXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoZCk7cC5oYXModSkmJnAuZGVsZXRlKHUpLHAuc2l6ZT4wfHxjLnB1c2goZCl9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXt2YXIgZztpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXt2YXIgdj10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh2KXx8KGc9dil9ZWxzZSBnPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZykmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2ddKX1mb3IodmFyIHk9MCxtPWM7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0sdz10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoYik7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGIpLHcucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO3ZhciB0LHI9byh0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUucmVqZWN0KGUpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXB9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUsbixhLGkpe3ZhciBzO3JldHVybiBvKHRoaXMsciksKHM9dC5jYWxsKHRoaXMpKS5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHMuc3RhcnQ9bnx8MCxzLnBvcz1zLnN0YXJ0LHMuZW5kPW4rYXx8cy5ieXRlcy5sZW5ndGgscy5kaWN0PWksc31yZXR1cm4gYyhyLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXMscj10aGlzLnBvcyxuPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KHIsbik7dmFyIGE9citlO3JldHVybiBhPm4mJihhPW4pLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBuZXcgcih0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsbil9fV0pLHJ9KGEuQmFzZVN0cmVhbSk7dC5TdHJlYW09ZDt2YXIgcD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsKDAsaS5zdHJpbmdUb0J5dGVzKShlKSl9cmV0dXJuIGMocil9KGQpO3QuU3RyaW5nU3RyZWFtPXA7dmFyIGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcigpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoMCkpfXJldHVybiBjKHIpfShkKTt0Lk51bGxTdHJlYW09Z30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIG49cigxNDEpLGE9cigyKSxpPXIoMTM1KSxvPXIoMTM0KSxzPXIoMTgwKSxjPXIoMTM2KSx1PXIoMTk2KSxsPXIoMTk4KSxmPXIoMjAwKSxoPXIoMjI5KSxkPXIoMTQ2KSxwPXIoMTM5KSxnPXIoMjA0KSx2PXIoMTkxKSx5PXIoMTQ0KSxtPXIoMTQ4KSxiPXIoMjAzKSx3PXIoMTk0KSxrPXIoMjA1KSxTPXIoMjMwKTtmdW5jdGlvbiB4KGUpe3JldHVybiB4PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4KGUpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8UChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQSgpe0E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09eChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fFAoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9UChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gUChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gVChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIFQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtJKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtJKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaihlLHQpe3JldHVybiBqPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saihlLHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIE09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LE0oZSl9ZnVuY3Rpb24gXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXgobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT14KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBSKGUsdCxyKXtyZXR1cm4gdCYmTChlLnByb3RvdHlwZSx0KSxyJiZMKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgTj1bMCwwLDYxMiw3OTJdLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5nbG9iYWxJZEZhY3RvcnksYz10LmZvbnRDYWNoZSx1PXQuYnVpbHRJbkNNYXBDYWNoZSxsPXQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGY9dC5nbG9iYWxJbWFnZUNhY2hlLGg9dC5ub25CbGVuZE1vZGVzU2V0LGQ9dC54ZmFGYWN0b3J5O18odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9cix0aGlzLnBhZ2VJbmRleD1hLHRoaXMucGFnZURpY3Q9aSx0aGlzLnhyZWY9bix0aGlzLnJlZj1vLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPXUsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Zix0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aCx0aGlzLmV2YWx1YXRvck9wdGlvbnM9ci5ldmFsdWF0b3JPcHRpb25zLHRoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsLHRoaXMueGZhRmFjdG9yeT1kO3ZhciBwPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmooZSx0KX0oaSxlKTt2YXIgdCxyLG49KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLG49TSh0KTtpZihyKXt2YXIgYT1NKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PXgodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKCl7cmV0dXJuIF8odGhpcyxpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUihpLG51bGwsW3trZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwIi5jb25jYXQoYSwiXyIpLmNvbmNhdCgrK3Aub2JqKX19LHtrZXk6ImdldFBhZ2VPYmpJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4icGFnZSIuY29uY2F0KG8udG9TdHJpbmcoKSl9fV0pLGl9KHMpfXZhciB0LHIscztyZXR1cm4gUihlLFt7a2V5OiJfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dGhpcy5wYWdlRGljdCxrZXk6ZSxnZXRBcnJheTp0LHN0b3BXaGVuRm91bmQ6ITF9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8xIT09ci5sZW5ndGgmJnJbMF1pbnN0YW5jZW9mIG8uRGljdD9vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpyfSk6clswXTpyfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9fSx7a2V5OiJyZXNvdXJjZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBvLkRpY3Q/ZTpvLkRpY3QuZW1wdHkpfX0se2tleToiX2dldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O3ZhciB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZigodD1hLlV0aWwubm9ybWFsaXplUmVjdCh0KSlbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxhLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9fSx7a2V5OiJtZWRpYUJveCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Til9fSx7a2V5OiJjcm9wQm94IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLGEuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9fSx7a2V5OiJ2aWV3IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyb3BCb3gsdD10aGlzLm1lZGlhQm94O2lmKGUhPT10JiYhKDAsYS5pc0FycmF5RXF1YWwpKGUsdCkpe3ZhciByPWEuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLGEud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLGEuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfX0se2tleToiX29uU3ViU3RyZWFtRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pLHZvaWQoMCxhLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQociwnKTogIicpLmNvbmNhdCh0LCciLicpKTt0aHJvdyB0fX0se2tleToiZ2V0Q29udGVudFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/cjpBcnJheS5pc0FycmF5KHIpP25ldyBtLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShyLHQuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0LGUpKTpuZXcgcC5OdWxsU3RyZWFtfSkpfX0se2tleToieGZhRGF0YSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX19LHtrZXk6InNhdmVOZXdBbm5vdGF0aW9ucyIsdmFsdWU6KHM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGksbyxzLGMsdSxsLGYsaCxkLHAsZztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhmYUZhY3Rvcnkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y2FzZSAyOnJldHVybiBpPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPXRoaXMucGFnZURpY3Qscz10aGlzLmFubm90YXRpb25zLnNsaWNlKCksZS5uZXh0PTcsbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSxyLGEpO2Nhc2UgNzpjPWUuc2VudCx1PUYoYy5hbm5vdGF0aW9ucyk7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWY9bC52YWx1ZS5yZWYscy5wdXNoKGYpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXJldHVybiBoPW8uZ2V0KCJBbm5vdHMiKSxvLnNldCgiQW5ub3RzIixzKSxkPVtdLHA9bnVsbCx0aGlzLnhyZWYuZW5jcnlwdCYmKHA9dGhpcy54cmVmLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSwoMCx3LndyaXRlT2JqZWN0KSh0aGlzLnJlZixvLGQscCksaCYmby5zZXQoIkFubm90cyIsaCksKGc9Yy5kZXBlbmRlbmNpZXMpLnB1c2guYXBwbHkoZyxbe3JlZjp0aGlzLnJlZixkYXRhOmQuam9pbigiIil9XS5jb25jYXQoQyhjLmFubm90YXRpb25zKSkpLGUuYWJydXB0KCJyZXR1cm4iLGcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBpLG89W10scz1GKGUpO3RyeXtmb3Iocy5zKCk7IShpPXMubigpKS5kb25lOyl7dmFyIGM9aS52YWx1ZTtjLm11c3RCZVByaW50ZWQocikmJm8ucHVzaChjLnNhdmUobix0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiKyciJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pKX0pKX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbz1lLnNpbmsscz1lLnRhc2ssYz1lLmludGVudCx1PWUuY2FjaGVLZXksbD1lLmFubm90YXRpb25TdG9yYWdlLGY9dm9pZCAwPT09bD9udWxsOmwsaD10aGlzLmdldENvbnRlbnRTdHJlYW0ociksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSkscD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZz10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShmKSxtPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXt2YXIgYj1nLmdldCh0aGlzLnBhZ2VJbmRleCk7YiYmKG09bi5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHAscyxiKSl9dmFyIHc9UHJvbWlzZS5hbGwoW2gsZF0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPU8oZSwxKVswXSxhPW5ldyB2Lk9wZXJhdG9yTGlzdChjLG8pO3JldHVybiByLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTpwLmhhc0JsZW5kTW9kZXModC5yZXNvdXJjZXMsdC5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dC5wYWdlSW5kZXgsY2FjaGVLZXk6dX0pLHAuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOnMscmVzb3VyY2VzOnQucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDphfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsbV0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PU8oZSwzKSxyPXRbMF0sbj10WzFdLGk9dFsyXTtpZihpJiYobj1uLmNvbmNhdChpKSksMD09PW4ubGVuZ3RofHxjJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiByLmZsdXNoKCEwKSx7bGVuZ3RoOnIudG90YWxMZW5ndGh9O3ZhciBvLHU9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLGw9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGMmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGc9W10sdj1GKG4pO3RyeXtmb3Iodi5zKCk7IShvPXYubigpKS5kb25lOyl7dmFyIHk9by52YWx1ZTsobHx8aCYmeS5tdXN0QmVWaWV3ZWQoZil8fGQmJnkubXVzdEJlUHJpbnRlZChmKSkmJmcucHVzaCh5LmdldE9wZXJhdG9yTGlzdChwLHMsYyx1LGYpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIrJyInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXJldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdCxuPSExLGE9ITEsaT1GKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89dC52YWx1ZSxzPW8ub3BMaXN0LGM9by5zZXBhcmF0ZUZvcm0sdT1vLnNlcGFyYXRlQ2FudmFzO3IuYWRkT3BMaXN0KHMpLGMmJihuPWMpLHUmJihhPXUpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gci5mbHVzaCghMCx7Zm9ybTpuLGNhbnZhczphfSkse2xlbmd0aDpyLnRvdGFsTGVuZ3RofX0pKX0pKX19LHtrZXk6ImV4dHJhY3RUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFuZGxlcixuPWUudGFzayxhPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLmdldENvbnRlbnRTdHJlYW0ociksYz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtzLGNdKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcz1PKGUsMSlbMF07cmV0dXJuIG5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dC54cmVmLGhhbmRsZXI6cixwYWdlSW5kZXg6dC5wYWdlSW5kZXgsaWRGYWN0b3J5OnQuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazpuLHJlc291cmNlczp0LnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOmksdmlld0JveDp0LnZpZXd9KX0pKX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbdF0pO2Nhc2UgNzpyZXR1cm4gcj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsci5zZXJpYWxpemFibGUpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9wYXJzZVN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiLlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7cmV0dXJuIHQucGFyc2UoKSx0fX0se2tleToiZ2V0QW5ub3RhdGlvbnNEYXRhIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaSxvLHMsYyx1LGwsZixoLGQscCxnO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2Nhc2UgMjppZigwIT09KGk9ZS5zZW50KS5sZW5ndGgpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA1Om89W10scz1bXSx1PSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksbD0hIShuJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxmPSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKSxoPUYoaSk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSwoKGc9dXx8bCYmcC52aWV3YWJsZSl8fGYmJnAucHJpbnRhYmxlKSYmcy5wdXNoKHAuZGF0YSkscC5oYXNUZXh0Q29udGVudCYmZyYmKGN8fChjPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSksby5wdXNoKHAuZXh0cmFjdFRleHRDb250ZW50KGMscix0aGlzLnZpZXcpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxhLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGUubmV4dD0xMixQcm9taXNlLmFsbChvKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJhbm5vdGF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfX0se2tleToiX3BhcnNlZEFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQscj1bXSxpPUYoZS5hbm5vdGF0aW9ucyk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO3IucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShlLnhyZWYsbyxlLnBkZk1hbmFnZXIsZS5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdCxyLGE9W10saT1GKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvJiYobyBpbnN0YW5jZW9mIG4uUG9wdXBBbm5vdGF0aW9uPyh0fHwodD1bXSksdC5wdXNoKG8pKTphLnB1c2gobykpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdCYmYS5wdXNoLmFwcGx5KGEsQyh0KSksYX0pKX0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19LHtrZXk6ImpzQWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3QsYS5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19XSksZX0oKTt0LlBhZ2U9RDt2YXIgQj1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxVPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksJD1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLG89aS5sZW5ndGgtYTtpZihvPD0wKXJldHVybiExO2lmKG4pZm9yKHZhciBzPWEtMSxjPWkubGVuZ3RoLTE7Yz49czspe2Zvcih2YXIgdT0wO3U8YSYmaVtjLXVdPT09dFtzLXVdOyl1Kys7aWYodT49YSlyZXR1cm4gZS5wb3MrPWMtcywhMDtjLS19ZWxzZSBmb3IodmFyIGw9MDtsPD1vOyl7Zm9yKHZhciBmPTA7ZjxhJiZpW2wrZl09PT10W2ZdOylmKys7aWYoZj49YSlyZXR1cm4gZS5wb3MrPWwsITA7bCsrfXJldHVybiExfXZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2lmKF8odGhpcyxlKSxyLmxlbmd0aDw9MCl0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1yLHRoaXMueHJlZj1uZXcgUy5YUmVmKHIsdCksdGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXAsdGhpcy5fdmVyc2lvbj1udWxsO3ZhciBuPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIFIoZSxudWxsLFt7a2V5OiJnZXREb2NJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZ18iLmNvbmNhdCh0LmRvY0lkKX19LHtrZXk6ImNyZWF0ZUZvbnRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZiIuY29uY2F0KCsrbi5mb250KX19LHtrZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9fSx7a2V5OiJnZXRQYWdlT2JqSWQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fV0pLGV9KCl9dmFyIHQscixwLG0sYix3LEMsUDtyZXR1cm4gUihlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy54cmVmLnBhcnNlKGUpLHRoaXMuY2F0YWxvZz1uZXcgbC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1kLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoZSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSxYKGUsJCkmJih0PWUucG9zKzYtZS5zdGFydCk7ZWxzZXtmb3IodmFyIHI9VS5sZW5ndGgsbj0hMSxvPWUuZW5kOyFuJiZvPjA7KShvLT0xMDI0LXIpPDAmJihvPTApLGUucG9zPW8sbj1YKGUsVSwxMDI0LCEwKTtpZihuKXt2YXIgcztlLnNraXAoOSk7ZG97cz1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocykpO2Zvcih2YXIgYz0iIjtzPj0zMiYmczw9NTc7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykscz1lLmdldEJ5dGUoKTt0PXBhcnNlSW50KGMsMTApLGlzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksWChlLEIpKXtlLm1vdmVTdGFydCgpLGUuc2tpcChCLmxlbmd0aCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZyLmxlbmd0aDw3OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3Qocik/dGhpcy5fdmVyc2lvbj1yOigwLGEud2FybikoIkludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAiLmNvbmNhdChyKSl9fX0se2tleToicGFyc2VTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsYS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6Il9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtpZighKChlPXQueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrcj4xMD8oKDAsYS53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dC5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHIpO3ZhciBuPSgwLG8uaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIiksaT1lLmdldCgiUmVjdCIpLHM9QXJyYXkuaXNBcnJheShpKSYmaS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSkpO3JldHVybiBuJiZzfSkpfX0se2tleToiX3hmYVN0cmVhbXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiWEZBIikscj17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpcmV0dXJuIHJbInhkcDp4ZHAiXT10LHI7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKz0yKXt2YXIgaTtpZihpPTA9PT1uPyJ4ZHA6eGRwIjpuPT09YS0yPyIveGRwOnhkcCI6dFtuXSxyLmhhc093blByb3BlcnR5KGkpKXt2YXIgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W24rMV0pO28gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHkmJihyW2ldPW8pfX1yZXR1cm4gcn19LHtrZXk6InhmYURhdGFzZXRzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKHZhciB0PTAscj1bImRhdGFzZXRzIiwieGRwOnhkcCJdO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9ZVtuXTtpZihpKXRyeXt2YXIgbz17W25dOigwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShpLmdldFN0cmluZygpKX07cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgaC5EYXRhc2V0UmVhZGVyKG8pKX1jYXRjaChlKXsoMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX19LHtrZXk6InhmYURhdGEiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj0wLG49T2JqZWN0LmVudHJpZXMoZSk7cjxuLmxlbmd0aDtyKyspe3ZhciBpPU8obltyXSwyKSxvPWlbMF0scz1pWzFdO2lmKHMpdHJ5e3Rbb109KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKHMuZ2V0U3RyaW5nKCkpfWNhdGNoKGUpe3JldHVybigwLGEud2FybikoIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpLG51bGx9fXJldHVybiB0fX0se2tleToieGZhRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpLCgwLGEuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBrLlhGQUZhY3RvcnkoZSk6bnVsbCl9fSx7a2V5OiJpc1B1cmVYZmEiLGdldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfX0se2tleToiaHRtbEZvclhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfX0se2tleToibG9hZFhmYUltYWdlcyIsdmFsdWU6KFA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhLGksbyxzLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIHI9dC5nZXRLZXlzKCksbj1uZXcgZy5PYmplY3RMb2FkZXIodCxyLHRoaXMueHJlZiksZS5uZXh0PTksbi5sb2FkKCk7Y2FzZSA5OmE9bmV3IE1hcCxpPUYocik7dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXM9by52YWx1ZSwodT10LmdldChzKSlpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmYS5zZXQocyx1LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRYZmFGb250cyIsdmFsdWU6KEM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGMsdSxsLGYsaCxkLHAsbSxiLHcsayxTLHgsQyxQLFQsSSxFLGosTSxfLEwsUixOLEQsQixVLCQsWCxILHEsRyx6O3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2Nhc2UgMjppZihuPWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG4uZ2V0QXN5bmMoIkRSIik7Y2FzZSA3OmlmKChjPWUuc2VudClpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpyZXR1cm4gdT1uZXcgZy5PYmplY3RMb2FkZXIoYyxbIkZvbnQiXSx0aGlzLnhyZWYpLGUubmV4dD0xMyx1LmxvYWQoKTtjYXNlIDEzOmlmKChsPWMuZ2V0KCJGb250IikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTY6KGY9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKSkudXNlU3lzdGVtRm9udHM9ITEsaD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmZ9KSxkPW5ldyB2Lk9wZXJhdG9yTGlzdCxwPVtdLGUudDA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbT17Z2V0IGZvbnQoKXtyZXR1cm4gcC5hdCgtMSl9LHNldCBmb250KGUpe3AucHVzaChlKX0sY2xvbmU6ZS50MH0sYj1uZXcgTWFwLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSkpLHc9W10saz1GKGIpLGUucHJldj0yNyxrLnMoKTtjYXNlIDI5OmlmKChTPWsubigpKS5kb25lKXtlLm5leHQ9NDQ7YnJlYWt9aWYoeD1PKFMudmFsdWUsMiksQz14WzBdLFA9eFsxXSwoVD1QLmdldCgiRm9udERlc2NyaXB0b3IiKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTM0O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDQyKTtjYXNlIDM0OmlmKEk9KEk9VC5nZXQoIkZvbnRGYW1pbHkiKSkucmVwbGFjZSgvWyBdKyhcZCkvZywiJDEiKSxFPVQuZ2V0KCJGb250V2VpZ2h0Iiksaj0tVC5nZXQoIkl0YWxpY0FuZ2xlIiksTT17Zm9udEZhbWlseTpJLGZvbnRXZWlnaHQ6RSxpdGFsaWNBbmdsZTpqfSwoMCxpLnZhbGlkYXRlQ1NTRm9udCkoTSkpe2UubmV4dD00MTticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw0Mik7Y2FzZSA0MTp3LnB1c2goaC5oYW5kbGVTZXRGb250KGMsW28uTmFtZS5nZXQoQyksMV0sbnVsbCxkLHIsbSxudWxsLE0pLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkWGZhRm9udHM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtjYXNlIDQyOmUubmV4dD0yOTticmVhaztjYXNlIDQ0OmUubmV4dD00OTticmVhaztjYXNlIDQ2OmUucHJldj00NixlLnQxPWUuY2F0Y2goMjcpLGsuZShlLnQxKTtjYXNlIDQ5OnJldHVybiBlLnByZXY9NDksay5mKCksZS5maW5pc2goNDkpO2Nhc2UgNTI6cmV0dXJuIGUubmV4dD01NCxQcm9taXNlLmFsbCh3KTtjYXNlIDU0OmlmKF89dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKHApKXtlLm5leHQ9NTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU3OmYuaWdub3JlRXJyb3JzPSEwLHcubGVuZ3RoPTAscC5sZW5ndGg9MCxMPW5ldyBTZXQsUj1GKF8pO3RyeXtmb3IoUi5zKCk7IShOPVIubigpKS5kb25lOylEPU4udmFsdWUsKDAscy5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KEQsIi1SZWd1bGFyIikpfHxMLmFkZChEKX1jYXRjaChlKXtSLmUoZSl9ZmluYWxseXtSLmYoKX1MLnNpemUmJl8ucHVzaCgiUGRmSlMtRmFsbGJhY2siKSxCPUYoXyksZS5wcmV2PTY1LEIucygpO2Nhc2UgNjc6aWYoKFU9Qi5uKCkpLmRvbmUpe2UubmV4dD03NDticmVha31pZigkPVUudmFsdWUsIUwuaGFzKCQpKXtlLm5leHQ9NzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJjb250aW51ZSIsNzIpO2Nhc2UgNzE6Zm9yKFg9MCxIPVt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XTtYPEgubGVuZ3RoO1grKylxPUhbWF0sRz0iIi5jb25jYXQoJCwiLSIpLmNvbmNhdChxLm5hbWUpLHo9KDAscy5nZXRYZmFGb250RGljdCkoRyksdy5wdXNoKGguaGFuZGxlU2V0Rm9udChjLFtvLk5hbWUuZ2V0KEcpLDFdLG51bGwsZCxyLG0seix7Zm9udEZhbWlseTokLGZvbnRXZWlnaHQ6cS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7Y2FzZSA3MjplLm5leHQ9Njc7YnJlYWs7Y2FzZSA3NDplLm5leHQ9Nzk7YnJlYWs7Y2FzZSA3NjplLnByZXY9NzYsZS50Mj1lLmNhdGNoKDY1KSxCLmUoZS50Mik7Y2FzZSA3OTpyZXR1cm4gZS5wcmV2PTc5LEIuZigpLGUuZmluaXNoKDc5KTtjYXNlIDgyOnJldHVybiBlLm5leHQ9ODQsUHJvbWlzZS5hbGwodyk7Y2FzZSA4NDp0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocCxMKTtjYXNlIDg1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMjcsNDYsNDksNTJdLFs2NSw3Niw3OSw4Ml1dKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplWGZhRGF0YSIsdmFsdWU6KHc9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEodCk6bnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn19LHtrZXk6ImZvcm1JbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXt2YXIgcj10LmdldCgiRmllbGRzIiksbj1BcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wO2UuaGFzRmllbGRzPW47dmFyIG89dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjB8fG8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHk7dmFyIHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksdT1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXUsZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9fSx7a2V5OiJkb2N1bWVudEluZm8iLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTt0cnl7ZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIix0KTt2YXIgcixuPUYoZS5nZXRLZXlzKCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIHM9ci52YWx1ZSxjPWUuZ2V0KHMpO3N3aXRjaChzKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYyl7dFtzXT0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGMgaW5zdGFuY2VvZiBvLk5hbWUpe3Rbc109Yztjb250aW51ZX1icmVhaztkZWZhdWx0OnZhciB1PXZvaWQgMDtzd2l0Y2goeChjKSl7Y2FzZSJzdHJpbmciOnU9KDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dT1jO2JyZWFrO2RlZmF1bHQ6YyBpbnN0YW5jZW9mIG8uTmFtZSYmKHU9Yyl9aWYodm9pZCAwPT09dSl7KDAsYS53YXJuKSgnQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSk7Y29udGludWV9dC5DdXN0b218fCh0LkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKSx0LkN1c3RvbVtzXT11O2NvbnRpbnVlfSgwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLHQpfX0se2tleToiZmluZ2VycHJpbnRzIixnZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXt2YXIgdCxyPVtdLG49RihlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWUudG9TdHJpbmcoMTYpO3IucHVzaChhLnBhZFN0YXJ0KDIsIjAiKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByLmpvaW4oIiIpfXZhciByLG4saT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmUoaVswXSk/KHI9KDAsYS5zdHJpbmdUb0J5dGVzKShpWzBdKSxpWzFdIT09aVswXSYmZShpWzFdKSYmKG49KDAsYS5zdHJpbmdUb0J5dGVzKShpWzFdKSkpOnI9KDAsdS5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCksKDAsYS5zaGFkb3cpKHRoaXMsImZpbmdlcnByaW50cyIsW3Qociksbj90KG4pOm51bGxdKX19LHtrZXk6Il9nZXRMaW5lYXJpemF0aW9uUGFnZSIsdmFsdWU6KGI9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGkscyxjLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcj10aGlzLmNhdGFsb2csbj10aGlzLmxpbmVhcml6YXRpb24saT10aGlzLnhyZWYscz1vLlJlZi5nZXQobi5vYmplY3ROdW1iZXJGaXJzdCwwKSxlLnByZXY9MixlLm5leHQ9NSxpLmZldGNoQXN5bmMocyk7Y2FzZSA1OmlmKCEoKGM9ZS5zZW50KWluc3RhbmNlb2Ygby5EaWN0KSl7ZS5uZXh0PTE2O2JyZWFrfWlmKCEoKHU9Yy5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLm5leHQ9MTEsaS5mZXRjaEFzeW5jKHUpO2Nhc2UgMTE6dT1lLnNlbnQ7Y2FzZSAxMjppZighKDAsby5pc05hbWUpKHUsIlBhZ2UiKSYmKGMuaGFzKCJUeXBlIil8fGMuaGFzKCJLaWRzIikpKXtlLm5leHQ9MTY7YnJlYWt9cmV0dXJuIHIucGFnZUtpZHNDb3VudENhY2hlLmhhcyhzKXx8ci5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHMsMSksci5wYWdlSW5kZXhDYWNoZS5oYXMocyl8fHIucGFnZUluZGV4Q2FjaGUucHV0KHMsMCksZS5hYnJ1cHQoInJldHVybiIsW2Msc10pO2Nhc2UgMTY6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKTtjYXNlIDE5OnJldHVybiBlLnByZXY9MTksZS50MD1lLmNhdGNoKDIpLCgwLGEud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KGUudDAubWVzc2FnZSwnIi4nKSksZS5hYnJ1cHQoInJldHVybiIsci5nZXRQYWdlRGljdCh0KSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTldXSl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZihyKXJldHVybiByO3ZhciBuLGE9dGhpcy5jYXRhbG9nLGk9dGhpcy5saW5lYXJpemF0aW9uLHM9dGhpcy54ZmFGYWN0b3J5O3JldHVybiBuPShuPXM/UHJvbWlzZS5yZXNvbHZlKFtvLkRpY3QuZW1wdHksbnVsbF0pOmkmJmkucGFnZUZpcnN0PT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTphLmdldFBhZ2VEaWN0KGUpKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj1PKHIsMiksaT1uWzBdLG89blsxXTtyZXR1cm4gbmV3IEQoe3BkZk1hbmFnZXI6dC5wZGZNYW5hZ2VyLHhyZWY6dC54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OmkscmVmOm8sZ2xvYmFsSWRGYWN0b3J5OnQuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6c30pfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKSxufX0se2tleToiY2hlY2tGaXJzdFBhZ2UiLHZhbHVlOihtPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighKHQubGVuZ3RoPjAmJnZvaWQgMCE9PXRbMF0mJnRbMF0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5wcmV2PTMsZS5uZXh0PTYsdGhpcy5nZXRQYWdlKDApO2Nhc2UgNjplLm5leHQ9MTU7YnJlYWs7Y2FzZSA4OmlmKGUucHJldj04LGUudDA9ZS5jYXRjaCgzKSwhKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbikpe2UubmV4dD0xNTticmVha31yZXR1cm4gdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxlLm5leHQ9MTQsdGhpcy5jbGVhbnVwKCk7Y2FzZSAxNDp0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzMsOF1dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2hlY2tMYXN0UGFnZSIsdmFsdWU6KHA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixvLHMsYyx1LGwsZixoLGQscCxnLHY9YXJndW1lbnRzO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9di5sZW5ndGg+MCYmdm9pZCAwIT09dlswXSYmdlswXSxyPXRoaXMuY2F0YWxvZyxuPXRoaXMucGRmTWFuYWdlcixyLnNldEFjdHVhbE51bVBhZ2VzKCksZS5wcmV2PTMsZS5uZXh0PTYsUHJvbWlzZS5hbGwoW24uZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5Iiksbi5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxuLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtjYXNlIDY6aWYoIXRoaXMueGZhRmFjdG9yeSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpvPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6ci5udW1QYWdlcztjYXNlIDExOmlmKE51bWJlci5pc0ludGVnZXIobykpe2UubmV4dD0xNTticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtjYXNlIDE1OmlmKCEobzw9MSkpe2UubmV4dD0xNzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTc6cmV0dXJuIGUubmV4dD0xOSx0aGlzLmdldFBhZ2Uoby0xKTtjYXNlIDE5OmUubmV4dD00NDticmVhaztjYXNlIDIxOnJldHVybiBlLnByZXY9MjEsZS50MD1lLmNhdGNoKDMpLHRoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoby0xKSxlLm5leHQ9MjYsdGhpcy5jbGVhbnVwKCk7Y2FzZSAyNjppZighKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbil8fHQpe2UubmV4dD0yODticmVha310aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAyODpyZXR1cm4oMCxhLndhcm4pKCJjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICIuY29uY2F0KG8sIi4iKSksZS5wcmV2PTI5LGUubmV4dD0zMixyLmdldEFsbFBhZ2VEaWN0cyh0KTtjYXNlIDMyOnM9ZS5zZW50LGUubmV4dD00MTticmVhaztjYXNlIDM1OmlmKGUucHJldj0zNSxlLnQxPWUuY2F0Y2goMjkpLCEoZS50MSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXx8dCl7ZS5uZXh0PTM5O2JyZWFrfXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtjYXNlIDM5OnJldHVybiByLnNldEFjdHVhbE51bVBhZ2VzKDEpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQxOmM9RihzKTt0cnl7Zm9yKGMucygpOyEodT1jLm4oKSkuZG9uZTspbD1PKHUudmFsdWUsMiksZj1sWzBdLGg9TyhsWzFdLDIpLGQ9aFswXSxwPWhbMV0sZz12b2lkIDAsZCBpbnN0YW5jZW9mIEVycm9yPyhnPVByb21pc2UucmVqZWN0KGQpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSk6Zz1Qcm9taXNlLnJlc29sdmUobmV3IEQoe3BkZk1hbmFnZXI6bix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZixwYWdlRGljdDpkLHJlZjpwLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnIuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6ci5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTpyLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnIuZ2xvYmFsSW1hZ2VDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSksdGhpcy5fcGFnZVByb21pc2VzLnNldChmLGcpfWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXIuc2V0QWN0dWFsTnVtUGFnZXMocy5zaXplKTtjYXNlIDQ0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMywyMV0sWzI5LDM1XV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX19LHtrZXk6ImNsZWFudXAiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyPWFyZ3VtZW50cztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIubGVuZ3RoPjAmJnZvaWQgMCE9PXJbMF0mJnJbMF0sZS5hYnJ1cHQoInJldHVybiIsdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKHQpOigwLGYuY2xlYXJHbG9iYWxDYWNoZXMpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9jb2xsZWN0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7dmFyIG89KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/bzoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChvKX1pZihyLmhhcyhlKXx8ci5zZXQoZSxbXSksci5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITApLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmdldEZpZWxkT2JqZWN0KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLGEud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7dmFyIHMsYz1GKGkuZ2V0KCJLaWRzIikpO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOyl7dmFyIHU9cy52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKGUsdSxyKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19LHtrZXk6ImZpZWxkT2JqZWN0cyIsZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9bmV3IE1hcCxuPUYodGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGkscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBvLHM9W10sYz1GKHIpO3RyeXt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPU8oby52YWx1ZSwyKSxyPWVbMF0sbj1lWzFdO3MucHVzaChQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXsoZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpKS5sZW5ndGg+MCYmKHRbcl09ZSl9KSkpfTtmb3IoYy5zKCk7IShvPWMubigpKS5kb25lOyl1KCl9Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJoYXNKU0FjdGlvbnMiLGUpfX0se2tleToiX3BhcnNlSGFzSlNBY3Rpb25zIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLGE7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2Nhc2UgMjppZih0PWUuc2VudCxyPU8odCwyKSxuPXJbMF0sYT1yWzFdLCFuKXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgODppZighYSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixPYmplY3QudmFsdWVzKGEpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5hY3Rpb25zfSkpfSkpKTtjYXNlIDEwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbGN1bGF0aW9uT3JkZXJJZHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgcixuPVtdLGk9Rih0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7cyBpbnN0YW5jZW9mIG8uUmVmJiZuLnB1c2gocy50b1N0cmluZygpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIDA9PT1uLmxlbmd0aD8oMCxhLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsYS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG4pfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9SH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwLHQuZ2V0UXVhZFBvaW50cz1EO3ZhciBuPXIoMiksYT1yKDEzNSksaT1yKDE0Miksbz1yKDEzNCkscz1yKDE5NCksYz1yKDEzNiksdT1yKDE4OSksbD1yKDE5OCksZj1yKDE0MyksaD1yKDIwMSksZD1yKDIwNCkscD1yKDE5MSksZz1yKDEzOSksdj1yKDIwNSk7ZnVuY3Rpb24geSgpe3JldHVybiB5PSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9eChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYihlLHQpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGIoZSx0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXgoZSk7aWYodCl7dmFyIGE9eCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gayh0aGlzLHIpfX1mdW5jdGlvbiBrKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Tyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gUyhlKX1mdW5jdGlvbiBTKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4KGUpe3JldHVybiB4PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSx4KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9SShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gQygpe0M9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09TyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gRihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7RihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7RihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8SShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gRShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0UoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBqKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1PKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09TyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PU8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIF8oZSx0LHIpe3JldHVybiB0JiZNKGUucHJvdG90eXBlLHQpLHImJk0oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2oodGhpcyxlKX12YXIgdCxyLGk7cmV0dXJuIF8oZSxudWxsLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9dGhpcztyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoZnVuY3Rpb24obyl7dmFyIHM9VChvLDUpLGM9c1swXSx1PShzWzFdLHNbMl0pLGw9c1szXSxmPXNbNF07cmV0dXJuIHIuZW5zdXJlKGksIl9jcmVhdGUiLFtlLHQscixuLGMsdSxsLGEsZl0pfSkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCx1PWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLGw9YXJndW1lbnRzLmxlbmd0aD43P2FyZ3VtZW50c1s3XTp2b2lkIDAsZj1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06LTEsaD1lLmZldGNoSWZSZWYodCk7aWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQ9dCBpbnN0YW5jZW9mIG8uUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKSxwPWguZ2V0KCJTdWJ0eXBlIik7cD1wIGluc3RhbmNlb2Ygby5OYW1lP3AubmFtZTpudWxsO3ZhciBnPXMgaW5zdGFuY2VvZiBvLkRpY3Q/czpvLkRpY3QuZW1wdHksdj17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOnAsaWQ6ZCxwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06ZyxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOnUsY29sbGVjdEZpZWxkczpsLG5lZWRBcHBlYXJhbmNlczohbCYmITA9PT1nLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OmYsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bi5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfTtzd2l0Y2gocCl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IFkodik7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFYodik7Y2FzZSJXaWRnZXQiOnZhciB5PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO3N3aXRjaCh5PXkgaW5zdGFuY2VvZiBvLk5hbWU/eS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgcSh2KTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBHKHYpO2Nhc2UiQ2giOnJldHVybiBuZXcgeih2KTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBXKHYpfXJldHVybigwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIicuY29uY2F0KHksJyIsICcpKyJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLiIpLG5ldyBIKHYpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgSyh2KTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEoodik7Y2FzZSJMaW5lIjpyZXR1cm4gbmV3IFoodik7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgUSh2KTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBlZSh2KTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IHRlKHYpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyByZSh2KTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IG5lKHYpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IGFlKHYpO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IGllKHYpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IG9lKHYpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgc2Uodik7Y2FzZSJTdHJpa2VPdXQiOnJldHVybiBuZXcgY2Uodik7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyB1ZSh2KTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IGxlKHYpO2RlZmF1bHQ6cmV0dXJuIGx8fChwPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInLmNvbmNhdChwLCciLCAnKSsiZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi4iKTooMCxuLndhcm4pKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpKSxuZXcgVSh2KX19fX0se2tleToiX2dldFBhZ2VJbmRleCIsdmFsdWU6KGk9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGkscyxjO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUubmV4dD0zLHQuZmV0Y2hJZlJlZkFzeW5jKHIpO2Nhc2UgMzppZigoaT1lLnNlbnQpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSA2OmlmKChzPWkuZ2V0UmF3KCJQIikpaW5zdGFuY2VvZiBvLlJlZil7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLC0xKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSxhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3NdKTtjYXNlIDExOnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE1OnJldHVybiBlLnByZXY9MTUsZS50MD1lLmNhdGNoKDApLCgwLG4ud2FybikoJ19nZXRQYWdlSW5kZXg6ICInLmNvbmNhdChlLnQwLCciLicpKSxlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTVdXSl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZU5ld0Fubm90YXRpb25zIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhKXt2YXIgaSxjLHUsbCxmLGgsZCxwLGc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppPXQueHJlZix1PVtdLGw9W10sZj1BKGEpLGUucHJldj00LGYucygpO2Nhc2UgNjppZigoaD1mLm4oKSkuZG9uZSl7ZS5uZXh0PTE3O2JyZWFrfWQ9aC52YWx1ZSxlLnQwPWQuYW5ub3RhdGlvblR5cGUsZS5uZXh0PWUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUPzExOmUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8xNDoxNTticmVhaztjYXNlIDExOnJldHVybiBjfHwoKHA9bmV3IG8uRGljdChpKSkuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiSGVsdmV0aWNhIikpLHAuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGb250IikpLHAuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJUeXBlMSIpKSxwLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSxnPVtdLGM9aS5nZXROZXdUZW1wb3JhcnlSZWYoKSwoMCxzLndyaXRlT2JqZWN0KShjLHAsZyxudWxsKSx1LnB1c2goe3JlZjpjLGRhdGE6Zy5qb2luKCIiKX0pKSxsLnB1c2goSi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1LHtldmFsdWF0b3I6dCx0YXNrOnIsYmFzZUZvbnRSZWY6Y30pKSxlLmFicnVwdCgiYnJlYWsiLDE1KTtjYXNlIDE0OmwucHVzaChhZS5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1KSk7Y2FzZSAxNTplLm5leHQ9NjticmVhaztjYXNlIDE3OmUubmV4dD0yMjticmVhaztjYXNlIDE5OmUucHJldj0xOSxlLnQxPWUuY2F0Y2goNCksZi5lKGUudDEpO2Nhc2UgMjI6cmV0dXJuIGUucHJldj0yMixmLmYoKSxlLmZpbmlzaCgyMik7Y2FzZSAyNTpyZXR1cm4gZS5uZXh0PTI3LFByb21pc2UuYWxsKGwpO2Nhc2UgMjc6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9dSxlLmFicnVwdCgicmV0dXJuIix7YW5ub3RhdGlvbnM6ZS50MixkZXBlbmRlbmNpZXM6ZS50M30pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDE5LDIyLDI1XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InByaW50TmV3QW5ub3RhdGlvbnMiLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLG8scyxjLHUsbDtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGEpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDI6aT10LnhyZWYsbz1bXSxzPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJnQub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCxjPUEoYSksZS5wcmV2PTYsYy5zKCk7Y2FzZSA4OmlmKCh1PWMubigpKS5kb25lKXtlLm5leHQ9MTk7YnJlYWt9bD11LnZhbHVlLGUudDA9bC5hbm5vdGF0aW9uVHlwZSxlLm5leHQ9ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ/MTM6ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LPzE1OjE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG8ucHVzaChKLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLGwse2V2YWx1YXRvcjp0LHRhc2s6cixpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTU6cmV0dXJuIG8ucHVzaChhZS5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxsLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTc6ZS5uZXh0PTg7YnJlYWs7Y2FzZSAxOTplLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50MT1lLmNhdGNoKDYpLGMuZShlLnQxKTtjYXNlIDI0OnJldHVybiBlLnByZXY9MjQsYy5mKCksZS5maW5pc2goMjQpO2Nhc2UgMjc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UuYWxsKG8pKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNiwyMSwyNCwyN11dKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7ZnVuY3Rpb24gUihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O3ZhciByPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2Nhc2UgMzpyZXR1cm4gZi5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDQ6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fSkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aHx8ci5sZW5ndGglOD4wKXJldHVybiBudWxsO2Zvcih2YXIgbj1bXSxhPTAsaT1yLmxlbmd0aC84O2E8aTthKyspe2Zvcih2YXIgbz0xLzAscz0tMS8wLGM9MS8wLHU9LTEvMCxsPTgqYSxmPTgqYSs4O2w8ZjtsKz0yKXt2YXIgaD1yW2xdLGQ9cltsKzFdO289TWF0aC5taW4oaCxvKSxzPU1hdGgubWF4KGgscyksYz1NYXRoLm1pbihkLGMpLHU9TWF0aC5tYXgoZCx1KX1pZihudWxsIT09dCYmKG88dFswXXx8cz50WzJdfHxjPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7bi5wdXNoKFt7eDpvLHk6dX0se3g6cyx5OnV9LHt4Om8seTpjfSx7eDpzLHk6Y31dKX1yZXR1cm4gbn1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgYT1UKG4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLDQpLGk9YVswXSxvPWFbMV0scz1hWzJdLGM9YVszXTtpZihpPT09c3x8bz09PWMpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgdT0oZVsyXS1lWzBdKS8ocy1pKSxsPShlWzNdLWVbMV0pLyhjLW8pO3JldHVyblt1LDAsMCxsLGVbMF0taSp1LGVbMV0tbypsXX10LkFubm90YXRpb25GYWN0b3J5PUw7dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2oodGhpcyxlKTt2YXIgcj10LmRpY3QsaT10LnhyZWY7dGhpcy5zZXRUaXRsZShyLmdldCgiVCIpKSx0aGlzLnNldENvbnRlbnRzKHIuZ2V0KCJDb250ZW50cyIpKSx0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5zZXRGbGFncyhyLmdldCgiRiIpKSx0aGlzLnNldFJlY3RhbmdsZShyLmdldEFycmF5KCJSZWN0IikpLHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLnNldEJvcmRlclN0eWxlKHIpLHRoaXMuc2V0QXBwZWFyYW5jZShyKSx0aGlzLnNldE9wdGlvbmFsQ29udGVudChyKTt2YXIgcz1yLmdldCgiTUsiKTtpZih0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMocyksdGhpcy5zZXRSb3RhdGlvbihzKSx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSksdGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOnQuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOnQuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9LHQuY29sbGVjdEZpZWxkcyl7dmFyIGM9ci5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdSxsPVtdLGY9QShjKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aCBpbnN0YW5jZW9mIG8uUmVmJiZsLnB1c2goaC50b1N0cmluZygpKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9MCE9PWwubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1sKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShyKSx0aGlzLmRhdGEucGFnZUluZGV4PXQucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsLHRoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX12YXIgdCxyLHM7cmV0dXJuIF8oZSxbe2tleToiX2hhc0ZsYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSZ0KX19LHtrZXk6Il9pc1ZpZXdhYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfX0se2tleToibXVzdEJlVmlld2VkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9fSx7a2V5OiJtdXN0QmVQcmludGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LnByaW50P3QucHJpbnQ6dGhpcy5wcmludGFibGV9fSx7a2V5OiJ2aWV3YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX19LHtrZXk6InByaW50YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpfX0se2tleToiX3BhcnNlU3RyaW5nSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLHUuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX19LHtrZXk6InNldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfX0se2tleToic2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0TW9kaWZpY2F0aW9uRGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9fSx7a2V5OiJzZXRGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfX0se2tleToiaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX19LHtrZXk6InNldFJlY3RhbmdsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPW4uVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX19LHtrZXk6InNldENvbG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbG9yPVIoZSl9fSx7a2V5OiJzZXRMaW5lRW5kaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl0sQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcih2YXIgdD0wO3Q8Mjt0Kyspe3ZhciByPWVbdF07aWYociBpbnN0YW5jZW9mIG8uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPXIubmFtZTtjb250aW51ZX0oMCxuLndhcm4pKCJJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICIuY29uY2F0KHIpKX19fSx7a2V5OiJzZXRSb3RhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yb3RhdGlvbj0wLGUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB0PWUuZ2V0KCJSIil8fDA7TnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQmJigodCU9MzYwKTwwJiYodCs9MzYwKSx0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KSl9fX0se2tleToic2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG8uRGljdD8odGhpcy5ib3JkZXJDb2xvcj1SKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9UihlLmdldEFycmF5KCJCRyIpLG51bGwpKTp0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9fSx7a2V5OiJzZXRCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5ib3JkZXJTdHlsZT1uZXcgJCxlIGluc3RhbmNlb2Ygby5EaWN0KWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLG8uaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBuPWUuZ2V0KCJBUyIpO24gaW5zdGFuY2VvZiBvLk5hbWUmJnIuaGFzKG4ubmFtZSkmJih0aGlzLmFwcGVhcmFuY2U9ci5nZXQobi5uYW1lKSl9fX19LHtrZXk6InNldE9wdGlvbmFsQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vYz1udWxsO3ZhciB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIG8uRGljdCYmKHRoaXMub2M9dCl9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIG5ldyBkLk9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KHM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLHMpe3ZhciBjLHUsbCxmLGgsZCx2LHksbSxiO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz10aGlzLmRhdGEsdT10aGlzLmFwcGVhcmFuY2UsbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSx1KXtlLm5leHQ9ODticmVha31pZihsKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSA2Oih1PW5ldyBnLlN0cmluZ1N0cmVhbSgiIikpLmRpY3Q9bmV3IG8uRGljdDtjYXNlIDg6cmV0dXJuIGY9dS5kaWN0LGUubmV4dD0xMSx0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJDb2xvclNwYWNlIiwiUGF0dGVybiIsIlNoYWRpbmciLCJYT2JqZWN0IiwiRm9udCJdLHUpO2Nhc2UgMTE6aWYoaD1lLnNlbnQsZD1mLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx2PWYuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLHk9QihjLnJlY3QsZCx2KSxtPW5ldyBwLk9wZXJhdG9yTGlzdCwhdGhpcy5vYyl7ZS5uZXh0PTIwO2JyZWFrfXJldHVybiBlLm5leHQ9MTksdC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpO2Nhc2UgMTk6Yj1lLnNlbnQ7Y2FzZSAyMDpyZXR1cm4gdm9pZCAwIT09YiYmbS5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixiXSksbS5hZGRPcChuLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LHksdixsXSksZS5uZXh0PTI0LHQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dSx0YXNrOnIscmVzb3VyY2VzOmgsb3BlcmF0b3JMaXN0Om0sZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSk7Y2FzZSAyNDpyZXR1cm4gbS5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1iJiZtLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSxlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om0sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9KTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZSIsdmFsdWU6KHI9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFzVGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiExfX0se2tleToiZXh0cmFjdFRleHRDb250ZW50Iix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpLG8scztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxpPVtdLG89W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1BKGUuaXRlbXMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTtvLnB1c2goYS5zdHIpLGEuaGFzRU9MJiYoaS5wdXNoKG8uam9pbigiIikpLG8ubGVuZ3RoPTApfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fSxlLm5leHQ9MTAsdC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnIscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsY29tYmluZVRleHRJdGVtczohMCxzaW5rOnMsdmlld0JveDpufSk7Y2FzZSAxMDp0aGlzLnJlc2V0KCksby5sZW5ndGgmJmkucHVzaChvLmpvaW4oIiIpKSxpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PUEodGhpcy5fc3RyZWFtcyk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWUucmVzZXQoKX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX19fSx7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTt2YXIgcj1lLGE9bmV3IG8uUmVmU2V0O2ZvcihlLm9iaklkJiZhLnB1dChlLm9iaklkKTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSlpbnN0YW5jZW9mIG8uRGljdCYmKCFyLm9iaklkfHwhYS5oYXMoci5vYmpJZCkpOylyLm9iaklkJiZhLnB1dChyLm9iaklkKSxyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19XSksZX0oKTt0LkFubm90YXRpb249VTt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtqKHRoaXMsZSksdGhpcy53aWR0aD0xLHRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElELHRoaXMuZGFzaEFycmF5PVszXSx0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MCx0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9cmV0dXJuIF8oZSxbe2tleToic2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbMCwwLDAsMF07aWYoZSBpbnN0YW5jZW9mIG8uTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dmFyIHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX19LHtrZXk6InNldFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fX0se2tleToic2V0RGFzaEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3ZhciByLG49ITAsYT0hMCxpPUEoZSk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKCEoK3M+PTApKXtuPSExO2JyZWFrfXM+MCYmKGE9ITEpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1uJiYhYT8odGhpcy5kYXNoQXJyYXk9ZSx0JiZ0aGlzLnNldFN0eWxlKG8uTmFtZS5nZXQoIkQiKSkpOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT0kO3ZhciBYPWZ1bmN0aW9uKGUpe20oaSxlKTt2YXIgdCxyLGE9dyhpKTtmdW5jdGlvbiBpKGUpe3ZhciB0O2oodGhpcyxpKSx0PWEuY2FsbCh0aGlzLGUpO3ZhciByPWUuZGljdDtpZihyLmhhcygiSVJUIikpe3ZhciBzPXIuZ2V0UmF3KCJJUlQiKTt0LmRhdGEuaW5SZXBseVRvPXMgaW5zdGFuY2VvZiBvLlJlZj9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgYz1yLmdldCgiUlQiKTt0LmRhdGEucmVwbHlUeXBlPWMgaW5zdGFuY2VvZiBvLk5hbWU/Yy5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0LmRhdGEucmVwbHlUeXBlPT09bi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXt2YXIgdT1yLmdldCgiSVJUIik7dC5zZXRUaXRsZSh1LmdldCgiVCIpKSx0LmRhdGEudGl0bGVPYmo9dC5fdGl0bGUsdC5zZXRDb250ZW50cyh1LmdldCgiQ29udGVudHMiKSksdC5kYXRhLmNvbnRlbnRzT2JqPXQuX2NvbnRlbnRzLHUuaGFzKCJDcmVhdGlvbkRhdGUiKT8odC5zZXRDcmVhdGlvbkRhdGUodS5nZXQoIkNyZWF0aW9uRGF0ZSIpKSx0LmRhdGEuY3JlYXRpb25EYXRlPXQuY3JlYXRpb25EYXRlKTp0LmRhdGEuY3JlYXRpb25EYXRlPW51bGwsdS5oYXMoIk0iKT8odC5zZXRNb2RpZmljYXRpb25EYXRlKHUuZ2V0KCJNIikpLHQuZGF0YS5tb2RpZmljYXRpb25EYXRlPXQubW9kaWZpY2F0aW9uRGF0ZSk6dC5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCx0LmRhdGEuaGFzUG9wdXA9dS5oYXMoIlBvcHVwIiksdS5oYXMoIkMiKT8odC5zZXRDb2xvcih1LmdldEFycmF5KCJDIikpLHQuZGF0YS5jb2xvcj10LmNvbG9yKTp0LmRhdGEuY29sb3I9bnVsbH1lbHNlIHQuZGF0YS50aXRsZU9iaj10Ll90aXRsZSx0LnNldENyZWF0aW9uRGF0ZShyLmdldCgiQ3JlYXRpb25EYXRlIikpLHQuZGF0YS5jcmVhdGlvbkRhdGU9dC5jcmVhdGlvbkRhdGUsdC5kYXRhLmhhc1BvcHVwPXIuaGFzKCJQb3B1cCIpLHIuaGFzKCJDIil8fCh0LmRhdGEuY29sb3I9bnVsbCk7cmV0dXJuIHIuaGFzKCJSQyIpJiYodC5kYXRhLnJpY2hUZXh0PXYuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChyLmdldCgiUkMiKSkpLHR9cmV0dXJuIF8oaSxbe2tleToic2V0Q3JlYXRpb25EYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfX0se2tleToiX3NldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmV4dHJhLG49ZS5zdHJva2VDb2xvcixhPWUuZmlsbENvbG9yLGk9ZS5ibGVuZE1vZGUscz1lLnN0cm9rZUFscGhhLGM9ZS5maWxsQWxwaGEsdT1lLnBvaW50c0NhbGxiYWNrLGw9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO3ZhciB2PXRoaXMuZGF0YS5xdWFkUG9pbnRzO3Z8fCh2PVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7dmFyIHksbT1BKHYpO3RyeXtmb3IobS5zKCk7ISh5PW0ubigpKS5kb25lOyl7dmFyIGI9VCh1KHAseS52YWx1ZSksNCksdz1iWzBdLGs9YlsxXSxTPWJbMl0seD1iWzNdO2w9TWF0aC5taW4obCx3KSxoPU1hdGgubWF4KGgsayksZj1NYXRoLm1pbihmLFMpLGQ9TWF0aC5tYXgoZCx4KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cC5wdXNoKCJRIik7dmFyIE89bmV3IG8uRGljdCh0KSxDPW5ldyBvLkRpY3QodCk7Qy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSk7dmFyIEY9bmV3IGcuU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTtGLmRpY3Q9QyxPLnNldCgiRm0wIixGKTt2YXIgUD1uZXcgby5EaWN0KHQpO2kmJlAuc2V0KCJCTSIsby5OYW1lLmdldChpKSksIm51bWJlciI9PXR5cGVvZiBzJiZQLnNldCgiQ0EiLHMpLCJudW1iZXIiPT10eXBlb2YgYyYmUC5zZXQoImNhIixjKTt2YXIgST1uZXcgby5EaWN0KHQpO0kuc2V0KCJHUzAiLFApO3ZhciBFPW5ldyBvLkRpY3QodCk7RS5zZXQoIkV4dEdTdGF0ZSIsSSksRS5zZXQoIlhPYmplY3QiLE8pO3ZhciBqPW5ldyBvLkRpY3QodCk7ai5zZXQoIlJlc291cmNlcyIsRSk7dmFyIE09dGhpcy5kYXRhLnJlY3Q9W2wsZixoLGRdO2ouc2V0KCJCQm94IixNKSx0aGlzLmFwcGVhcmFuY2U9bmV3IGcuU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKSx0aGlzLmFwcGVhcmFuY2UuZGljdD1qLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsRil9fV0sW3trZXk6ImNyZWF0ZU5ld0Fubm90YXRpb24iLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIGksbyxjLHUsbCxmLGg7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT10LmdldE5ld1RlbXBvcmFyeVJlZigpLGUubmV4dD0zLHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShyLHQsYSk7Y2FzZSAzOnJldHVybiBvPWUuc2VudCxjPVtdLG8/KGw9dC5nZXROZXdUZW1wb3JhcnlSZWYoKSx1PXRoaXMuY3JlYXRlTmV3RGljdChyLHQse2FwUmVmOmx9KSxmPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwubnVtLGwuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGwsbyxjLGYpLG4ucHVzaCh7cmVmOmwsZGF0YTpjLmpvaW4oIiIpfSkpOnU9dGhpcy5jcmVhdGVOZXdEaWN0KHIsdCx7fSksYy5sZW5ndGg9MCxoPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGksdSxjLGgpLGUuYWJydXB0KCJyZXR1cm4iLHtyZWY6aSxkYXRhOmMuam9pbigiIil9KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbiIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0ocix0LG4pO2Nhc2UgMjpyZXR1cm4gYT1lLnNlbnQsaT10aGlzLmNyZWF0ZU5ld0RpY3Qocix0LHthcDphfSksZS5hYnJ1cHQoInJldHVybiIsbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjp0LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm4uaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGl9KFUpO3QuTWFya3VwQW5ub3RhdGlvbj1YO3ZhciBIPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGMsdSxsPXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtqKHRoaXMsZiksdD1sLmNhbGwodGhpcyxlKTt2YXIgcj1lLmRpY3QsaT1lLnhyZWYscz10LmRhdGE7dC5yZWY9ZS5yZWYsdC5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLHMuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09cy5maWVsZE5hbWUmJihzLmZpZWxkTmFtZT10Ll9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLHZvaWQgMD09PXMuYWN0aW9ucyYmKHMuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7dmFyIGM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiViIsZ2V0QXJyYXk6ITB9KTtzLmZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKGMpO3ZhciB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRWIixnZXRBcnJheTohMH0pO2lmKHMuZGVmYXVsdEZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKHUpLHZvaWQgMD09PWMmJmUueGZhRGF0YXNldHMpe3ZhciBoPXQuX3RpdGxlLnN0cjtoJiYodC5faGFzVmFsdWVGcm9tWEZBPSEwLHMuZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUoaCkpfXZvaWQgMD09PWMmJm51bGwhPT1zLmRlZmF1bHRGaWVsZFZhbHVlJiYocy5maWVsZFZhbHVlPXMuZGVmYXVsdEZpZWxkVmFsdWUpLHMuYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxzLmhhc0FwcGVhcmFuY2U9dC5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1zLmZpZWxkVmFsdWUmJm51bGwhPT1zLmZpZWxkVmFsdWV8fHMuaGFzQXBwZWFyYW5jZTt2YXIgZD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGVCJ9KTtzLmZpZWxkVHlwZT1kIGluc3RhbmNlb2Ygby5OYW1lP2QubmFtZTpudWxsO3ZhciBwPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGc9ZS5hY3JvRm9ybS5nZXQoIkRSIiksdj10LmFwcGVhcmFuY2UmJnQuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7cmV0dXJuIHQuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczpwLGFjcm9Gb3JtUmVzb3VyY2VzOmcsYXBwZWFyYW5jZVJlc291cmNlczp2LG1lcmdlZFJlc291cmNlczpvLkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W3AsdixnXSxtZXJnZVN1YkRpY3RzOiEwfSl9LHMuZmllbGRGbGFncz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGZiJ9KSwoIU51bWJlci5pc0ludGVnZXIocy5maWVsZEZsYWdzKXx8cy5maWVsZEZsYWdzPDApJiYocy5maWVsZEZsYWdzPTApLHMucmVhZE9ubHk9dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKSxzLnJlcXVpcmVkPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRVFVSVJFRCkscy5oaWRkZW49dC5faGFzRmxhZyhzLmFubm90YXRpb25GbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTiksdH1yZXR1cm4gXyhmLFt7a2V5OiJfZGVjb2RlRm9ybVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9KSk6ZSBpbnN0YW5jZW9mIG8uTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfX0se2tleToiaGFzRmllbGRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX19LHtrZXk6ImdldFJvdGF0aW9uTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHI9dCYmdC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwwPT09cilyZXR1cm4gbi5JREVOVElUWV9NQVRSSVg7dmFyIGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGksbyl9fSx7a2V5OiJnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDAscj10JiZ0LnJvdGF0aW9uO2lmKHZvaWQgMD09PXImJihyPXRoaXMucm90YXRpb24pLCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7dmFyIG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIikscz0iIjtpZih0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9IiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKSwiICIpLmNvbmNhdChvLCIgZiAiKSksdGhpcy5ib3JkZXJDb2xvcil7dmFyIGM9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MTtzKz0iIi5jb25jYXQoYywiIHcgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpLCIgIikuY29uY2F0KG8sIiBTICIpfXJldHVybiBzfX0se2tleToiZ2V0T3BlcmF0b3JMaXN0Iix2YWx1ZToodT1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhLGksbyl7dmFyIHMsYyx1LGwsaCxkLHY7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighaXx8dGhpcyBpbnN0YW5jZW9mIFcpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDI6aWYodGhpcy5faGFzVGV4dCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsdGhpcy5fZ2V0QXBwZWFyYW5jZSh0LHIsYSxvKTtjYXNlIDY6aWYocz1lLnNlbnQsIXRoaXMuYXBwZWFyYW5jZXx8bnVsbCE9PXMpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pKTtjYXNlIDk6aWYoYz1uZXcgcC5PcGVyYXRvckxpc3QsdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UmJm51bGwhPT1zKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDEyOmlmKHU9WzEsMCwwLDEsMCwwXSxsPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGg9Qih0aGlzLmRhdGEucmVjdCxsLHUpLCF0aGlzLm9jKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xOCx0LnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCk7Y2FzZSAxODpkPWUuc2VudDtjYXNlIDE5OnJldHVybiB2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSxjLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LGgsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSwhMV0pLHY9bmV3IGcuU3RyaW5nU3RyZWFtKHMpLGUubmV4dD0yNCx0LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnYsdGFzazpyLHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjYXNlIDI0OnJldHVybiBjLmFkZE9wKG4uT1BTLmVuZEFubm90YXRpb24sW10pLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSksZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX0pO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscixuLGEpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfZ2V0TUtEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgby5EaWN0KG51bGwpO3JldHVybiBlJiZ0LnNldCgiUiIsZSksdGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixOKHRoaXMuYm9yZGVyQ29sb3IpKSx0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixOKHRoaXMuYmFja2dyb3VuZENvbG9yKSksdC5zaXplPjA/dDpudWxsfX0se2tleToic2F2ZSIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsaSl7dmFyIGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4LE8sRixQLFQsSSxFLGosTSxfLEwsUj10aGlzO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz1pP2kuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHU9YyYmYy52YWx1ZSxsPWMmJmMucm90YXRpb24sdSE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZ2b2lkIDAhPT11KXtlLm5leHQ9NzticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHZvaWQgMCE9PWwpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6dT11fHx0aGlzLmRhdGEuZmllbGRWYWx1ZTtjYXNlIDc6aWYodm9pZCAwIT09bHx8dGhpcy5faGFzVmFsdWVGcm9tWEZBfHwhQXJyYXkuaXNBcnJheSh1KXx8IUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpfHx1Lmxlbmd0aCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aHx8IXUuZXZlcnkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1SLmRhdGEuZmllbGRWYWx1ZVt0XX0pKSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZih2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKSxmPW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0aGlzLl9nZXRBcHBlYXJhbmNlKHQscixuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxpKTtjYXNlIDE0OmlmKG51bGwhPT0oZj1lLnNlbnQpKXtlLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMTc6ZS5uZXh0PTE5O2JyZWFrO2Nhc2UgMTk6aWYoaD0hMSxmJiZmLm5lZWRBcHBlYXJhbmNlcyYmKGg9ITAsZj1udWxsKSxkPXQueHJlZiwocD1kLmZldGNoSWZSZWYodGhpcy5yZWYpKWluc3RhbmNlb2Ygby5EaWN0KXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6dj1uZXcgby5EaWN0KGQpLHk9QShwLmdldEtleXMoKSk7dHJ5e2Zvcih5LnMoKTshKG09eS5uKCkpLmRvbmU7KSJBUCIhPT0oYj1tLnZhbHVlKSYmdi5zZXQoYixwLmdldFJhdyhiKSl9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIHc9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodi5nZXQoIlQiKXx8IiIpLHZhbHVlOnV9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS5pc0FzY2lpKShlKT9lOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCl9LHYuc2V0KCJWIixBcnJheS5pc0FycmF5KHUpP3UubWFwKGspOmsodSkpLChTPXRoaXMuX2dldE1LRGljdChsKSkmJnYuc2V0KCJNSyIsUykseD1kLmVuY3J5cHQsTz14P3guY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pOm51bGwsRj1bXSxQPVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOncsbmVlZEFwcGVhcmFuY2VzOmh9XSxudWxsIT09ZiYmKFQ9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSxJPW5ldyBvLkRpY3QoZCksdi5zZXQoIkFQIixJKSxJLnNldCgiTiIsVCksRT1udWxsLHgmJihFPXguY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKFQubnVtLFQuZ2VuKSxmPUUuZW5jcnlwdFN0cmluZyhmKSksaj10aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZCksTT1uZXcgZy5TdHJpbmdTdHJlYW0oZiksKF89TS5kaWN0PW5ldyBvLkRpY3QoZCkpLnNldCgiTGVuZ3RoIixmLmxlbmd0aCksXy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksXy5zZXQoIlJlc291cmNlcyIsaiksXy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKSwoTD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKSE9PW4uSURFTlRJVFlfTUFUUklYJiZfLnNldCgiTWF0cml4IixMKSwoMCxzLndyaXRlT2JqZWN0KShULE0sRixFKSxQLnB1c2goe3JlZjpULGRhdGE6Ri5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxGLmxlbmd0aD0wKSx2LnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksKDAscy53cml0ZU9iamVjdCkodGhpcy5yZWYsdixGLE8pLFBbMF0uZGF0YT1GLmpvaW4oIiIpLGUuYWJydXB0KCJyZXR1cm4iLFApO2Nhc2UgNDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXRBcHBlYXJhbmNlIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixvLHMpe3ZhciBjLHUsbCxoLGQscCxnLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLEgscSxHLHosVyxWLFksSyxKLFosUSxlZSx0ZTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKChjPXM/cy5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDApJiYodT1jLmZvcm1hdHRlZFZhbHVlfHxjLnZhbHVlLGw9Yy5yb3RhdGlvbiksdm9pZCAwIT09bHx8dm9pZCAwIT09dXx8dGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9ODticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJiF0aGlzLmFwcGVhcmFuY2Upe2UubmV4dD04O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6aWYoaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKSx2b2lkIDAhPT11KXtlLm5leHQ9MTM7YnJlYWt9aWYodT10aGlzLmRhdGEuZmllbGRWYWx1ZSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIikpO2Nhc2UgMTM6aWYoQXJyYXkuaXNBcnJheSh1KSYmMT09PXUubGVuZ3RoJiYodT11WzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB1LCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLHRoaXMuZGF0YS5jb21ibz8oZD10aGlzLmRhdGEub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydFZhbHVlO3JldHVybiB1PT09dH0pKXx8dGhpcy5kYXRhLm9wdGlvbnNbMF0sdT1kJiZkLmRpc3BsYXlWYWx1ZXx8IiIpOnU9dS50cmltKCksIiIhPT11KXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiUSBFTUMiKSk7Y2FzZSAxODpyZXR1cm4gdm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbikscD0tMSx0aGlzLmRhdGEubXVsdGlMaW5lPyhnPXUuc3BsaXQoL1xyXG4/fFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GQyIpfSkpLHA9Zy5sZW5ndGgpOmc9W3UucmVwbGFjZSgvXHJcbj98XG4vLCIiKS5ub3JtYWxpemUoIk5GQyIpXSx2PTEseT0yLG09dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYj10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSw5MCE9PWwmJjI3MCE9PWx8fChiPSh3PVttLGJdKVswXSxtPXdbMV0pLHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpLGUubmV4dD0yOSxmLl9nZXRGb250RGF0YSh0LHIsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2Nhc2UgMjk6az1lLnNlbnQsRj1bXSxQPSExLEk9QShnKTt0cnl7Zm9yKEkucygpOyEoRT1JLm4oKSkuZG9uZTspaj1FLnZhbHVlLChNPWsuZW5jb2RlU3RyaW5nKGopKS5sZW5ndGg+MSYmKFA9ITApLEYucHVzaChNLmpvaW4oIiIpKX1jYXRjaChlKXtJLmUoZSl9ZmluYWxseXtJLmYoKX1pZighKFAmJm8mbi5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpKXtlLm5leHQ9MzY7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtuZWVkQXBwZWFyYW5jZXM6ITB9KTtjYXNlIDM2OmlmKCFQfHwhdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2UubmV4dD01ODticmVha31pZihfPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixMPW5ldyBpLkZha2VVbmljb2RlRm9udCh0LnhyZWYsXyksUj1MLmNyZWF0ZUZvbnRSZXNvdXJjZXMoZy5qb2luKCIiKSksTj1SLmdldFJhdygiRm9udCIpLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7RD10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250IiksQj1BKE4uZ2V0S2V5cygpKTt0cnl7Zm9yKEIucygpOyEoVT1CLm4oKSkuZG9uZTspJD1VLnZhbHVlLEQuc2V0KCQsTi5nZXRSYXcoJCkpfWNhdGNoKGUpe0IuZShlKX1maW5hbGx5e0IuZigpfX1lbHNlIHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5zZXQoIkZvbnQiLE4pO3JldHVybiBYPUwuZm9udE5hbWUubmFtZSxlLm5leHQ9NDUsZi5fZ2V0Rm9udERhdGEodCxyLHtmb250TmFtZTpYLGZvbnRTaXplOjB9LFIpO2Nhc2UgNDU6Zm9yKGs9ZS5zZW50LEg9MCxxPUYubGVuZ3RoO0g8cTtIKyspRltIXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGdbSF0pO0c9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPVgsej10aGlzLl9jb21wdXRlRm9udFNpemUobS0yKnYsYi0yKnksdSxrLHApLFc9VCh6LDMpLFM9V1swXSx4PVdbMV0sTz1XWzJdLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9RyxlLm5leHQ9NjQ7YnJlYWs7Y2FzZSA1ODp0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsbi53YXJuKSgiX2dldEFwcGVhcmFuY2U6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKSxWPXRoaXMuX2NvbXB1dGVGb250U2l6ZShtLTIqdixiLTIqeSx1LGsscCksWT1UKFYsMyksUz1ZWzBdLHg9WVsxXSxPPVlbMl07Y2FzZSA2NDppZihLPWsuZGVzY2VudCxLPWlzTmFOKEspP24uQkFTRUxJTkVfRkFDVE9SKk86TWF0aC5tYXgobi5CQVNFTElORV9GQUNUT1IqTyxNYXRoLmFicyhLKSp4KSxKPU1hdGgubWluKE1hdGguZmxvb3IoKG0teCkvMiksdiksWj10aGlzLmRhdGEudGV4dEFsaWdubWVudCwhdGhpcy5kYXRhLm11bHRpTGluZSl7ZS5uZXh0PTcwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKFMsRixrLHgsYixtLFoseSxKLEssTyxzKSk7Y2FzZSA3MDppZighdGhpcy5kYXRhLmNvbWIpe2UubmV4dD03MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoUyxrLEZbMF0seCxiLG0seSxKLEssTyxzKSk7Y2FzZSA3MjppZihRPUorSywhKDA9PT1afHxaPjIpKXtlLm5leHQ9NzU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrUysiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUSksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShGWzBdKSwiKSBUaiIpKyIgRVQgUSBFTUMiKTtjYXNlIDc1OnJldHVybiBlZT17c2hpZnQ6MH0sdGU9dGhpcy5fcmVuZGVyVGV4dChGWzBdLGsseCxiLFosZWUseSxRKSxlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIkJUICIpK1MrIiAxIDAgMCAxIDAgMCBUbSAiLmNvbmNhdCh0ZSkrIiBFVCBRIEVNQyIpO2Nhc2UgNzg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2dldFRleHRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFyc1RvR2x5cGhzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LndpZHRofSksMCkvMWUzfX0se2tleToiX2NvbXB1dGVGb250U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgcz10aGlzLGM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSx1PShjfHwxMikqbi5MSU5FX0ZBQ1RPUixsPU1hdGgucm91bmQoZS91KTtpZighYyl7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoMTAwKmUpLzEwMH07aWYoLTE9PT1vKXt2YXIgaD10aGlzLl9nZXRUZXh0V2lkdGgocixhKTtjPWYoTWF0aC5taW4oZS9uLkxJTkVfRkFDVE9SLGg+dD90L2g6MS8wKSksbD0xfWVsc2V7dmFyIGQscD1yLnNwbGl0KC9cclxuP3xcbi8pLGc9W10sdj1BKHApO3RyeXtmb3Iodi5zKCk7IShkPXYubigpKS5kb25lOyl7dmFyIHk9ZC52YWx1ZSxtPWEuZW5jb2RlU3RyaW5nKHkpLmpvaW4oIiIpLGI9YS5jaGFyc1RvR2x5cGhzKG0pLHc9YS5nZXRDaGFyUG9zaXRpb25zKG0pO2cucHVzaCh7bGluZTptLGdseXBoczpiLHBvc2l0aW9uczp3fSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXZhciBrPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wLGk9MCxvPWc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07aWYoKG4rPXMuX3NwbGl0TGluZShudWxsLGEscix0LGMpLmxlbmd0aCpyKT5lKXJldHVybiEwfXJldHVybiExfTtmb3IobD1NYXRoLm1heChsLG8pO2soYz1mKCh1PWUvbCkvbi5MSU5FX0ZBQ1RPUikpOylsKyt9dmFyIFM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx4PVMuZm9udE5hbWUsTz1TLmZvbnRDb2xvcjt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6Yyxmb250TmFtZTp4LGZvbnRDb2xvcjpPfSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLGMsZS9sXX19LHtrZXk6Il9yZW5kZXJUZXh0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMpe3ZhciB1O3U9MT09PWk/KG4tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqcikvMjoyPT09aT9uLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKnItczpzO3ZhciBsPSgwLGEubnVtYmVyVG9TdHJpbmcpKHUtby5zaGlmdCk7cmV0dXJuIG8uc2hpZnQ9dSxjPSgwLGEubnVtYmVyVG9TdHJpbmcpKGMpLCIiLmNvbmNhdChsLCIgIikuY29uY2F0KGMsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShlKSwiKSBUaiIpfX0se2tleToiX2dldFNhdmVGaWVsZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmllbGRSZXNvdXJjZXMscj10LmxvY2FsUmVzb3VyY2VzLG49dC5hcHBlYXJhbmNlUmVzb3VyY2VzLGE9dC5hY3JvRm9ybVJlc291cmNlcyxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEmJnRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udE5hbWU7aWYoIWkpcmV0dXJuIHJ8fG8uRGljdC5lbXB0eTtmb3IodmFyIHM9MCxjPVtyLG5dO3M8Yy5sZW5ndGg7cysrKXt2YXIgdT1jW3NdO2lmKHUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBsPXUuZ2V0KCJGb250Iik7aWYobCBpbnN0YW5jZW9mIG8uRGljdCYmbC5oYXMoaSkpcmV0dXJuIHV9fWlmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBmPWEuZ2V0KCJGb250Iik7aWYoZiBpbnN0YW5jZW9mIG8uRGljdCYmZi5oYXMoaSkpe3ZhciBoPW5ldyBvLkRpY3QoZSk7aC5zZXQoaSxmLmdldFJhdyhpKSk7dmFyIGQ9bmV3IG8uRGljdChlKTtyZXR1cm4gZC5zZXQoIkZvbnQiLGgpLG8uRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbZCxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxvLkRpY3QuZW1wdHl9fSx7a2V5OiJnZXRGaWVsZE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSxbe2tleToiX2dldEZvbnREYXRhIix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLHMsYyx1O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9bmV3IHAuT3BlcmF0b3JMaXN0LHM9e2ZvbnQ6bnVsbCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sYz1uLmZvbnROYW1lLHU9bi5mb250U2l6ZSxlLm5leHQ9NSx0LmhhbmRsZVNldEZvbnQoYSxbYyYmby5OYW1lLmdldChjKSx1XSxudWxsLGkscixzLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5mb250KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZn0oVSkscT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBpO2oodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlKSkuX2hhc1RleHQ9ITA7dmFyIG89ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgaS5kYXRhLmZpZWxkVmFsdWUmJihpLmRhdGEuZmllbGRWYWx1ZT0iIik7dmFyIHM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpvLGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz4yKSYmKHM9bnVsbCksaS5kYXRhLnRleHRBbGlnbm1lbnQ9czt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJNYXhMZW4ifSk7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxjPDApJiYoYz0wKSxpLmRhdGEubWF4TGVuPWMsaS5kYXRhLm11bHRpTGluZT1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSxpLmRhdGEuY29tYj1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIWkuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT1pLmRhdGEubWF4TGVuLGkuZGF0YS5kb05vdFNjcm9sbD1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpLGl9cmV0dXJuIF8ocixbe2tleToiX2dldENvbWJBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMsdSxsLGYpe3ZhciBoLGQ9aS90aGlzLmRhdGEubWF4TGVuLHA9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZiksZz1bXSx2PUEodC5nZXRDaGFyUG9zaXRpb25zKHIpKTt0cnl7Zm9yKHYucygpOyEoaD12Lm4oKSkuZG9uZTspe3ZhciB5PVQoaC52YWx1ZSwyKSxtPXlbMF0sYj15WzFdO2cucHVzaCgiKCIuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShyLnN1YnN0cmluZyhtLGIpKSwiKSBUaiIpKX19Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9dmFyIHc9Zy5qb2luKCIgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZCksIiAwIFRkICIpKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KHAsIkJUICIpK2UrIiAxIDAgMCAxICIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKHMpLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKGMrdSksIiBUbSAiKS5jb25jYXQodykrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixpLG8scyxjLHUsbCxmLGgpe2Zvcih2YXIgZD1bXSxwPWktMipjLGc9e3NoaWZ0OjB9LHY9MCx5PXQubGVuZ3RoO3Y8eTt2KyspZm9yKHZhciBtPXRbdl0sYj10aGlzLl9zcGxpdExpbmUobSxyLG4scCksdz0wLGs9Yi5sZW5ndGg7dzxrO3crKyl7dmFyIFM9Ylt3XSx4PTA9PT12JiYwPT09dz8tdS0oZi1sKTotZjtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChTLHIsbixpLHMsZyxjLHgpKX12YXIgTz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhoKSxBPWQuam9pbigiXG4iKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KE8sIkJUICIpK2UrIiAxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiBUbSAiKS5jb25jYXQoQSkrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfc3BsaXRMaW5lIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1hLmxpbmV8fGU7dmFyIGk9YS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Zm9yKHZhciBvPWEucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSkscz1yLzFlMyxjPVtdLHU9LTEsbD0tMSxmPS0xLGg9MCxkPTAscD0wLGc9aS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9VChvW3BdLDIpLHk9dlswXSxtPXZbMV0sYj1pW3BdLHc9Yi53aWR0aCpzOyIgIj09PWIudW5pY29kZT9kK3c+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcsdT0tMSxmPS0xKTooZCs9dyx1PXksbD1tLGY9cCk6ZCt3Pm4/LTEhPT11PyhjLnB1c2goZS5zdWJzdHJpbmcoaCxsKSksaD1sLHA9ZisxLHU9LTEsZD0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcpOmQrPXd9cmV0dXJuIGg8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhoLGUubGVuZ3RoKSksY319LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1dKSxyfShIKSxHPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGksYyx1PXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtyZXR1cm4gaih0aGlzLGYpLCh0PXUuY2FsbCh0aGlzLGUpKS5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQuZGF0YS5jaGVja0JveD0hdC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucmFkaW9CdXR0b249dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucHVzaEJ1dHRvbj10Lmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksdC5kYXRhLmlzVG9vbHRpcE9ubHk9ITEsdC5kYXRhLmNoZWNrQm94P3QuX3Byb2Nlc3NDaGVja0JveChlKTp0LmRhdGEucmFkaW9CdXR0b24/dC5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnQuZGF0YS5wdXNoQnV0dG9uPyh0LmRhdGEuaGFzT3duQ2FudmFzPSEwLHQuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpKTooMCxuLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKSx0fXJldHVybiBfKGYsW3trZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLG8pe3ZhciBzLGMsdSxsLGgsZCxnO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5wdXNoQnV0dG9uKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIseSh4KGYucHJvdG90eXBlKSwiZ2V0T3BlcmF0b3JMaXN0Iix0aGlzKS5jYWxsKHRoaXMsdCxyLGEsITEsbykpO2Nhc2UgMjppZihzPW51bGwsYz1udWxsLG8mJih1PW8uZ2V0KHRoaXMuZGF0YS5pZCkscz11P3UudmFsdWU6bnVsbCxjPXU/dS5yb3RhdGlvbjpudWxsKSxudWxsIT09c3x8IXRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNzppZihudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpLCEobD1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBoPXRoaXMuYXBwZWFyYW5jZSxkPWwuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYLGMmJmwuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSksdGhpcy5hcHBlYXJhbmNlPWwsZz15KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pLHRoaXMuYXBwZWFyYW5jZT1oLGwuZGljdC5zZXQoIk1hdHJpeCIsZCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOihpPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5jaGVja0JveCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3NhdmVDaGVja2JveCh0LHIsbikpO2Nhc2UgMjppZighdGhpcy5kYXRhLnJhZGlvQnV0dG9uKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKHQscixuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlQ2hlY2tib3giLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjppZihpPWEuZ2V0KHRoaXMuZGF0YS5pZCksYz1pJiZpLnJvdGF0aW9uLHU9aSYmaS52YWx1ZSx2b2lkIDAhPT1jKXtlLm5leHQ9MTE7YnJlYWt9aWYodm9pZCAwIT09dSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgODppZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSE9PXUpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxMTppZigobD10LnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxNDpyZXR1cm4gdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09dSYmKHU9dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpLGY9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykobC5nZXQoIlQiKXx8IiIpLHZhbHVlOnU/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPW8uTmFtZS5nZXQodT90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpLGwuc2V0KCJWIixoKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoZD10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLGQpLHA9dC54cmVmLmVuY3J5cHQsZz1udWxsLHAmJihnPXAuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSx2PVsiIi5jb25jYXQodGhpcy5yZWYubnVtLCIgIikuY29uY2F0KHRoaXMucmVmLmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShsLHYsZyksdi5wdXNoKCJcbmVuZG9ialxuIiksZS5hYnJ1cHQoInJldHVybiIsW3tyZWY6dGhpcy5yZWYsZGF0YTp2LmpvaW4oIiIpLHhmYTpmfV0pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlUmFkaW9CdXR0b24iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihhKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAyOmlmKGk9YS5nZXQodGhpcy5kYXRhLmlkKSxjPWkmJmkucm90YXRpb24sdT1pJiZpLnZhbHVlLHZvaWQgMCE9PWMpe2UubmV4dD0xMTticmVha31pZih2b2lkIDAhPT11KXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSA4OmlmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlIT09dSl7ZS5uZXh0PTExO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDExOmlmKChsPXQueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTE0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE0OnJldHVybiB2b2lkIDA9PT11JiYodT10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksZj17cGF0aDooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6dT90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGg9by5OYW1lLmdldCh1P3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIiksZD1udWxsLHA9dC54cmVmLmVuY3J5cHQsdSYmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5SZWY/KGc9dC54cmVmLmZldGNoKHRoaXMucGFyZW50KSx2PW51bGwscCYmKHY9cC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpLGcuc2V0KCJWIixoKSxkPVsiIi5jb25jYXQodGhpcy5wYXJlbnQubnVtLCIgIikuY29uY2F0KHRoaXMucGFyZW50LmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShnLGQsdiksZC5wdXNoKCJcbmVuZG9ialxuIikpOnRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoeT10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLHkpLG09bnVsbCxwJiYobT1wLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSksYj1bIiIuY29uY2F0KHRoaXMucmVmLm51bSwiICIpLmNvbmNhdCh0aGlzLnJlZi5nZW4sIiBvYmpcbiIpXSwoMCxzLndyaXRlRGljdCkobCxiLG0pLGIucHVzaCgiXG5lbmRvYmpcbiIpLHc9W3tyZWY6dGhpcy5yZWYsZGF0YTpiLmpvaW4oIiIpLHhmYTpmfV0sbnVsbCE9PWQmJncucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbH0pLGUuYWJydXB0KCJyZXR1cm4iLHcpO2Nhc2UgMzM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGM9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sdT1bMCwwLHMsY10sbD0uOCpNYXRoLm1pbihzLGMpOyJjaGVjayI9PT10PyhyPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH0saT0iMyIpOiJkaXNjIj09PXQ/KHI9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfSxpPSJsIik6KDAsbi51bnJlYWNoYWJsZSkoIl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAiLmNvbmNhdCh0KSk7dmFyIGY9KDAsYS5udW1iZXJUb1N0cmluZykoKHMtci53aWR0aCkvMiksaD0oMCxhLm51bWJlclRvU3RyaW5nKSgoYy1yLmhlaWdodCkvMiksZD0icSBCVCAvUGRmSnNaYURiICIuY29uY2F0KGwsIiBUZiAwIGcgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIFRkICgiKS5jb25jYXQoaSwiKSBUaiBFVCBRIikscD1uZXcgby5EaWN0KGUueHJlZik7cC5zZXQoIkZvcm1UeXBlIiwxKSxwLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiRm9ybSIpKSxwLnNldCgiVHlwZSIsby5OYW1lLmdldCgiWE9iamVjdCIpKSxwLnNldCgiQkJveCIsdSkscC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSkscC5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO3ZhciB2PW5ldyBvLkRpY3QoZS54cmVmKSx5PW5ldyBvLkRpY3QoZS54cmVmKTt5LnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpLHYuc2V0KCJGb250Iix5KSxwLnNldCgiUmVzb3VyY2VzIix2KSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBnLlN0cmluZ1N0cmVhbShkKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9cCx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9fSx7a2V5OiJfcHJvY2Vzc0NoZWNrQm94Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIG49dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgbiYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPW4pO3ZhciBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle3ZhciBzPWkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIk9mZiIhPT1lfSkpO2kubGVuZ3RoPTAsaS5wdXNoKCJPZmYiLHMpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpLHRoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9fX19LHtrZXk6Il9wcm9jZXNzUmFkaW9CdXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO3ZhciB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO3ZhciByPXQuZ2V0KCJWIik7ciBpbnN0YW5jZW9mIG8uTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShyKSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZihuIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgYT1uLmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBpLHM9QShhLmdldEtleXMoKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO2lmKCJPZmYiIT09Yyl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTticmVha319fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH19fX0se2tleToiX3Byb2Nlc3NQdXNoQnV0dG9uIix2YWx1ZTpmdW5jdGlvbihlKXtlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ/KHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpLGwuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX0se2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0iYnV0dG9uIjtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94Pyh0PSJjaGVja2JveCIsZT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbiYmKHQ9InJhZGlvYnV0dG9uIixlPXRoaXMuZGF0YS5idXR0b25WYWx1ZSkse2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19fSx7a2V5OiJmYWxsYmFja0ZvbnREaWN0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgby5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKSxlLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKSwoMCxuLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGZ9KEgpLHo9ZnVuY3Rpb24oZSl7bShvLGUpO3ZhciB0LHI9dyhvKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2oodGhpcyxvKSx0PXIuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZjt0LmRhdGEub3B0aW9ucz1bXTt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Omksa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MCxsPWMubGVuZ3RoO3U8bDt1Kyspe3ZhciBmPXMuZmV0Y2hJZlJlZihjW3VdKSxoPUFycmF5LmlzQXJyYXkoZik7dC5kYXRhLm9wdGlvbnNbdV09e2V4cG9ydFZhbHVlOnQuX2RlY29kZUZvcm1WYWx1ZShoP3MuZmV0Y2hJZlJlZihmWzBdKTpmKSxkaXNwbGF5VmFsdWU6dC5fZGVjb2RlRm9ybVZhbHVlKGg/cy5mZXRjaElmUmVmKGZbMV0pOmYpfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuZGF0YS5maWVsZFZhbHVlP3QuZGF0YS5maWVsZFZhbHVlPVt0LmRhdGEuZmllbGRWYWx1ZV06dC5kYXRhLmZpZWxkVmFsdWV8fCh0LmRhdGEuZmllbGRWYWx1ZT1bXSksdC5kYXRhLmNvbWJvPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdC5kYXRhLm11bHRpU2VsZWN0PXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdC5faGFzVGV4dD0hMCx0fXJldHVybiBfKG8sW3trZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19fSx7a2V5OiJfZ2V0QXBwZWFyYW5jZSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxzKXt2YXIgYyx1LGwsZixoLGQscCxnLHYsbSxiLHcsayxTLE8sRixQLEksRSxqLE0sXyxMLFIsTixELEIsVSwkLFgscSxHLHosVyxWLFksSztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmRhdGEuY29tYm8pe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoby5wcm90b3R5cGUpLCJfZ2V0QXBwZWFyYW5jZSIsdGhpcykuY2FsbCh0aGlzLHQscixhLHMpKTtjYXNlIDI6aWYoKGw9cz9zLmdldCh0aGlzLmRhdGEuaWQpOnZvaWQgMCkmJih1PWwucm90YXRpb24sYz1sLnZhbHVlKSx2b2lkIDAhPT11fHx2b2lkIDAhPT1jfHx0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6Zm9yKHZvaWQgMD09PWM/Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KGMpfHwoYz1bY10pLGY9MSxoPTIsZD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxwPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLDkwIT09dSYmMjcwIT09dXx8KHA9KGc9W2QscF0pWzBdLGQ9Z1sxXSksdj10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsbT1bXSxiPTA7Yjx2O2IrKyl3PXRoaXMuZGF0YS5vcHRpb25zW2JdLmV4cG9ydFZhbHVlLGMuaW5jbHVkZXModykmJm0ucHVzaChiKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSksZS5uZXh0PTE4LEguX2dldEZvbnREYXRhKHQscix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y2FzZSAxODppZihrPWUuc2VudCxPPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUpUz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle0Y9KGQtZikvdixQPS0xLEU9QSh0aGlzLmRhdGEub3B0aW9ucyk7dHJ5e2ZvcihFLnMoKTshKGo9RS5uKCkpLmRvbmU7KU09ai52YWx1ZS5kaXNwbGF5VmFsdWUsKF89dGhpcy5fZ2V0VGV4dFdpZHRoKE0saykpPlAmJihQPV8sST1NKX1jYXRjaChlKXtFLmUoZSl9ZmluYWxseXtFLmYoKX1MPXRoaXMuX2NvbXB1dGVGb250U2l6ZShGLHAtMipoLEksaywtMSksUj1UKEwsMiksUz1SWzBdLE89UlsxXX1pZihOPU8qbi5MSU5FX0ZBQ1RPUixEPShOLU8pLzIsQj1NYXRoLmZsb29yKGQvTiksMT09PW0ubGVuZ3RoPygkPW1bMF0sVT0kLSQlQik6VT1tLmxlbmd0aD9tWzBdOjAsWD1NYXRoLm1pbihVK0IrMSx2KSxxPVsiL1R4IEJNQyBxIiwiMSAxICIuY29uY2F0KHAsIiAiKS5jb25jYXQoZCwiIHJlIFcgbiIpXSxtLmxlbmd0aCl7cS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpLEc9QShtKTt0cnl7Zm9yKEcucygpOyEoej1HLm4oKSkuZG9uZTspVz16LnZhbHVlLFU8PVcmJlc8WCYmcS5wdXNoKCIxICIuY29uY2F0KGQtKFctVSsxKSpOLCIgIikuY29uY2F0KHAsIiAiKS5jb25jYXQoTiwiIHJlIGYiKSl9Y2F0Y2goZSl7Ry5lKGUpfWZpbmFsbHl7Ry5mKCl9fWZvcihxLnB1c2goIkJUIixTLCIxIDAgMCAxIDAgIi5jb25jYXQoZCwiIFRtIikpLFY9e3NoaWZ0OjB9LGI9VTtiPFg7YisrKVk9dGhpcy5kYXRhLm9wdGlvbnNbYl0uZGlzcGxheVZhbHVlLEs9Yj09PVU/RDowLHEucHVzaCh0aGlzLl9yZW5kZXJUZXh0KFksayxPLHAsMCxWLGgsLU4rSykpO3JldHVybiBxLnB1c2goIkVUIFEgRU1DIiksZS5hYnJ1cHQoInJldHVybiIscS5qb2luKCJcbiIpKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksb30oSCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBqKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmRhdGEuZmllbGRWYWx1ZT1udWxsLG59cmV0dXJuIF8ocixbe2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19XSkscn0oSCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdDtyZXR1cm4gYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxhLmRhdGEuaGFzQXBwZWFyYW5jZT9hLmRhdGEubmFtZT0iTm9JY29uIjooYS5kYXRhLnJlY3RbMV09YS5kYXRhLnJlY3RbM10tMjIsYS5kYXRhLnJlY3RbMl09YS5kYXRhLnJlY3RbMF0rMjIsYS5kYXRhLm5hbWU9aS5oYXMoIk5hbWUiKT9pLmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUiKSxpLmhhcygiU3RhdGUiKT8oYS5kYXRhLnN0YXRlPWkuZ2V0KCJTdGF0ZSIpfHxudWxsLGEuZGF0YS5zdGF0ZU1vZGVsPWkuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGwpOihhLmRhdGEuc3RhdGU9bnVsbCxhLmRhdGEuc3RhdGVNb2RlbD1udWxsKSxhfXJldHVybiBfKHIpfShYKSxZPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElOSzt2YXIgaT1EKGUuZGljdCxhLnJlY3RhbmdsZSk7cmV0dXJuIGkmJihhLmRhdGEucXVhZFBvaW50cz1pKSxhLmRhdGEuYm9yZGVyQ29sb3I9YS5kYXRhLmJvcmRlckNvbG9yfHxhLmRhdGEuY29sb3IsbC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6YS5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pLGF9cmV0dXJuIF8ocil9KFUpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Q7YS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVA7dmFyIHM9aS5nZXQoIlBhcmVudCIpO2lmKCFzKXJldHVybigwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpLGsoYSk7dmFyIGM9cy5nZXQoIlN1YnR5cGUiKTthLmRhdGEucGFyZW50VHlwZT1jIGluc3RhbmNlb2Ygby5OYW1lP2MubmFtZTpudWxsO3ZhciB1PWkuZ2V0UmF3KCJQYXJlbnQiKTthLmRhdGEucGFyZW50SWQ9dSBpbnN0YW5jZW9mIG8uUmVmP3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXMuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KGwpJiY0PT09bC5sZW5ndGg/YS5kYXRhLnBhcmVudFJlY3Q9bi5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6YS5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO3ZhciBmPXMuZ2V0KCJSVCIpO2lmKCgwLG8uaXNOYW1lKShmLG4uQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihzPXMuZ2V0KCJJUlQiKSkscy5oYXMoIk0iKT8oYS5zZXRNb2RpZmljYXRpb25EYXRlKHMuZ2V0KCJNIikpLGEuZGF0YS5tb2RpZmljYXRpb25EYXRlPWEubW9kaWZpY2F0aW9uRGF0ZSk6YS5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCxzLmhhcygiQyIpPyhhLnNldENvbG9yKHMuZ2V0QXJyYXkoIkMiKSksYS5kYXRhLmNvbG9yPWEuY29sb3IpOmEuZGF0YS5jb2xvcj1udWxsLCFhLnZpZXdhYmxlKXt2YXIgaD1zLmdldCgiRiIpO2EuX2lzVmlld2FibGUoaCkmJmEuc2V0RmxhZ3MoaCl9cmV0dXJuIGEuc2V0VGl0bGUocy5nZXQoIlQiKSksYS5kYXRhLnRpdGxlT2JqPWEuX3RpdGxlLGEuc2V0Q29udGVudHMocy5nZXQoIkNvbnRlbnRzIikpLGEuZGF0YS5jb250ZW50c09iaj1hLl9jb250ZW50cyxzLmhhcygiUkMiKSYmKGEuZGF0YS5yaWNoVGV4dD12LlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocy5nZXQoIlJDIikpKSxhfXJldHVybiBfKHIpfShVKTt0LlBvcHVwQW5ub3RhdGlvbj1LO3ZhciBKPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLnhyZWY7aWYodC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQsdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSwhdC5hcHBlYXJhbmNlJiZ0Ll9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7dmFyIG89bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKSxjPXQuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dC5hcHBlYXJhbmNlPW8uY3JlYXRlQXBwZWFyYW5jZSh0Ll9jb250ZW50cy5zdHIsdC5yZWN0YW5nbGUsdC5yb3RhdGlvbixjLmZvbnRTaXplfHwxMCxjLmZvbnRDb2xvciksdC5fc3RyZWFtcy5wdXNoKHQuYXBwZWFyYW5jZSxpLkZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW0pfWVsc2UgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO3JldHVybiB0fXJldHVybiBfKHMsW3trZXk6Imhhc1RleHRDb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYXBwZWFyYW5jZX19XSxbe2tleToiY3JlYXRlTmV3RGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXIuYXBSZWYsYz1yLmFwLHU9ZS5jb2xvcixsPWUuZm9udFNpemUsZj1lLnJlY3QsaD1lLnJvdGF0aW9uLGQ9ZS51c2VyLHA9ZS52YWx1ZSxnPW5ldyBvLkRpY3QodCk7Zy5zZXQoIlR5cGUiLG8uTmFtZS5nZXQoIkFubm90IikpLGcuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGcmVlVGV4dCIpKSxnLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxnLnNldCgiUmVjdCIsZik7dmFyIHY9Ii9IZWx2ICIuY29uY2F0KGwsIiBUZiAiKS5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodSwhMCkpO2lmKGcuc2V0KCJEQSIsdiksZy5zZXQoIkNvbnRlbnRzIiwoMCxhLmlzQXNjaWkpKHApP3A6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShwLCEwKSksZy5zZXQoIkYiLDQpLGcuc2V0KCJCb3JkZXIiLFswLDAsMF0pLGcuc2V0KCJSb3RhdGUiLGgpLGQmJmcuc2V0KCJUIiwoMCxhLmlzQXNjaWkpKGQpP2Q6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSksc3x8Yyl7dmFyIHk9bmV3IG8uRGljdCh0KTtnLnNldCgiQVAiLHkpLHM/eS5zZXQoIk4iLHMpOnkuc2V0KCJOIixjKX1yZXR1cm4gZ319LHtrZXk6ImNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLHMpe3ZhciBjLHUsbCxmLGgsZCxwLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLHEsRyx6LFcsVixZLEssSixaLFEsZWUsdGUscmUsbmUsYWUsaWUsb2Usc2U7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gYz1zLmJhc2VGb250UmVmLHU9cy5ldmFsdWF0b3IsbD1zLnRhc2ssZj10LmNvbG9yLGg9dC5mb250U2l6ZSxkPXQucmVjdCxwPXQucm90YXRpb24sdj10LnZhbHVlLHk9bmV3IG8uRGljdChyKSxtPW5ldyBvLkRpY3QociksYz9tLnNldCgiSGVsdiIsYyk6KChiPW5ldyBvLkRpY3QocikpLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIkhlbHZldGljYSIpKSxiLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRm9udCIpKSxiLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiVHlwZTEiKSksYi5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksbS5zZXQoIkhlbHYiLGIpKSx5LnNldCgiRm9udCIsbSksZS5uZXh0PTgsSC5fZ2V0Rm9udERhdGEodSxsLHtmb250TmFtZToiSGVsdmV0aWNhIixmb250U2l6ZTpofSx5KTtjYXNlIDg6dz1lLnNlbnQsaz1UKGQsNCksUz1rWzBdLHg9a1sxXSxPPWtbMl0sRj1rWzNdLFA9Ty1TLEk9Ri14LHAlMTgwIT0wJiYoUD0oRT1bSSxQXSlbMF0sST1FWzFdKSxqPXYuc3BsaXQoIlxuIiksTT1oLzFlMyxfPS0xLzAsTD1bXSxSPUEoaiksZS5wcmV2PTE4LFIucygpO2Nhc2UgMjA6aWYoKE49Ui5uKCkpLmRvbmUpe2UubmV4dD0zNDticmVha31pZihEPU4udmFsdWUsISgoQj13LmVuY29kZVN0cmluZyhEKSkubGVuZ3RoPjEpKXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6RD1CLmpvaW4oIiIpLEwucHVzaChEKSxVPTAsJD13LmNoYXJzVG9HbHlwaHMoRCksWD1BKCQpO3RyeXtmb3IoWC5zKCk7IShxPVgubigpKS5kb25lOylHPXEudmFsdWUsVSs9Ry53aWR0aCpNfWNhdGNoKGUpe1guZShlKX1maW5hbGx5e1guZigpfV89TWF0aC5tYXgoXyxVKTtjYXNlIDMyOmUubmV4dD0yMDticmVhaztjYXNlIDM0OmUubmV4dD0zOTticmVhaztjYXNlIDM2OmUucHJldj0zNixlLnQwPWUuY2F0Y2goMTgpLFIuZShlLnQwKTtjYXNlIDM5OnJldHVybiBlLnByZXY9MzksUi5mKCksZS5maW5pc2goMzkpO2Nhc2UgNDI6Zm9yKHo9MSxfPlAmJih6PVAvXyksVz0xLFY9bi5MSU5FX0ZBQ1RPUipoLFk9bi5MSU5FX0RFU0NFTlRfRkFDVE9SKmgsKEs9VipqLmxlbmd0aCk+SSYmKFc9SS9LKSxKPU1hdGgubWluKHosVyksWj1oKkosUT1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUCksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSSksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSStZKSwiIFRtIDAgVGMgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGYsITApKSwiL0hlbHYgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoWiksIiBUZiIpXSxlZT0oMCxhLm51bWJlclRvU3RyaW5nKShWKSx0ZT0wLHJlPUw7dGU8cmUubGVuZ3RoO3RlKyspbmU9cmVbdGVdLFEucHVzaCgiMCAtIi5jb25jYXQoZWUsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShuZSksIikgVGoiKSk7cmV0dXJuIFEucHVzaCgiRVQiLCJRIiksYWU9US5qb2luKCJcbiIpLChpZT1uZXcgby5EaWN0KHIpKS5zZXQoIkZvcm1UeXBlIiwxKSxpZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksaWUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGllLnNldCgiQkJveCIsWzAsMCxQLEldKSxpZS5zZXQoIkxlbmd0aCIsYWUubGVuZ3RoKSxpZS5zZXQoIlJlc291cmNlcyIseSkscCYmKG9lPSgwLGEuZ2V0Um90YXRpb25NYXRyaXgpKHAsUCxJKSxpZS5zZXQoIk1hdHJpeCIsb2UpKSwoc2U9bmV3IGcuU3RyaW5nU3RyZWFtKGFlKSkuZGljdD1pZSxlLmFicnVwdCgicmV0dXJuIixzZSk7Y2FzZSA2NzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE4LDM2LDM5LDQyXV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksc30oWCksWj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5FO3ZhciBzPWkuZ2V0QXJyYXkoIkwiKTtpZihhLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KHMpLGEuc2V0TGluZUVuZGluZ3MoaS5nZXRBcnJheSgiTEUiKSksYS5kYXRhLmxpbmVFbmRpbmdzPWEubGluZUVuZGluZ3MsIWEuYXBwZWFyYW5jZSl7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sdT1pLmdldCgiQ0EiKSxsPVIoaS5nZXRBcnJheSgiSUMiKSxudWxsKSxmPWw/TihsKTpudWxsLGg9Zj91Om51bGwsZD1hLmJvcmRlclN0eWxlLndpZHRofHwxLHA9MipkLGc9W2EuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tcCxhLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLXAsYS5kYXRhLmxpbmVDb29yZGluYXRlc1syXStwLGEuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rcF07bi5VdGlsLmludGVyc2VjdChhLnJlY3RhbmdsZSxnKXx8KGEucmVjdGFuZ2xlPWcpLGEuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOm8sZXh0cmE6IiIuY29uY2F0KGQsIiB3Iiksc3Ryb2tlQ29sb3I6YyxmaWxsQ29sb3I6ZixzdHJva2VBbHBoYTp1LGZpbGxBbHBoYTpoLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoc1swXSwiICIpLmNvbmNhdChzWzFdLCIgbSIpLCIiLmNvbmNhdChzWzJdLCIgIikuY29uY2F0KHNbM10sIiBsIiksIlMiKSxbdFswXS54LWQsdFsxXS54K2QsdFszXS55LWQsdFsxXS55K2RdfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSxRPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUFSRSwhYS5hcHBlYXJhbmNlKXt2YXIgcz1hLmNvbG9yP04oYS5jb2xvcik6WzAsMCwwXSxjPWkuZ2V0KCJDQSIpLHU9UihpLmdldEFycmF5KCJJQyIpLG51bGwpLGw9dT9OKHUpOm51bGwsZj1sP2M6bnVsbDtpZigwPT09YS5ib3JkZXJTdHlsZS53aWR0aCYmIWwpcmV0dXJuIGsoYSk7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoYS5ib3JkZXJTdHlsZS53aWR0aCwiIHciKSxzdHJva2VDb2xvcjpzLGZpbGxDb2xvcjpsLHN0cm9rZUFscGhhOmMsZmlsbEFscGhhOmYscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzJdLngrYS5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K2EuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtYS5ib3JkZXJTdHlsZS53aWR0aCxvPXRbMV0ueS10WzNdLnktYS5ib3JkZXJTdHlsZS53aWR0aDtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChyLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoaSwiICIpLmNvbmNhdChvLCIgcmUiKSksbD9lLnB1c2goIkIiKTplLnB1c2goIlMiKSxbdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX1yZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIiksdT1SKGkuZ2V0QXJyYXkoIklDIiksbnVsbCksbD11P04odSk6bnVsbCxmPWw/YzpudWxsO2lmKDA9PT1hLmJvcmRlclN0eWxlLndpZHRoJiYhbClyZXR1cm4gayhhKTt2YXIgaD00LzMqTWF0aC50YW4oTWF0aC5QSS84KTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiIiLmNvbmNhdChhLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOnMsZmlsbENvbG9yOmwsc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6Zixwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0ueCthLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktYS5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LWEuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSthLmJvcmRlclN0eWxlLndpZHRoLzIscz1yKyhpLXIpLzIsYz1uKyhvLW4pLzIsdT0oaS1yKS8yKmgsZj0oby1uKS8yKmg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQocywiICIpLmNvbmNhdChvLCIgbSIpLCIiLmNvbmNhdChzK3UsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMsIiBjIiksIiIuY29uY2F0KGksIiAiKS5jb25jYXQoYy1mLCIgIikuY29uY2F0KHMrdSwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiIGMiKSwiIi5jb25jYXQocy11LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLWYsIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLCIgYyIpLCIiLmNvbmNhdChyLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChzLXUsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiBjIiksImgiKSxsP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSx0ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORSxhLmRhdGEudmVydGljZXM9W10sUyhhKWluc3RhbmNlb2YgcmV8fChhLnNldExpbmVFbmRpbmdzKGkuZ2V0QXJyYXkoIkxFIikpLGEuZGF0YS5saW5lRW5kaW5ncz1hLmxpbmVFbmRpbmdzKTt2YXIgcz1pLmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBrKGEpO2Zvcih2YXIgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrPTIpYS5kYXRhLnZlcnRpY2VzLnB1c2goe3g6c1tjXSx5OnNbYysxXX0pO2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBsLGY9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0saD1pLmdldCgiQ0EiKSxkPWEuYm9yZGVyU3R5bGUud2lkdGh8fDEscD0yKmQsZz1bMS8wLDEvMCwtMS8wLC0xLzBdLHY9QShhLmRhdGEudmVydGljZXMpO3RyeXtmb3Iodi5zKCk7IShsPXYubigpKS5kb25lOyl7dmFyIHk9bC52YWx1ZTtnWzBdPU1hdGgubWluKGdbMF0seS54LXApLGdbMV09TWF0aC5taW4oZ1sxXSx5LnktcCksZ1syXT1NYXRoLm1heChnWzJdLHkueCtwKSxnWzNdPU1hdGgubWF4KGdbM10seS55K3ApfX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1uLlV0aWwuaW50ZXJzZWN0KGEucmVjdGFuZ2xlLGcpfHwoYS5yZWN0YW5nbGU9ZyksYS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoZCwiIHciKSxzdHJva2VDb2xvcjpmLHN0cm9rZUFscGhhOmgscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9YS5kYXRhLnZlcnRpY2VzLG49MCxpPXIubGVuZ3RoO248aTtuKyspZS5wdXNoKCIiLmNvbmNhdChyW25dLngsIiAiKS5jb25jYXQocltuXS55LCIgIikuY29uY2F0KDA9PT1uPyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLHJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlHT04sYX1yZXR1cm4gXyhyKX0odGUpLG5lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNBUkVULGF9cmV0dXJuIF8ocil9KFgpLGFlPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLmRpY3QsaT1lLnhyZWY7dC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHQuZGF0YS5pbmtMaXN0cz1bXTt2YXIgbz1hLmdldEFycmF5KCJJbmtMaXN0Iik7aWYoIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGsodCk7Zm9yKHZhciBjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt0LmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBsPTAsZj1vW2NdLmxlbmd0aDtsPGY7bCs9Mil0LmRhdGEuaW5rTGlzdHNbY10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tjXVtsXSkseTppLmZldGNoSWZSZWYob1tjXVtsKzFdKX0pfWlmKCF0LmFwcGVhcmFuY2Upe3ZhciBoLGQ9dC5jb2xvcj9OKHQuY29sb3IpOlswLDAsMF0scD1hLmdldCgiQ0EiKSxnPXQuYm9yZGVyU3R5bGUud2lkdGh8fDEsdj0yKmcseT1bMS8wLDEvMCwtMS8wLC0xLzBdLG09QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOyl7dmFyIGIsdz1BKGgudmFsdWUpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIFM9Yi52YWx1ZTt5WzBdPU1hdGgubWluKHlbMF0sUy54LXYpLHlbMV09TWF0aC5taW4oeVsxXSxTLnktdikseVsyXT1NYXRoLm1heCh5WzJdLFMueCt2KSx5WzNdPU1hdGgubWF4KHlbM10sUy55K3YpfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX19fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfW4uVXRpbC5pbnRlcnNlY3QodC5yZWN0YW5nbGUseSl8fCh0LnJlY3RhbmdsZT15KSx0Ll9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiIiLmNvbmNhdChnLCIgdyIpLHN0cm9rZUNvbG9yOmQsc3Ryb2tlQWxwaGE6cCxwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHIpe3ZhciBuLGE9QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyl7Zm9yKHZhciBpPW4udmFsdWUsbz0wLHM9aS5sZW5ndGg7bzxzO28rKyllLnB1c2goIiIuY29uY2F0KGlbb10ueCwiICIpLmNvbmNhdChpW29dLnksIiAiKS5jb25jYXQoMD09PW8/Im0iOiJsIikpO2UucHVzaCgiUyIpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm5bclswXS54LHJbMV0ueCxyWzNdLnksclsxXS55XX19KX1yZXR1cm4gdH1yZXR1cm4gXyhzLG51bGwsW3trZXk6ImNyZWF0ZU5ld0RpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmFwUmVmLGk9ci5hcCxzPWUucGF0aHMsYz1lLnJlY3QsdT1lLnJvdGF0aW9uLGw9bmV3IG8uRGljdCh0KTtsLnNldCgiVHlwZSIsby5OYW1lLmdldCgiQW5ub3QiKSksbC5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkluayIpKSxsLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxsLnNldCgiUmVjdCIsYyksbC5zZXQoIklua0xpc3QiLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb2ludHN9KSkpLGwuc2V0KCJGIiw0KSxsLnNldCgiQm9yZGVyIixbMCwwLDBdKSxsLnNldCgiUm90YXRlIix1KTt2YXIgZj1uZXcgby5EaWN0KHQpO3JldHVybiBsLnNldCgiQVAiLGYpLGE/Zi5zZXQoIk4iLGEpOmYuc2V0KCJOIixpKSxsfX0se2tleToiY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIHMsYyx1LGwsZixoLGQscCx2LHksbSxiLHcsayxTLHgsTyxGLFAsSSxFLGosTSxfLEwsUixOLEQsQjtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnM9dC5jb2xvcixjPXQucmVjdCx1PXQucm90YXRpb24sbD10LnBhdGhzLGY9dC50aGlja25lc3MsaD10Lm9wYWNpdHksZD1UKGMsNCkscD1kWzBdLHY9ZFsxXSx5PWRbMl0sbT1kWzNdLGI9eS1wLHc9bS12LHUlMTgwIT0wJiYoYj0oaz1bdyxiXSlbMF0sdz1rWzFdKSxTPVsiIi5jb25jYXQoZiwiIHcgMSBKIDEgaiIpLCIiLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKShzLCExKSldLDEhPT1oJiZTLnB1c2goIi9SMCBncyIpLHg9W10sTz1BKGwpO3RyeXtmb3IoTy5zKCk7IShGPU8ubigpKS5kb25lOyl7Zm9yKFA9Ri52YWx1ZS5iZXppZXIseC5sZW5ndGg9MCx4LnB1c2goIiIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMF0pLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMV0pLCIgbSIpKSxJPTIsRT1QLmxlbmd0aDtJPEU7SSs9NilqPVAuc2xpY2UoSSxJKzYpLm1hcChhLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIikseC5wdXNoKCIiLmNvbmNhdChqLCIgYyIpKTt4LnB1c2goIlMiKSxTLnB1c2goeC5qb2luKCJcbiIpKX19Y2F0Y2goZSl7Ty5lKGUpfWZpbmFsbHl7Ty5mKCl9cmV0dXJuIE09Uy5qb2luKCJcbiIpLChfPW5ldyBvLkRpY3QocikpLnNldCgiRm9ybVR5cGUiLDEpLF8uc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGb3JtIikpLF8uc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLF8uc2V0KCJCQm94IixbMCwwLGIsd10pLF8uc2V0KCJMZW5ndGgiLE0ubGVuZ3RoKSx1JiYoTD0oMCxhLmdldFJvdGF0aW9uTWF0cml4KSh1LGIsdyksXy5zZXQoIk1hdHJpeCIsTCkpLDEhPT1oJiYoUj1uZXcgby5EaWN0KHIpLE49bmV3IG8uRGljdChyKSwoRD1uZXcgby5EaWN0KHIpKS5zZXQoIkNBIixoKSxELnNldCgiVHlwZSIsby5OYW1lLmdldCgiRXh0R1N0YXRlIikpLE4uc2V0KCJSMCIsRCksUi5zZXQoIkV4dEdTdGF0ZSIsTiksXy5zZXQoIlJlc291cmNlcyIsUikpLChCPW5ldyBnLlN0cmluZ1N0cmVhbShNKSkuZGljdD1fLGUuYWJydXB0KCJyZXR1cm4iLEIpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHN9KFgpLGllPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe3ZhciBzPWEuYXBwZWFyYW5jZSYmYS5hcHBlYXJhbmNlLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighYS5hcHBlYXJhbmNlfHwhc3x8IXMuaGFzKCJFeHRHU3RhdGUiKSl7YS5hcHBlYXJhbmNlJiYoMCxuLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlsxLDEsMF0sdT1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGZpbGxDb2xvcjpjLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTp1LHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQodFswXS54LCIgIikuY29uY2F0KHRbMF0ueSwiIG0iKSwiIi5jb25jYXQodFsxXS54LCIgIikuY29uY2F0KHRbMV0ueSwiIGwiKSwiIi5jb25jYXQodFszXS54LCIgIikuY29uY2F0KHRbM10ueSwiIGwiKSwiIi5jb25jYXQodFsyXS54LCIgIikuY29uY2F0KHRbMl0ueSwiIGwiKSwiZiIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIGEuZGF0YS5oYXNQb3B1cD0hMTtyZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksb2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLGEuZGF0YS5xdWFkUG9pbnRzPUQoaSxudWxsKSl7aWYoIWEuYXBwZWFyYW5jZSl7dmFyIHM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sYz1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjpzLHN0cm9rZUFscGhhOmMscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjtpZihhLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHRbMF0ueS10WzJdLnkpLzYsbj1yLGE9dFsyXS54LGk9dFsyXS55LG89dFszXS54O2UucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBtIikpO2Rve2ErPTIsbj0wPT09bj9yOjAsZS5wdXNoKCIiLmNvbmNhdChhLCIgIikuY29uY2F0KGkrbiwiIGwiKSl9d2hpbGUoYTxvKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMl0ueCxvLGktMipyLGkrMipyXX19KX19ZWxzZSBhLmRhdGEuaGFzUG9wdXA9ITE7cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLGNlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoKHRbMF0ueCt0WzJdLngpLzIsIiAiKSsiIi5jb25jYXQoKHRbMF0ueSt0WzJdLnkpLzIsIiBtIiksIiIuY29uY2F0KCh0WzFdLngrdFszXS54KS8yLCIgIikrIiIuY29uY2F0KCh0WzFdLnkrdFszXS55KS8yLCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSx1ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiBqKHRoaXMsciksKGE9dC5jYWxsKHRoaXMsZSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCxhfXJldHVybiBfKHIpfShYKSxsZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZixjPW5ldyBoLkZpbGVTcGVjKGkuZ2V0KCJGUyIpLHMpO2EuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULGEuZGF0YS5maWxlPWMuc2VyaWFsaXphYmxlO3ZhciB1PWkuZ2V0KCJOYW1lIik7cmV0dXJuIGEuZGF0YS5uYW1lPXUgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodS5uYW1lKToiUHVzaFBpbiIsYX1yZXR1cm4gXyhyKX0oWCl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbnRTaXplLHI9ZS5mb250TmFtZSxuPWUuZm9udENvbG9yO3JldHVybiIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KHcobiwhMCkpfSx0LmdldFBkZkNvbG9yPXcsdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKS5wYXJzZSgpfTt2YXIgYT1yKDEzNCksaT1yKDEzNSksbz1yKDIpLHM9cigxNDMpLGM9cigxNDQpLHU9cigxMzkpO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWgoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4geT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHkoZSx0KX1mdW5jdGlvbiBtKGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxtKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ5KGUsdCl9KGMsZSk7dmFyIHQscixpPSh0PWMscj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPW0odCk7aWYocil7dmFyIGk9bSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gcCh0aGlzLGMpLGkuY2FsbCh0aGlzLG5ldyB1LlN0cmluZ1N0cmVhbShlKSl9cmV0dXJuIHYoYyxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOylpZigwPT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKXt2YXIgcj1lLmZuLG49ZS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugby5PUFMuc2V0Rm9udDp2YXIgaT1mKG4sMiksYz1pWzBdLHU9aVsxXTtjIGluc3RhbmNlb2YgYS5OYW1lJiYodC5mb250TmFtZT1jLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgdSYmdT4wJiYodC5mb250U2l6ZT11KTticmVhaztjYXNlIG8uT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBvLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugby5PUFMuc2V0RmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLG8ud2FybikoJ3BhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gdH19XSksY30oYy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IpO2Z1bmN0aW9uIHcoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe3ZhciByPWVbMF0vMjU1O3JldHVybiIiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShyKSwiICIpLmNvbmNhdCh0PyJnIjoiRyIpfXJldHVybiBBcnJheS5mcm9tKGUsKGZ1bmN0aW9uKGUpe3JldHVybigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KX0pKS5qb2luKCIgIikrIiAiLmNvbmNhdCh0PyJyZyI6IlJHIil9dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMueHJlZj10LHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9cjt2YXIgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPW4uZ2V0Q29udGV4dCgiMmQiKSxlLl9mb250TmFtZUlkfHwoZS5fZm9udE5hbWVJZD0xKSx0aGlzLmZvbnROYW1lPWEuTmFtZS5nZXQoIkludmFsaWRQREZqc0ZvbnRfIi5jb25jYXQociwiXyIpLmNvbmNhdChlLl9mb250TmFtZUlkKyspKX1yZXR1cm4gdihlLFt7a2V5OiJ0b1VuaWNvZGVSZWYiLGdldDpmdW5jdGlvbigpe2lmKCFlLl90b1VuaWNvZGVSZWYpe3ZhciB0PWUudG9Vbmljb2RlU3RyZWFtPW5ldyB1LlN0cmluZ1N0cmVhbSgiL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIikscj1uZXcgYS5EaWN0KHRoaXMueHJlZik7dC5kaWN0PXIsci5zZXQoIkxlbmd0aCIsMzQ2KSxlLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX3RvVW5pY29kZVJlZn19LHtrZXk6ImZvbnREZXNjcmlwdG9yUmVmIixnZXQ6ZnVuY3Rpb24oKXtpZighZS5fZm9udERlc2NyaXB0b3JSZWYpe3ZhciB0PW5ldyBhLkRpY3QodGhpcy54cmVmKTt0LnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSksdC5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKSx0LnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIiksdC5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pLHQuc2V0KCJGb250U3RyZXRjaCIsYS5OYW1lLmdldCgiTm9ybWFsIikpLHQuc2V0KCJGb250V2VpZ2h0Iiw0MDApLHQuc2V0KCJJdGFsaWNBbmdsZSIsMCksZS5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX2ZvbnREZXNjcmlwdG9yUmVmfX0se2tleToiZGVzY2VuZGFudEZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJGb250IikpLGUuc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSksZS5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhciksZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKSxlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpLGUuc2V0KCJEVyIsMWUzKTt2YXIgdCxyLG49W10saT1udWxsLG89bnVsbCxzPWwoKHI9dGhpcy53aWR0aHMuZW50cmllcygpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGQoZSl9KHIpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHIpfHxoKHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKS5zb3J0KCkpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9Zih0LnZhbHVlLDIpLHU9Y1swXSxwPWNbMV07aT91PT09aStvLmxlbmd0aD9vLnB1c2gocCk6KG4ucHVzaChpLG8pLGk9dSxvPVtwXSk6KGk9dSxvPVtwXSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWkmJm4ucHVzaChpLG8pLGUuc2V0KCJXIixuKTt2YXIgZz1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIGcuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksZy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxnLnNldCgiU3VwcGxlbWVudCIsMCksZS5zZXQoIkNJRFN5c3RlbUluZm8iLGcpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToiYmFzZUZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixhLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5EaWN0KHRoaXMueHJlZiksdD1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIHQuc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKSxlLnNldCgiRm9udCIsdCksZX19LHtrZXk6Il9jcmVhdGVDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRocz1uZXcgTWFwLHRoaXMuY3R4TWVhc3VyZS5mb250PSIxMDAwcHggIi5jb25jYXQodGhpcy5mb250RmFtaWx5KSx0aGlzLmN0eE1lYXN1cmV9fSx7a2V5OiJjcmVhdGVGb250UmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxuPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYSxpPWwodC52YWx1ZS5zcGxpdCgiIikpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZSxzPW8uY2hhckNvZGVBdCgwKTtpZighdGhpcy53aWR0aHMuaGFzKHMpKXt2YXIgYz1yLm1lYXN1cmVUZXh0KG8pLHU9TWF0aC5jZWlsKGMud2lkdGgpO3RoaXMud2lkdGhzLnNldChzLHUpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKHMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgocyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHRoaXMucmVzb3VyY2VzfX0se2tleToiY3JlYXRlQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixzKXt2YXIgYyxoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxkPVtdLHA9LTEvMCxnPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihnLnMoKTshKGM9Zy5uKCkpLmRvbmU7KXt2YXIgdj1jLnZhbHVlO2QucHVzaCh2KTt2YXIgeT1oLm1lYXN1cmVUZXh0KHYpLndpZHRoO3A9TWF0aC5tYXgocCx5KTt2YXIgbSxiPWwodi5zcGxpdCgiIikpO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIGs9bS52YWx1ZSxTPWsuY2hhckNvZGVBdCgwKSx4PXRoaXMud2lkdGhzLmdldChTKTtpZih2b2lkIDA9PT14KXt2YXIgTz1oLm1lYXN1cmVUZXh0KGspO3g9TWF0aC5jZWlsKE8ud2lkdGgpLHRoaXMud2lkdGhzLnNldChTLHgpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKFMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgoUyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9cCo9bi8xZTM7dmFyIEE9Zih0LDQpLEM9QVswXSxGPUFbMV0sUD1BWzJdLUMsVD1BWzNdLUY7aWYociUxODAhPTApe3ZhciBJPVtULFBdO1A9SVswXSxUPUlbMV19dmFyIEU9MTtwPlAmJihFPVAvcCk7dmFyIGo9MSxNPW8uTElORV9GQUNUT1IqbixfPW8uTElORV9ERVNDRU5UX0ZBQ1RPUipuLEw9TSpkLmxlbmd0aDtMPlQmJihqPVQvTCk7Zm9yKHZhciBSPW4qTWF0aC5taW4oRSxqKSxOPVsicSIsIjAgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShQKSwiICIpLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUKSwiIHJlIFcgbiIpLCJCVCIsIjEgMCAwIDEgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUK18pLCIgVG0gMCBUYyAiKS5jb25jYXQodyhzLCEwKSksIi8iLmNvbmNhdCh0aGlzLmZvbnROYW1lLm5hbWUsIiAiKS5jb25jYXQoKDAsaS5udW1iZXJUb1N0cmluZykoUiksIiBUZiIpXSxEPSgwLGkubnVtYmVyVG9TdHJpbmcpKE0pLEI9MCxVPWQ7QjxVLmxlbmd0aDtCKyspe3ZhciAkPVVbQl07Ti5wdXNoKCIwIC0iLmNvbmNhdChELCIgVGQgPCIpLmNvbmNhdCgoMCxpLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKCQpLCI+IFRqIikpfU4ucHVzaCgiRVQiLCJRIik7dmFyIFg9Ti5qb2luKCJcbiIpLEg9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2lmKEguc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJGb3JtIikpLEguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYT2JqZWN0IikpLEguc2V0KCJCQm94IixbMCwwLFAsVF0pLEguc2V0KCJMZW5ndGgiLFgubGVuZ3RoKSxILnNldCgiUmVzb3VyY2VzIix0aGlzLnJlc291cmNlcykscil7dmFyIHE9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkocixQLFQpO0guc2V0KCJNYXRyaXgiLHEpfXZhciBHPW5ldyB1LlN0cmluZ1N0cmVhbShYKTtyZXR1cm4gRy5kaWN0PUgsR319XSksZX0oKTt0LkZha2VVbmljb2RlRm9udD1rfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29sb3JTcGFjZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3AodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIiksdGhpcy5uYW1lPXQsdGhpcy5udW1Db21wcz1yfXZhciB0LHI7cmV0dXJuIHYoZSxbe2tleToiZ2V0UmdiIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtyZXR1cm4gdGhpcy5nZXRSZ2JJdGVtKGUsdCxyLDApLHJ9fSx7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuaXNEZWZhdWx0RGVjb2RlKHQsdGhpcy5udW1Db21wcyl9fSx7a2V5OiJmaWxsUmdiIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9dCpyLGw9bnVsbCxmPTE8PG8saD1yIT09YXx8dCE9PW47aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG8pKWw9cztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZ1PmYmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2Zvcih2YXIgZD1vPD04P25ldyBVaW50OEFycmF5KGYpOm5ldyBVaW50MTZBcnJheShmKSxwPTA7cDxmO3ArKylkW3BdPXA7dmFyIGc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqZik7aWYodGhpcy5nZXRSZ2JCdWZmZXIoZCwwLGYsZywwLG8sMCksaCl7bD1uZXcgVWludDhBcnJheSgzKnUpO2Zvcih2YXIgdj0wLHk9MDt5PHU7Kyt5KXt2YXIgbT0zKnNbeV07bFt2KytdPWdbbV0sbFt2KytdPWdbbSsxXSxsW3YrK109Z1ttKzJdfX1lbHNlIGZvcih2YXIgYj0wLHc9MDt3PHU7Kyt3KXt2YXIgaz0zKnNbd107ZVtiKytdPWdba10sZVtiKytdPWdbaysxXSxlW2IrK109Z1trKzJdLGIrPWN9fWVsc2UgaD8obD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KSx0aGlzLmdldFJnYkJ1ZmZlcihzLDAsdSxsLDAsbywwKSk6dGhpcy5nZXRSZ2JCdWZmZXIocywwLG4qaSxlLDAsbyxjKTtpZihsKWlmKGgpIWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe289MSE9PW8/MDpvO2Zvcih2YXIgcyxjPXIvYSx1PW4vaSxsPTAsZj1uZXcgVWludDE2QXJyYXkoYSksaD0zKnIsZD0wO2Q8YTtkKyspZltkXT0zKk1hdGguZmxvb3IoZCpjKTtmb3IodmFyIHA9MDtwPGk7cCsrKWZvcih2YXIgZz1NYXRoLmZsb29yKHAqdSkqaCx2PTA7djxhO3YrKylzPWcrZlt2XSx0W2wrK109ZVtzKytdLHRbbCsrXT1lW3MrK10sdFtsKytdPWVbcysrXSxsKz1vfShsLGUsdCxyLG4sYSxjKTtlbHNlIGZvcih2YXIgUz0wLHg9MCxPPTAsQT1uKmk7TzxBO08rKyllW1MrK109bFt4KytdLGVbUysrXT1sW3grK10sZVtTKytdPWxbeCsrXSxTKz1jfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9fV0sW3trZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTt2YXIgaSxvO2UgaW5zdGFuY2VvZiBhLlJlZiYmKG89ZSxlPXQuZmV0Y2goZSkpLGUgaW5zdGFuY2VvZiBhLk5hbWUmJihpPWUubmFtZSksKGl8fG8pJiZyLnNldChpLG8sbil9fSx7a2V5OiJnZXRDYWNoZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe3ZhciBuPXIuZ2V0QnlSZWYoZSk7aWYobilyZXR1cm4gbjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBhLk5hbWUpe3ZhciBpPXIuZ2V0QnlOYW1lKGUubmFtZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LHtrZXk6InBhcnNlQXN5bmMiLHZhbHVlOih0PWgoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sYSxpLG8scyxjO3JldHVybiBoKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9dC5jcyxuPXQueHJlZixhPXQucmVzb3VyY2VzLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LnBkZkZ1bmN0aW9uRmFjdG9yeSxzPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsYz10aGlzLl9wYXJzZShyLG4saSxvKSx0aGlzLl9jYWNoZShyLG4scyxjKSxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNzLHI9ZS54cmVmLG49ZS5yZXNvdXJjZXMsYT12b2lkIDA9PT1uP251bGw6bixpPWUucGRmRnVuY3Rpb25GYWN0b3J5LG89ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxzPXRoaXMuZ2V0Q2FjaGVkKHQscixvKTtpZihzKXJldHVybiBzO3ZhciBjPXRoaXMuX3BhcnNlKHQscixhLGkpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsbyxjKSxjfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBiKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIGEuRGljdCl7dmFyIG89ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihvIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcz1vLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGMsdSxsLGYsaCxkLHA9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7c3dpdGNoKHApe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIGY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXQoIkdhbW1hIiksbmV3IE8oZixoLGQpO2Nhc2UiQ2FsUkdCIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxkPWMuZ2V0QXJyYXkoIkdhbW1hIik7dmFyIGc9Yy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBBKGYsaCxkLGcpO2Nhc2UiSUNDQmFzZWQiOnZhciB2PXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O3U9di5nZXQoIk4iKTt2YXIgeT12LmdldCgiQWx0ZXJuYXRlIik7aWYoeSl7dmFyIGs9dGhpcy5fcGFyc2UoeSx0LHIsaSk7aWYoay5udW1Db21wcz09PXUpcmV0dXJuIGs7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT11KXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4obD1lWzFdfHxudWxsKSYmKGw9dGhpcy5fcGFyc2UobCx0LHIsaSkpLG5ldyBiKGwpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpsPXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO3ZhciBTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHg9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgdyhsLFMseCk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciBGPXQuZmV0Y2hJZlJlZihlWzFdKTt1PUFycmF5LmlzQXJyYXkoRik/Ri5sZW5ndGg6MSxsPXRoaXMuX3BhcnNlKGVbMl0sdCxyLGkpO3ZhciBQPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgbSh1LGwsUCk7Y2FzZSJMYWIiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3ZhciBUPWMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBDKGYsaCxUKTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAiLmNvbmNhdChwKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGUpKX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKHZhciByPTAsYT1lLmxlbmd0aDtyPGE7cis9MilpZigwIT09ZVtyXXx8MSE9PWVbcisxXSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNpbmdsZXRvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IGspfSxnZXQgcmdiKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IFMpfSxnZXQgY215aygpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgeCl9fSl9fV0pLGV9KCk7dC5Db2xvclNwYWNlPXk7dmFyIG09ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHAodGhpcyxyKSwoaT10LmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkuYmFzZT1uLGkudGludEZuPWEsaS50bXBCdWY9bmV3IEZsb2F0MzJBcnJheShuLm51bUNvbXBzKSxpfXJldHVybiB2KHIsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxhLDApLHRoaXMuYmFzZS5nZXRSZ2JJdGVtKGEsMCxyLG4pfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU9dGhpcy50aW50Rm4sbD10aGlzLmJhc2UsZj0xLygoMTw8aSktMSksaD1sLm51bUNvbXBzLGQ9bC51c2VzWmVyb1RvT25lUmFuZ2UscD0obC5pc1Bhc3N0aHJvdWdoKDgpfHwhZCkmJjA9PT1vLGc9cD9hOjAsdj1wP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikseT10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheSh5KSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7Zm9yKHM9MDtzPHI7cysrKXtmb3IoYz0wO2M8eTtjKyspbVtjXT1lW3QrK10qZjtpZih1KG0sMCxiLDApLGQpZm9yKGM9MDtjPGg7YysrKXZbZysrXT0yNTUqYltjXTtlbHNlIGwuZ2V0UmdiSXRlbShiLDAsdixnKSxnKz1ofXB8fGwuZ2V0UmdiQnVmZmVyKHYsMCxyLG4sYSw4LG8pfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fV0pLHJ9KHkpLGI9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkuYmFzZT1lLG59cmV0dXJuIHYocixbe2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1dKSxyfSh5KSx3PWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLG8pe3ZhciBzO3AodGhpcyxyKSwocz10LmNhbGwodGhpcywiSW5kZXhlZCIsMSkpLmJhc2U9ZSxzLmhpZ2hWYWw9YTt2YXIgYz1lLm51bUNvbXBzKmE7aWYocy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYyksbyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7dmFyIHU9by5nZXRCeXRlcyhjKTtzLmxvb2t1cC5zZXQodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KG8pKTtmb3IodmFyIGw9MDtsPGM7KytsKXMubG9va3VwW2xdPTI1NSZvLmNoYXJDb2RlQXQobCl9cmV0dXJuIHN9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGM9cy5udW1Db21wcyx1PXMuZ2V0T3V0cHV0TGVuZ3RoKGMsbyksbD10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmM7cy5nZXRSZ2JCdWZmZXIobCxoLDEsbixhLDgsbyksYSs9dX19fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSkscn0oeSksaz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlR3JheSIsMSl9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxjPXQsdT1hLGw9MDtsPHI7KytsKXt2YXIgZj1zKmVbYysrXTtuW3UrK109ZixuW3UrK109ZixuW3UrK109Zix1Kz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSkscn0oeSksUz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlUkdCIiwzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGM9dCx1PWEsbD0wO2w8cjsrK2wpblt1KytdPXMqZVtjKytdLG5bdSsrXT1zKmVbYysrXSxuW3UrK109cyplW2MrK10sdSs9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSxyfSh5KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsYz1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtzKG4sdCk7dmFyIHI9dShuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHAodGhpcyxuKSxyLmNhbGwodGhpcywiRGV2aWNlQ01ZSyIsNCl9cmV0dXJuIHYobixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGM9MS8oKDE8PG8pLTEpLHU9MDt1PG47dSsrKWUodCxyLGMsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLG59KHkpfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksYz1lLllXKnMsdT1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhjLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09dSxuW2ErMV09dSxuW2ErMl09dX1yZXR1cm4gZnVuY3Rpb24odCl7cyhhLHQpO3ZhciByPXUoYSk7ZnVuY3Rpb24gYShlLHQsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89ci5jYWxsKHRoaXMsIkNhbEdyYXkiLDEpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheSIpO2lmKHQ9dHx8WzAsMCwwXSxpPWl8fDEsby5YVz1lWzBdLG8uWVc9ZVsxXSxvLlpXPWVbMl0sby5YQj10WzBdLG8uWUI9dFsxXSxvLlpCPXRbMl0sby5HPWksby5YVzwwfHxvLlpXPDB8fDEhPT1vLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgIi5jb25jYXQoby5uYW1lKSsiLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtyZXR1cm4oby5YQjwwfHxvLllCPDB8fG8uWkI8MCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICIuY29uY2F0KG8ubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksby5YQj1vLllCPW8uWkI9MCksMD09PW8uWEImJjA9PT1vLllCJiYwPT09by5aQnx8KDAsbi53YXJuKSgiIi5jb25jYXQoby5uYW1lLCIsIEJsYWNrUG9pbnQ6IFhCOiAiKS5jb25jYXQoby5YQiwiLCBZQjogIikuY29uY2F0KG8uWUIsIiwgIikrIlpCOiAiLmNvbmNhdChvLlpCLCIsIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4iKSksby5HPDEmJigoMCxuLmluZm8pKCJJbnZhbGlkIEdhbW1hOiAiLmNvbmNhdChvLkcsIiBmb3IgIikuY29uY2F0KG8ubmFtZSwiLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksby5HPTEpLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgYz0xLygoMTw8byktMSksdT0wO3U8bjsrK3UpZSh0aGlzLHQscixhLGksYykscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLGF9KHkpfSgpLEE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksbz1uZXcgRmxvYXQzMkFycmF5KDMpLGM9bmV3IEZsb2F0MzJBcnJheSgzKSxsPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIGYoZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2QoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmQoMCwxLDEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MD8tZygtZSk6ZT44P01hdGgucG93KChlKzE2KS8xMTYsMyk6ZSpsfWZ1bmN0aW9uIG0obixzLHUsbCxwLHYpe3ZhciB5PWQoMCwxLHNbdV0qdiksbT1kKDAsMSxzW3UrMV0qdiksYj1kKDAsMSxzW3UrMl0qdiksdz0xPT09eT8xOk1hdGgucG93KHksbi5HUiksaz0xPT09bT8xOk1hdGgucG93KG0sbi5HRyksUz0xPT09Yj8xOk1hdGgucG93KGIsbi5HQikseD1uLk1YQSp3K24uTVhCKmsrbi5NWEMqUyxPPW4uTVlBKncrbi5NWUIqaytuLk1ZQypTLEE9bi5NWkEqdytuLk1aQiprK24uTVpDKlMsQz1vO0NbMF09eCxDWzFdPU8sQ1syXT1BO3ZhciBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO3ZhciBvPWE7ZihlLG4sbyk7dmFyIHM9aTshZnVuY3Rpb24oZSx0LHIpe3JbMF09MSp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEqdFsyXS9lWzJdfShyLG8scyksZih0LHMsYSl9KG4ud2hpdGVQb2ludCxDLEYpO3ZhciBQPW87IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTt2YXIgbj1nKDApLGE9KDEtbikvKDEtZyhlWzBdKSksaT0xLWEsbz0oMS1uKS8oMS1nKGVbMV0pKSxzPTEtbyxjPSgxLW4pLygxLWcoZVsyXSkpLHU9MS1jO3JbMF09dFswXSphK2ksclsxXT10WzFdKm8rcyxyWzJdPXRbMl0qYyt1fShuLmJsYWNrUG9pbnQsRixQKTt2YXIgVD1jOyFmdW5jdGlvbihyLG4sYSl7dmFyIG89YTtmKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0uOTUwNDcqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xLjA4ODgzKnRbMl0vZVsyXX0ocixvLHMpLGYodCxzLGEpfShhLFAsVCk7dmFyIEk9bztmKHIsVCxJKSxsW3BdPTI1NSpoKElbMF0pLGxbcCsxXT0yNTUqaChJWzFdKSxsW3ArMl09MjU1KmgoSVsyXSl9cmV0dXJuIGZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLGksbyl7dmFyIHM7aWYocCh0aGlzLHIpLHM9dC5jYWxsKHRoaXMsIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTthPWF8fG5ldyBGbG9hdDMyQXJyYXkoMyksaT1pfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLG89b3x8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTt2YXIgYz1lWzBdLHU9ZVsxXSxsPWVbMl07cy53aGl0ZVBvaW50PWU7dmFyIGY9YVswXSxoPWFbMV0sZD1hWzJdO2lmKHMuYmxhY2tQb2ludD1hLHMuR1I9aVswXSxzLkdHPWlbMV0scy5HQj1pWzJdLHMuTVhBPW9bMF0scy5NWUE9b1sxXSxzLk1aQT1vWzJdLHMuTVhCPW9bM10scy5NWUI9b1s0XSxzLk1aQj1vWzVdLHMuTVhDPW9bNl0scy5NWUM9b1s3XSxzLk1aQz1vWzhdLGM8MHx8bDwwfHwxIT09dSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICIuY29uY2F0KHMubmFtZSkrIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGY8MHx8aDwwfHxkPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50IGZvciAiLmNvbmNhdChzLm5hbWUsIiBbIikuY29uY2F0KGYsIiwgIikuY29uY2F0KGgsIiwgIikuY29uY2F0KGQsIl0sICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKSksKHMuR1I8MHx8cy5HRzwwfHxzLkdCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBHYW1tYSBbIi5jb25jYXQocy5HUiwiLCAiKS5jb25jYXQocy5HRywiLCAiKS5jb25jYXQocy5HQiwiXSBmb3IgIikrIiIuY29uY2F0KHMubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSkscy5HUj1zLkdHPXMuR0I9MSksc31yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXttKHRoaXMsZSx0LHIsbiwxKX19LHtrZXk6ImdldFJnYkJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7Zm9yKHZhciBzPTEvKCgxPDxpKS0xKSxjPTA7YzxyOysrYyltKHRoaXMsZSx0LG4sYSxzKSx0Kz0zLGErPTMrb319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fV0pLHJ9KHkpfSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj02LzI5P01hdGgucG93KGUsMyk6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgYz1uW2FdLHU9blthKzFdLGw9blthKzJdOyExIT09aSYmKGM9dChjLGksMCwxMDApLHU9dCh1LGksci5hbWluLHIuYW1heCksbD10KGwsaSxyLmJtaW4sci5ibWF4KSksdT5yLmFtYXg/dT1yLmFtYXg6dTxyLmFtaW4mJih1PXIuYW1pbiksbD5yLmJtYXg/bD1yLmJtYXg6bDxyLmJtaW4mJihsPXIuYm1pbik7dmFyIGYsaCxkLHA9KGMrMTYpLzExNixnPXArdS81MDAsdj1wLWwvMjAwLHk9ci5YVyplKGcpLG09ci5ZVyplKHApLGI9ci5aVyplKHYpO3IuWlc8MT8oZj0zLjEzMzkqeSstMS42MTcqbSstLjQ5MDYqYixoPS0uOTc4NSp5KzEuOTE2Km0rLjAzMzMqYixkPS4wNzIqeSstLjIyOSptKzEuNDA1NypiKTooZj0zLjI0MDYqeSstMS41MzcyKm0rLS40OTg2KmIsaD0tLjk2ODkqeSsxLjg3NTgqbSsuMDQxNSpiLGQ9LjA1NTcqeSstLjIwNCptKzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PXUoYSk7ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89dC5jYWxsKHRoaXMsIkxhYiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtpZihyPXJ8fFswLDAsMF0saT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdLG8uWFc9ZVswXSxvLllXPWVbMV0sby5aVz1lWzJdLG8uYW1pbj1pWzBdLG8uYW1heD1pWzFdLG8uYm1pbj1pWzJdLG8uYm1heD1pWzNdLG8uWEI9clswXSxvLllCPXJbMV0sby5aQj1yWzJdLG8uWFc8MHx8by5aVzwwfHwxIT09by5ZVyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihvLlhCPDB8fG8uWUI8MHx8by5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKSxvLlhCPW8uWUI9by5aQj0wKSwoby5hbWluPm8uYW1heHx8by5ibWluPm8uYm1heCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKSxvLmFtaW49LTEwMCxvLmFtYXg9MTAwLG8uYm1pbj0tMTAwLG8uYm1heD0xMDApLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGM9KDE8PG8pLTEsdT0wO3U8bjt1Kyspcih0aGlzLGUsdCxjLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLGF9KHkpfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxNDUpLG89cigxMzQpLHM9cigxNjMpLGM9cigxNjcpLHU9cigxNjYpLGw9cigxNzApLGY9cigxNzkpLGg9cigxODApLGQ9cigxNzEpLHA9cigxODYpLGc9cigxNDYpLHY9cigxODgpLHk9cigxMzkpLG09cigxMzYpLGI9cigxODkpLHc9cigxNDMpLGs9cigxNDgpLFM9cigxNjgpLHg9cigxMzUpLE89cigxNzQpLEE9cigxNjkpLEM9cigxOTApLEY9cigxOTEpLFA9cigxOTIpO2Z1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8RChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fEQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRSgpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBsKGUsdCxyLG4pe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBDKG58fFtdKTtyZXR1cm4gYShvLCJfaW52b2tlIix7dmFsdWU6UyhlLHIscyl9KSxvfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9bDt2YXIgaD17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTt1KHYsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoRihbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sbykmJih2PW0pO3ZhciBiPWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gayhlLHQpe2Z1bmN0aW9uIGkoYSxvLHMsYyl7dmFyIHU9ZihlW2FdLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsaD1sLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09bihoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT90LnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87YSh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPXgobyxyKTtpZihzKXtpZihzPT09aCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWYoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLHgoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksaDt2YXIgYT1mKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxoKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGgpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gQyhlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gRihlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpQfX1mdW5jdGlvbiBQKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxhKGIsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxhKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPXUoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsdShlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYiksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sdyhrLnByb3RvdHlwZSksdShrLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgayhsKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LHcoYiksdShiLGMsIkdlbmVyYXRvciIpLHUoYixvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHUoYiwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1GLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxofSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksaH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6RihlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksaH19LGV9ZnVuY3Rpb24gaihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7aihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7aihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIF8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gUihlLHQscil7cmV0dXJuIHQmJkwoZS5wcm90b3R5cGUsdCksciYmTChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gRChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgVT1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITAsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksJD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBYKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHIsbj1OKGUpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9WChyLnZhbHVlLCEwKTtpZihpKXJldHVybiBpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4oMCxhLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBvLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLGEud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIEgoZSl7ZS5mbj09PWEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdJiZlLmFyZ3NbMF0uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gUihlLFt7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCsrdGhpcy5jaGVja2VkPGUuQ0hFQ0tfVElNRV9FVkVSWSkmJih0aGlzLmNoZWNrZWQ9MCx0aGlzLmVuZFRpbWU8PURhdGUubm93KCkpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrZS5USU1FX1NMT1RfRFVSQVRJT05fTVMsdGhpcy5jaGVja2VkPTB9fV0sW3trZXk6IlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApfX0se2tleToiQ0hFQ0tfVElNRV9FVkVSWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9fV0pLGV9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLG49dC5oYW5kbGVyLGE9dC5wYWdlSW5kZXgsaT10LmlkRmFjdG9yeSxvPXQuZm9udENhY2hlLHM9dC5idWlsdEluQ01hcENhY2hlLGM9dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsdT10Lmdsb2JhbEltYWdlQ2FjaGUsbD10Lm9wdGlvbnMsZj12b2lkIDA9PT1sP251bGw6bDtfKHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5oYW5kbGVyPW4sdGhpcy5wYWdlSW5kZXg9YSx0aGlzLmlkRmFjdG9yeT1pLHRoaXMuZm9udENhY2hlPW8sdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yyx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLm9wdGlvbnM9Znx8VSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITEsdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfXZhciB0LHIsbixnLHgsaixMLEQ7cmV0dXJuIFIoZSxbe2tleToiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gdC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSksdH19LHtrZXk6Imhhc0JsZW5kTW9kZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLm9iaklkJiZ0LmhhcyhlLm9iaklkKSlyZXR1cm4hMTt2YXIgcj1uZXcgby5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Zm9yKHZhciBuPVtlXSxpPXRoaXMueHJlZjtuLmxlbmd0aDspe3ZhciBzPW4uc2hpZnQoKSxjPXMuZ2V0KCJFeHRHU3RhdGUiKTtpZihjIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgdSxsPU4oYy5nZXRSYXdWYWx1ZXMoKSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO2lmKGYgaW5zdGFuY2VvZiBvLlJlZil7aWYoci5oYXMoZikpY29udGludWU7dHJ5e2Y9aS5mZXRjaChmKX1jYXRjaChlKXtyLnB1dChmKSwoMCxhLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKGYgaW5zdGFuY2VvZiBvLkRpY3Qpe2Yub2JqSWQmJnIucHV0KGYub2JqSWQpO3ZhciBoPWYuZ2V0KCJCTSIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpe2lmKCJOb3JtYWwiIT09aC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09aCYmQXJyYXkuaXNBcnJheShoKSl7dmFyIGQscD1OKGgpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lJiYiTm9ybWFsIiE9PWcubmFtZSlyZXR1cm4hMH19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfX12YXIgdj1zLmdldCgiWE9iamVjdCIpO2lmKHYgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB5LGI9Tih2LmdldFJhd1ZhbHVlcygpKTt0cnl7Zm9yKGIucygpOyEoeT1iLm4oKSkuZG9uZTspe3ZhciB3PXkudmFsdWU7aWYodyBpbnN0YW5jZW9mIG8uUmVmKXtpZihyLmhhcyh3KSljb250aW51ZTt0cnl7dz1pLmZldGNoKHcpfWNhdGNoKGUpe3IucHV0KHcpLCgwLGEuaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKHcgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe3cuZGljdC5vYmpJZCYmci5wdXQody5kaWN0Lm9iaklkKTt2YXIgaz13LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtrIGluc3RhbmNlb2Ygby5EaWN0JiYoay5vYmpJZCYmci5oYXMoay5vYmpJZCl8fChuLnB1c2goayksay5vYmpJZCYmci5wdXQoay5vYmpJZCkpKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19dmFyIFMseD1OKHIpO3RyeXtmb3IoeC5zKCk7IShTPXgubigpKS5kb25lOyl7dmFyIE89Uy52YWx1ZTt0LnB1dChPKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9cmV0dXJuITF9fSx7a2V5OiJmZXRjaEJ1aWx0SW5DTWFwIix2YWx1ZTooRD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscik7Y2FzZSAzOmlmKG51bGw9PT10aGlzLm9wdGlvbnMuY01hcFVybCl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBpPSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KHQsIi5iY21hcCIpLGUubmV4dD03LGZldGNoKGkpO2Nhc2UgNzppZigobz1lLnNlbnQpLm9rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoby5zdGF0dXNUZXh0LCciLicpKTtjYXNlIDEwOnJldHVybiBlLnQwPVVpbnQ4QXJyYXksZS5uZXh0PTEzLG8uYXJyYXlCdWZmZXIoKTtjYXNlIDEzOmUudDE9ZS5zZW50LGUudDI9bmV3IGUudDAoZS50MSksZS50Mz1hLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZLG49e2NNYXBEYXRhOmUudDIsY29tcHJlc3Npb25UeXBlOmUudDN9LGUubmV4dD0yMjticmVhaztjYXNlIDE5OnJldHVybiBlLm5leHQ9MjEsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6dH0pO2Nhc2UgMjE6bj1lLnNlbnQ7Y2FzZSAyMjpyZXR1cm4gbi5jb21wcmVzc2lvblR5cGUhPT1hLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSYmdGhpcy5idWlsdEluQ01hcENhY2hlLnNldCh0LG4pLGUuYWJydXB0KCJyZXR1cm4iLG4pO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hTdGFuZGFyZEZvbnREYXRhIix2YWx1ZTooTD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvLHMsYztyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEocj10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IHkuU3RyZWFtKHIpKTtjYXNlIDM6aWYoIXRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250c3x8IlN5bWJvbCI9PT10fHwiWmFwZkRpbmdiYXRzIj09PXQpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6aWYobj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpLGk9blt0XSxudWxsPT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2UubmV4dD0yMDticmVha31yZXR1cm4gcz0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChpKSxlLm5leHQ9MTAsZmV0Y2gocyk7Y2FzZSAxMDppZigoYz1lLnNlbnQpLm9rKXtlLm5leHQ9MTU7YnJlYWt9KDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQocywnIiB3aXRoICInKS5jb25jYXQoYy5zdGF0dXNUZXh0LCciLicpKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGMuYXJyYXlCdWZmZXIoKTtjYXNlIDE3Om89ZS5zZW50O2Nhc2UgMTg6ZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIGUucHJldj0yMCxlLm5leHQ9MjMsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pO2Nhc2UgMjM6bz1lLnNlbnQsZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjY6ZS5wcmV2PTI2LGUudDA9ZS5jYXRjaCgyMCksKDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoZS50MCwnIi4nKSk7Y2FzZSAyOTppZihvKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzE6cmV0dXJuIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldCh0LG8pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5LlN0cmVhbShvKSk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIwLDI2XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiYnVpbGRGb3JtWE9iamVjdCIsdmFsdWU6KGo9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbixpLHMsYyx1KXt2YXIgbCxmLGgsZCxwLGcsdix5LG0sYixrO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobD1yLmRpY3QsZj1sLmdldEFycmF5KCJNYXRyaXgiKSxoPWwuZ2V0QXJyYXkoIkJCb3giKSxoPUFycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9hLlV0aWwubm9ybWFsaXplUmVjdChoKTpudWxsLCFsLmhhcygiT0MiKSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD03LHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksdCk7Y2FzZSA3OmQ9ZS5zZW50O2Nhc2UgODppZih2b2lkIDAhPT1kJiZpLmFkZE9wKGEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSwhKGc9bC5nZXQoIkdyb3VwIikpKXtlLm5leHQ9Mjk7YnJlYWt9aWYocD17bWF0cml4OmYsYmJveDpoLHNtYXNrOm4saXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9LHY9Zy5nZXQoIlMiKSx5PW51bGwsISgwLG8uaXNOYW1lKSh2LCJUcmFuc3BhcmVuY3kiKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHAuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEscC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSwhZy5oYXMoIkNTIikpe2UubmV4dD0yNzticmVha31pZihtPWcuZ2V0UmF3KCJDUyIpLCEoYj13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKG0sdGhpcy54cmVmLHUpKSl7ZS5uZXh0PTI0O2JyZWFrfXk9YixlLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gZS5uZXh0PTI2LHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczptLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KTtjYXNlIDI2Onk9ZS5zZW50O2Nhc2UgMjc6biYmbi5iYWNrZHJvcCYmKHk9eXx8dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLG4uYmFja2Ryb3A9eS5nZXRSZ2Iobi5iYWNrZHJvcCwwKSksaS5hZGRPcChhLk9QUy5iZWdpbkdyb3VwLFtwXSk7Y2FzZSAyOTpyZXR1cm4gaz1nP1tmLG51bGxdOltmLGhdLGkuYWRkT3AoYS5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLGspLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8dCxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6Y30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChhLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZpLmFkZE9wKGEuT1BTLmVuZEdyb3VwLFtwXSksdm9pZCAwIT09ZCYmaS5hZGRPcChhLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfc2VuZEltZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPXQ/W3QuYml0bWFwfHx0LmRhdGEuYnVmZmVyXTpudWxsO3JldHVybiB0aGlzLnBhcnNpbmdUeXBlM0ZvbnR8fHI/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2UsIkltYWdlIix0XSxuKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbZSx0aGlzLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLG4pfX0se2tleToiYnVpbGRQYWludEltYWdlWE9iamVjdCIsdmFsdWU6KHg9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGksbyxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHcsUyx4LE8sQSxDLEYsVCxJLGosTT10aGlzO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj10LnJlc291cmNlcyxuPXQuaW1hZ2UsaT10LmlzSW5saW5lLG89dm9pZCAwIT09aSYmaSxzPXQub3BlcmF0b3JMaXN0LGM9dC5jYWNoZUtleSx1PXQubG9jYWxJbWFnZUNhY2hlLGw9dC5sb2NhbENvbG9yU3BhY2VDYWNoZSxmPW4uZGljdCxoPWYub2JqSWQsZD1mLmdldCgiVyIsIldpZHRoIikscD1mLmdldCgiSCIsIkhlaWdodCIpLGQmJiJudW1iZXIiPT10eXBlb2YgZCYmcCYmIm51bWJlciI9PXR5cGVvZiBwKXtlLm5leHQ9ODticmVha31yZXR1cm4oMCxhLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA4OmlmKCEoLTEhPT0oZz10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplKSYmZCpwPmcpKXtlLm5leHQ9MTU7YnJlYWt9aWYodj0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiIsIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe2UubmV4dD0xNDticmVha31yZXR1cm4oMCxhLndhcm4pKHYpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcih2KTtjYXNlIDE1OmlmKCFmLmhhcygiT0MiKSl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBlLm5leHQ9MTgsdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhmLmdldCgiT0MiKSxyKTtjYXNlIDE4Onk9ZS5zZW50O2Nhc2UgMTk6aWYoIWYuZ2V0KCJJTSIsIkltYWdlTWFzayIpKXtlLm5leHQ9NDQ7YnJlYWt9aWYodz1mLmdldCgiSSIsIkludGVycG9sYXRlIiksUz1kKzc+PjMseD1uLmdldEJ5dGVzKFMqcCksTz1mLmdldEFycmF5KCJEIiwiRGVjb2RlIiksIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7ZS5uZXh0PTMyO2JyZWFrfXJldHVybihtPVAuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6eCx3aWR0aDpkLGhlaWdodDpwLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOm4gaW5zdGFuY2VvZiBrLkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhTyYmT1swXT4wLGludGVycG9sYXRlOnd9KSkuY2FjaGVkPSEhYyxiPVttXSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxiLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6YixvcHRpb25hbENvbnRlbnQ6eX0pLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDMyOmlmKCEobT1QLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Ongsd2lkdGg6ZCxoZWlnaHQ6cCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpuIGluc3RhbmNlb2Ygay5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIU8mJk9bMF0+MCxpbnRlcnBvbGF0ZTp3LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pKS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtlLm5leHQ9Mzc7YnJlYWt9cmV0dXJuIHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Onl9KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzNzpyZXR1cm4gQT0ibWFza18iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxzLmFkZERlcGVuZGVuY3koQSksdGhpcy5fc2VuZEltZ0RhdGEoQSxtKSxiPVt7ZGF0YTpBLHdpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LGludGVycG9sYXRlOm0uaW50ZXJwb2xhdGUsY291bnQ6MX1dLHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGIseSksYyYmdS5zZXQoYyxoLHtmbjphLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDQ6aWYoQz1mLmdldCgiU00iLCJTTWFzayIpfHwhMSxGPWYuZ2V0KCJNYXNrIil8fCExLCFvfHxDfHxGfHwhKGQrcDwyMDApKXtlLm5leHQ9NTI7YnJlYWt9cmV0dXJuIFQ9bmV3IFAuUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KSxtPVQuY3JlYXRlSW1hZ2VEYXRhKCEwKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFttXSx5KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA1MjpJPSJpbWdfIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksaj0hMSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/ST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChJKTpoJiYoaj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaCx0aGlzLnBhZ2VJbmRleCkpJiYoST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiXyIpLmNvbmNhdChJKSkscy5hZGREZXBlbmRlbmN5KEkpLGI9W0ksZCxwXSxQLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbT1lLmNyZWF0ZUltYWdlRGF0YSghMSksYyYmaCYmaiYmTS5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsbS5kYXRhLmxlbmd0aCksTS5fc2VuZEltZ0RhdGEoSSxtLGopfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdVbmFibGUgdG8gZGVjb2RlIGltYWdlICInLmNvbmNhdChJLCciOiAiJykuY29uY2F0KGUsJyIuJykpLE0uX3NlbmRJbWdEYXRhKEksbnVsbCxqKX0pKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGIseSksYyYmKHUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksaCYmKCgwLGEuYXNzZXJ0KSghbywiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGgsdGhpcy5wYWdlSW5kZXgpLGomJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOkksZm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5LGJ5dGVTaXplOjB9KSkpO2Nhc2UgNTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFuZGxlU01hc2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1lLmdldCgiRyIpLHM9e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLHAuaXNQREZGdW5jdGlvbikoYykpe2Zvcih2YXIgdT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLGw9bmV3IFVpbnQ4QXJyYXkoMjU2KSxmPW5ldyBGbG9hdDMyQXJyYXkoMSksaD0wO2g8MjU2O2grKylmWzBdPWgvMjU1LHUoZiwwLGYsMCksbFtoXT0yNTUqZlswXXwwO3MudHJhbnNmZXJNYXA9bH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbyxzLHIsbixhLnN0YXRlLmNsb25lKCksaSl9fSx7a2V5OiJoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfXZhciByLG49W10sYT0wLGk9MCxzPU4odCk7dHJ5e2ZvcihzLnMoKTshKHI9cy5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoYSsrLCgwLG8uaXNOYW1lKSh1LCJJZGVudGl0eSIpKW4ucHVzaChudWxsKTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKHUpKXJldHVybiBudWxsO2Zvcih2YXIgbD10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHUpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPW5ldyBGbG9hdDMyQXJyYXkoMSksZD0wO2Q8MjU2O2QrKyloWzBdPWQvMjU1LGwoaCwwLGgsMCksZltkXT0yNTUqaFswXXwwO24ucHVzaChmKSxpKyt9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09aT9udWxsOm59fSx7a2V5OiJoYW5kbGVUaWxpbmdUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGkscyxjLHUpe3ZhciBsPXRoaXMsaD1uZXcgRi5PcGVyYXRvckxpc3QsZD1vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbaS5nZXQoIlJlc291cmNlcyIpLHJdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Omh9KS50aGVuKChmdW5jdGlvbigpe3ZhciByPWguZ2V0SVIoKSxuPSgwLGYuZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7cy5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpLHMuYWRkT3AoZSxuKSxpLm9iaklkJiZ1LnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBsLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSksdm9pZCgwLGEud2FybikoJ2hhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSl9fSx7a2V5OiJoYW5kbGVTZXRGb250Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksYyl7dmFyIHU9dGhpcyxsPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD10JiZ0WzBdaW5zdGFuY2VvZiBvLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsbCxmKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh1LGUsaSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyksdH0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTN9KSxuZXcgeih7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp1Lm9wdGlvbnN9KX0pKTp0fSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZvbnQ9ZS5mb250LGUuc2VuZCh1LmhhbmRsZXIpLGUubG9hZGVkTmFtZX0pKX19LHtrZXk6ImhhbmRsZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49ci5mb250LGk9bi5jaGFyc1RvR2x5cGhzKHQpO3JldHVybiBuLmRhdGEmJihyLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09ci5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJmUuYnVpbGRGb250UGF0aHMobixpLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGl9fSx7a2V5OiJlbnN1cmVTdGF0ZUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmZvbnQpe3ZhciB0PW5ldyBhLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSksdm9pZCgwLGEud2FybikoJ2Vuc3VyZVN0YXRlRm9udDogIicuY29uY2F0KHQsJyIuJykpO3Rocm93IHR9fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTooZz1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPXQucmVzb3VyY2VzLG49dC5nU3RhdGUsaT10Lm9wZXJhdG9yTGlzdCxzPXQuY2FjaGVLZXksYz10LnRhc2ssdT10LnN0YXRlTWFuYWdlcixsPXQubG9jYWxHU3RhdGVDYWNoZSxmPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsaD1uLm9iaklkLGQ9ITAscD1bXSxnPVByb21pc2UucmVzb2x2ZSgpLHY9TihuLmdldEtleXMoKSk7dHJ5e2ZvcihtPWZ1bmN0aW9uKCl7dmFyIGU9eS52YWx1ZSx0PW4uZ2V0KGUpO3N3aXRjaChlKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6cC5wdXNoKFtlLHRdKTticmVhaztjYXNlIkZvbnQiOmQ9ITEsZz1nLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGIuaGFuZGxlU2V0Rm9udChyLG51bGwsdFswXSxpLGMsdS5zdGF0ZSkudGhlbigoZnVuY3Rpb24ocil7aS5hZGREZXBlbmRlbmN5KHIpLHAucHVzaChbZSxbcix0WzFdXV0pfSkpfSkpO2JyZWFrO2Nhc2UiQk0iOnAucHVzaChbZSxYKHQpXSk7YnJlYWs7Y2FzZSJTTWFzayI6aWYoKDAsby5pc05hbWUpKHQsIk5vbmUiKSl7cC5wdXNoKFtlLCExXSk7YnJlYWt9dCBpbnN0YW5jZW9mIG8uRGljdD8oZD0hMSxnPWcudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYi5oYW5kbGVTTWFzayh0LHIsaSxjLHUsZil9KSkscC5wdXNoKFtlLCEwXSkpOigwLGEud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjp2YXIgcz1iLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odCk7cC5wdXNoKFtlLHNdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsYS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsYS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fSx2LnMoKTshKHk9di5uKCkpLmRvbmU7KW0oKX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZy50aGVuKChmdW5jdGlvbigpe3AubGVuZ3RoPjAmJmkuYWRkT3AoYS5PUFMuc2V0R1N0YXRlLFtwXSksZCYmbC5zZXQocyxoLHApfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRGb250Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGksdT10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbCxoPWZ1bmN0aW9uKCl7dmFyIGU9TShFKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB6KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KCdGb250ICInLmNvbmNhdCh0LCciIGlzIG5vdCBhdmFpbGFibGUuJykpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPXRoaXMueHJlZjtpZihyKXIgaW5zdGFuY2VvZiBvLlJlZiYmKGk9cik7ZWxzZXt2YXIgcD1uLmdldCgiRm9udCIpO3AmJihpPXAuZ2V0UmF3KHQpKX1pZighaSl7dmFyIGc9J0ZvbnQgIicuY29uY2F0KHR8fHImJnIudG9TdHJpbmcoKSwnIiBpcyBub3QgYXZhaWxhYmxlJyk7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsYS53YXJuKSgiIi5jb25jYXQoZywiLiIpKSxoKCk7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KSwoMCxhLndhcm4pKCIiLmNvbmNhdChnLCIgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC4iKSksaT1sfHxlLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGkpKXJldHVybiBoKCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoaSk7aWYoISgocj1kLmZldGNoSWZSZWYoaSkpaW5zdGFuY2VvZiBvLkRpY3QpKXJldHVybiBoKCk7aWYoci5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHIuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoci5jYWNoZUtleSk7dmFyIHYseT0oMCxhLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RyeXsodj10aGlzLnByZUV2YWx1YXRlRm9udChyKSkuY3NzRm9udEluZm89Zn1jYXRjaChlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICInLmNvbmNhdChlLCciLicpKSxoKCl9dmFyIG0sYj12LHc9Yi5kZXNjcmlwdG9yLGs9Yi5oYXNoLFM9aSBpbnN0YW5jZW9mIG8uUmVmO2lmKFMmJihtPSJmIi5jb25jYXQoaS50b1N0cmluZygpKSksayYmdyBpbnN0YW5jZW9mIG8uRGljdCl7dy5mb250QWxpYXNlc3x8KHcuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHg9dy5mb250QWxpYXNlcztpZih4W2tdKXt2YXIgTz14W2tdLmFsaWFzUmVmO2lmKFMmJk8mJnRoaXMuZm9udENhY2hlLmhhcyhPKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaSxPKSx0aGlzLmZvbnRDYWNoZS5nZXQoaSl9ZWxzZSB4W2tdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O1MmJih4W2tdLmFsaWFzUmVmPWkpLG09eFtrXS5mb250SUR9cmV0dXJuIFM/dGhpcy5mb250Q2FjaGUucHV0KGkseS5wcm9taXNlKToobXx8KG09dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkpLHIuY2FjaGVLZXk9ImNhY2hlS2V5XyIuY29uY2F0KG0pLHRoaXMuZm9udENhY2hlLnB1dChyLmNhY2hlS2V5LHkucHJvbWlzZSkpLCgwLGEuYXNzZXJ0KShtJiZtLnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKSxyLmxvYWRlZE5hbWU9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl8iKS5jb25jYXQobSksdGhpcy50cmFuc2xhdGVGb250KHYpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuZm9udFR5cGUmJmQuc3RhdHMuYWRkRm9udFR5cGUoZS5mb250VHlwZSkseS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250OmUsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6dS5vcHRpb25zfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt1LmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VHJhbnNsYXRlfSksKDAsYS53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpO3RyeXt2YXIgdD13JiZ3LmdldCgiRm9udEZpbGUzIiksbj10JiZ0LmdldCgiU3VidHlwZSIpLGk9KDAsYy5nZXRGb250VHlwZSkodi50eXBlLG4mJm4ubmFtZSk7dm9pZCAwIT09aSYmZC5zdGF0cy5hZGRGb250VHlwZShpKX1jYXRjaChlKXt9eS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250Om5ldyBzLkVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKX0pKSx5LnByb21pc2V9fSx7a2V5OiJidWlsZFBhdGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZS5sZW5ndGgtMTtpZihyfHwocj1bXSksaTwwfHxlLmZuQXJyYXlbaV0hPT1hLk9QUy5jb25zdHJ1Y3RQYXRoKXt2YXIgbztzd2l0Y2gobiYmKCgwLGEud2FybikoJ0VuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIicuY29uY2F0KHQsJyIgaW5zaWRlIG9mIGEgdGV4dCBvYmplY3QuJykpLGUuYWRkT3AoYS5PUFMuc2F2ZSxudWxsKSksdCl7Y2FzZSBhLk9QUy5yZWN0YW5nbGU6dmFyIHM9clswXStyWzJdLGM9clsxXStyWzNdO289W01hdGgubWluKHJbMF0scyksTWF0aC5tYXgoclswXSxzKSxNYXRoLm1pbihyWzFdLGMpLE1hdGgubWF4KHJbMV0sYyldO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmNhc2UgYS5PUFMubGluZVRvOm89W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6bz1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3AoYS5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsb10pLG4mJmUuYWRkT3AoYS5PUFMucmVzdG9yZSxudWxsKX1lbHNle3ZhciB1LGw9ZS5hcmdzQXJyYXlbaV07bFswXS5wdXNoKHQpLCh1PWxbMV0pLnB1c2guYXBwbHkodSxJKHIpKTt2YXIgZj1sWzJdO3N3aXRjaCh0KXtjYXNlIGEuT1BTLnJlY3RhbmdsZTp2YXIgaD1yWzBdK3JbMl0sZD1yWzFdK3JbM107ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0saCksZlsxXT1NYXRoLm1heChmWzFdLHJbMF0saCksZlsyXT1NYXRoLm1pbihmWzJdLHJbMV0sZCksZlszXT1NYXRoLm1heChmWzNdLHJbMV0sZCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0pLGZbMV09TWF0aC5tYXgoZlsxXSxyWzBdKSxmWzJdPU1hdGgubWluKGZbMl0sclsxXSksZlszXT1NYXRoLm1heChmWzNdLHJbMV0pfX19fSx7a2V5OiJwYXJzZUNvbG9yU3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmNzLG49ZS5yZXNvdXJjZXMsaT1lLmxvY2FsQ29sb3JTcGFjZUNhY2hlO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6cix4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29sb3JTcGFjZX0pLCgwLGEud2FybikoJ3BhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICInLmNvbmNhdChlLCciLicpKSxudWxsO3Rocm93IGV9KSl9fSx7a2V5OiJwYXJzZVNoYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hhZGluZyxyPWUucmVzb3VyY2VzLG49ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxhPWUubG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLGk9YS5nZXQodCk7aWYoIWkpe3ZhciBvPWYuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYscix0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LG4pLmdldElSKCk7aT0icGF0dGVybl8iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxhLnNldCh0LGkpLHRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtpLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixvXSl9cmV0dXJuIGl9fSx7a2V5OiJoYW5kbGVDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsdSxsLGgpe3ZhciBkPXIucG9wKCk7aWYoZCBpbnN0YW5jZW9mIG8uTmFtZSl7dmFyIHA9aS5nZXRSYXcoZC5uYW1lKSxnPXAgaW5zdGFuY2VvZiBvLlJlZiYmbC5nZXRCeVJlZihwKTtpZihnKXRyeXt2YXIgdj1uLmJhc2U/bi5iYXNlLmdldFJnYihyLDApOm51bGwseT0oMCxmLmdldFRpbGluZ1BhdHRlcm5JUikoZy5vcGVyYXRvckxpc3RJUixnLmRpY3Qsdik7cmV0dXJuIHZvaWQgZS5hZGRPcCh0LHkpfWNhdGNoKGUpe312YXIgYj10aGlzLnhyZWYuZmV0Y2hJZlJlZihwKTtpZihiKXt2YXIgdz1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLGs9dy5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWspe3ZhciBTPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsUyxzLGIsdyxlLGMsbCl9aWYoMj09PWspe3ZhciB4PXcuZ2V0KCJTaGFkaW5nIiksTz13LmdldEFycmF5KCJNYXRyaXgiKSxBPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOngscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6aH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLEEsT10pfXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChrKSl9fXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChkKSl9fSx7a2V5OiJfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKCsrdD4xMCkoMCxhLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtlbHNle3ZhciBuPWUubGVuZ3RoLGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZpIGluc3RhbmNlb2Ygby5OYW1lKXtzd2l0Y2goaS5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOnIucHVzaChpLm5hbWUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQoMCxhLndhcm4pKCJJbnZhbGlkIG9wZXJhdG9yICIuY29uY2F0KGkubmFtZSwiIGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpKX1mb3IodmFyIHM9MTtzPG47cysrKXt2YXIgYz1lW3NdLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9W107ci5wdXNoKGwpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24odSx0LGwpfWVsc2UgYyBpbnN0YW5jZW9mIG8uUmVmJiZyLnB1c2goYy50b1N0cmluZygpKX19ZWxzZSgwLGEud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9fX0se2tleToicGFyc2VNYXJrZWRDb250ZW50UHJvcHMiLHZhbHVlOihuPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpLHMsYyx1LGwsZixoLGQscDtyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEodCBpbnN0YW5jZW9mIG8uTmFtZSkpe2UubmV4dD01O2JyZWFrfWk9ci5nZXQoIlByb3BlcnRpZXMiKSxuPWkuZ2V0KHQubmFtZSksZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNTppZighKHQgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9OTticmVha31uPXQsZS5uZXh0PTEwO2JyZWFrO2Nhc2UgOTp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtjYXNlIDEwOmlmKCJPQ0ciIT09KHM9bi5nZXQoIlR5cGUiKS5uYW1lKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOm4ub2JqSWR9KTtjYXNlIDE1OmlmKCJPQ01EIiE9PXMpe2UubmV4dD0zMTticmVha31pZihjPW4uZ2V0KCJWRSIpLCFBcnJheS5pc0FycmF5KGMpKXtlLm5leHQ9MjI7YnJlYWt9aWYodT1bXSx0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGMsMCx1KSwhKHUubGVuZ3RoPjApKXtlLm5leHQ9MjI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOiJPQ01EIixleHByZXNzaW9uOnV9KTtjYXNlIDIyOmlmKGw9bi5nZXQoIk9DR3MiKSwhKEFycmF5LmlzQXJyYXkobCl8fGwgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9Mjk7YnJlYWt9aWYoZj1bXSxBcnJheS5pc0FycmF5KGwpKXtoPU4obCk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSxmLnB1c2gocC50b1N0cmluZygpKX1jYXRjaChlKXtoLmUoZSl9ZmluYWxseXtoLmYoKX19ZWxzZSBmLnB1c2gobC5vYmpJZCk7cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOnMsaWRzOmYscG9saWN5Om4uZ2V0KCJQIilpbnN0YW5jZW9mIG8uTmFtZT9uLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9KTtjYXNlIDI5OmlmKCEobCBpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOmwudG9TdHJpbmcoKX0pO2Nhc2UgMzE6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnN0cmVhbSxuPWUudGFzayxpPWUucmVzb3VyY2VzLHM9ZS5vcGVyYXRvckxpc3QsYz1lLmluaXRpYWxTdGF0ZSx1PXZvaWQgMD09PWM/bnVsbDpjLGw9ZS5mYWxsYmFja0ZvbnREaWN0LGY9dm9pZCAwPT09bD9udWxsOmw7aWYoaT1pfHxvLkRpY3QuZW1wdHksdT11fHxuZXcgWSwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgaD10aGlzLGQ9dGhpcy54cmVmLHA9ITEsZz1uZXcgdi5Mb2NhbEltYWdlQ2FjaGUseT1uZXcgdi5Mb2NhbENvbG9yU3BhY2VDYWNoZSxiPW5ldyB2LkxvY2FsR1N0YXRlQ2FjaGUsaz1uZXcgdi5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSxTPW5ldyBNYXAseD1pLmdldCgiWE9iamVjdCIpfHxvLkRpY3QuZW1wdHksTz1pLmdldCgiUGF0dGVybiIpfHxvLkRpY3QuZW1wdHksQT1uZXcgVyh1KSxDPW5ldyBLKHIsZCxBKSxGPW5ldyBxO2Z1bmN0aW9uIFAoZSl7Zm9yKHZhciB0PTAscj1DLnNhdmVkU3RhdGVzRGVwdGg7dDxyO3QrKylzLmFkZE9wKGEuT1BTLnJlc3RvcmUsW10pfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBjPWZ1bmN0aW9uKG4pe1Byb21pc2UuYWxsKFtuLHMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07bi5lbnN1cmVOb3RUZXJtaW5hdGVkKCksRi5yZXNldCgpO2Zvcih2YXIgdSxsLHYsVCxFLGosTT17fTshKHU9Ri5jaGVjaygpKSYmKE0uYXJncz1udWxsLEMucmVhZChNKSk7KXt2YXIgXz1NLmFyZ3MsTD1NLmZuO3N3aXRjaCgwfEwpe2Nhc2UgYS5PUFMucGFpbnRYT2JqZWN0OmlmKGo9X1swXWluc3RhbmNlb2Ygby5OYW1lLEU9X1swXS5uYW1lLGope3ZhciBSPWcuZ2V0QnlOYW1lKEUpO2lmKFIpe3MuYWRkSW1hZ2VPcHMoUi5mbixSLmFyZ3MsUi5vcHRpb25hbENvbnRlbnQpLEgoUiksXz1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBjKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFqKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj14LmdldFJhdyhFKTtpZihyIGluc3RhbmNlb2Ygby5SZWYpe3ZhciBjPWcuZ2V0QnlSZWYocik7aWYoYylyZXR1cm4gcy5hZGRJbWFnZU9wcyhjLmZuLGMuYXJncyxjLm9wdGlvbmFsQ29udGVudCksSChjKSx2b2lkIGUoKTt2YXIgdT1oLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLGgucGFnZUluZGV4KTtpZih1KXJldHVybiBzLmFkZERlcGVuZGVuY3kodS5vYmpJZCkscy5hZGRJbWFnZU9wcyh1LmZuLHUuYXJncyx1Lm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7cj1kLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7dmFyIGw9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEobCBpbnN0YW5jZW9mIG8uTmFtZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSI9PT1sLm5hbWUpcmV0dXJuIEEuc2F2ZSgpLHZvaWQgaC5idWlsZEZvcm1YT2JqZWN0KGkscixudWxsLHMsbixBLnN0YXRlLmNsb25lKCkseSkudGhlbigoZnVuY3Rpb24oKXtBLnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bC5uYW1lKXtpZigiUFMiIT09bC5uYW1lKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGwubmFtZSkpOygwLGEuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KSx2b2lkKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9fSkpKTtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIEQ9X1sxXTtyZXR1cm4gdm9pZCBjKGguaGFuZGxlU2V0Rm9udChpLF8sbnVsbCxzLG4sQS5zdGF0ZSxmKS50aGVuKChmdW5jdGlvbihlKXtzLmFkZERlcGVuZGVuY3koZSkscy5hZGRPcChhLk9QUy5zZXRGb250LFtlLERdKX0pKSk7Y2FzZSBhLk9QUy5iZWdpblRleHQ6cD0hMDticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6cD0hMTticmVhaztjYXNlIGEuT1BTLmVuZElubGluZUltYWdlOnZhciBCPV9bMF0uY2FjaGVLZXk7aWYoQil7dmFyIFU9Zy5nZXRCeU5hbWUoQik7aWYoVSl7cy5hZGRJbWFnZU9wcyhVLmZuLFUuYXJncyxVLm9wdGlvbmFsQ29udGVudCksSChVKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMoaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpfWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkIsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pKTtjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFBLnN0YXRlLmZvbnQpe2guZW5zdXJlU3RhdGVGb250KEEuc3RhdGUpO2NvbnRpbnVlfV9bMF09aC5oYW5kbGVUZXh0KF9bMF0sQS5zdGF0ZSk7YnJlYWs7Y2FzZSBhLk9QUy5zaG93U3BhY2VkVGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX12YXIgWCxxPVtdLEc9QS5zdGF0ZSx6PU4oX1swXSk7dHJ5e2Zvcih6LnMoKTshKFg9ei5uKCkpLmRvbmU7KXt2YXIgVyxWPVgudmFsdWU7InN0cmluZyI9PXR5cGVvZiBWPyhXPXEpLnB1c2guYXBwbHkoVyxJKGguaGFuZGxlVGV4dChWLEcpKSk6Im51bWJlciI9PXR5cGVvZiBWJiZxLnB1c2goVil9fWNhdGNoKGUpe3ouZShlKX1maW5hbGx5e3ouZigpfV9bMF09cSxMPWEuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmVTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxzLmFkZE9wKGEuT1BTLnNldFdvcmRTcGFjaW5nLFtfLnNoaWZ0KCldKSxzLmFkZE9wKGEuT1BTLnNldENoYXJTcGFjaW5nLFtfLnNoaWZ0KCldKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpBLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPV9bMF07YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp2YXIgWT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihZKXtBLnN0YXRlLmZpbGxDb2xvclNwYWNlPVk7Y29udGludWV9cmV0dXJuIHZvaWQgYyhoLnBhcnNlQ29sb3JTcGFjZSh7Y3M6X1swXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5fSkudGhlbigoZnVuY3Rpb24oZSl7ZSYmKEEuc3RhdGUuZmlsbENvbG9yU3BhY2U9ZSl9KSkpO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp2YXIgSz13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihLKXtBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Sztjb250aW51ZX1yZXR1cm4gdm9pZCBjKGgucGFyc2VDb2xvclNwYWNlKHtjczpfWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnl9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoQS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpfPShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz0oVD1BLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsR3JheTpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlR3JheTpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6QS5zdGF0ZS5maWxsQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLF89dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoXywwKTticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKF8sMCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgYyhoLmhhbmRsZUNvbG9yTihzLGEuT1BTLnNldEZpbGxDb2xvck4sXyxULE8saSxuLHksayxTKSk7Xz1ULmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBjKGguaGFuZGxlQ29sb3JOKHMsYS5PUFMuc2V0U3Ryb2tlQ29sb3JOLF8sVCxPLGksbix5LGssUykpO189VC5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2hhZGluZ0ZpbGw6dmFyIEo9aS5nZXQoIlNoYWRpbmciKTtpZighSil0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBaPUouZ2V0KF9bMF0ubmFtZSk7aWYoIVopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7Xz1baC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6WixyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5LGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpTfSldLEw9YS5PUFMuc2hhZGluZ0ZpbGw7YnJlYWs7Y2FzZSBhLk9QUy5zZXRHU3RhdGU6aWYoaj1fWzBdaW5zdGFuY2VvZiBvLk5hbWUsRT1fWzBdLm5hbWUsail7dmFyIFE9Yi5nZXRCeU5hbWUoRSk7aWYoUSl7US5sZW5ndGg+MCYmcy5hZGRPcChhLk9QUy5zZXRHU3RhdGUsW1FdKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBjPXIuZ2V0KEUpO2lmKCEoYyBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2guc2V0R1N0YXRlKHtyZXNvdXJjZXM6aSxnU3RhdGU6YyxvcGVyYXRvckxpc3Q6cyxjYWNoZUtleTpFLHRhc2s6bixzdGF0ZU1hbmFnZXI6QSxsb2NhbEdTdGF0ZUNhY2hlOmIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pLHZvaWQoMCxhLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKTt0aHJvdyBlfX0pKSk7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86Y2FzZSBhLk9QUy5jdXJ2ZVRvOmNhc2UgYS5PUFMuY3VydmVUbzI6Y2FzZSBhLk9QUy5jdXJ2ZVRvMzpjYXNlIGEuT1BTLmNsb3NlUGF0aDpjYXNlIGEuT1BTLnJlY3RhbmdsZTpoLmJ1aWxkUGF0aChzLEwsXyxwKTtjb250aW51ZTtjYXNlIGEuT1BTLm1hcmtQb2ludDpjYXNlIGEuT1BTLm1hcmtQb2ludFByb3BzOmNhc2UgYS5PUFMuYmVnaW5Db21wYXQ6Y2FzZSBhLk9QUy5lbmRDb21wYXQ6Y29udGludWU7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZighKF9bMF1pbnN0YW5jZW9mIG8uTmFtZSkpeygwLGEud2FybikoIkV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9Ii5jb25jYXQoX1swXSkpO2NvbnRpbnVlfWlmKCJPQyI9PT1fWzBdLm5hbWUpcmV0dXJuIHZvaWQgYyhoLnBhcnNlTWFya2VkQ29udGVudFByb3BzKF9bMV0saSkudGhlbigoZnVuY3Rpb24oZSl7cy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihoLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBoLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSksdm9pZCgwLGEud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSkpO189W19bMF0ubmFtZSxfWzFdaW5zdGFuY2VvZiBvLkRpY3Q/X1sxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIGEuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09Xyl7Zm9yKGw9MCx2PV8ubGVuZ3RoO2w8diYmIShfW2xdaW5zdGFuY2VvZiBvLkRpY3QpO2wrKyk7aWYobDx2KXsoMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitMKTtjb250aW51ZX19fXMuYWRkT3AoTCxfKX11P2MoJCk6KFAoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0fSksKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQobi5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBQKCk7dGhyb3cgZX19KSl9fSx7a2V5OiJnZXRUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLG49ZS50YXNrLGk9ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5jb21iaW5lVGV4dEl0ZW1zLGw9dm9pZCAwIT09dSYmdSxmPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaD12b2lkIDAhPT1mJiZmLGQ9ZS5zaW5rLHA9ZS5zZWVuU3R5bGVzLGc9dm9pZCAwPT09cD9uZXcgU2V0OnAseT1lLnZpZXdCb3gsdz1lLm1hcmtlZENvbnRlbnREYXRhLGs9dm9pZCAwPT09dz9udWxsOnc7aT1pfHxvLkRpY3QuZW1wdHksYz1jfHxuZXcgVyhuZXcgViksaCYmKGs9a3x8e2xldmVsOjB9KTt2YXIgUz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHg9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sTz1bIiAiLCIgIl0sQT0wO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9KEErMSklMixyPSIgIiE9PU9bQV0mJiIgIj09PU9bdF07cmV0dXJuIE9bQV09ZSxBPXQscn1mdW5jdGlvbiBGKCl7T1swXT1PWzFdPSIgIixBPTB9dmFyIFAsST0uMSxFPS4wMyxqPS0uMixNPS4xLF89LjYsTD10aGlzLFI9dGhpcy54cmVmLE49W10sRD1udWxsLEI9bmV3IHYuTG9jYWxJbWFnZUNhY2hlLFU9bmV3IHYuTG9jYWxHU3RhdGVDYWNoZSxYPW5ldyBLKHIsUixjKTtmdW5jdGlvbiBIKCl7dmFyIGU9UC5mb250LHQ9W1AuZm9udFNpemUqUC50ZXh0SFNjYWxlLDAsMCxQLmZvbnRTaXplLDAsUC50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKFAuZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxhLmlzQXJyYXlFcXVhbCkoUC5mb250TWF0cml4LGEuRk9OVF9JREVOVElUWV9NQVRSSVgpKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHRbM10qPXIqUC5mb250TWF0cml4WzNdKX1yZXR1cm4gYS5VdGlsLnRyYW5zZm9ybShQLmN0bSxhLlV0aWwudHJhbnNmb3JtKFAudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gRygpe2lmKHguaW5pdGlhbGl6ZWQpcmV0dXJuIHg7dmFyIGU9UCx0PWUuZm9udCxyPWUubG9hZGVkTmFtZTtnLmhhcyhyKXx8KGcuYWRkKHIpLFMuc3R5bGVzW3JdPXtmb250RmFtaWx5OnQuZmFsbGJhY2tOYW1lLGFzY2VudDp0LmFzY2VudCxkZXNjZW50OnQuZGVzY2VudCx2ZXJ0aWNhbDp0LnZlcnRpY2FsfSkseC5mb250TmFtZT1yO3ZhciBuPXgudHJhbnNmb3JtPUgoKTt0LnZlcnRpY2FsPyh4LndpZHRoPXgudG90YWxXaWR0aD1NYXRoLmh5cG90KG5bMF0sblsxXSkseC5oZWlnaHQ9eC50b3RhbEhlaWdodD0wLHgudmVydGljYWw9ITApOih4LndpZHRoPXgudG90YWxXaWR0aD0wLHguaGVpZ2h0PXgudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChuWzJdLG5bM10pLHgudmVydGljYWw9ITEpO3ZhciBhPU1hdGguaHlwb3QoUC50ZXh0TGluZU1hdHJpeFswXSxQLnRleHRMaW5lTWF0cml4WzFdKSxpPU1hdGguaHlwb3QoUC5jdG1bMF0sUC5jdG1bMV0pO3JldHVybiB4LnRleHRBZHZhbmNlU2NhbGU9aSphLHgudHJhY2tpbmdTcGFjZU1pbj1QLmZvbnRTaXplKkkseC5ub3RBU3BhY2U9UC5mb250U2l6ZSpFLHgubmVnYXRpdmVTcGFjZU1heD1QLmZvbnRTaXplKmoseC5zcGFjZUluRmxvd01pbj1QLmZvbnRTaXplKk0seC5zcGFjZUluRmxvd01heD1QLmZvbnRTaXplKl8seC5oYXNFT0w9ITEseC5pbml0aWFsaXplZD0hMCx4fWZ1bmN0aW9uIHooKXtpZih4LmluaXRpYWxpemVkKXt2YXIgZT1NYXRoLmh5cG90KFAudGV4dExpbmVNYXRyaXhbMF0sUC50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KFAuY3RtWzBdLFAuY3RtWzFdKSplO3QhPT14LnRleHRBZHZhbmNlU2NhbGUmJih4LnZlcnRpY2FsPyh4LnRvdGFsSGVpZ2h0Kz14LmhlaWdodCp4LnRleHRBZHZhbmNlU2NhbGUseC5oZWlnaHQ9MCk6KHgudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUseC53aWR0aD0wKSx4LnRleHRBZHZhbmNlU2NhbGU9dCl9fWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gTC5sb2FkRm9udChlLHQsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoTCxpLG4pLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7UC5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxQLmZvbnQ9ZS5mb250LFAuZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBKKGUsdCxyKXt2YXIgbj1NYXRoLmh5cG90KHJbMF0sclsxXSk7cmV0dXJuWyhyWzBdKmUrclsxXSp0KS9uLChyWzJdKmUrclszXSp0KS9uXX1mdW5jdGlvbiBaKCl7dmFyIGU9SCgpLHQ9ZVs0XSxyPWVbNV0sbj10LXlbMF0sYT1yLXlbMV07aWYobjwwfHxuPnlbMl18fGE8MHx8YT55WzNdKXJldHVybiExO2lmKCFsfHwhUC5mb250fHwheC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO3ZhciBpPXgucHJldlRyYW5zZm9ybVs0XSxvPXgucHJldlRyYW5zZm9ybVs1XTtpZihpPT09dCYmbz09PXIpcmV0dXJuITA7dmFyIHM9LTE7c3dpdGNoKGVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXT9zPWVbMF0+MD8wOjE4MDplWzFdJiYwPT09ZVswXSYmMD09PWVbM10mJihzPWVbMV0+MD85MDoyNzApLHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOnZhciBjPVtyLHRdO3Q9Y1swXSxyPWNbMV07dmFyIHU9W28saV07aT11WzBdLG89dVsxXTticmVhaztjYXNlIDE4MDp2YXIgZj1bLXQsLXIsLWksLW9dO3Q9ZlswXSxyPWZbMV0saT1mWzJdLG89ZlszXTticmVhaztjYXNlIDI3MDp2YXIgaD1bLXIsLXRdO3Q9aFswXSxyPWhbMV07dmFyIGQ9Wy1vLC1pXTtpPWRbMF0sbz1kWzFdO2JyZWFrO2RlZmF1bHQ6dmFyIHA9VChKKHQscixlKSwyKTt0PXBbMF0scj1wWzFdO3ZhciBnPVQoSihpLG8seC5wcmV2VHJhbnNmb3JtKSwyKTtpPWdbMF0sbz1nWzFdfWlmKFAuZm9udC52ZXJ0aWNhbCl7dmFyIHY9KG8tcikveC50ZXh0QWR2YW5jZVNjYWxlLG09dC1pLGI9TWF0aC5zaWduKHguaGVpZ2h0KTtyZXR1cm4gdjxiKngubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhtKT4uNSp4LndpZHRoPyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKG0pPngud2lkdGg/KGVlKCksITApOih2PD1iKngubm90QVNwYWNlJiZGKCksdjw9Yip4LnRyYWNraW5nU3BhY2VNaW4/eC5oZWlnaHQrPXY6dGUodix4LnByZXZUcmFuc2Zvcm0sYil8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDpNYXRoLmFicyh2KSx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOnguaGVpZ2h0Kz12KSwhMCl9dmFyIHc9KHQtaSkveC50ZXh0QWR2YW5jZVNjYWxlLGs9ci1vLE89TWF0aC5zaWduKHgud2lkdGgpO3JldHVybiB3PE8qeC5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKGspPi41KnguaGVpZ2h0PyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKGspPnguaGVpZ2h0PyhlZSgpLCEwKToodzw9Typ4Lm5vdEFTcGFjZSYmRigpLHc8PU8qeC50cmFja2luZ1NwYWNlTWluP3gud2lkdGgrPXc6dGUodyx4LnByZXZUcmFuc2Zvcm0sTyl8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyh3KSxoZWlnaHQ6MCx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOngud2lkdGgrPXcpLCEwKX1mdW5jdGlvbiBRKGUpe3ZhciB0PWUuY2hhcnMscj1lLmV4dHJhU3BhY2luZyxuPVAuZm9udDtpZih0KWZvcih2YXIgYT1uLmNoYXJzVG9HbHlwaHModCksaT1QLmZvbnRNYXRyaXhbMF0qUC5mb250U2l6ZSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1hW29dLHU9Yy5jYXRlZ29yeTtpZighdS5pc0ludmlzaWJsZUZvcm1hdE1hcmspe3ZhciBsPVAuY2hhclNwYWNpbmcrKG8rMT09PXM/cjowKSxmPWMud2lkdGg7bi52ZXJ0aWNhbCYmKGY9Yy52bWV0cmljP2Mudm1ldHJpY1swXTotZik7dmFyIGg9ZippO2lmKHUuaXNXaGl0ZXNwYWNlKW4udmVydGljYWw/KGwrPS1oK1Aud29yZFNwYWNpbmcsUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpKToobCs9aCtQLndvcmRTcGFjaW5nLFAudHJhbnNsYXRlVGV4dE1hdHJpeChsKlAudGV4dEhTY2FsZSwwKSksQygiICIpO2Vsc2UgaWYoWigpKXt2YXIgZD1HKCk7dS5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCksbi52ZXJ0aWNhbD8oUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCksaD1NYXRoLmFicyhoKSxkLmhlaWdodCs9aCk6KGgqPVAudGV4dEhTY2FsZSxQLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKSxkLndpZHRoKz1oKSxoJiYoZC5wcmV2VHJhbnNmb3JtPUgoKSk7dmFyIHA9Yy5ub3JtYWxpemVkVW5pY29kZTtDKHApJiZkLnN0ci5wdXNoKCIgIiksZC5zdHIucHVzaChwKSxsJiYobi52ZXJ0aWNhbD9QLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtbCk6UC50cmFuc2xhdGVUZXh0TWF0cml4KGwqUC50ZXh0SFNjYWxlLDApKX19fWVsc2V7dmFyIGc9UC5jaGFyU3BhY2luZytyO2cmJihuLnZlcnRpY2FsP1AudHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1nKTpQLnRyYW5zbGF0ZVRleHRNYXRyaXgoZypQLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBlZSgpe0YoKSx4LmluaXRpYWxpemVkPyh4Lmhhc0VPTD0hMCxyZSgpKTpTLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06SCgpLGZvbnROYW1lOlAubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiB0ZShlLHQscil7aWYocip4LnNwYWNlSW5GbG93TWluPD1lJiZlPD1yKnguc3BhY2VJbkZsb3dNYXgpcmV0dXJuIHguaW5pdGlhbGl6ZWQmJihGKCkseC5zdHIucHVzaCgiICIpKSwhMTt2YXIgbj14LmZvbnROYW1lLGE9MDtyZXR1cm4geC52ZXJ0aWNhbCYmKGE9ZSxlPTApLHJlKCksRigpLFMuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKGEpLHRyYW5zZm9ybTp0fHxIKCksZm9udE5hbWU6bixoYXNFT0w6ITF9KSwhMH1mdW5jdGlvbiByZSgpe3ZhciBlLHQscjt4LmluaXRpYWxpemVkJiZ4LnN0ciYmKHgudmVydGljYWw/eC50b3RhbEhlaWdodCs9eC5oZWlnaHQqeC50ZXh0QWR2YW5jZVNjYWxlOngudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUsUy5pdGVtcy5wdXNoKCh0PShlPXgpLnN0ci5qb2luKCIiKSx7c3RyOihyPSgwLGIuYmlkaSkodCwtMSxlLnZlcnRpY2FsKSkuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9KSkseC5pbml0aWFsaXplZD0hMSx4LnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gbmUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9Uy5pdGVtcy5sZW5ndGg7MCE9PXQmJihlJiZ0PDEwfHwoZC5lbnF1ZXVlKFMsdCksUy5pdGVtcz1bXSxTLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpKSl9dmFyIGFlPW5ldyBxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWZ1bmN0aW9uKG4pe25lKCEwKSxQcm9taXNlLmFsbChbbixkLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O24uZW5zdXJlTm90VGVybWluYXRlZCgpLGFlLnJlc2V0KCk7Zm9yKHZhciB1LGY9e30scD1bXTshKHU9YWUuY2hlY2soKSkmJihwLmxlbmd0aD0wLGYuYXJncz1wLFgucmVhZChmKSk7KXtQPWMuc3RhdGU7dmFyIHY9Zi5mbjtzd2l0Y2gocD1mLmFyZ3MsMHx2KXtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIGI9cFswXS5uYW1lLHc9cFsxXTtpZihQLmZvbnQmJmI9PT1QLmZvbnROYW1lJiZ3PT09UC5mb250U2l6ZSlicmVhaztyZXR1cm4gcmUoKSxQLmZvbnROYW1lPWIsUC5mb250U2l6ZT13LHZvaWQgcyhZKGIsbnVsbCkpO2Nhc2UgYS5PUFMuc2V0VGV4dFJpc2U6UC50ZXh0UmlzZT1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0SFNjYWxlOlAudGV4dEhTY2FsZT1wWzBdLzEwMDticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6UC5sZWFkaW5nPXBbMF07YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDpQLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHBbMF0scFsxXSksUC50ZXh0TWF0cml4PVAudGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpQLmxlYWRpbmc9LXBbMV0sUC50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0pLFAudGV4dE1hdHJpeD1QLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZTpQLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0TWF0cml4OlAuc2V0VGV4dE1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSksUC5zZXRUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSkseigpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0Q2hhclNwYWNpbmc6UC5jaGFyU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6UC53b3JkU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuYmVnaW5UZXh0OlAudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLFAudGV4dExpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfWZvcih2YXIgeD0oUC5mb250LnZlcnRpY2FsPzE6LTEpKlAuZm9udFNpemUvMWUzLE89cFswXSxBPTAsQz1PLmxlbmd0aDtBPEMtMTtBKyspe3ZhciBGPU9bQV07aWYoInN0cmluZyI9PXR5cGVvZiBGKU4ucHVzaChGKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgRiYmMCE9PUYpe3ZhciBUPU4uam9pbigiIik7Ti5sZW5ndGg9MCxRKHtjaGFyczpULGV4dHJhU3BhY2luZzpGKnh9KX19dmFyIEk9Ty5hdCgtMSk7aWYoInN0cmluZyI9PXR5cGVvZiBJJiZOLnB1c2goSSksTi5sZW5ndGg+MCl7dmFyIEU9Ti5qb2luKCIiKTtOLmxlbmd0aD0wLFEoe2NoYXJzOkUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIWMuc3RhdGUuZm9udCl7TC5lbnN1cmVTdGF0ZUZvbnQoYy5zdGF0ZSk7Y29udGludWV9UC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVAud29yZFNwYWNpbmc9cFswXSxQLmNoYXJTcGFjaW5nPXBbMV0sUC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLnBhaW50WE9iamVjdDpyZSgpLER8fChEPWkuZ2V0KCJYT2JqZWN0Iil8fG8uRGljdC5lbXB0eSk7dmFyIGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lO2lmKGomJkIuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO3ZhciByPUQuZ2V0UmF3KE0pO2lmKHIgaW5zdGFuY2VvZiBvLlJlZil7aWYoQi5nZXRCeVJlZihyKSlyZXR1cm4gdm9pZCBlKCk7aWYoTC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixMLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO3I9Ui5mZXRjaChyKX1pZighKHIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBzPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKHMgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKXJldHVybiBCLnNldChNLHIuZGljdC5vYmpJZCwhMCksdm9pZCBlKCk7dmFyIHU9Yy5zdGF0ZS5jbG9uZSgpLGY9bmV3IFcodSkscD1yLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkocCkmJjY9PT1wLmxlbmd0aCYmZi50cmFuc2Zvcm0ocCksbmUoKTt2YXIgdj17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZC5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBkLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZC5yZWFkeX19O0wuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6bixyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmYsY29tYmluZVRleHRJdGVtczpsLGluY2x1ZGVNYXJrZWRDb250ZW50Omgsc2luazp2LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OnksbWFya2VkQ29udGVudERhdGE6a30pLnRoZW4oKGZ1bmN0aW9uKCl7di5lbnF1ZXVlSW52b2tlZHx8Qi5zZXQoTSxyLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYoIUwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmlmKGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lLGomJlUuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBuPXIuZ2V0KE0pO2lmKCEobiBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBzPW4uZ2V0KCJGb250Iik7aWYoIXMpcmV0dXJuIFUuc2V0KE0sbi5vYmpJZCwhMCksdm9pZCBlKCk7cmUoKSxQLmZvbnROYW1lPW51bGwsUC5mb250U2l6ZT1zWzFdLFkobnVsbCxzWzBdKS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZighTC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpyZSgpLGgmJihrLmxldmVsKyssUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpwWzBdaW5zdGFuY2VvZiBvLk5hbWU/cFswXS5uYW1lOm51bGx9KSk7YnJlYWs7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZihyZSgpLGgpe2subGV2ZWwrKzt2YXIgXz1udWxsO3BbMV1pbnN0YW5jZW9mIG8uRGljdCYmKF89cFsxXS5nZXQoIk1DSUQiKSksUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihfKT8iIi5jb25jYXQoTC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tY2lkIikuY29uY2F0KF8pOm51bGwsdGFnOnBbMF1pbnN0YW5jZW9mIG8uTmFtZT9wWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgYS5PUFMuZW5kTWFya2VkQ29udGVudDppZihyZSgpLGgpe2lmKDA9PT1rLmxldmVsKWJyZWFrO2subGV2ZWwtLSxTLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9fWlmKFMuaXRlbXMubGVuZ3RoPj1kLmRlc2lyZWRTaXplKXt1PSEwO2JyZWFrfX11P3MoJCk6KHJlKCksbmUoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4oMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KG4ubmFtZSwnIiAnKSsndGFzazogIicuY29uY2F0KGUsJyIuJykpLHJlKCksdm9pZCBuZSgpO3Rocm93IGV9fSkpfX0se2tleToiZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLHM9dGhpcy54cmVmLGw9dGhpcy5yZWFkVG9Vbmljb2RlKHIudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7ZiBpbnN0YW5jZW9mIG8uRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmYuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7dmFyIGg9ZS5nZXQoIkNJRFRvR0lETWFwIik7aCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKG49aC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2V4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICInLmNvbmNhdChlLCciLicpKX19dmFyIGQscD1bXSxnPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKChkPWUuZ2V0KCJFbmNvZGluZyIpKWluc3RhbmNlb2Ygby5EaWN0KXtpZihnPShnPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSlpbnN0YW5jZW9mIG8uTmFtZT9nLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSl7dmFyIHYseT0wLGI9TihkLmdldCgiRGlmZmVyZW5jZXMiKSk7dHJ5e2ZvcihiLnMoKTshKHY9Yi5uKCkpLmRvbmU7KXt2YXIgdz12LnZhbHVlLGs9cy5mZXRjaElmUmVmKHcpO2lmKCJudW1iZXIiPT10eXBlb2Ygayl5PWs7ZWxzZXtpZighKGsgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KGspKTtwW3krK109ay5uYW1lfX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9fX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBvLk5hbWUpZz1kLm5hbWU7ZWxzZXt2YXIgUz0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcihTKTsoMCxhLndhcm4pKFMpfSJNYWNSb21hbkVuY29kaW5nIiE9PWcmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1nJiYiV2luQW5zaUVuY29kaW5nIiE9PWcmJihnPW51bGwpfWlmKGcpci5kZWZhdWx0RW5jb2Rpbmc9KDAsdS5nZXRFbmNvZGluZykoZyk7ZWxzZXt2YXIgeD0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxPPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fE98fChkPXUuV2luQW5zaUVuY29kaW5nKSx4JiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlJiYhci5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KHIubmFtZSk/ZD11LlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KHIubmFtZSkmJihkPXUuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKSksci5kZWZhdWx0RW5jb2Rpbmc9ZH1yZXR1cm4gci5kaWZmZXJlbmNlcz1wLHIuYmFzZUVuY29kaW5nTmFtZT1nLHIuaGFzRW5jb2Rpbmc9ISFnfHxwLmxlbmd0aD4wLHIuZGljdD1lLGwudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUsaS5idWlsZFRvVW5pY29kZShyKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci50b1VuaWNvZGU9ZSxuJiYoci5jaWRUb0dpZE1hcD1pLnJlYWRDaWRUb0dpZE1hcChuLGUpKSxyfSkpfX0se2tleToiX3NpbXBsZUZvbnRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsYS5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO3ZhciByPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxvPWUuZGlmZmVyZW5jZXM7Zm9yKHZhciBzIGluIG8pe3ZhciBjPW9bc107Ii5ub3RkZWYiIT09YyYmKG5bc109Yyl9dmFyIGw9KDAsUy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgZiBpbiBuKXt2YXIgaD1uW2ZdO2lmKCIiIT09aCl7dmFyIGQ9bFtoXTtpZih2b2lkIDA9PT1kKXt2YXIgcD0wO3N3aXRjaChoWzBdKXtjYXNlIkciOjM9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYoaC5sZW5ndGg+PTMmJmgubGVuZ3RoPD00KXt2YXIgZz1oLnN1YnN0cmluZygxKTtpZih0KXtwPXBhcnNlSW50KGcsMTYpO2JyZWFrfWlmKHA9K2csTnVtYmVyLmlzTmFOKHApJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGcsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOi0xIT09KGQ9KDAsQS5nZXRVbmljb2RlRm9yR2x5cGgpKGgsbCkpJiYocD1kKX1pZihwPjAmJnA8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIocCkpe2lmKGkmJnA9PT0rZil7dmFyIHY9KDAsdS5nZXRFbmNvZGluZykoaSk7aWYodiYmKGg9dltmXSkpe3JbZl09U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtjb250aW51ZX19cltmXT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKX19ZWxzZSByW2ZdPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fXJldHVybiByfX0se2tleToiYnVpbGRUb1VuaWNvZGUiLHZhbHVlOihyPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbixzLGMsdSxsO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIXQudG9Vbmljb2RlJiZ0LnRvVW5pY29kZS5sZW5ndGg+MCwhdC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIXQuY29tcG9zaXRlJiZ0Lmhhc0VuY29kaW5nJiYodC5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHQpKSxlLmFicnVwdCgicmV0dXJuIix0LnRvVW5pY29kZSk7Y2FzZSA0OmlmKHQuY29tcG9zaXRlKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGQuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUodCkpKTtjYXNlIDY6aWYoIXQuY29tcG9zaXRlfHwoIXQuY01hcC5idWlsdEluQ01hcHx8dC5jTWFwIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXApJiYoIkFkb2JlIiE9PXQuY2lkU3lzdGVtSW5mby5yZWdpc3RyeXx8IkdCMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJDTlMxIiE9PXQuY2lkU3lzdGVtSW5mby5vcmRlcmluZyYmIkphcGFuMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJLb3JlYTEiIT09dC5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiByPXQuY2lkU3lzdGVtSW5mbyxuPXIucmVnaXN0cnkscz1yLm9yZGVyaW5nLGM9by5OYW1lLmdldCgiIi5jb25jYXQobiwiLSIpLmNvbmNhdChzLCItVUNTMiIpKSxlLm5leHQ9MTEsaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Y2FzZSAxMTpyZXR1cm4gdT1lLnNlbnQsbD1bXSx0LmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9dS5sb29rdXAodCk7ciYmKGxbZV09U3RyaW5nLmZyb21DaGFyQ29kZSgoci5jaGFyQ29kZUF0KDApPDw4KStyLmNoYXJDb2RlQXQoMSkpKX0pKSxlLmFicnVwdCgicmV0dXJuIixuZXcgZC5Ub1VuaWNvZGVNYXAobCkpO2Nhc2UgMTU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKHQuZmlyc3RDaGFyLHQubGFzdENoYXIpKTtjYXNlIDE2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlYWRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIG8uTmFtZT9pLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwP25ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBkLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCJudW1iZXIiIT10eXBlb2Ygcil7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErPTIpe3ZhciBpPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtpZig1NTI5Nj09KDYzNDg4JmkpKXthKz0yO3ZhciBvPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtuLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmbykrNjU1MzYpfWVsc2Ugbi5wdXNoKGkpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLG4pfWVsc2UgdFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pLCgwLGEud2FybikoJ3JlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfX0se2tleToicmVhZENpZFRvR2lkTWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1lW24rK108PDh8ZVtuXSxvPW4+PjE7KDAhPT1pfHx0LmhhcyhvKSkmJihyW29dPWkpfXJldHVybiByfX0se2tleToiZXh0cmFjdFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzLHUsbCxmLGgsZD10aGlzLnhyZWYscD1bXSxnPTAsdj1bXTtpZihyLmNvbXBvc2l0ZSl7aWYoZz1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKGw9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iocz0wLHU9Zi5sZW5ndGg7czx1O3MrKylwW2wrK109ZC5mZXRjaElmUmVmKGZbc10pO2Vsc2V7dmFyIHk9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKHM9bDtzPD1mO3MrKylwW3NdPXl9aWYoci52ZXJ0aWNhbCl7dmFyIG09ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1bbVsxXSwuNSpnLG1bMF1dLG09ZS5nZXQoIlcyIikpZm9yKGE9MCxpPW0ubGVuZ3RoO2E8aTthKyspaWYobD1kLmZldGNoSWZSZWYobVthKytdKSxmPWQuZmV0Y2hJZlJlZihtW2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihzPTAsdT1mLmxlbmd0aDtzPHU7cysrKXZbbCsrXT1bZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbc10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKV07Zm9yKHM9bDtzPD1mO3MrKyl2W3NdPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iocz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtzKytdPWQuZmV0Y2hJZlJlZihoW2FdKTtnPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKGsgaW5zdGFuY2VvZiBvLk5hbWUpe3ZhciBTPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGsubmFtZSk7cD10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKFMud2lkdGhzLHIpLGc9Uy5kZWZhdWx0V2lkdGh9fX12YXIgeD0hMCxPPWc7Zm9yKHZhciBBIGluIHApe3ZhciBDPXBbQV07aWYoQylpZihPKXtpZihPIT09Qyl7eD0hMTticmVha319ZWxzZSBPPUN9eCYmKHIuZmxhZ3N8PWMuRm9udEZsYWdzLkZpeGVkUGl0Y2gpLHIuZGVmYXVsdFdpZHRoPWcsci53aWR0aHM9cCxyLmRlZmF1bHRWTWV0cmljcz1uLHIudm1ldHJpY3M9dn19LHtrZXk6ImlzU2VyaWZGb250Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfX0se2tleToiZ2V0QmFzZUZvbnRNZXRyaWNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLGk9KDAsTy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgbz1pW2FdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygbz8odD1vLG49ITApOnI9bygpLHtkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6bix3aWR0aHM6cn19fSx7a2V5OiJidWlsZENoYXJDb2RlVG9XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn19LHtrZXk6InByZUV2YWx1YXRlRm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShyIGluc3RhbmNlb2Ygby5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTt2YXIgbixpLHM9ITE7aWYoIlR5cGUwIj09PXIubmFtZSl7dmFyIGM9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KGMpP3RoaXMueHJlZi5mZXRjaElmUmVmKGNbMF0pOmMpaW5zdGFuY2VvZiBvLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZighKChyPWUuZ2V0KCJTdWJ0eXBlIikpaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3M9ITB9dmFyIHU9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChzPzY1NTM1OjI1NSksZj1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihmKXtuPW5ldyBDLk11cm11ckhhc2gzXzY0O3ZhciBoPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpbi51cGRhdGUoaC5uYW1lKTtlbHNlIGlmKGggaW5zdGFuY2VvZiBvLlJlZiluLnVwZGF0ZShoLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQscD1OKGguZ2V0UmF3VmFsdWVzKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lKW4udXBkYXRlKGcubmFtZSk7ZWxzZSBpZihnIGluc3RhbmNlb2Ygby5SZWYpbi51cGRhdGUoZy50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgdj1nLmxlbmd0aCx5PW5ldyBBcnJheSh2KSxiPTA7Yjx2O2IrKyl7dmFyIHc9Z1tiXTt3IGluc3RhbmNlb2Ygby5OYW1lP3lbYl09dy5uYW1lOigibnVtYmVyIj09dHlwZW9mIHd8fHcgaW5zdGFuY2VvZiBvLlJlZikmJih5W2JdPXcudG9TdHJpbmcoKSl9bi51cGRhdGUoeS5qb2luKCkpfX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fWlmKG4udXBkYXRlKCIiLmNvbmNhdCh1LCItIikuY29uY2F0KGwpKSwoaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSlpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSl7dmFyIGs9aS5zdHJ8fGksUz1rLmJ1ZmZlcj9uZXcgVWludDhBcnJheShrLmJ1ZmZlci5idWZmZXIsMCxrLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoay5ieXRlcy5idWZmZXIsay5zdGFydCxrLmVuZC1rLnN0YXJ0KTtuLnVwZGF0ZShTKX1lbHNlIGkgaW5zdGFuY2VvZiBvLk5hbWUmJm4udXBkYXRlKGkubmFtZSk7dmFyIHg9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheSh4KSl7dmFyIE8sQT1bXSxGPU4oeCk7dHJ5e2ZvcihGLnMoKTshKE89Ri5uKCkpLmRvbmU7KXt2YXIgUD1PLnZhbHVlOygibnVtYmVyIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBvLlJlZikmJkEucHVzaChQLnRvU3RyaW5nKCkpfX1jYXRjaChlKXtGLmUoZSl9ZmluYWxseXtGLmYoKX1uLnVwZGF0ZShBLmpvaW4oKSl9aWYocyl7bi51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTt2YXIgVD1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoVCkpe3ZhciBJLEU9W10saj1OKFQpO3RyeXtmb3Ioai5zKCk7IShJPWoubigpKS5kb25lOyl7dmFyIE09SS52YWx1ZTtpZigibnVtYmVyIj09dHlwZW9mIE18fE0gaW5zdGFuY2VvZiBvLlJlZilFLnB1c2goTS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoTSkpe3ZhciBfLEw9W10sUj1OKE0pO3RyeXtmb3IoUi5zKCk7IShfPVIubigpKS5kb25lOyl7dmFyIEQ9Xy52YWx1ZTsoIm51bWJlciI9PXR5cGVvZiBEfHxEIGluc3RhbmNlb2Ygby5SZWYpJiZMLnB1c2goRC50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9RS5wdXNoKCJbIi5jb25jYXQoTC5qb2luKCksIl0iKSl9fX1jYXRjaChlKXtqLmUoZSl9ZmluYWxseXtqLmYoKX1uLnVwZGF0ZShFLmpvaW4oKSl9dmFyIEI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO0IgaW5zdGFuY2VvZiBvLk5hbWU/bi51cGRhdGUoQi5uYW1lKTpCIGluc3RhbmNlb2Ygby5SZWY/bi51cGRhdGUoQi50b1N0cmluZygpKTpCIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZuLnVwZGF0ZShCLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6ZixkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6cyx0eXBlOnIubmFtZSxmaXJzdENoYXI6dSxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6bj9uLmhleGRpZ2VzdCgpOiIifX19LHtrZXk6InRyYW5zbGF0ZUZvbnQiLHZhbHVlOih0PU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbix1LGYsZCxwLGcsdixtLGIsdyxrLFMseCxPLEEsQyxGLFAsVCxJLGosTSxfLEwsUixELEIsVSwkLFgsSCxxLEcseixXPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPXQuZGVzY3JpcHRvcixuPXQuZGljdCx1PXQuYmFzZURpY3QsZj10LmNvbXBvc2l0ZSxkPXQudHlwZSxwPXQuZmlyc3RDaGFyLGc9dC5sYXN0Q2hhcix2PXQudG9Vbmljb2RlLG09dC5jc3NGb250SW5mbyxiPSJUeXBlMyI9PT1kLHIpe2UubmV4dD0yNzticmVha31pZighYil7ZS5uZXh0PTk7YnJlYWt9KHI9bmV3IG8uRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsby5OYW1lLmdldChkKSksci5zZXQoIkZvbnRCQm94IixuLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pLGUubmV4dD0yNzticmVhaztjYXNlIDk6aWYoKGs9bi5nZXQoIkJhc2VGb250IikpaW5zdGFuY2VvZiBvLk5hbWUpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtjYXNlIDEyOmlmKGs9ay5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpLFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoaykseD1rLnNwbGl0KCItIilbMF0sTz0odGhpcy5pc1NlcmlmRm9udCh4KT9jLkZvbnRGbGFncy5TZXJpZjowKXwoUy5tb25vc3BhY2U/Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbeF0/Yy5Gb250RmxhZ3MuU3ltYm9saWM6Yy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpLHc9e3R5cGU6ZCxuYW1lOmssbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsd2lkdGhzOlMud2lkdGhzLGRlZmF1bHRXaWR0aDpTLmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOk8sZmlyc3RDaGFyOnAsbGFzdENoYXI6Zyx0b1VuaWNvZGU6dix4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpifSxBPW4uZ2V0KCJXaWR0aHMiKSxDPSgwLGwuZ2V0U3RhbmRhcmRGb250TmFtZSkoayksRj1udWxsLCFDKXtlLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHcuaXNTdGFuZGFyZEZvbnQ9ITAsZS5uZXh0PTI0LHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEMpO2Nhc2UgMjQ6Rj1lLnNlbnQsdy5pc0ludGVybmFsRm9udD0hIUY7Y2FzZSAyNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobixuLHcpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKEEpe3ZhciB0LHI9W10sbj1wLGE9TihBKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBpPXQudmFsdWU7cltuKytdPVcueHJlZi5mZXRjaElmUmVmKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLndpZHRocz1yfWVsc2UgZS53aWR0aHM9Vy5idWlsZENoYXJDb2RlVG9XaWR0aChTLndpZHRocyxlKTtyZXR1cm4gbmV3IHMuRm9udChrLEYsZSl9KSkpO2Nhc2UgMjc6aWYoUD1yLmdldCgiRm9udE5hbWUiKSxUPW4uZ2V0KCJCYXNlRm9udCIpLCJzdHJpbmciPT10eXBlb2YgUCYmKFA9by5OYW1lLmdldChQKSksInN0cmluZyI9PXR5cGVvZiBUJiYoVD1vLk5hbWUuZ2V0KFQpKSxifHwoST1QJiZQLm5hbWUsaj1UJiZULm5hbWUsSSE9PWomJigoMCxhLmluZm8pKCJUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyBcIiIuY29uY2F0KEksJyIgYnV0ICcpKyJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiIuY29uY2F0KGosJyIuJykpLEkmJmomJmouc3RhcnRzV2l0aChJKSYmKFA9VCkpKSwoUD1QfHxUKWluc3RhbmNlb2Ygby5OYW1lKXtlLm5leHQ9MzU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7Y2FzZSAzNTplLnByZXY9MzUsTT1yLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKSxlLm5leHQ9NDU7YnJlYWs7Y2FzZSAzOTppZihlLnByZXY9MzksZS50MD1lLmNhdGNoKDM1KSx0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXtlLm5leHQ9NDM7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDQzOigwLGEud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoUC5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLnQwLCciLicpKSxNPW5ldyB5Lk51bGxTdHJlYW07Y2FzZSA0NTppZihCPSExLFU9ITEsJD1udWxsLCFNKXtlLm5leHQ9NTI7YnJlYWt9TS5kaWN0JiYoKFg9TS5kaWN0LmdldCgiU3VidHlwZSIpKWluc3RhbmNlb2Ygby5OYW1lJiYoXz1YLm5hbWUpLEw9TS5kaWN0LmdldCgiTGVuZ3RoMSIpLFI9TS5kaWN0LmdldCgiTGVuZ3RoMiIpLEQ9TS5kaWN0LmdldCgiTGVuZ3RoMyIpKSxlLm5leHQ9NzQ7YnJlYWs7Y2FzZSA1MjppZighbSl7ZS5uZXh0PTY2O2JyZWFrfWlmKCEoSD0oMCxoLmdldFhmYUZvbnROYW1lKShQLm5hbWUpKSl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBtLmZvbnRGYW1pbHk9IiIuY29uY2F0KG0uZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLG0ubWV0cmljcz1ILm1ldHJpY3N8fG51bGwsJD1ILmZhY3RvcnN8fG51bGwsZS5uZXh0PTYwLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEgubmFtZSk7Y2FzZSA2MDpNPWUuc2VudCxVPSEhTSx1PW49KDAsaC5nZXRYZmFGb250RGljdCkoUC5uYW1lKSxmPSEwO2Nhc2UgNjQ6ZS5uZXh0PTc0O2JyZWFrO2Nhc2UgNjY6aWYoYil7ZS5uZXh0PTc0O2JyZWFrfWlmKCEocT0oMCxsLmdldFN0YW5kYXJkRm9udE5hbWUpKFAubmFtZSkpKXtlLm5leHQ9NzQ7YnJlYWt9cmV0dXJuIEI9ITAsZS5uZXh0PTcyLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHEpO2Nhc2UgNzI6TT1lLnNlbnQsVT0hIU07Y2FzZSA3NDppZih3PXt0eXBlOmQsbmFtZTpQLm5hbWUsc3VidHlwZTpfLGZpbGU6TSxsZW5ndGgxOkwsbGVuZ3RoMjpSLGxlbmd0aDM6RCxpc1N0YW5kYXJkRm9udDpCLGlzSW50ZXJuYWxGb250OlUsbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsY29tcG9zaXRlOmYsZml4ZWRQaXRjaDohMSxmb250TWF0cml4Om4uZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8YS5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6cCxsYXN0Q2hhcjpnLHRvVW5pY29kZTp2LGJib3g6ci5nZXRBcnJheSgiRm9udEJCb3giKXx8bi5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ci5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ci5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OnIuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OnIuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczpyLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTpyLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDpiLGNzc0ZvbnRJbmZvOm0sc2NhbGVGYWN0b3JzOiR9LCFmKXtlLm5leHQ9ODM7YnJlYWt9cmV0dXJuKEc9dS5nZXQoIkVuY29kaW5nIikpaW5zdGFuY2VvZiBvLk5hbWUmJih3LmNpZEVuY29kaW5nPUcubmFtZSksZS5uZXh0PTgwLGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzpHLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2Nhc2UgODA6ej1lLnNlbnQsdy5jTWFwPXosdy52ZXJ0aWNhbD13LmNNYXAudmVydGljYWw7Y2FzZSA4MzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobix1LHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBXLmV4dHJhY3RXaWR0aHMobixyLGUpLG5ldyBzLkZvbnQoUC5uYW1lLE0sZSl9KSkpO2Nhc2UgODQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1szNSwzOV1dKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSxbe2tleToiYnVpbGRGb250UGF0aHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkodCl7dmFyIGk9IiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47ci5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycylyZXR1cm4gci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGh9KSx2b2lkKDAsYS53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19dmFyIG8scz1OKHQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIGM9by52YWx1ZTtpKGMuZm9udENoYXIpO3ZhciB1PWMuYWNjZW50O3UmJnUuZm9udENoYXImJmkodS5mb250Q2hhcil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX19LHtrZXk6ImZhbGxiYWNrRm9udERpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkRpY3Q7cmV0dXJuIGUuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiUERGSlMtRmFsbGJhY2tGb250IikpLGUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSwoMCxhLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGV9KCk7dC5QYXJ0aWFsRXZhbHVhdG9yPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQubG9hZGVkTmFtZSxuPXQuZm9udCxhPXQuZGljdCxpPXQuZXZhbHVhdG9yT3B0aW9ucztfKHRoaXMsZSksdGhpcy5sb2FkZWROYW1lPXIsdGhpcy5mb250PW4sdGhpcy5kaWN0PWEsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1pfHxVLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPW4uaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gUihlLFt7a2V5OiJzZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNlbnR8fCh0aGlzLnNlbnQ9ITAsZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKSl9fSx7a2V5OiJmYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mb250LmRhdGEmJih0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwLEcuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucykpfX0se2tleToibG9hZFR5cGUzRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7dmFyIGk9ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7aS5wYXJzaW5nVHlwZTNGb250PSEwO3ZhciBzPW5ldyBvLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCksaS50eXBlM0ZvbnRSZWZzPXM7dmFyIGMsdT10aGlzLmZvbnQsbD10aGlzLnR5cGUzRGVwZW5kZW5jaWVzLGY9UHJvbWlzZS5yZXNvbHZlKCksaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSxkPXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxnPWEuVXRpbC5ub3JtYWxpemVSZWN0KHUuYmJveHx8WzAsMCwwLDBdKSx2PWdbMl0tZ1swXSx5PWdbM10tZ1sxXSxtPU1hdGguaHlwb3Qodix5KSxiPU4oaC5nZXRLZXlzKCkpO3RyeXt2YXIgdz1mdW5jdGlvbigpe3ZhciBlPWMudmFsdWU7Zj1mLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9aC5nZXQoZSksbz1uZXcgRi5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe28uZm5BcnJheVswXT09PWEuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmbi5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvLG0pLHBbZV09by5nZXRJUigpO3ZhciB0LHI9TihvLmRlcGVuZGVuY2llcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2wuYWRkKGkpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLGEud2FybikoJ1R5cGUzIGZvbnQgcmVzb3VyY2UgIicuY29uY2F0KGUsJyIgaXMgbm90IGF2YWlsYWJsZS4nKSk7dmFyIHI9bmV3IEYuT3BlcmF0b3JMaXN0O3BbZV09ci5nZXRJUigpfSkpfSkpfTtmb3IoYi5zKCk7IShjPWIubigpKS5kb25lOyl3KCl9Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9cmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ9Zi50aGVuKChmdW5jdGlvbigpe3UuY2hhclByb2NPcGVyYXRvckxpc3Q9cCxuLl9iYm94JiYodS5pc0NoYXJCQm94PSEwLHUuYmJveD1uLl9iYm94KX0pKSx0aGlzLnR5cGUzTG9hZGVkfX0se2tleToiX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpOYU4scj1hLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1yWzJdLXJbMF0saT1yWzNdLXJbMV0sbz1NYXRoLmh5cG90KG4saSk7MD09PW58fDA9PT1pPyhlLmZuQXJyYXkuc3BsaWNlKDAsMSksZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSkpOigwPT09dHx8TWF0aC5yb3VuZChvL3QpPj0xMCkmJih0aGlzLl9iYm94fHwodGhpcy5fYmJveD1bMS8wLDEvMCwtMS8wLC0xLzBdKSx0aGlzLl9iYm94WzBdPU1hdGgubWluKHRoaXMuX2Jib3hbMF0sclswXSksdGhpcy5fYmJveFsxXT1NYXRoLm1pbih0aGlzLl9iYm94WzFdLHJbMV0pLHRoaXMuX2Jib3hbMl09TWF0aC5tYXgodGhpcy5fYmJveFsyXSxyWzJdKSx0aGlzLl9iYm94WzNdPU1hdGgubWF4KHRoaXMuX2Jib3hbM10sclszXSkpO2Zvcih2YXIgcz0wLGM9ZS5sZW5ndGg7czxjOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBhLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOmNhc2UgYS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNvbG9yTjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvck46Y2FzZSBhLk9QUy5zZXRTdHJva2VHcmF5OmNhc2UgYS5PUFMuc2V0RmlsbEdyYXk6Y2FzZSBhLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6Y2FzZSBhLk9QUy5zaGFkaW5nRmlsbDpjYXNlIGEuT1BTLnNldFJlbmRlcmluZ0ludGVudDplLmZuQXJyYXkuc3BsaWNlKHMsMSksZS5hcmdzQXJyYXkuc3BsaWNlKHMsMSksYy0tO2NvbnRpbnVlO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmZvcih2YXIgdT1UKGUuYXJnc0FycmF5W3NdLDEpWzBdLGw9MCxmPXUubGVuZ3RoO2w8Zjspe3N3aXRjaChUKHVbbF0sMSlbMF0pe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dS5zcGxpY2UobCwxKSxmLS07Y29udGludWV9bCsrfX1zKyt9fX1dKSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBZO18odGhpcyxlKSx0aGlzLnN0YXRlPXQsdGhpcy5zdGF0ZVN0YWNrPVtdfXJldHVybiBSKGUsW3trZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlPWUuY2xvbmUoKX19LHtrZXk6InJlc3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXRlLmN0bT1hLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1dKSxlfSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PWEuSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXJldHVybiBSKGUsW3trZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10aGlzLnRleHRNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJzZXRUZXh0TGluZU1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJ0cmFuc2xhdGVUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dE1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX19LHtrZXk6InRyYW5zbGF0ZVRleHRMaW5lTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dExpbmVNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19fSx7a2V5OiJjYXJyaWFnZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyksdGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGEuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnQ9bnVsbCx0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWEuVGV4dFJlbmRlcmluZ01vZGUuRklMTCx0aGlzLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksdGhpcy5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9cmV0dXJuIFIoZSxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fV0pLGV9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bmV3IFc7Xyh0aGlzLGUpLHRoaXMucGFyc2VyPW5ldyBnLlBhcnNlcih7bGV4ZXI6bmV3IGcuTGV4ZXIodCxlLm9wTWFwKSx4cmVmOnJ9KSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9pc1BhdGhPcD0hMSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiBSKGUsW3trZXk6InNhdmVkU3RhdGVzRGVwdGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LmFyZ3M7Oyl7dmFyIG49dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYobiBpbnN0YW5jZW9mIG8uQ21kKXt2YXIgaT1uLmNtZCxzPWUub3BNYXBbaV07aWYoIXMpeygwLGEud2FybikoJ1Vua25vd24gY29tbWFuZCAiJy5jb25jYXQoaSwnIi4nKSk7Y29udGludWV9dmFyIGM9cy5pZCx1PXMubnVtQXJncyxsPW51bGwhPT1yP3IubGVuZ3RoOjA7aWYodGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKSx0aGlzLl9pc1BhdGhPcD1jPj1hLk9QUy5tb3ZlVG8mJmM8PWEuT1BTLmVuZFBhdGgscy52YXJpYWJsZUFyZ3MpbD51JiYoMCxhLmluZm8pKCJDb21tYW5kICIuY29uY2F0KGksIjogZXhwZWN0ZWQgWzAsICIpLmNvbmNhdCh1LCJdIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIikpO2Vsc2V7aWYobCE9PXUpe2Zvcih2YXIgZj10aGlzLm5vblByb2Nlc3NlZEFyZ3M7bD51OylmLnB1c2goci5zaGlmdCgpKSxsLS07Zm9yKDtsPHUmJjAhPT1mLmxlbmd0aDspbnVsbD09PXImJihyPVtdKSxyLnVuc2hpZnQoZi5wb3AoKSksbCsrfWlmKGw8dSl7dmFyIGg9ImNvbW1hbmQgIi5jb25jYXQoaSwiOiBleHBlY3RlZCAiKS5jb25jYXQodSwiIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIik7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+ZS5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChoKSk7KDAsYS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoaCkpLG51bGwhPT1yJiYoci5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGMsciksdC5mbj1jLHQuYXJncz1yLCEwfWlmKG49PT1vLkVPRilyZXR1cm4hMTtpZihudWxsIT09biYmKG51bGw9PT1yJiYocj1bXSksci5wdXNoKG4pLHIubGVuZ3RoPjMzKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX0se2tleToicHJlcHJvY2Vzc0NvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBhLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGEuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fV0sW3trZXk6Im9wTWFwIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx4LmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6YS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6YS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmEuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6YS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmEuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6YS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6YS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6YS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6YS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmEuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6YS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6YS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6YS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6YS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmEuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6YS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDphLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6YS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6YS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6YS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDphLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6YS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDphLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDphLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmEuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmEuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDphLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmEuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDphLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmEuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDphLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6YS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDphLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDphLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDphLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6YS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDphLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmEuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmEuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmEuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDphLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmEuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmEuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmEuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6YS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmEuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDphLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDphLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDphLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDphLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmEuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6YS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmEuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmEuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmEuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmEuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6YS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6YS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDphLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDphLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDphLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6YS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmEuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDphLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDphLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmEuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmEuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9fSx7a2V5OiJNQVhfSU5WQUxJRF9QQVRIX09QUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9fV0pLGV9KCk7dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9S30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTQ2KSxzPXIoMTM1KSxjPXIoMTM5KTtmdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGwoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gZihlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1sO3ZhciBoPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1mKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxsPXUudmFsdWU7cmV0dXJuIGwmJiJvYmplY3QiPT1wKGwpJiZyLmNhbGwobCwiX19hd2FpdCIpP3QucmVzb2x2ZShsLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShsKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9ZihlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWYobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGwodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtsKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scChlKX1mdW5jdGlvbiBnKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1wKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXAoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHkoZSx0LHIpe3JldHVybiB0JiZ2KGUucHJvdG90eXBlLHQpLHImJnYoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBtPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sYj1NYXRoLnBvdygyLDI0KS0xLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtnKHRoaXMsZSksdGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPXR9cmV0dXJuIHkoZSxbe2tleToiYWRkQ29kZXNwYWNlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxyKSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfX0se2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LWU+Yil0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109cisrfX0se2tleToibWFwQmZSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHQtZT5iKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgtMTtlPD10Oyl7dGhpcy5fbWFwW2UrK109cjt2YXIgYT1yLmNoYXJDb2RlQXQobikrMTtyPWE+MjU1P3Iuc3Vic3RyaW5nKDAsbi0xKStTdHJpbmcuZnJvbUNoYXJDb2RlKHIuY2hhckNvZGVBdChuLTEpKzEpKyJcMCI6ci5zdWJzdHJpbmcoMCxuKStTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYodC1lPmIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgsYT0wO2U8PXQmJmE8bjspdGhpcy5fbWFwW2VdPXJbYSsrXSwrK2V9fSx7a2V5OiJtYXBPbmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcCxyPXQubGVuZ3RoO2lmKHI8PTY1NTM2KWZvcih2YXIgbj0wO248cjtuKyspdm9pZCAwIT09dFtuXSYmZShuLHRbbl0pO2Vsc2UgZm9yKHZhciBhIGluIHQpZShhLHRbYV0pfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgciBpbiB0KWlmKHRbcl09PT1lKXJldHVybiAwfHI7cmV0dXJuLTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcH19LHtrZXk6InJlYWRDaGFyQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7bj0objw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2Zvcih2YXIgcz1hW2ldLGM9MCx1PXMubGVuZ3RoO2M8dTspe3ZhciBsPXNbYysrXSxmPXNbYysrXTtpZihuPj1sJiZuPD1mKXJldHVybiByLmNoYXJjb2RlPW4sdm9pZChyLmxlbmd0aD1pKzEpfX1yLmNoYXJjb2RlPTAsci5sZW5ndGg9MX19LHtrZXk6ImdldENoYXJDb2RlTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXMscj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87KXt2YXIgcz1hW2krK10sYz1hW2krK107aWYoZT49cyYmZTw9YylyZXR1cm4gcisxfXJldHVybiAxfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9dzt2YXIgaz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1kKHQpO2lmKHIpe3ZhciBhPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgcjtyZXR1cm4gZyh0aGlzLGkpLChyPWEuY2FsbCh0aGlzKSkudmVydGljYWw9ZSxyLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSkscn1yZXR1cm4geShpLFt7a2V5OiJtYXBDaWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfX0se2tleToibWFwT25lIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSg2NTUzNiksdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiA2NTUzNn19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fV0pLGl9KHcpO3QuSWRlbnRpdHlDTWFwPWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTAsbj0wO248PXQ7bisrKXI9cjw8OHxlW25dO3JldHVybiByPj4+MH1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gcihlLHQscil7Zm9yKHZhciBuPTAsYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MSxuPXQ7bj49MCYmcj4wO24tLSlyKz1lW25dLGVbbl09MjU1JnIscj4+PTh9dmFyIGk9MTYsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Zyh0aGlzLGUpLHRoaXMuYnVmZmVyPXQsdGhpcy5wb3M9MCx0aGlzLmVuZD10Lmxlbmd0aCx0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmV0dXJuIHkoZSxbe2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX19LHtrZXk6InJlYWROdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fX0se2tleToicmVhZFNpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfX0se2tleToicmVhZEhleCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKSx0aGlzLnBvcys9dCsxfX0se2tleToicmVhZEhleE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxjPTAsdT0wO3M+PTA7KXtmb3IoO3U8OCYmYS5sZW5ndGg+MDspY3w9YVstLWldPDx1LHUrPTc7ZVtzXT0yNTUmYyxzLS0sYz4+PTgsdS09OH19fSx7a2V5OiJyZWFkSGV4U2lnbmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2Zvcih2YXIgcj0xJmVbdF0/MjU1OjAsbj0wLGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1dKSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7Zyh0aGlzLG4pfXZhciBzO3JldHVybiB5KG4sW3trZXk6InByb2Nlc3MiLHZhbHVlOihzPWYodSgpLm1hcmsoKGZ1bmN0aW9uIG4ocyxjLGwpe3ZhciBmLGgsZCxwLGcsdix5LG0sYix3LGssUyx4LE8sQSxDLEYsUCxULEksRTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmY9bmV3IG8ocyksaD1mLnJlYWRCeXRlKCksYy52ZXJ0aWNhbD0hISgxJmgpLGQ9bnVsbCxwPW5ldyBVaW50OEFycmF5KGkpLGc9bmV3IFVpbnQ4QXJyYXkoaSksdj1uZXcgVWludDhBcnJheShpKSx5PW5ldyBVaW50OEFycmF5KGkpLG09bmV3IFVpbnQ4QXJyYXkoaSk7Y2FzZSA5OmlmKCEoKHc9Zi5yZWFkQnl0ZSgpKT49MCkpe24ubmV4dD02ODticmVha31pZig3IT0oaz13Pj41KSl7bi5uZXh0PTIwO2JyZWFrfW4udDA9MzEmdyxuLm5leHQ9MD09PW4udDA/MTU6MT09PW4udDA/MTc6MTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZi5yZWFkU3RyaW5nKCksbi5hYnJ1cHQoImJyZWFrIiwxOSk7Y2FzZSAxNzpyZXR1cm4gZD1mLnJlYWRTdHJpbmcoKSxuLmFicnVwdCgiYnJlYWsiLDE5KTtjYXNlIDE5OnJldHVybiBuLmFicnVwdCgiY29udGludWUiLDkpO2Nhc2UgMjA6aWYoUz0hISgxNiZ3KSwhKDErKHg9MTUmdyk+aSkpe24ubmV4dD0yNDticmVha310aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjYXNlIDI0Ok89MSxBPWYucmVhZE51bWJlcigpLG4udDE9ayxuLm5leHQ9MD09PW4udDE/Mjk6MT09PW4udDE/MzU6Mj09PW4udDE/NDE6Mz09PW4udDE/NDY6ND09PW4udDE/NTM6NT09PW4udDE/NTg6NjU7YnJlYWs7Y2FzZSAyOTpmb3IoZi5yZWFkSGV4KHAseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksYy5hZGRDb2Rlc3BhY2VSYW5nZSh4KzEsZShwLHgpLGUoZyx4KSksQz0xO0M8QTtDKyspYShnLHgpLGYucmVhZEhleE51bWJlcihwLHgpLHIocCxnLHgpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGMuYWRkQ29kZXNwYWNlUmFuZ2UoeCsxLGUocCx4KSxlKGcseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDM1OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxmLnJlYWROdW1iZXIoKSxGPTE7RjxBO0YrKylhKGcseCksZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksZi5yZWFkTnVtYmVyKCk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNDE6Zm9yKGYucmVhZEhleCh2LHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBPbmUoZSh2LHgpLGIpLFA9MTtQPEE7UCsrKWEodix4KSxTfHwoZi5yZWFkSGV4TnVtYmVyKG0seCkscih2LG0seCkpLGI9Zi5yZWFkU2lnbmVkKCkrKGIrMSksYy5tYXBPbmUoZSh2LHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDQ2OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxiPWYucmVhZE51bWJlcigpLGMubWFwQ2lkUmFuZ2UoZShwLHgpLGUoZyx4KSxiKSxUPTE7VDxBO1QrKylhKGcseCksUz9wLnNldChnKTooZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCkpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBDaWRSYW5nZShlKHAseCksZShnLHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDUzOmZvcihmLnJlYWRIZXgodixPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcE9uZShlKHYsTyksdCh5LHgpKSxJPTE7STxBO0krKylhKHYsTyksU3x8KGYucmVhZEhleE51bWJlcihtLE8pLHIodixtLE8pKSxhKHkseCksZi5yZWFkSGV4U2lnbmVkKG0seCkscih5LG0seCksYy5tYXBPbmUoZSh2LE8pLHQoeSx4KSk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNTg6Zm9yKGYucmVhZEhleChwLE8pLGYucmVhZEhleE51bWJlcihnLE8pLHIoZyxwLE8pLGYucmVhZEhleCh5LHgpLGMubWFwQmZSYW5nZShlKHAsTyksZShnLE8pLHQoeSx4KSksRT0xO0U8QTtFKyspYShnLE8pLFM/cC5zZXQoZyk6KGYucmVhZEhleE51bWJlcihwLE8pLHIocCxnLE8pKSxmLnJlYWRIZXhOdW1iZXIoZyxPKSxyKGcscCxPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcEJmUmFuZ2UoZShwLE8pLGUoZyxPKSx0KHkseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDY1OnRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAiLmNvbmNhdChrKSk7Y2FzZSA2NjpuLm5leHQ9OTticmVhaztjYXNlIDY4OmlmKCFkKXtuLm5leHQ9NzA7YnJlYWt9cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGwoZCkpO2Nhc2UgNzA6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksZnVuY3Rpb24oZSx0LHIpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLG59KCk7cmV0dXJuIHN9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gbChyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZihpPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkoaSwiZW5kYmZjaGFyIikpcmV0dXJuO3QoaSk7dmFyIG89ZShpKTt0KGk9bi5nZXRPYmooKSk7dmFyIHM9aTtyLm1hcE9uZShvLHMpfX1mdW5jdGlvbiBoKHIsaSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKG89PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGM9ZShvKTtpZihvPWkuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihvKXx8InN0cmluZyI9PXR5cGVvZiBvKXt2YXIgdT1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxjLHUpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciBsPVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJm8hPT1hLkVPRjspbC5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsYyxsKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gZChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkY2hhciIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7cihvPWkuZ2V0T2JqKCkpO3ZhciBjPW87bi5tYXBPbmUocyxjKX19ZnVuY3Rpb24gcChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkcmFuZ2UiKSlyZXR1cm47dChvKTt2YXIgcz1lKG8pO3Qobz1pLmdldE9iaigpKTt2YXIgYz1lKG8pO3Iobz1pLmdldE9iaigpKTt2YXIgdT1vO24ubWFwQ2lkUmFuZ2UocyxjLHUpfX1mdW5jdGlvbiBnKHQscil7Zm9yKDs7KXt2YXIgaT1yLmdldE9iaigpO2lmKGk9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7dmFyIG89ZShpKTtpZigic3RyaW5nIiE9dHlwZW9mKGk9ci5nZXRPYmooKSkpYnJlYWs7dmFyIHM9ZShpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLG8scyl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHYoZSx0KXt2YXIgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24geShlLHQpe3ZhciByPXQuZ2V0T2JqKCk7ciBpbnN0YW5jZW9mIGEuTmFtZSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHgoKXtyZXR1cm4oeD1mKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixpLG8pe3ZhciBjLGYsbTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGUucHJldj0xLChtPXIuZ2V0T2JqKCkpIT09YS5FT0Ype2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDc6aWYoIShtIGluc3RhbmNlb2YgYS5OYW1lKSl7ZS5uZXh0PTEyO2JyZWFrfSJXTW9kZSI9PT1tLm5hbWU/dih0LHIpOiJDTWFwTmFtZSI9PT1tLm5hbWUmJnkodCxyKSxjPW0sZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMTI6aWYoIShtIGluc3RhbmNlb2YgYS5DbWQpKXtlLm5leHQ9Mjk7YnJlYWt9ZS50MD1tLmNtZCxlLm5leHQ9ImVuZGNtYXAiPT09ZS50MD8xNjoidXNlY21hcCI9PT1lLnQwPzE3OiJiZWdpbmNvZGVzcGFjZXJhbmdlIj09PWUudDA/MTk6ImJlZ2luYmZjaGFyIj09PWUudDA/MjE6ImJlZ2luY2lkY2hhciI9PT1lLnQwPzIzOiJiZWdpbmJmcmFuZ2UiPT09ZS50MD8yNToiYmVnaW5jaWRyYW5nZSI9PT1lLnQwPzI3OjI5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMTc6cmV0dXJuIGMgaW5zdGFuY2VvZiBhLk5hbWUmJihmPWMubmFtZSksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAxOTpyZXR1cm4gZyh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjE6cmV0dXJuIGwodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDIzOnJldHVybiBkKHQsciksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAyNTpyZXR1cm4gaCh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjc6cmV0dXJuIHAodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDI5OmUubmV4dD0zNzticmVhaztjYXNlIDMxOmlmKGUucHJldj0zMSxlLnQxPWUuY2F0Y2goMSksIShlLnQxIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpe2UubmV4dD0zNTticmVha310aHJvdyBlLnQxO2Nhc2UgMzU6cmV0dXJuKDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZS50MSksZS5hYnJ1cHQoImNvbnRpbnVlIiwwKTtjYXNlIDM3OmUubmV4dD0wO2JyZWFrO2Nhc2UgMzk6aWYoIW8mJmYmJihvPWYpLCFvKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLE8odCxpLG8pKTtjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMSwzMV1dKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWYodSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGk7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsQyhuLHIpO2Nhc2UgMjppZih0LnVzZUNNYXA9ZS5zZW50LDA9PT10Lm51bUNvZGVzcGFjZVJhbmdlcyl7Zm9yKGE9dC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxpPTA7aTxhLmxlbmd0aDtpKyspdC5jb2Rlc3BhY2VSYW5nZXNbaV09YVtpXS5zbGljZSgpO3QubnVtQ29kZXNwYWNlUmFuZ2VzPXQudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIHQudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuY29udGFpbnMoZSl8fHQubWFwT25lKGUsdC51c2VDTWFwLmxvb2t1cChlKSl9KSksZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7cmV0dXJuKEY9Zih1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBhLGkscyxsLGY7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiSWRlbnRpdHktSCIhPT10KXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITEsMikpO2Nhc2UgNDppZigiSWRlbnRpdHktViIhPT10KXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITAsMikpO2Nhc2UgNjppZihtLmluY2x1ZGVzKHQpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK3QpO2Nhc2UgODppZihyKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIscih0KTtjYXNlIDEyOmlmKGE9ZS5zZW50LGk9YS5jTWFwRGF0YSxzPWEuY29tcHJlc3Npb25UeXBlLGw9bmV3IHcoITApLHMhPT1uLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuZXcgUykucHJvY2VzcyhpLGwsKGZ1bmN0aW9uKGUpe3JldHVybiBPKGwscixlKX0pKSk7Y2FzZSAxODppZihzIT09bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2UubmV4dD0yMTticmVha31yZXR1cm4gZj1uZXcgby5MZXhlcihuZXcgYy5TdHJlYW0oaSkpLGUuYWJydXB0KCJyZXR1cm4iLGIobCxmLHIsbnVsbCkpO2Nhc2UgMjE6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENNYXAgImNvbXByZXNzaW9uVHlwZSIgdmFsdWU6ICcuY29uY2F0KHMpKTtjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZih1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4scyxjO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1lLmVuY29kaW5nLG49ZS5mZXRjaEJ1aWx0SW5DTWFwLHM9ZS51c2VDTWFwLCEociBpbnN0YW5jZW9mIGEuTmFtZSkpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixDKHIubmFtZSxuKSk7Y2FzZSA3OmlmKCEociBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpe3QubmV4dD0xNDticmVha31yZXR1cm4gdC5uZXh0PTEwLGIobmV3IHcsbmV3IG8uTGV4ZXIociksbixzKTtjYXNlIDEwOmlmKCEoYz10LnNlbnQpLmlzSWRlbnRpdHlDTWFwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEMoYy5uYW1lLG4pKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIik7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfX19KCk7dC5DTWFwRmFjdG9yeT14fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpLG89cigxNDcpLHM9cigxNDkpLGM9cigxNTApLHU9cigxNTIpLGw9cigxNTMpLGY9cigxNTYpLGg9cigxNTgpLGQ9cigxNjApLHA9cigxMzkpLGc9cigxNjEpLHY9cigxNjIpO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHkoZSl9ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT15KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gdCYmYihlLnByb3RvdHlwZSx0KSxyJiZiKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5sZXhlcixuPXQueHJlZixhPXQuYWxsb3dTdHJlYW1zLGk9dm9pZCAwIT09YSYmYSxvPXQucmVjb3ZlcnlNb2RlLHM9dm9pZCAwIT09byYmbzttKHRoaXMsZSksdGhpcy5sZXhlcj1yLHRoaXMueHJlZj1uLHRoaXMuYWxsb3dTdHJlYW1zPWksdGhpcy5yZWNvdmVyeU1vZGU9cyx0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbWFnZUlkPTAsdGhpcy5yZWZpbGwoKX1yZXR1cm4gdyhlLFt7a2V5OiJyZWZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCksdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBhLkNtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQ/KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPW51bGwpOih0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpKX19LHtrZXk6InRyeVNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgYS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHI7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9cmV0dXJuIHRoaXMuc2hpZnQoKSxyO2Nhc2UiPDwiOmZvcih2YXIgbz1uZXcgYS5EaWN0KHRoaXMueHJlZik7ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09YS5FT0Y7KWlmKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGEuTmFtZSl7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfWVsc2UoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIG87dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShvLGUpOm86KHRoaXMuc2hpZnQoKSxvKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe3ZhciBjPWEuUmVmLmdldCh0LHRoaXMuYnVmMSk7cmV0dXJuIHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCksY31yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9fSx7a2V5OiJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbz10aGlzLmxleGVyLHM9ZS5wb3MsYz0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YyljPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YyljPTczPT09dD8yOjA7ZWxzZSBpZigzMj09PXR8fDEwPT09dHx8MTM9PT10KXtyPWUucG9zO2Zvcih2YXIgdT1lLnBlZWtCeXRlcygxMCksbD0wLGY9dS5sZW5ndGg7bDxmO2wrKylpZigoMCE9PSh0PXVbbF0pfHwwPT09dVtsKzFdKSYmMTAhPT10JiYxMyE9PXQmJih0PDMyfHx0PjEyNykpe2M9MDticmVha31pZigyIT09Yyljb250aW51ZTtpZihvLmtub3duQ29tbWFuZHMpe3ZhciBoPW8ucGVla09iaigpO2ggaW5zdGFuY2VvZiBhLkNtZCYmIW8ua25vd25Db21tYW5kc1toLmNtZF0mJihjPTApfWVsc2UoMCxuLndhcm4pKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7aWYoMj09PWMpYnJlYWt9ZWxzZSBjPTA7LTE9PT10JiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLHImJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLXIpKSkpO3ZhciBkPTQ7cmV0dXJuIGUuc2tpcCgtZCksdD1lLnBlZWtCeXRlKCksZS5za2lwKGQpLCgwLGkuaXNXaGl0ZVNwYWNlKSh0KXx8ZC0tLGUucG9zLWQtc319LHtrZXk6ImZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGE9ZS5wb3MsaT0hMTstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09dCl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OihyPWUuZ2V0VWludDE2KCkpPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfXZhciBvPWUucG9zLWE7cmV0dXJuLTE9PT10PygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtbyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLG8pfX0se2tleToiZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT10KXt2YXIgYT1lLnBvcztmb3IodD1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyllLnNraXAoKSx0PWUucGVla0J5dGUoKTtpZig2Mj09PXQpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPmEpe3ZhciBvPWUucGVla0J5dGVzKDIpO2lmKDY5PT09b1swXSYmNzM9PT1vWzFdKWJyZWFrfX12YXIgcz1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1zKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscyl9fSx7a2V5OiJmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTt2YXIgYT1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfX0se2tleToiaW5saW5lU3RyZWFtU2tpcEVJIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09cilyPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09cilyPTczPT09dD8yOjA7ZWxzZSBpZigyPT09cilicmVha319LHtrZXk6Im1ha2VJbmxpbmVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5sZXhlcixpPXIuc3RyZWFtLG89T2JqZWN0LmNyZWF0ZShudWxsKTshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO29bc109dGhpcy5nZXRPYmooZSl9LTEhPT1yLmJlZ2luSW5saW5lSW1hZ2VQb3MmJih0PWkucG9zLXIuYmVnaW5JbmxpbmVJbWFnZVBvcyk7dmFyIGMsdT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvLkZ8fG8uRmlsdGVyKTtpZih1IGluc3RhbmNlb2YgYS5OYW1lKWM9dS5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9dGhpcy54cmVmLmZldGNoSWZSZWYodVswXSk7bCBpbnN0YW5jZW9mIGEuTmFtZSYmKGM9bC5uYW1lKX12YXIgZixoLGQ9aS5wb3M7c3dpdGNoKGMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zj10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zj10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpmPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zj10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGY8MWUzJiZ0PjApe3ZhciBwPWkucG9zO2kucG9zPXIuYmVnaW5JbmxpbmVJbWFnZVBvcyxoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLG49MDtuPHItMTspdC5wdXNoKGVbbisrXTw8OHxlW24rK10pO3JldHVybiBuPHImJnQucHVzaChlW25dKSxyKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXModCtmKSksaS5wb3M9cDt2YXIgZz10aGlzLmltYWdlQ2FjaGVbaF07aWYodm9pZCAwIT09ZylyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZy5yZXNldCgpLGd9dmFyIHY9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2Zvcih2YXIgeSBpbiBvKXYuc2V0KHksb1t5XSk7dmFyIG09aS5tYWtlU3ViU3RyZWFtKGQsZix2KTtyZXR1cm4gZSYmKG09ZS5jcmVhdGVTdHJlYW0obSxmKSksKG09dGhpcy5maWx0ZXIobSx2LGYpKS5kaWN0PXYsdm9pZCAwIT09aCYmKG0uY2FjaGVLZXk9ImlubGluZV9pbWdfIi5jb25jYXQoKyt0aGlzLl9pbWFnZUlkKSx0aGlzLmltYWdlQ2FjaGVbaF09bSksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX19LHtrZXk6Il9maW5kU3RyZWFtTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIuc3RyZWFtO3IucG9zPWU7Zm9yKHZhciBuPXQubGVuZ3RoO3IucG9zPHIuZW5kOyl7dmFyIGE9ci5wZWVrQnl0ZXMoMjA0OCksaT1hLmxlbmd0aC1uO2lmKGk8PTApYnJlYWs7Zm9yKHZhciBvPTA7bzxpOyl7Zm9yKHZhciBzPTA7czxuJiZhW28rc109PT10W3NdOylzKys7aWYocz49bilyZXR1cm4gci5wb3MrPW8sci5wb3MtZTtvKyt9ci5wb3MrPWl9cmV0dXJuLTF9fSx7a2V5OiJtYWtlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIsbz1yLnN0cmVhbTtyLnNraXBUb05leHRMaW5lKCk7dmFyIHM9by5wb3MtMSxjPWUuZ2V0KCJMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGMpfHwoKDAsbi5pbmZvKSgnQmFkIGxlbmd0aCAiJy5jb25jYXQoYyYmYy50b1N0cmluZygpLCciIGluIHN0cmVhbS4nKSksYz0wKSxvLnBvcz1zK2Msci5uZXh0Q2hhcigpLHRoaXMudHJ5U2hpZnQoKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXt2YXIgdT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChzLHUpO2lmKGw8MCl7Zm9yKHZhciBmPTE7Zjw9MTtmKyspe3ZhciBoPXUubGVuZ3RoLWYsZD11LnNsaWNlKDAsaCkscD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHMsZCk7aWYocD49MCl7dmFyIGc9by5wZWVrQnl0ZXMoaCsxKVtoXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGcpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGQpLCciIHdoZW4gJykrInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIiksbD1wO2JyZWFrfX1pZihsPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz1sLHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCksbz1vLm1ha2VTdWJTdHJlYW0ocyxjLGUpLHQmJihvPXQuY3JlYXRlU3RyZWFtKG8sYykpLChvPXRoaXMuZmlsdGVyKG8sZSxjKSkuZGljdD1lLG99fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10LmdldCgiRiIsIkZpbHRlciIpLG89dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KG8pJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixvKTt2YXIgcz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBjPWksdT1vLGw9MCxmPWMubGVuZ3RoO2w8ZjsrK2wpe2lmKCEoKGk9dGhpcy54cmVmLmZldGNoSWZSZWYoY1tsXSkpaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdCYWQgZmlsdGVyIG5hbWUgIicuY29uY2F0KGksJyInKSk7bz1udWxsLEFycmF5LmlzQXJyYXkodSkmJmwgaW4gdSYmKG89dGhpcy54cmVmLmZldGNoSWZSZWYodVtsXSkpLGU9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLHMsbykscz1udWxsfXJldHVybiBlfX0se2tleToibWFrZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcC5OdWxsU3RyZWFtO3ZhciB5PXRoaXMueHJlZi5zdGF0czt0cnl7c3dpdGNoKHQpe2Nhc2UiRmwiOmNhc2UiRmxhdGVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkZMQVRFKSxhP25ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgdS5GbGF0ZVN0cmVhbShlLHIpLHIsYSk6bmV3IHUuRmxhdGVTdHJlYW0oZSxyKTtjYXNlIkxaVyI6Y2FzZSJMWldEZWNvZGUiOnkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuTFpXKTt2YXIgbT0xO3JldHVybiBhPyhhLmhhcygiRWFybHlDaGFuZ2UiKSYmKG09YS5nZXQoIkVhcmx5Q2hhbmdlIikpLG5ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgZC5MWldTdHJlYW0oZSxyLG0pLHIsYSkpOm5ldyBkLkxaV1N0cmVhbShlLHIsbSk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5EQ1QpLG5ldyBmLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIHkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuSlBYKSxuZXcgaC5KcHhTdHJlYW0oZSxyLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkE4NSksbmV3IG8uQXNjaWk4NVN0cmVhbShlLHIpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5BSFgpLG5ldyBzLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkNDRiksbmV3IGMuQ0NJVFRGYXhTdHJlYW0oZSxyLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5STFgpLG5ldyB2LlJ1bkxlbmd0aFN0cmVhbShlLHIpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkpCSUcpLG5ldyBsLkpiaWcyU3RyZWFtKGUscixhKX1yZXR1cm4oMCxuLndhcm4pKCdGaWx0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHN1cHBvcnRlZC4nKSksZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJy5jb25jYXQoZSwnIicpKSxuZXcgcC5OdWxsU3RyZWFtfX19XSksZX0oKTt0LlBhcnNlcj1rO3ZhciBTPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO20odGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXSx0aGlzLmtub3duQ29tbWFuZHM9cix0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTAsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXJldHVybiB3KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6InBlZWtDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxyPTAsYT0wO2lmKDQ1PT09ZT8oYT0tMSw0NT09PShlPXRoaXMubmV4dENoYXIoKSkmJihlPXRoaXMubmV4dENoYXIoKSkpOjQzPT09ZSYmKGE9MSxlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe3ZhciBvPSJJbnZhbGlkIG51bWJlcjogIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiIChjaGFyQ29kZSAiKS5jb25jYXQoZSwiKSIpO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXJldHVybigwLG4uaW5mbykoJ0xleGVyLmdldE51bWJlciAtICInLmNvbmNhdChvLCciLicpKSwwO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKG8pfWE9YXx8MTtmb3IodmFyIHM9ZS00OCxjPTAsdT0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7dmFyIGw9ZS00ODt0P2M9MTAqYytsOigwIT09ciYmKHIqPTEwKSxzPTEwKnMrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxuLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztpZig0Mz09PShlPXRoaXMucGVla0NoYXIoKSl8fDQ1PT09ZSl1PTQ1PT09ZT8tMToxLHRoaXMubmV4dENoYXIoKTtlbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH1yZXR1cm4gMCE9PXImJihzLz1yKSx0JiYocyo9TWF0aC5wb3coMTAsdSpjKSksYSpzfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEsdD0hMSxyPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7Zm9yKHZhciBhPXRoaXMubmV4dENoYXIoKTs7KXt2YXIgaT0hMTtzd2l0Y2goMHxhKXtjYXNlLTE6KDAsbi53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSA0MDorK2Usci5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTowPT0tLWU/KHRoaXMubmV4dENoYXIoKSx0PSEwKTpyLnB1c2goIikiKTticmVhaztjYXNlIDkyOnN3aXRjaChhPXRoaXMubmV4dENoYXIoKSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OnZhciBvPTE1JmE7aT0hMCwoYT10aGlzLm5leHRDaGFyKCkpPj00OCYmYTw9NTUmJihvPShvPDwzKSsoMTUmYSksKGE9dGhpcy5uZXh0Q2hhcigpKT49NDgmJmE8PTU1JiYoaT0hMSxvPShvPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfX0se2tleToiZ2V0TmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVNbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksU1tlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha312YXIgaT14KGUpO2lmKC0xIT09aSl7dD1lO3ZhciBvPXgoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09byl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSAiKSsiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSksU1tlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxvKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfX0se2tleToiX2hleFN0cmluZ1dhcm4iLHZhbHVlOmZ1bmN0aW9uKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9fSx7a2V5OiJnZXRIZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDt2YXIgdCxyLGE9dGhpcy5jdXJyZW50Q2hhcixpPSEwO2Zvcih0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Oyl7aWYoYTwwKXsoMCxuLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09YSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT1TW2FdKXtpZihpKXtpZigtMT09PSh0PXgoYSkpKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGEpLGE9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfX1lbHNle2lmKC0xPT09KHI9eChhKSkpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodDw8NHxyKSl9aT0haSxhPXRoaXMubmV4dENoYXIoKX1lbHNlIGE9dGhpcy5uZXh0Q2hhcigpfXJldHVybiBlLmpvaW4oIiIpfX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1TW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHQ9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PSh0PXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX12YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXt2YXIgaT10aGlzLnBlZWtDaGFyKCk7aWYoaT49MzImJmk8PTEyNylyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldChyKX1mb3IodmFyIG89dGhpcy5rbm93bkNvbW1hbmRzLHM9byYmdm9pZCAwIT09b1tyXTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhU1t0XTspe3ZhciBjPXIrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1vW2NdKWJyZWFrO2lmKDEyOD09PXIubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb21tYW5kIHRva2VuIHRvbyBsb25nOiAiLmNvbmNhdChyLmxlbmd0aCkpO3I9YyxzPW8mJnZvaWQgMCE9PW9bcl19cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9fSx7a2V5OiJwZWVrT2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5zdHJlYW0ucG9zLHI9dGhpcy5jdXJyZW50Q2hhcixhPXRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvczt0cnl7ZT10aGlzLmdldE9iaigpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgicGVla09iajogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLnN0cmVhbS5wb3M9dCx0aGlzLmN1cnJlbnRDaGFyPXIsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPWEsZX19LHtrZXk6InNraXBUb05leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19XSksZX0oKTt0LkxleGVyPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIobikmJihyP24+PTA6bj4wKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJy5jb25jYXQodCwnIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJykrImRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX12YXIgcixuLGk9bmV3IGsoe2xleGVyOm5ldyBPKGUpLHhyZWY6bnVsbH0pLG89aS5nZXRPYmooKSxzPWkuZ2V0T2JqKCksYz1pLmdldE9iaigpLHU9aS5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIobykmJk51bWJlci5pc0ludGVnZXIocykmJigwLGEuaXNDbWQpKGMsIm9iaiIpJiZ1IGluc3RhbmNlb2YgYS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCh1LCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6bixoaW50czpmdW5jdGlvbihlKXt2YXIgdCxyPWUuZ2V0KCJIIik7aWYoQXJyYXkuaXNBcnJheShyKSYmKDI9PT0odD1yLmxlbmd0aCl8fDQ9PT10KSl7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIGE9cltuXTtpZighKE51bWJlci5pc0ludGVnZXIoYSkmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChuLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0odSksb2JqZWN0TnVtYmVyRmlyc3Q6dCh1LCJPIiksZW5kRmlyc3Q6dCh1LCJFIiksbnVtUGFnZXM6dCh1LCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQodSwiVCIpLHBhZ2VGaXJzdDp1LmhhcygiUCIpP3QodSwiUCIsITApOjB9fX1dKSxlfSgpO3QuTGluZWFyaXphdGlvbj1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gcz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHMoZSx0KX1mdW5jdGlvbiBjKGUpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjKGUpfXZhciB1PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KGYsZSk7dmFyIHQscixhLHUsbD0oYT1mLHU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHUpe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxmKSx0JiYodCo9LjgpLChyPWwuY2FsbCh0aGlzLHQpKS5zdHI9ZSxyLmRpY3Q9ZS5kaWN0LHIuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSkscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xIT09dCYmMTI2IT09dCl7dmFyIHIsbixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDEyMj09PXQpe2ZvcihyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCksbj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXt2YXIgbz10aGlzLmlucHV0O2ZvcihvWzBdPXQsbj0xO248NTsrK24pe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihvW25dPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKHI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1uLTEsbjw1KXtmb3IoO248NTsrK24pb1tuXT0xMTc7dGhpcy5lb2Y9ITB9dmFyIHM9MDtmb3Iobj0wO248NTsrK24pcz04NSpzKyhvW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXJbYStuXT0yNTUmcyxzPj49OH19ZWxzZSB0aGlzLmVvZj0hMH19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZn0oYS5EZWNvZGVTdHJlYW0pO3QuQXNjaWk4NVN0cmVhbT11fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTM5KTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9bmV3IFVpbnQ4QXJyYXkoMCkseT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO2lmKHUodGhpcyxyKSwobj10LmNhbGwodGhpcykpLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCxuLnBvcz0wLG4uYnVmZmVyTGVuZ3RoPTAsbi5lb2Y9ITEsbi5idWZmZXI9dixuLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO24ubWluQnVmZmVyTGVuZ3RoPGU7KW4ubWluQnVmZmVyTGVuZ3RoKj0yO3JldHVybiBufXJldHVybiBmKHIsW3trZXk6ImlzRW1wdHkiLGdldDpmdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtyPGU7KXIqPTI7dmFyIG49bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIG4uc2V0KHQpLHRoaXMuYnVmZmVyPW59fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKHIrZSksdD1yK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBuPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+biYmKHQ9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz10LHRoaXMuYnVmZmVyLnN1YmFycmF5KHIsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz0wfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2UgZm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19XSkscn0oYS5CYXNlU3RyZWFtKTt0LkRlY29kZVN0cmVhbT15O3ZhciBtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt1KHRoaXMscik7dmFyIGkscz0wLGM9byhlKTt0cnl7Zm9yKGMucygpOyEoaT1jLm4oKSkuZG9uZTspe3ZhciBsPWkudmFsdWU7cys9bCBpbnN0YW5jZW9mIHk/bC5fcmF3TWluQnVmZmVyTGVuZ3RoOmwubGVuZ3RofX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm4obj10LmNhbGwodGhpcyxzKSkuc3RyZWFtcz1lLG4uX29uRXJyb3I9YSxufXJldHVybiBmKHIsW3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdCxyPWUuc2hpZnQoKTt0cnl7dD1yLmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcilyZXR1cm4gdm9pZCB0aGlzLl9vbkVycm9yKGUsci5kaWN0JiZyLmRpY3Qub2JqSWQpO3Rocm93IGV9dmFyIG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9ZWxzZSB0aGlzLmVvZj0hMH19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj1bXSxuPW8odGhpcy5zdHJlYW1zKTt0cnl7Zm9yKG4ucygpOyEoZT1uLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWUuZ2V0QmFzZVN0cmVhbXMoKTthJiZyLnB1c2guYXBwbHkocixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBjKGUpfSh0PWEpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHQpfHxzKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfX1dKSxyfSh5KTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1tfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxzKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgYz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LHIsYyx1LGw9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9cyhjKTtpZih1KXt2YXIgcj1zKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBmKGUsdCl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZiksdCYmKHQqPS41KSwocj1sLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyLmZpcnN0RGlnaXQ9LTEscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7dmFyIHQscj1lLmxlbmd0aCsxPj4xLG49dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrciksaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZmlyc3REaWdpdCxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IG99fX19KGUpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZSx1PXZvaWQgMDtpZihjPj00OCYmYzw9NTcpdT0xNSZjO2Vsc2V7aWYoIShjPj02NSYmYzw9NzB8fGM+PTk3JiZjPD0xMDIpKXtpZig2Mj09PWMpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXU9OSsoMTUmYyl9bzwwP289dToobltpKytdPW88PDR8dSxvPS0xKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9bz49MCYmdGhpcy5lb2YmJihuW2krK109bzw8NCxvPS0xKSx0aGlzLmZpcnN0RGlnaXQ9byx0aGlzLmJ1ZmZlckxlbmd0aD1pfWVsc2UgdGhpcy5lb2Y9ITB9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGZ9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuQXNjaWlIZXhTdHJlYW09Y30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTUxKSxpPXIoMTQ4KSxvPXIoMTM0KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9dmFyIGw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oaCxlKTt2YXIgdCxyLGksbCxmPShpPWgsbD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PXUoaSk7aWYobCl7dmFyIHI9dSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gaChlLHQscil7dmFyIG47IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsaCksKG49Zi5jYWxsKHRoaXMsdCkpLnN0cj1lLG4uZGljdD1lLmRpY3QsciBpbnN0YW5jZW9mIG8uRGljdHx8KHI9by5EaWN0LmVtcHR5KTt2YXIgaT17bmV4dDpmdW5jdGlvbigpe3JldHVybiBlLmdldEJ5dGUoKX19O3JldHVybiBuLmNjaXR0RmF4RGVjb2Rlcj1uZXcgYS5DQ0lUVEZheERlY29kZXIoaSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSksbn1yZXR1cm4gdD1oLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDshdGhpcy5lb2Y7KXt2YXIgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpLHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxofShpLkRlY29kZVN0cmVhbSk7dC5DQ0lUVEZheFN0cmVhbT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGEoZSl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBvPS0xLHM9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sYz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHU9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGw9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sZj1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwhdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPXQsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1yLkt8fDAsdGhpcy5lb2xpbmU9ci5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPXIuRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPXIuQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9ci5Sb3dzfHwwO3ZhciBuLGE9ci5FbmRPZkJsb2NrO2ZvcihudWxsPT1hJiYoYT0hMCksdGhpcy5lb2Jsb2NrPWEsdGhpcy5ibGFjaz1yLkJsYWNrSXMxfHwhMSx0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKSx0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKSx0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zLHRoaXMuY29kaW5nUG9zPTAsdGhpcy5yb3c9MCx0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwLHRoaXMuaW5wdXRCaXRzPTAsdGhpcy5pbnB1dEJ1Zj0wLHRoaXMub3V0cHV0Qml0cz0wLHRoaXMucm93c0RvbmU9ITE7MD09PShuPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PW4mJnRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJyZWFkTmV4dENoYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dmFyIGUsdCxyLGEsaSxzPXRoaXMucmVmTGluZSxjPXRoaXMuY29kaW5nTGluZSx1PXRoaXMuY29sdW1ucztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXtpZih0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApLHRoaXMuZW9mKXJldHVybi0xO3ZhciBsLGYsaDtpZih0aGlzLmVycj0hMSx0aGlzLm5leHRMaW5lMkQpe2ZvcihhPTA7Y1thXTx1OysrYSlzW2FdPWNbYV07Zm9yKHNbYSsrXT11LHNbYV09dSxjWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxlPTAsdD0wO2NbdGhpcy5jb2RpbmdQb3NdPHU7KXN3aXRjaChsPXRoaXMuX2dldFR3b0RpbUNvZGUoKSl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhzW2UrMV0sdCksc1tlKzFdPHUmJihlKz0yKTticmVhaztjYXNlIDE6aWYobD1mPTAsdCl7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97Zis9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tmKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX1mb3IodGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2wsdCksY1t0aGlzLmNvZGluZ1Bvc108dSYmdGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2YsMV50KTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgNzppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSszLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoKytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA1OmlmKHRoaXMuX2FkZFBpeGVscyhzW2VdKzIsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcigrK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDM6aWYodGhpcy5fYWRkUGl4ZWxzKHNbZV0rMSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgMjppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgODppZih0aGlzLl9hZGRQaXhlbHNOZWcoc1tlXS0zLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoZT4wPy0tZTorK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDY6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKHNbZV0tMix0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKGU+MD8tLWU6KytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA0OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhzW2VdLTEsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcihlPjA/LS1lOisrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2Ugbzp0aGlzLl9hZGRQaXhlbHModSwwKSx0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLG4uaW5mbykoImJhZCAyZCBjb2RlIiksdGhpcy5fYWRkUGl4ZWxzKHUsMCksdGhpcy5lcnI9ITB9fWVsc2UgZm9yKGNbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLHQ9MDtjW3RoaXMuY29kaW5nUG9zXTx1Oyl7aWYobD0wLHQpZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZWxzZSBkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTt0aGlzLl9hZGRQaXhlbHMoY1t0aGlzLmNvZGluZ1Bvc10rbCx0KSx0Xj0xfXZhciBkPSExO2lmKHRoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KSx0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe2lmKGw9dGhpcy5fbG9va0JpdHMoMTIpLHRoaXMuZW9saW5lKWZvcig7bCE9PW8mJjEhPT1sOyl0aGlzLl9lYXRCaXRzKDEpLGw9dGhpcy5fbG9va0JpdHMoMTIpO2Vsc2UgZm9yKDswPT09bDspdGhpcy5fZWF0Qml0cygxKSxsPXRoaXMuX2xvb2tCaXRzKDEyKTsxPT09bD8odGhpcy5fZWF0Qml0cygxMiksZD0hMCk6bD09PW8mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZkJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShsPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0obD10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbCksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKChsPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiB0aGlzLmVvZj0hMCwtMTtpZihsPj4xPT0xKWJyZWFrO3RoaXMuX2VhdEJpdHMoMSl9dGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fZWF0Qml0cygxKSx0aGlzLm5leHRMaW5lMkQ9ISgxJmwpKX1jWzBdPjA/dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpaT0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZjW3RoaXMuY29kaW5nUG9zXTx1JiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9Y1t0aGlzLmNvZGluZ1Bvc10tY1t0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtyPTgsaT0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLGNbdGhpcy5jb2RpbmdQb3NdPHU/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3NdLWNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfX0se2tleToiX2FkZFBpeGVscyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9fSx7a2V5OiJfYWRkUGl4ZWxzTmVnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX19LHtrZXk6Il9maW5kVGFibGVDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBzPXRoaXMuX2xvb2tCaXRzKGkpO2lmKHM9PT1vKXJldHVyblshMCwxLCExXTtpZihpPHQmJihzPDw9dC1pKSwhYXx8cz49YSl7dmFyIGM9cltzLWFdO2lmKGNbMF09PT1pKXJldHVybiB0aGlzLl9lYXRCaXRzKGkpLFshMCxjWzFdLCEwXX19cmV0dXJuWyExLDAsITFdfX0se2tleToiX2dldFR3b0RpbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7aWYodD10aGlzLl9sb29rQml0cyg3KSwoZT1zW3RdKSYmZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxzKTtpZihyWzBdJiZyWzJdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKSxvfX0se2tleToiX2dldFdoaXRlQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXtpZigodD10aGlzLl9sb29rQml0cygxMikpPT09bylyZXR1cm4gMTtpZigoZT10Pj41PT0wP2NbdF06dVt0Pj4zXSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyhlWzBdKSxlWzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksdSk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLGMpKVswXSlyZXR1cm4gclsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX19LHtrZXk6Il9nZXRCbGFja0NvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKChlPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiAxO2lmKCh0PWU+Pjc9PTA/bFtlXTplPj45PT0wJiZlPj43IT0wP2ZbKGU+PjEpLTY0XTpoW2U+PjddKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKHRbMF0pLHRbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihyWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixmLDY0KSlbMF0pcmV0dXJuIHJbMV07aWYoKHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxsKSlbMF0pcmV0dXJuIHJbMV19cmV0dXJuKDAsbi5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKSx0aGlzLl9lYXRCaXRzKDEpLDF9fSx7a2V5OiJfbG9va0JpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bzp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfX0se2tleToiX2VhdEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0NJVFRGYXhEZWNvZGVyPWR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX12YXIgdT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGw9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksZj1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGg9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGQ9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XSxwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHYsZSk7dmFyIHQscixhLHAsZz0oYT12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHApe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoZSx0KXt2YXIgcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwocj1nLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdDt2YXIgbj1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09bnx8LTE9PT1hKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtpZig4IT0oMTUmbikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQobiwiLCAiKS5jb25jYXQoYSkpO2lmKCgobjw8OCkrYSklMzEhPTApdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChuLCIsICIpLmNvbmNhdChhKSk7aWYoMzImYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtyZXR1cm4gci5jb2RlU2l6ZT0wLHIuY29kZUJ1Zj0wLHJ9cmV0dXJuIHQ9diwocj1be2tleToiZ2V0Qml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5zdHIsbj10aGlzLmNvZGVTaXplLGE9dGhpcy5jb2RlQnVmO248ZTspe2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7YXw9dDw8bixuKz04fXJldHVybiB0PWEmKDE8PGUpLTEsdGhpcy5jb2RlQnVmPWE+PmUsdGhpcy5jb2RlU2l6ZT1uLT1lLHR9fSx7a2V5OiJnZXRDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLnN0cixuPWVbMF0sYT1lWzFdLG89dGhpcy5jb2RlU2l6ZSxzPXRoaXMuY29kZUJ1ZjtvPGEmJi0xIT09KHQ9ci5nZXRCeXRlKCkpOylzfD10PDxvLG8rPTg7dmFyIGM9bltzJigxPDxhKS0xXSx1PWM+PjE2LGw9NjU1MzUmYztpZih1PDF8fG88dSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybiB0aGlzLmNvZGVCdWY9cz4+dSx0aGlzLmNvZGVTaXplPW8tdSxsfX0se2tleToiZ2VuZXJhdGVIdWZmbWFuVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxjPTI7bzw9bjsrK28sczw8PTEsYzw8PTEpZm9yKHZhciB1PTA7dTxyOysrdSlpZihlW3VdPT09byl7dmFyIGw9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KWw9bDw8MXwxJmYsZj4+PTE7Zm9yKHQ9bDt0PGE7dCs9YylpW3RdPW88PDE2fHU7KytzfXJldHVybltpLG5dfX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnN0cixuPXRoaXMuZ2V0Qml0cygzKTtpZigxJm4mJih0aGlzLmVvZj0hMCksMCE9KG4+Pj0xKSl7dmFyIGEsbztpZigxPT09bilhPWgsbz1kO2Vsc2V7aWYoMiE9PW4pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgcyxjPXRoaXMuZ2V0Qml0cyg1KSsyNTcscD10aGlzLmdldEJpdHMoNSkrMSxnPXRoaXMuZ2V0Qml0cyg0KSs0LHY9bmV3IFVpbnQ4QXJyYXkodS5sZW5ndGgpO2ZvcihzPTA7czxnOysrcyl2W3Vbc11dPXRoaXMuZ2V0Qml0cygzKTt2YXIgeT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHYpO3Q9MCxzPTA7Zm9yKHZhciBtLGIsdyxrPWMrcCxTPW5ldyBVaW50OEFycmF5KGspO3M8azspe3ZhciB4PXRoaXMuZ2V0Q29kZSh5KTtpZigxNj09PXgpbT0yLGI9Myx3PXQ7ZWxzZSBpZigxNz09PXgpbT0zLGI9Myx3PXQ9MDtlbHNle2lmKDE4IT09eCl7U1tzKytdPXQ9eDtjb250aW51ZX1tPTcsYj0xMSx3PXQ9MH1mb3IodmFyIE89dGhpcy5nZXRCaXRzKG0pK2I7Ty0tID4wOylTW3MrK109d31hPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheSgwLGMpKSxvPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheShjLGspKX1mb3IodmFyIEE9KGU9dGhpcy5idWZmZXIpP2UubGVuZ3RoOjAsQz10aGlzLmJ1ZmZlckxlbmd0aDs7KXt2YXIgRj10aGlzLmdldENvZGUoYSk7aWYoRjwyNTYpQysxPj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDKzEpKS5sZW5ndGgpLGVbQysrXT1GO2Vsc2V7aWYoMjU2PT09RilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1DKTt2YXIgUD0oRj1sW0YtPTI1N10pPj4xNjtQPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSksdD0oNjU1MzUmRikrUCxGPXRoaXMuZ2V0Q29kZShvKSwoUD0oRj1mW0ZdKT4+MTYpPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSk7dmFyIFQ9KDY1NTM1JkYpK1A7Qyt0Pj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDK3QpKS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8dDsrK0ksKytDKWVbQ109ZVtDLVRdfX19ZWxzZXt2YXIgRTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgaj1FO2lmKC0xPT09KEU9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKGp8PUU8PDgsLTE9PT0oRT1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIE09RTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZigoTXw9RTw8OCkhPSg2NTUzNSZ+aikmJigwIT09anx8MCE9PU0pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MCx0aGlzLmNvZGVTaXplPTA7dmFyIF89dGhpcy5idWZmZXJMZW5ndGgsTD1fK2o7aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihMKSx0aGlzLmJ1ZmZlckxlbmd0aD1MLDA9PT1qKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7dmFyIFI9ci5nZXRCeXRlcyhqKTtlLnNldChSLF8pLFIubGVuZ3RoPGomJih0aGlzLmVvZj0hMCl9fX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdn0oYS5EZWNvZGVTdHJlYW0pO3QuRmxhdGVTdHJlYW09cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTQ4KSxvPXIoMTM0KSxzPXIoMTU0KSxjPXIoMik7ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxmKGUpfXZhciBoPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9KHAsZSk7dmFyIHQscixpLGgsZD0oaT1wLGg9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1mKGkpO2lmKGgpe3ZhciByPWYodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSx0LHIpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHApLChuPWQuY2FsbCh0aGlzLHQpKS5zdHJlYW09ZSxuLmRpY3Q9ZS5kaWN0LG4ubWF5YmVMZW5ndGg9dCxuLnBhcmFtcz1yLG59cmV0dXJuIHQ9cCwocj1be2tleToiYnl0ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfX0se2tleToiZW5zdXJlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgcy5KYmlnMkltYWdlLHQ9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYociBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSl7dmFyIG49ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTpuLHN0YXJ0OjAsZW5kOm4ubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBpPWUucGFyc2VDaHVua3ModCksYz1pLmxlbmd0aCx1PTA7dTxjO3UrKylpW3VdXj0yNTU7dGhpcy5idWZmZXI9aSx0aGlzLmJ1ZmZlckxlbmd0aD1jLHRoaXMuZW9mPSEwfX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscH0oaS5EZWNvZGVTdHJlYW0pO3QuSmJpZzJTdHJlYW09aH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTU1KSxzPXIoMTUxKTtmdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1sKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBsKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZyhlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHYoZSl9dmFyIHk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmcoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9dih0KTtpZihyKXt2YXIgaT12KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBwKHRoaXMsaSksYS5jYWxsKHRoaXMsIkpCSUcyIGVycm9yOiAiLmNvbmNhdChlKSwiSmJpZzJFcnJvciIpfXJldHVybiBkKGkpfShhLkJhc2VFeGNlcHRpb24pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImdldENvbnRleHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7cCh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXJldHVybiBkKGUsW3trZXk6ImRlY29kZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9fSx7a2V5OiJjb250ZXh0Q2FjaGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBtO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1dKSxlfSgpO2Z1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWUuZ2V0Q29udGV4dHModCksYT0xO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsaT0wO2k8ZTtpKyspe3ZhciBvPXIucmVhZEJpdChuLGEpO2E9YTwyNTY/YTw8MXxvOjUxMSYoYTw8MXxvKXwyNTYsdD10PDwxfG99cmV0dXJuIHQ+Pj4wfXZhciBvPWkoMSkscz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO3JldHVybiAwPT09bz9zOnM+MD8tczpudWxsfWZ1bmN0aW9uIGsoZSx0LHIpe2Zvcih2YXIgbj1lLmdldENvbnRleHRzKCJJQUlEIiksYT0xLGk9MDtpPHI7aSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX12YXIgUz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLHg9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLE89W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBPVszOTcxNywxOTQxLDIyOSw0MDVdLEM9WzMyLDhdO2Z1bmN0aW9uIEYoZSx0LHIsbixhLGksbyxzKXtpZihlKXJldHVybiBHKG5ldyBYKHMuZGF0YSxzLnN0YXJ0LHMuZW5kKSx0LHIsITEpO2lmKDA9PT1uJiYhaSYmIWEmJjQ9PT1vLmxlbmd0aCYmMz09PW9bMF0ueCYmLTE9PT1vWzBdLnkmJi0zPT09b1sxXS54JiYtMT09PW9bMV0ueSYmMj09PW9bMl0ueCYmLTI9PT1vWzJdLnkmJi0yPT09b1szXS54JiYtMj09PW9bM10ueSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsYyx1LGw9ci5kZWNvZGVyLGY9ci5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaD1bXTtmb3IoYT0wO2E8dDthKyspZm9yKHM9aFthXT1uZXcgVWludDhBcnJheShlKSxjPWE8MT9zOmhbYS0xXSxuPSh1PWE8Mj9zOmhbYS0yXSlbMF08PDEzfHVbMV08PDEyfHVbMl08PDExfGNbMF08PDd8Y1sxXTw8NnxjWzJdPDw1fGNbM108PDQsaT0wO2k8ZTtpKyspc1tpXT1vPWwucmVhZEJpdChmLG4pLG49KDMxNzM1Jm4pPDwxfChpKzM8ZT91W2krM108PDExOjApfChpKzQ8ZT9jW2krNF08PDQ6MCl8bztyZXR1cm4gaH0odCxyLHMpO3ZhciBjPSEhaSx1PXhbbl0uY29uY2F0KG8pO3Uuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTt2YXIgbCxmLGg9dS5sZW5ndGgsZD1uZXcgSW50OEFycmF5KGgpLHA9bmV3IEludDhBcnJheShoKSxnPVtdLHY9MCx5PTAsbT0wLGI9MDtmb3IoZj0wO2Y8aDtmKyspZFtmXT11W2ZdLngscFtmXT11W2ZdLnkseT1NYXRoLm1pbih5LHVbZl0ueCksbT1NYXRoLm1heChtLHVbZl0ueCksYj1NYXRoLm1pbihiLHVbZl0ueSksZjxoLTEmJnVbZl0ueT09PXVbZisxXS55JiZ1W2ZdLng9PT11W2YrMV0ueC0xP3Z8PTE8PGgtMS1mOmcucHVzaChmKTt2YXIgdz1nLmxlbmd0aCxrPW5ldyBJbnQ4QXJyYXkodyksUz1uZXcgSW50OEFycmF5KHcpLE89bmV3IFVpbnQxNkFycmF5KHcpO2ZvcihsPTA7bDx3O2wrKylmPWdbbF0sa1tsXT11W2ZdLngsU1tsXT11W2ZdLnksT1tsXT0xPDxoLTEtZjtmb3IodmFyIEMsRixQLFQsSSxFPS15LGo9LWIsTT10LW0sXz1BW25dLEw9bmV3IFVpbnQ4QXJyYXkodCksUj1bXSxOPXMuZGVjb2RlcixEPXMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLEI9MCxVPTAsJD0wOyQ8cjskKyspaWYoYSYmKEJePU4ucmVhZEJpdChELF8pKSlSLnB1c2goTCk7ZWxzZSBmb3IoTD1uZXcgVWludDhBcnJheShMKSxSLnB1c2goTCksQz0wO0M8dDtDKyspaWYoYyYmaVskXVtDXSlMW0NdPTA7ZWxzZXtpZihDPj1FJiZDPE0mJiQ+PWopZm9yKFU9VTw8MSZ2LGY9MDtmPHc7ZisrKUY9JCtTW2ZdLFA9QytrW2ZdLChUPVJbRl1bUF0pJiYoVXw9VD1PW2ZdKTtlbHNlIGZvcihVPTAsST1oLTEsZj0wO2Y8aDtmKyssSS0tKShQPUMrZFtmXSk+PTAmJlA8dCYmKEY9JCtwW2ZdKT49MCYmKFQ9UltGXVtQXSkmJihVfD1UPDxJKTt2YXIgSD1OLnJlYWRCaXQoRCxVKTtMW0NdPUh9cmV0dXJuIFJ9ZnVuY3Rpb24gUChlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9T1tyXS5jb2Rpbmc7MD09PXImJih1PXUuY29uY2F0KFtzWzBdXSkpO3ZhciBsLGY9dS5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShmKSxkPW5ldyBJbnQzMkFycmF5KGYpO2ZvcihsPTA7bDxmO2wrKyloW2xdPXVbbF0ueCxkW2xdPXVbbF0ueTt2YXIgcD1PW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW3NbMV1dKSk7dmFyIGc9cC5sZW5ndGgsdj1uZXcgSW50MzJBcnJheShnKSxtPW5ldyBJbnQzMkFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKyl2W2xdPXBbbF0ueCxtW2xdPXBbbF0ueTtmb3IodmFyIGI9blswXS5sZW5ndGgsdz1uLmxlbmd0aCxrPUNbcl0sUz1bXSx4PWMuZGVjb2RlcixBPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpLEY9MCxQPTA7UDx0O1ArKyl7aWYobyYmKEZePXgucmVhZEJpdChBLGspKSl0aHJvdyBuZXcgeSgicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZSk7Uy5wdXNoKFQpO2Zvcih2YXIgST0wO0k8ZTtJKyspe3ZhciBFPXZvaWQgMCxqPXZvaWQgMCxNPTA7Zm9yKGw9MDtsPGY7bCsrKUU9UCtkW2xdLGo9SStoW2xdLEU8MHx8ajwwfHxqPj1lP008PD0xOk09TTw8MXxTW0VdW2pdO2ZvcihsPTA7bDxnO2wrKylFPVArbVtsXS1pLGo9SSt2W2xdLWEsRTwwfHxFPj13fHxqPDB8fGo+PWI/TTw8PTE6TT1NPDwxfG5bRV1bal07dmFyIF89eC5yZWFkQml0KEEsTSk7VFtJXT1ffX1yZXR1cm4gU31mdW5jdGlvbiBUKGUsdCxyLG4sYSxpLG8scyxjLHUsbCxmLGgsZCxwLGcsdixtLGIpe2lmKGUmJnQpdGhyb3cgbmV3IHkoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgUyx4LE89W107Zm9yKFM9MDtTPG47UysrKXtpZih4PW5ldyBVaW50OEFycmF5KHIpLGEpZm9yKHZhciBBPTA7QTxyO0ErKyl4W0FdPWE7Ty5wdXNoKHgpfXZhciBDPXYuZGVjb2RlcixGPXYuY29udGV4dENhY2hlLFQ9ZT8tZC50YWJsZURlbHRhVC5kZWNvZGUoYik6LXcoRiwiSUFEVCIsQyksST0wO2ZvcihTPTA7UzxpOyl7VCs9ZT9kLnRhYmxlRGVsdGFULmRlY29kZShiKTp3KEYsIklBRFQiLEMpO2Zvcih2YXIgRT1JKz1lP2QudGFibGVGaXJzdFMuZGVjb2RlKGIpOncoRiwiSUFGUyIsQyk7Oyl7dmFyIGo9MDtvPjEmJihqPWU/Yi5yZWFkQml0cyhtKTp3KEYsIklBSVQiLEMpKTt2YXIgTT1vKlQraixfPWU/ZC5zeW1ib2xJRFRhYmxlLmRlY29kZShiKTprKEYsQyxjKSxMPXQmJihlP2IucmVhZEJpdCgpOncoRiwiSUFSSSIsQykpLFI9c1tfXSxOPVJbMF0ubGVuZ3RoLEQ9Ui5sZW5ndGg7aWYoTCl7dmFyIEI9dyhGLCJJQVJEVyIsQyksVT13KEYsIklBUkRIIixDKTtSPVAoTis9QixEKz1VLHAsUiwoQj4+MSkrdyhGLCJJQVJEWCIsQyksKFU+PjEpK3coRiwiSUFSRFkiLEMpLCExLGcsdil9dmFyICQ9TS0oMSZmPzA6RC0xKSxYPUUtKDImZj9OLTE6MCksSD12b2lkIDAscT12b2lkIDAsRz12b2lkIDA7aWYodSl7Zm9yKEg9MDtIPEQ7SCsrKWlmKHg9T1tYK0hdKXtHPVJbSF07dmFyIHo9TWF0aC5taW4oci0kLE4pO3N3aXRjaChoKXtjYXNlIDA6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXXw9R1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXV49R1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJvcGVyYXRvciAiLmNvbmNhdChoLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19RSs9RC0xfWVsc2V7Zm9yKHE9MDtxPEQ7cSsrKWlmKHg9T1skK3FdKXN3aXRjaChHPVJbcV0saCl7Y2FzZSAwOmZvcihIPTA7SDxOO0grKyl4W1grSF18PUdbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxOO0grKyl4W1grSF1ePUdbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQoaCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9RSs9Ti0xfVMrKzt2YXIgVz1lP2QudGFibGVEZWx0YVMuZGVjb2RlKGIpOncoRiwiSUFEUyIsQyk7aWYobnVsbD09PVcpYnJlYWs7RSs9VytsfX1yZXR1cm4gT31mdW5jdGlvbiBJKGUsdCl7dmFyIHI9e307ci5udW1iZXI9KDAsaS5yZWFkVWludDMyKShlLHQpO3ZhciBuPWVbdCs0XSxhPTYzJm47aWYoIVNbYV0pdGhyb3cgbmV3IHkoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2EpO3IudHlwZT1hLHIudHlwZU5hbWU9U1thXSxyLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZuKTt2YXIgbz0hISg2NCZuKSxzPWVbdCs1XSxjPXM+PjUmNyx1PVszMSZzXSxsPXQrNjtpZig3PT09cyl7Yz01MzY4NzA5MTEmKDAsaS5yZWFkVWludDMyKShlLGwtMSksbCs9Mzt2YXIgZj1jKzc+PjM7Zm9yKHVbMF09ZVtsKytdOy0tZj4wOyl1LnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgeSgiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz11O3ZhciBoPTQ7ci5udW1iZXI8PTI1Nj9oPTE6ci5udW1iZXI8PTY1NTM2JiYoaD0yKTt2YXIgZCxwLGc9W107Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgdjt2PTE9PT1oP2VbbF06Mj09PWg/KDAsaS5yZWFkVWludDE2KShlLGwpOigwLGkucmVhZFVpbnQzMikoZSxsKSxnLnB1c2godiksbCs9aH1pZihyLnJlZmVycmVkVG89ZyxvPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxpLnJlYWRVaW50MzIpKGUsbCksbCs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVtsKytdLHIubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSxsKSxsKz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1hKXRocm93IG5ldyB5KCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt2YXIgbT1qKGUsbCksYj0hISgxJmVbbCtNXSksdz1uZXcgVWludDhBcnJheSg2KTtmb3IoYnx8KHdbMF09MjU1LHdbMV09MTcyKSx3WzJdPW0uaGVpZ2h0Pj4+MjQmMjU1LHdbM109bS5oZWlnaHQ+PjE2JjI1NSx3WzRdPW0uaGVpZ2h0Pj44JjI1NSx3WzVdPTI1NSZtLmhlaWdodCxkPWwscD1lLmxlbmd0aDtkPHA7ZCsrKXtmb3IodmFyIGs9MDtrPDYmJndba109PT1lW2Qra107KWsrKztpZig2PT09ayl7ci5sZW5ndGg9ZCs2O2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpdGhyb3cgbmV3IHkoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX1yZXR1cm4gci5oZWFkZXJFbmQ9bCxyfWZ1bmN0aW9uIEUoZSx0LHIsbil7Zm9yKHZhciBhPVtdLGk9cjtpPG47KXt2YXIgbz1JKHQsaSk7aT1vLmhlYWRlckVuZDt2YXIgcz17aGVhZGVyOm8sZGF0YTp0fTtpZihlLnJhbmRvbUFjY2Vzc3x8KHMuc3RhcnQ9aSxpKz1vLmxlbmd0aCxzLmVuZD1pKSxhLnB1c2gocyksNTE9PT1vLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKHZhciBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKWFbY10uc3RhcnQ9aSxpKz1hW2NdLmhlYWRlci5sZW5ndGgsYVtjXS5lbmQ9aTtyZXR1cm4gYX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJue3dpZHRoOigwLGkucmVhZFVpbnQzMikoZSx0KSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShlLHQrNCkseDooMCxpLnJlYWRVaW50MzIpKGUsdCs4KSx5OigwLGkucmVhZFVpbnQzMikoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19dmFyIE09MTc7ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sYSxvLHM9ZS5oZWFkZXIsYz1lLmRhdGEsdT1lLmVuZCxsPWUuc3RhcnQ7c3dpdGNoKHMudHlwZSl7Y2FzZSAwOnZhciBmPXt9LGg9KDAsaS5yZWFkVWludDE2KShjLGwpO2lmKGYuaHVmZm1hbj0hISgxJmgpLGYucmVmaW5lbWVudD0hISgyJmgpLGYuaHVmZm1hbkRIU2VsZWN0b3I9aD4+MiYzLGYuaHVmZm1hbkRXU2VsZWN0b3I9aD4+NCYzLGYuYml0bWFwU2l6ZVNlbGVjdG9yPWg+PjYmMSxmLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9aD4+NyYxLGYuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JmgpLGYuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZoKSxmLnRlbXBsYXRlPWg+PjEwJjMsZi5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTImMSxsKz0yLCFmLmh1ZmZtYW4pe2ZvcihvPTA9PT1mLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLmF0PW59aWYoZi5yZWZpbmVtZW50JiYhZi5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihuPVtdLGE9MDthPDI7YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLnJlZmluZW1lbnRBdD1ufWYubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsZi5udW1iZXJPZk5ld1N5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bZixzLm51bWJlcixzLnJlZmVycmVkVG8sYyxsLHVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dmFyIGQ9e307ZC5pbmZvPWooYyxsKSxsKz1NO3ZhciBwPSgwLGkucmVhZFVpbnQxNikoYyxsKTtpZihsKz0yLGQuaHVmZm1hbj0hISgxJnApLGQucmVmaW5lbWVudD0hISgyJnApLGQubG9nU3RyaXBTaXplPXA+PjImMyxkLnN0cmlwU2l6ZT0xPDxkLmxvZ1N0cmlwU2l6ZSxkLnJlZmVyZW5jZUNvcm5lcj1wPj40JjMsZC50cmFuc3Bvc2VkPSEhKDY0JnApLGQuY29tYmluYXRpb25PcGVyYXRvcj1wPj43JjMsZC5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj45JjEsZC5kc09mZnNldD1wPDwxNz4+MjcsZC5yZWZpbmVtZW50VGVtcGxhdGU9cD4+MTUmMSxkLmh1ZmZtYW4pe3ZhciBnPSgwLGkucmVhZFVpbnQxNikoYyxsKTtsKz0yLGQuaHVmZm1hbkZTPTMmZyxkLmh1ZmZtYW5EUz1nPj4yJjMsZC5odWZmbWFuRFQ9Zz4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1nPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWc+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9Zz4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9Zz4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmcpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3Iobj1bXSxhPTA7YTwyO2ErKyluLnB1c2goe3g6KDAsaS5yZWFkSW50OCkoYyxsKSx5OigwLGkucmVhZEludDgpKGMsbCsxKX0pLGwrPTI7ZC5yZWZpbmVtZW50QXQ9bn1kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LHI9W2Qscy5yZWZlcnJlZFRvLGMsbCx1XTticmVhaztjYXNlIDE2OnZhciB2PXt9LG09Y1tsKytdO3YubW1yPSEhKDEmbSksdi50ZW1wbGF0ZT1tPj4xJjMsdi5wYXR0ZXJuV2lkdGg9Y1tsKytdLHYucGF0dGVybkhlaWdodD1jW2wrK10sdi5tYXhQYXR0ZXJuSW5kZXg9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bdixzLm51bWJlcixjLGwsdV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnZhciBiPXt9O2IuaW5mbz1qKGMsbCksbCs9TTt2YXIgdz1jW2wrK107Yi5tbXI9ISEoMSZ3KSxiLnRlbXBsYXRlPXc+PjEmMyxiLmVuYWJsZVNraXA9ISEoOCZ3KSxiLmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+NCY3LGIuZGVmYXVsdFBpeGVsVmFsdWU9dz4+NyYxLGIuZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKGMsbCksbCs9NCxiLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsYi5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShjLGwpLGwrPTIsYi5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKGMsbCksbCs9MixyPVtiLHMucmVmZXJyZWRUbyxjLGwsdV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnZhciBrPXt9O2suaW5mbz1qKGMsbCksbCs9TTt2YXIgUz1jW2wrK107aWYoay5tbXI9ISEoMSZTKSxrLnRlbXBsYXRlPVM+PjEmMyxrLnByZWRpY3Rpb249ISEoOCZTKSwhay5tbXIpe2ZvcihvPTA9PT1rLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtrLmF0PW59cj1bayxjLGwsdV07YnJlYWs7Y2FzZSA0ODp2YXIgeD17d2lkdGg6KDAsaS5yZWFkVWludDMyKShjLGwpLGhlaWdodDooMCxpLnJlYWRVaW50MzIpKGMsbCs0KSxyZXNvbHV0aW9uWDooMCxpLnJlYWRVaW50MzIpKGMsbCs4KSxyZXNvbHV0aW9uWTooMCxpLnJlYWRVaW50MzIpKGMsbCsxMil9OzQyOTQ5NjcyOTU9PT14LmhlaWdodCYmZGVsZXRlIHguaGVpZ2h0O3ZhciBPPWNbbCsxNl07KDAsaS5yZWFkVWludDE2KShjLGwrMTcpLHgubG9zc2xlc3M9ISEoMSZPKSx4LnJlZmluZW1lbnQ9ISEoMiZPKSx4LmRlZmF1bHRQaXhlbFZhbHVlPU8+PjImMSx4LmNvbWJpbmF0aW9uT3BlcmF0b3I9Tz4+MyYzLHgucmVxdWlyZXNCdWZmZXI9ISEoMzImTykseC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmTykscj1beF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnI9W3MubnVtYmVyLGMsbCx1XTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJzZWdtZW50IHR5cGUgIi5jb25jYXQocy50eXBlTmFtZSwiKCIpLmNvbmNhdChzLnR5cGUsIikgaXMgbm90IGltcGxlbWVudGVkIikpfXZhciBBPSJvbiIrcy50eXBlTmFtZTtBIGluIHQmJnRbQV0uYXBwbHkodCxyKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKV8oZVtyXSx0KX12YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToib25QYWdlSW5mb3JtYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9fSx7a2V5OiJkcmF3Qml0bWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG89dGhpcy5jdXJyZW50UGFnZUluZm8scz1lLndpZHRoLGM9ZS5oZWlnaHQsdT1vLndpZHRoKzc+PjMsbD1vLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6by5jb21iaW5hdGlvbk9wZXJhdG9yLGY9dGhpcy5idWZmZXIsaD0xMjg+Pig3JmUueCksZD1lLnkqdSsoZS54Pj4zKTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV18PWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7Y2FzZSAyOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV1ePWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQobCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToib25JbW1lZGlhdGVHZW5lcmljUmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmluZm8saT1uZXcgYih0LHIsbiksbz1GKGUubW1yLGEud2lkdGgsYS5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LGkpO3RoaXMuZHJhd0JpdG1hcChhLG8pfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25TeW1ib2xEaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIHMsbDtlLmh1ZmZtYW4mJihzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49JChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPUgobyx0LHIpLG8rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPSQoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1IKG8sdCxyKSxvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPUgobyx0LHIpLG8rKyk6aT0kKDEpLHt0YWJsZURlbHRhSGVpZ2h0Om4sdGFibGVEZWx0YVdpZHRoOmEsdGFibGVCaXRtYXBTaXplOmksdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP0gobyx0LHIpOiQoMSl9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGw9bmV3IFgobixhLG8pKTt2YXIgZj10aGlzLnN5bWJvbHM7Znx8KHRoaXMuc3ltYm9scz1mPXt9KTt2YXIgaCxkPVtdLHA9dShyKTt0cnl7Zm9yKHAucygpOyEoaD1wLm4oKSkuZG9uZTspe3ZhciBnPWZbaC52YWx1ZV07ZyYmZC5wdXNoLmFwcGx5KGQsYyhnKSl9fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfXZhciB2PW5ldyBiKG4sYSxvKTtmW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoKXtpZihlJiZ0KXRocm93IG5ldyB5KCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBkLHAsZz1bXSx2PTAsbT0oMCxpLmxvZzIpKHIubGVuZ3RoK24pLGI9Zi5kZWNvZGVyLFM9Zi5jb250ZXh0Q2FjaGU7Zm9yKGUmJihkPSQoMSkscD1bXSxtPU1hdGgubWF4KG0sMSkpO2cubGVuZ3RoPG47KXt2Kz1lP28udGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6dyhTLCJJQURIIixiKTtmb3IodmFyIHg9MCxPPTAsQT1lP3AubGVuZ3RoOjA7Oyl7dmFyIEM9ZT9vLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6dyhTLCJJQURXIixiKTtpZihudWxsPT09QylicmVhaztPKz14Kz1DO3ZhciBJPXZvaWQgMDtpZih0KXt2YXIgRT13KFMsIklBQUkiLGIpO2lmKEU+MSlJPVQoZSx0LHgsdiwwLEUsMSxyLmNvbmNhdChnKSxtLDAsMCwxLDAsbyx1LGwsZiwwLGgpO2Vsc2V7dmFyIGo9ayhTLGIsbSksTT13KFMsIklBUkRYIixiKSxfPXcoUywiSUFSRFkiLGIpO0k9UCh4LHYsdSxqPHIubGVuZ3RoP3Jbal06Z1tqLXIubGVuZ3RoXSxNLF8sITEsbCxmKX1nLnB1c2goSSl9ZWxzZSBlP3AucHVzaCh4KTooST1GKCExLHgsdixzLCExLG51bGwsYyxmKSxnLnB1c2goSSkpfWlmKGUmJiF0KXt2YXIgTD1vLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTt2YXIgUj12b2lkIDA7aWYoMD09PUwpUj1xKGgsTyx2KTtlbHNle3ZhciBOPWguZW5kLEQ9aC5wb3NpdGlvbitMO2guZW5kPUQsUj1HKGgsTyx2LCExKSxoLmVuZD1OLGgucG9zaXRpb249RH12YXIgQj1wLmxlbmd0aDtpZihBPT09Qi0xKWcucHVzaChSKTtlbHNle3ZhciBVPXZvaWQgMCxYPXZvaWQgMCxIPTAsej12b2lkIDAsVz12b2lkIDA7Zm9yKFU9QTtVPEI7VSsrKXtmb3Ioej1IK3BbVV0sVz1bXSxYPTA7WDx2O1grKylXLnB1c2goUltYXS5zdWJhcnJheShILHopKTtnLnB1c2goVyksSD16fX19fWZvcih2YXIgVixZLEs9W10sSj1bXSxaPSExLFE9ci5sZW5ndGgrbjtKLmxlbmd0aDxROyl7Zm9yKHZhciBlZT1lP2QuZGVjb2RlKGgpOncoUywiSUFFWCIsYik7ZWUtLTspSi5wdXNoKFopO1o9IVp9Zm9yKFY9MCxZPXIubGVuZ3RoO1Y8WTtWKyspSltWXSYmSy5wdXNoKHJbVl0pO2Zvcih2YXIgdGU9MDt0ZTxuO1YrKyx0ZSsrKUpbVl0mJksucHVzaChnW3RlXSk7cmV0dXJuIEt9KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsZCxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLHMsZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHYsbCl9fSx7a2V5OiJvbkltbWVkaWF0ZVRleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8scyxsLGY9ZS5pbmZvLGg9dGhpcy5zeW1ib2xzLGQ9W10scD11KHQpO3RyeXtmb3IocC5zKCk7IShsPXAubigpKS5kb25lOyl7dmFyIGc9aFtsLnZhbHVlXTtnJiZkLnB1c2guYXBwbHkoZCxjKGcpKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9dmFyIHY9KDAsaS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYocz1uZXcgWChyLG4sYSksbz1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1bXSxvPTA7bzw9MzQ7bysrKXt2YXIgcz1hLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgTihbbyxzLDAsMF0pKX12YXIgYz1uZXcgQihpLCExKTtpLmxlbmd0aD0wO2Zvcih2YXIgdT0wO3U8bjspe3ZhciBsPWMuZGVjb2RlKGEpO2lmKGw+PTMyKXt2YXIgZj12b2lkIDAsaD12b2lkIDAsZD12b2lkIDA7c3dpdGNoKGwpe2Nhc2UgMzI6aWYoMD09PXUpdGhyb3cgbmV3IHkoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2g9YS5yZWFkQml0cygyKSszLGY9aVt1LTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmg9YS5yZWFkQml0cygzKSszLGY9MDticmVhaztjYXNlIDM0Omg9YS5yZWFkQml0cyg3KSsxMSxmPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoZD0wO2Q8aDtkKyspaS5wdXNoKG5ldyBOKFt1LGYsMCwwXSkpLHUrK31lbHNlIGkucHVzaChuZXcgTihbdSxsLDAsMF0pKSx1Kyt9YS5ieXRlQWxpZ24oKTt2YXIgcCxnLHYsbT1uZXcgQihpLCExKSxiPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOnA9JChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6cD1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpnPSQoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmc9SChiLHQsciksYisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHkoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dj0kKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dj1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyB5KCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6bSx0YWJsZUZpcnN0UzpwLHRhYmxlRGVsdGFTOmcsdGFibGVEZWx0YVQ6dn19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxzKSk7dmFyIG09bmV3IGIocixuLGEpLHc9VChlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGYud2lkdGgsZi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGQsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxtLGUubG9nU3RyaXBTaXplLHMpO3RoaXMuZHJhd0JpdG1hcChmLHcpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25QYXR0ZXJuRGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO3ZhciBvPW5ldyBiKHIsbixhKTtpW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bXTtlfHwoby5wdXNoKHt4Oi10LHk6MH0pLDA9PT1hJiZvLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2Zvcih2YXIgcz1GKGUsKG4rMSkqdCxyLGEsITEsbnVsbCxvLGkpLGM9W10sdT0wO3U8PW47dSsrKXtmb3IodmFyIGw9W10sZj10KnUsaD1mK3QsZD0wO2Q8cjtkKyspbC5wdXNoKHNbZF0uc3ViYXJyYXkoZixoKSk7Yy5wdXNoKGwpfXJldHVybiBjfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxvKX19LHtrZXk6Im9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxjPW5ldyBiKHIsbixhKSx1PWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoLGQscCxnKXtpZihzKXRocm93IG5ldyB5KCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgeSgnb3BlcmF0b3IgIicuY29uY2F0KGMsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7dmFyIHYsbSxiLHc9W107Zm9yKHY9MDt2PGE7disrKXtpZihiPW5ldyBVaW50OEFycmF5KG4pLG8pZm9yKG09MDttPG47bSsrKWJbbV09bzt3LnB1c2goYil9dmFyIGs9dC5sZW5ndGgsUz10WzBdLHg9U1swXS5sZW5ndGgsTz1TLmxlbmd0aCxBPSgwLGkubG9nMikoayksQz1bXTtlfHwoQy5wdXNoKHt4OnI8PTE/MzoyLHk6LTF9KSwwPT09ciYmQy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTt2YXIgUCxULEksRSxqLE0sXyxMLFIsTixELEI9W107Zm9yKGUmJihQPW5ldyBYKGcuZGF0YSxnLnN0YXJ0LGcuZW5kKSksdj1BLTE7dj49MDt2LS0pVD1lP0coUCx1LGwsITApOkYoITEsdSxsLHIsITEsbnVsbCxDLGcpLEJbdl09VDtmb3IoST0wO0k8bDtJKyspZm9yKEU9MDtFPHU7RSsrKXtmb3Ioaj0wLE09MCxtPUEtMTttPj0wO20tLSlNfD0oal49QlttXVtJXVtFXSk8PG07aWYoXz10W01dLFI9aCtJKmQtRSpwPj44LChMPWYrSSpwK0UqZD4+OCk+PTAmJkwreDw9biYmUj49MCYmUitPPD1hKWZvcih2PTA7djxPO3YrKylmb3IoRD13W1Irdl0sTj1fW3ZdLG09MDttPHg7bSsrKURbTCttXXw9TlttXTtlbHNle3ZhciBVPXZvaWQgMCwkPXZvaWQgMDtmb3Iodj0wO3Y8Tzt2KyspaWYoISgoJD1SK3YpPDB8fCQ+PWEpKWZvcihEPXdbJF0sTj1fW3ZdLG09MDttPHg7bSsrKShVPUwrbSk+PTAmJlU8biYmKERbVV18PU5bbV0pfX1yZXR1cm4gd30oZS5tbXIsbyxlLnRlbXBsYXRlLHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGMpO3RoaXMuZHJhd0JpdG1hcChzLHUpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJvblRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5jdXN0b21UYWJsZXM7YXx8KHRoaXMuY3VzdG9tVGFibGVzPWE9e30pLGFbZV09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbz1lW3RdLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCsxKSxjPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShlLHQrNSksdT1uZXcgWChlLHQrOSxyKSxsPTErKG8+PjEmNyksZj0xKyhvPj40JjcpLGg9W10sZD1zO2Rve249dS5yZWFkQml0cyhsKSxhPXUucmVhZEJpdHMoZiksaC5wdXNoKG5ldyBOKFtkLG4sYSwwXSkpLGQrPTE8PGF9d2hpbGUoZDxjKTtyZXR1cm4gbj11LnJlYWRCaXRzKGwpLGgucHVzaChuZXcgTihbcy0xLG4sMzIsMCwibG93ZXIiXSkpLG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW2MsbiwzMiwwXSkpLDEmbyYmKG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW24sMF0pKSksbmV3IEIoaCwhMSl9KHQscixuKX19XSksZX0oKSxOPWQoKGZ1bmN0aW9uIGUodCl7cCh0aGlzLGUpLDI9PT10Lmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9dFswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPXRbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9dFswXSx0aGlzLnByZWZpeExlbmd0aD10WzFdLHRoaXMucmFuZ2VMZW5ndGg9dFsyXSx0aGlzLnByZWZpeENvZGU9dFszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09dFs0XSl9KSksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cCh0aGlzLGUpLHRoaXMuY2hpbGRyZW49W10sdD8odGhpcy5pc0xlYWY9ITAsdGhpcy5yYW5nZUxlbmd0aD10LnJhbmdlTGVuZ3RoLHRoaXMucmFuZ2VMb3c9dC5yYW5nZUxvdyx0aGlzLmlzTG93ZXJSYW5nZT10LmlzTG93ZXJSYW5nZSx0aGlzLmlzT09CPXQuaXNPT0IpOnRoaXMuaXNMZWFmPSExfXJldHVybiBkKGUsW3trZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj10LnByZWZpeENvZGU+PnImMTtpZihyPD0wKXRoaXMuY2hpbGRyZW5bbl09bmV3IGUodCk7ZWxzZXt2YXIgYT10aGlzLmNoaWxkcmVuW25dO2F8fCh0aGlzLmNoaWxkcmVuW25dPWE9bmV3IGUobnVsbCkpLGEuYnVpbGRUcmVlKHQsci0xKX19fSx7a2V5OiJkZWNvZGVOb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDt2YXIgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX12YXIgcj10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighcil0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gci5kZWNvZGVOb2RlKGUpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHJ8fHRoaXMuYXNzaWduUHJlZml4Q29kZXModCksdGhpcy5yb290Tm9kZT1uZXcgRChudWxsKTtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspe3ZhciBpPXRbbl07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19cmV0dXJuIGQoZSxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfX0se2tleToiYXNzaWduUHJlZml4Q29kZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj0wO248dDtuKyspcj1NYXRoLm1heChyLGVbbl0ucHJlZml4TGVuZ3RoKTtmb3IodmFyIGE9bmV3IFVpbnQzMkFycmF5KHIrMSksaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKzt2YXIgbyxzLGMsdT0xLGw9MDtmb3IoYVswXT0wO3U8PXI7KXtmb3Iobz1sPWwrYVt1LTFdPDwxLHM9MDtzPHQ7KShjPWVbc10pLnByZWZpeExlbmd0aD09PXUmJihjLnByZWZpeENvZGU9byxvKyspLHMrKzt1Kyt9fX1dKSxlfSgpLFU9e307ZnVuY3Rpb24gJChlKXt2YXIgdCxyPVVbZV07aWYocilyZXR1cm4gcjtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgic3RhbmRhcmQgdGFibGUgQi4iLmNvbmNhdChlLCIgZG9lcyBub3QgZXhpc3QiKSl9Zm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl09bmV3IE4odFtuXSk7cmV0dXJuIHI9bmV3IEIodCwhMCksVVtlXT1yLHJ9dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtwKHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5zdGFydD1yLHRoaXMuZW5kPW4sdGhpcy5wb3NpdGlvbj1yLHRoaXMuc2hpZnQ9LTEsdGhpcy5jdXJyZW50Qnl0ZT0wfXJldHVybiBkKGUsW3trZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgeSgiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N312YXIgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7cmV0dXJuIHRoaXMuc2hpZnQtLSxlfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodD1lLTE7dD49MDt0LS0pcnw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIHJ9fSx7a2V5OiJieXRlQWxpZ24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX19LHtrZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1dKSxlfSgpO2Z1bmN0aW9uIEgoZSx0LHIpe2Zvcih2YXIgbj0wLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspe3ZhciBvPXJbdFthXV07aWYobyl7aWYoZT09PW4pcmV0dXJuIG87bisrfX10aHJvdyBuZXcgeSgiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHEoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPTA7YTxyO2ErKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCk7bi5wdXNoKGkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBufWZ1bmN0aW9uIEcoZSx0LHIsbil7Zm9yKHZhciBhLGk9e0s6LTEsQ29sdW1uczp0LFJvd3M6cixCbGFja0lzMTohMCxFbmRPZkJsb2NrOm59LG89bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsaSksYz1bXSx1PSExLGw9MDtsPHI7bCsrKXt2YXIgZj1uZXcgVWludDhBcnJheSh0KTtjLnB1c2goZik7Zm9yKHZhciBoPS0xLGQ9MDtkPHQ7ZCsrKWg8MCYmKC0xPT09KGE9by5yZWFkTmV4dENoYXIoKSkmJihhPTAsdT0hMCksaD03KSxmW2RdPWE+PmgmMSxoLS19aWYobiYmIXUpZm9yKHZhciBwPTA7cDw1JiYtMSE9PW8ucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gY312YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToicGFyc2VDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFIscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9ZVtyXTtMKEUoe30sYS5kYXRhLGEuc3RhcnQsYS5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9fSx7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19XSksZX0oKTt0LkpiaWcySW1hZ2U9en0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBhPW4uY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1yKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7dmFyIGE9W3txZToyMjAxNyxubXBzOjEsbmxwczoxLHN3aXRjaEZsYWc6MX0se3FlOjEzMzEzLG5tcHM6MixubHBzOjYsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjMsbmxwczo5LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczo0LG5scHM6MTIsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjUsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozOCxubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NyxubHBzOjYsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczo4LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczo5LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxMCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MTEsbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MTIsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MTMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjksbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjE1LG5scHM6MTQsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczoxNixubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjIwNzM3LG5tcHM6MTcsbmxwczoxNSxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjE4LG5scHM6MTYsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxOSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjEzMzEzLG5tcHM6MjAsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjIxLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6MTAyNDEsbm1wczoyMixubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoyMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjg3MDUsbm1wczoyNCxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoyNSxubHBzOjIyLHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczoyNixubHBzOjIzLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyNyxubHBzOjI0LHN3aXRjaEZsYWc6MH0se3FlOjUxMjEsbm1wczoyOCxubHBzOjI1LHN3aXRjaEZsYWc6MH0se3FlOjQ2MDksbm1wczoyOSxubHBzOjI2LHN3aXRjaEZsYWc6MH0se3FlOjQzNTMsbm1wczozMCxubHBzOjI3LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczozMSxubHBzOjI4LHN3aXRjaEZsYWc6MH0se3FlOjI0OTcsbm1wczozMixubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjIyMDksbm1wczozMyxubHBzOjMwLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczozNCxubHBzOjMxLHN3aXRjaEZsYWc6MH0se3FlOjEwODksbm1wczozNSxubHBzOjMyLHN3aXRjaEZsYWc6MH0se3FlOjY3MyxubXBzOjM2LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzcsbmxwczozNCxzd2l0Y2hGbGFnOjB9LHtxZTozMjEsbm1wczozOCxubHBzOjM1LHN3aXRjaEZsYWc6MH0se3FlOjI3MyxubXBzOjM5LG5scHM6MzYsc3dpdGNoRmxhZzowfSx7cWU6MTMzLG5tcHM6NDAsbmxwczozNyxzd2l0Y2hGbGFnOjB9LHtxZTo3MyxubXBzOjQxLG5scHM6Mzgsc3dpdGNoRmxhZzowfSx7cWU6Mzcsbm1wczo0MixubHBzOjM5LHN3aXRjaEZsYWc6MH0se3FlOjIxLG5tcHM6NDMsbmxwczo0MCxzd2l0Y2hGbGFnOjB9LHtxZTo5LG5tcHM6NDQsbmxwczo0MSxzd2l0Y2hGbGFnOjB9LHtxZTo1LG5tcHM6NDUsbmxwczo0Mixzd2l0Y2hGbGFnOjB9LHtxZToxLG5tcHM6NDUsbmxwczo0Myxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjQ2LG5scHM6NDYsc3dpdGNoRmxhZzowfV0saT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuYnA9cix0aGlzLmRhdGFFbmQ9bix0aGlzLmNoaWdoPXRbcl0sdGhpcy5jbG93PTAsdGhpcy5ieXRlSW4oKSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNyx0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1LHRoaXMuY3QtPTcsdGhpcy5hPTMyNzY4fXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiYnl0ZUluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMuYnA7MjU1PT09ZVt0XT9lW3QrMV0+MTQzPyh0aGlzLmNsb3crPTY1MjgwLHRoaXMuY3Q9OCk6KHQrKyx0aGlzLmNsb3crPWVbdF08PDksdGhpcy5jdD03LHRoaXMuYnA9dCk6KHQrKyx0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODAsdGhpcy5jdD04LHRoaXMuYnA9dCksdGhpcy5jbG93PjY1NTM1JiYodGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNix0aGlzLmNsb3cmPTY1NTM1KX19LHtrZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lW3RdPj4xLGk9MSZlW3RdLG89YVtuXSxzPW8ucWUsYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpYzxzPyhjPXMscj1pLG49by5ubXBzKTooYz1zLHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKTtlbHNle2lmKHRoaXMuY2hpZ2gtPXMsMCE9KDMyNzY4JmMpKXJldHVybiB0aGlzLmE9YyxpO2M8cz8ocj0xXmksMT09PW8uc3dpdGNoRmxhZyYmKGk9ciksbj1vLm5scHMpOihyPWksbj1vLm5tcHMpfWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpLGM8PD0xLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjEsdGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNSx0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTtyZXR1cm4gdGhpcy5hPWMsZVt0XT1uPDwxfGkscn19XSkmJm4odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkFyaXRobWV0aWNEZWNvZGVyPWl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTQ4KSxpPXIoMTM0KSxvPXIoMTU3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxsKGUpfXZhciBmPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9KGQsZSk7dmFyIHQscixhLGYsaD0oYT1kLGY9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1sKGEpO2lmKGYpe3ZhciByPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBuLGE7Zm9yKGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZCk7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWEpe2Uuc2tpcCgtMSk7YnJlYWt9cmV0dXJuKG49aC5jYWxsKHRoaXMsdCkpLnN0cmVhbT1lLG4uZGljdD1lLmRpY3Qsbi5tYXliZUxlbmd0aD10LG4ucGFyYW1zPXIsbn1yZXR1cm4gdD1kLChyPVt7a2V5OiJieXRlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9fSx7a2V5OiJlbnN1cmVCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5lb2Ype3ZhciBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLmZvcmNlUkdCJiZBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dC5sZW5ndGgsYT1uZXcgSW50MzJBcnJheShuKSxzPSExLGM9KDE8PHIpLTEsdT0wO3U8bjt1Kz0yKWFbdV09MjU2Kih0W3UrMV0tdFt1XSl8MCxhW3UrMV09dFt1XSpjfDAsMjU2PT09YVt1XSYmMD09PWFbdSsxXXx8KHM9ITApO3MmJihlLmRlY29kZVRyYW5zZm9ybT1hKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGw9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIobCkmJihlLmNvbG9yVHJhbnNmb3JtPWwpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19fV0pJiZjKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGR9KGEuRGVjb2RlU3RyZWFtKTt0LkpwZWdTdHJlYW09Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM1KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHMoZSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxoKGUsdCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX12YXIgZz1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSx2PWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1kKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gbCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIkROTE1hcmtlckVycm9yIikpLnNjYW5MaW5lcz1uLGF9cmV0dXJuIHUocil9KG4uQmFzZUV4Y2VwdGlvbikseT1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRU9JTWFya2VyRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSxtPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksYj00MDE3LHc9Nzk5LGs9MzQwNixTPTIyNzYseD0xNTY3LE89Mzc4NCxBPTU3OTMsQz0yODk2O2Z1bmN0aW9uIEYoZSx0KXtmb3IodmFyIHIsbixhPTAsaT0xNjtpPjAmJiFlW2ktMV07KWktLTt2YXIgbyxzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dLGM9c1swXTtmb3Iocj0wO3I8aTtyKyspe2ZvcihuPTA7bjxlW3JdO24rKyl7Zm9yKChjPXMucG9wKCkpLmNoaWxkcmVuW2MuaW5kZXhdPXRbYV07Yy5pbmRleD4wOyljPXMucG9wKCk7Zm9yKGMuaW5kZXgrKyxzLnB1c2goYyk7cy5sZW5ndGg8PXI7KXMucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSksYy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuLGM9bzthKyt9cisxPGkmJihzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW8pfXJldHVybiBzWzBdLmNoaWxkcmVufWZ1bmN0aW9uIFAoZSx0LHIpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K3IpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvLGMsdSxsLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+OSYmdm9pZCAwIT09YXJndW1lbnRzWzldJiZhcmd1bWVudHNbOV0sZD1yLm1jdXNQZXJMaW5lLHA9ci5wcm9ncmVzc2l2ZSxiPXQsdz0wLGs9MDtmdW5jdGlvbiBTKCl7aWYoaz4wKXJldHVybiBrLS0sdz4+ayYxO2lmKDI1NT09PSh3PWVbdCsrXSkpe3ZhciBuPWVbdCsrXTtpZihuKXtpZigyMjA9PT1uJiZoKXt0Kz0yO3ZhciBpPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLGk+MCYmaSE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyB2KCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixpKX1lbHNlIGlmKDIxNz09PW4pe2lmKGgpe3ZhciBvPUkqKDg9PT1yLnByZWNpc2lvbj84OjApO2lmKG8+MCYmTWF0aC5yb3VuZChyLnNjYW5MaW5lcy9vKT49NSl0aHJvdyBuZXcgdigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLG8pfXRocm93IG5ldyB5KCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIil9dGhyb3cgbmV3IGcoInVuZXhwZWN0ZWQgbWFya2VyICIuY29uY2F0KCh3PDw4fG4pLnRvU3RyaW5nKDE2KSkpfX1yZXR1cm4gaz03LHc+Pj43fWZ1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PWU7Oyl7c3dpdGNoKHModD10W1MoKV0pKXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBnKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9MDtlPjA7KXQ9dDw8MXxTKCksZS0tO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1TKCk/MTotMTt2YXIgdD1PKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX12YXIgQyxGPTAsVD0wLEk9MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7dmFyIGk9ciVkO0k9KHIvZHwwKSplLnYrbjt2YXIgbz1pKmUuaCthO3QoZSxQKGUsSSxvKSl9ZnVuY3Rpb24gTShlLHQscil7ST1yL2UuYmxvY2tzUGVyTGluZXwwO3ZhciBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSxQKGUsSSxuKSl9dmFyIF8sTCxSLE4sRCxCLFU9aS5sZW5ndGg7Qj1wPzA9PT1jPzA9PT1sP2Z1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTw8ZjtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW59OmZ1bmN0aW9uKGUsdCl7ZS5ibG9ja0RhdGFbdF18PVMoKTw8Zn06MD09PWw/ZnVuY3Rpb24oZSx0KXtpZihGPjApRi0tO2Vsc2UgZm9yKHZhciByPWMsbj11O3I8PW47KXt2YXIgYT14KGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmYSxvPWE+PjQ7aWYoMCE9PWkpe3ZhciBzPW1bcis9b107ZS5ibG9ja0RhdGFbdCtzXT1BKGkpKigxPDxmKSxyKyt9ZWxzZXtpZihvPDE1KXtGPU8obykrKDE8PG8pLTE7YnJlYWt9cis9MTZ9fX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhPWMsaT11LG89MDthPD1pOyl7dmFyIHM9dCttW2FdLGw9ZS5ibG9ja0RhdGFbc108MD8tMToxO3N3aXRjaChUKXtjYXNlIDA6aWYobz0obj14KGUuaHVmZm1hblRhYmxlQUMpKT4+NCwwPT0ocj0xNSZuKSlvPDE1PyhGPU8obykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1yKXRocm93IG5ldyBnKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0M9QShyKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbc10/ZS5ibG9ja0RhdGFbc10rPWwqKFMoKTw8Zik6MD09LS1vJiYoVD0yPT09VD8zOjApO2JyZWFrO2Nhc2UgMzplLmJsb2NrRGF0YVtzXT9lLmJsb2NrRGF0YVtzXSs9bCooUygpPDxmKTooZS5ibG9ja0RhdGFbc109Qzw8ZixUPTApO2JyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVtzXSYmKGUuYmxvY2tEYXRhW3NdKz1sKihTKCk8PGYpKX1hKyt9ND09PVQmJjA9PS0tRiYmKFQ9MCl9OmZ1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47Zm9yKHZhciBhPTE7YTw2NDspe3ZhciBpPXgoZS5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGM9bVthKz1zXTtlLmJsb2NrRGF0YVt0K2NdPUEobyksYSsrfWVsc2V7aWYoczwxNSlicmVhazthKz0xNn19fTt2YXIgJCxYLEgscSxHPTA7Zm9yKFg9MT09PVU/aVswXS5ibG9ja3NQZXJMaW5lKmlbMF0uYmxvY2tzUGVyQ29sdW1uOmQqci5tY3VzUGVyQ29sdW1uO0c8PVg7KXt2YXIgej1vP01hdGgubWluKFgtRyxvKTpYO2lmKHo+MCl7Zm9yKEw9MDtMPFU7TCsrKWlbTF0ucHJlZD0wO2lmKEY9MCwxPT09VSlmb3IoXz1pWzBdLEQ9MDtEPHo7RCsrKU0oXyxCLEcpLEcrKztlbHNlIGZvcihEPTA7RDx6O0QrKyl7Zm9yKEw9MDtMPFU7TCsrKWZvcihIPShfPWlbTF0pLmgscT1fLnYsUj0wO1I8cTtSKyspZm9yKE49MDtOPEg7TisrKUUoXyxCLEcsUixOKTtHKyt9fWlmKGs9MCwhKCQ9aihlLHQpKSlicmVhaztpZigkLmludmFsaWQpe3ZhciBXPXo+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtICIuY29uY2F0KFcsIiBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIpLmNvbmNhdCgkLmludmFsaWQpKSx0PSQub2Zmc2V0fWlmKCEoJC5tYXJrZXI+PTY1NDg4JiYkLm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtYn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sRixQLFQ9ZS5xdWFudGl6YXRpb25UYWJsZSxJPWUuYmxvY2tEYXRhO2lmKCFUKXRocm93IG5ldyBnKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IodmFyIEU9MDtFPDY0O0UrPTgpZj1JW3QrRV0saD1JW3QrRSsxXSxkPUlbdCtFKzJdLHA9SVt0K0UrM10sdj1JW3QrRSs0XSx5PUlbdCtFKzVdLG09SVt0K0UrNl0sRj1JW3QrRSs3XSxmKj1UW0VdLDAhPShofGR8cHx2fHl8bXxGKT8oaCo9VFtFKzFdLGQqPVRbRSsyXSxwKj1UW0UrM10sdio9VFtFKzRdLHkqPVRbRSs1XSxtKj1UW0UrNl0sRio9VFtFKzddLGE9KG49KG49QSpmKzEyOD4+OCkrKGE9QSp2KzEyOD4+OCkrMT4+MSktYSxQPShpPWQpKk8rKG89bSkqeCsxMjg+PjgsaT1pKngtbypPKzEyOD4+OCx1PShzPShzPUMqKGgtRikrMTI4Pj44KSsodT15PDw0KSsxPj4xKS11LGM9KGw9KGw9QyooaCtGKSsxMjg+PjgpKyhjPXA8PDQpKzE+PjEpLWMsbz0obj1uKyhvPVApKzE+PjEpLW8saT0oYT1hK2krMT4+MSktaSxQPXMqUytsKmsrMjA0OD4+MTIscz1zKmstbCpTKzIwNDg+PjEyLGw9UCxQPWMqdyt1KmIrMjA0OD4+MTIsYz1jKmItdSp3KzIwNDg+PjEyLHU9UCxyW0VdPW4rbCxyW0UrN109bi1sLHJbRSsxXT1hK3UscltFKzZdPWEtdSxyW0UrMl09aStjLHJbRSs1XT1pLWMscltFKzNdPW8rcyxyW0UrNF09by1zKTooUD1BKmYrNTEyPj4xMCxyW0VdPVAscltFKzFdPVAscltFKzJdPVAscltFKzNdPVAscltFKzRdPVAscltFKzVdPVAscltFKzZdPVAscltFKzddPVApO2Zvcih2YXIgaj0wO2o8ODsrK2opZj1yW2pdLDAhPSgoaD1yW2orOF0pfChkPXJbaisxNl0pfChwPXJbaisyNF0pfCh2PXJbaiszMl0pfCh5PXJbais0MF0pfChtPXJbais0OF0pfChGPXJbais1Nl0pKT8oYT0obj00MTEyKygobj1BKmYrMjA0OD4+MTIpKyhhPUEqdisyMDQ4Pj4xMikrMT4+MSkpLWEsUD0oaT1kKSpPKyhvPW0pKngrMjA0OD4+MTIsaT1pKngtbypPKzIwNDg+PjEyLG89UCx1PShzPShzPUMqKGgtRikrMjA0OD4+MTIpKyh1PXkpKzE+PjEpLXUsYz0obD0obD1DKihoK0YpKzIwNDg+PjEyKSsoYz1wKSsxPj4xKS1jLFA9cypTK2wqaysyMDQ4Pj4xMixzPXMqay1sKlMrMjA0OD4+MTIsbD1QLFA9Yyp3K3UqYisyMDQ4Pj4xMixjPWMqYi11KncrMjA0OD4+MTIsKGY9KG49bitvKzE+PjEpK2wpPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00LChoPShhPWEraSsxPj4xKSsodT1QKSk8MTY/aD0wOmg+PTQwODA/aD0yNTU6aD4+PTQsKGQ9KGk9YS1pKStjKTwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NCwocD0obz1uLW8pK3MpPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00LCh2PW8tcyk8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQsKHk9aS1jKTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NCwobT1hLXUpPDE2P209MDptPj00MDgwP209MjU1Om0+Pj00LChGPW4tbCk8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQsSVt0K2pdPWYsSVt0K2orOF09aCxJW3QraisxNl09ZCxJW3QraisyNF09cCxJW3QraiszMl09dixJW3Qrais0MF09eSxJW3Qrais0OF09bSxJW3Qrais1Nl09Rik6KFA9KFA9QSpmKzgxOTI+PjE0KTwtMjA0MD8wOlA+PTIwMjQ/MjU1OlArMjA1Nj4+NCxJW3Qral09UCxJW3Qrais4XT1QLElbdCtqKzE2XT1QLElbdCtqKzI0XT1QLElbdCtqKzMyXT1QLElbdCtqKzQwXT1QLElbdCtqKzQ4XT1QLElbdCtqKzU2XT1QKX1mdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpLGk9MDtpPG47aSsrKWZvcih2YXIgbz0wO288cjtvKyspSSh0LFAodCxpLG8pLGEpO3JldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBqKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsbj1lLmxlbmd0aC0xLGk9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO3ZhciBvPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPSgwLGEucmVhZFVpbnQxNikoZSxpKTshKHM+PTY1NDcyJiZzPD02NTUzNCk7KXtpZigrK2k+PW4pcmV0dXJuIG51bGw7cz0oMCxhLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6by50b1N0cmluZygxNiksbWFya2VyOnMsb2Zmc2V0Oml9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZGVjb2RlVHJhbnNmb3JtLG49dm9pZCAwPT09cj9udWxsOnIsYT10LmNvbG9yVHJhbnNmb3JtLGk9dm9pZCAwPT09YT8tMTphO2wodGhpcyxlKSx0aGlzLl9kZWNvZGVUcmFuc2Zvcm09bix0aGlzLl9jb2xvclRyYW5zZm9ybT1pfXJldHVybiB1KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5kbmxTY2FuTGluZXMscj12b2lkIDA9PT10P251bGw6dDtmdW5jdGlvbiBvKCl7dmFyIHQ9KDAsYS5yZWFkVWludDE2KShlLGwpLHI9KGwrPTIpK3QtMixpPWooZSxyLGwpO2kmJmkuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpLHI9aS5vZmZzZXQpO3ZhciBvPWUuc3ViYXJyYXkobCxyKTtyZXR1cm4gbCs9by5sZW5ndGgsb31mdW5jdGlvbiBzKGUpe3ZhciB0LHI9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLG49TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKSxhPWkoZS5jb21wb25lbnRzKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBvPXQudmFsdWUscz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqby5oL2UubWF4SCksYz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm8udi9lLm1heFYpLHU9cipvLmgsbD1uKm8udio2NCoodSsxKTtvLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShsKSxvLmJsb2Nrc1BlckxpbmU9cyxvLmJsb2Nrc1BlckNvbHVtbj1jfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLm1jdXNQZXJMaW5lPXIsZS5tY3VzUGVyQ29sdW1uPW59dmFyIGMsdSxsPTAsZj1udWxsLGg9bnVsbCxkPTAscD1bXSxiPVtdLHc9W10saz0oMCxhLnJlYWRVaW50MTYpKGUsbCk7aWYobCs9Miw2NTQ5NiE9PWspdGhyb3cgbmV3IGcoIlNPSSBub3QgZm91bmQiKTtrPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yO2U6Zm9yKDs2NTQ5NyE9PWs7KXt2YXIgUz12b2lkIDAseD12b2lkIDAsTz12b2lkIDA7c3dpdGNoKGspe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDp2YXIgQT1vKCk7NjU1MDQ9PT1rJiY3ND09PUFbMF0mJjcwPT09QVsxXSYmNzM9PT1BWzJdJiY3MD09PUFbM10mJjA9PT1BWzRdJiYoZj17dmVyc2lvbjp7bWFqb3I6QVs1XSxtaW5vcjpBWzZdfSxkZW5zaXR5VW5pdHM6QVs3XSx4RGVuc2l0eTpBWzhdPDw4fEFbOV0seURlbnNpdHk6QVsxMF08PDh8QVsxMV0sdGh1bWJXaWR0aDpBWzEyXSx0aHVtYkhlaWdodDpBWzEzXSx0aHVtYkRhdGE6QS5zdWJhcnJheSgxNCwxNCszKkFbMTJdKkFbMTNdKX0pLDY1NTE4PT09ayYmNjU9PT1BWzBdJiYxMDA9PT1BWzFdJiYxMTE9PT1BWzJdJiY5OD09PUFbM10mJjEwMT09PUFbNF0mJihoPXt2ZXJzaW9uOkFbNV08PDh8QVs2XSxmbGFnczA6QVs3XTw8OHxBWzhdLGZsYWdzMTpBWzldPDw4fEFbMTBdLHRyYW5zZm9ybUNvZGU6QVsxMV19KTticmVhaztjYXNlIDY1NDk5OmZvcih2YXIgQz0oMCxhLnJlYWRVaW50MTYpKGUsbCkrKGwrPTIpLTI7bDxDOyl7dmFyIFA9ZVtsKytdLEk9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihQPj40PT0wKWZvcih4PTA7eDw2NDt4KyspSVttW3hdXT1lW2wrK107ZWxzZXtpZihQPj40IT0xKXRocm93IG5ldyBnKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoeD0wO3g8NjQ7eCsrKUlbbVt4XV09KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9cFsxNSZQXT1JfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGMpdGhyb3cgbmV3IGcoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2wrPTIsKGM9e30pLmV4dGVuZGVkPTY1NDczPT09ayxjLnByb2dyZXNzaXZlPTY1NDc0PT09ayxjLnByZWNpc2lvbj1lW2wrK107dmFyIE09KDAsYS5yZWFkVWludDE2KShlLGwpO2wrPTIsYy5zY2FuTGluZXM9cnx8TSxjLnNhbXBsZXNQZXJMaW5lPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yLGMuY29tcG9uZW50cz1bXSxjLmNvbXBvbmVudElkcz17fTt2YXIgXz1lW2wrK10sTD0wLFI9MDtmb3IoUz0wO1M8XztTKyspe3ZhciBOPWVbbF0sRD1lW2wrMV0+PjQsQj0xNSZlW2wrMV07TDxEJiYoTD1EKSxSPEImJihSPUIpO3ZhciBVPWVbbCsyXTtPPWMuY29tcG9uZW50cy5wdXNoKHtoOkQsdjpCLHF1YW50aXphdGlvbklkOlUscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pLGMuY29tcG9uZW50SWRzW05dPU8tMSxsKz0zfWMubWF4SD1MLGMubWF4Vj1SLHMoYyk7YnJlYWs7Y2FzZSA2NTQ3Njp2YXIgJD0oMCxhLnJlYWRVaW50MTYpKGUsbCk7Zm9yKGwrPTIsUz0yO1M8JDspe3ZhciBYPWVbbCsrXSxIPW5ldyBVaW50OEFycmF5KDE2KSxxPTA7Zm9yKHg9MDt4PDE2O3grKyxsKyspcSs9SFt4XT1lW2xdO3ZhciBHPW5ldyBVaW50OEFycmF5KHEpO2Zvcih4PTA7eDxxO3grKyxsKyspR1t4XT1lW2xdO1MrPTE3K3EsKFg+PjQ9PTA/dzpiKVsxNSZYXT1GKEgsRyl9YnJlYWs7Y2FzZSA2NTUwMTpsKz0yLHU9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTI7YnJlYWs7Y2FzZSA2NTQ5ODp2YXIgej0xPT0rK2QmJiFyO2wrPTI7dmFyIFc9ZVtsKytdLFY9W107Zm9yKFM9MDtTPFc7UysrKXt2YXIgWT1lW2wrK10sSz1jLmNvbXBvbmVudElkc1tZXSxKPWMuY29tcG9uZW50c1tLXTtKLmluZGV4PVk7dmFyIFo9ZVtsKytdO0ouaHVmZm1hblRhYmxlREM9d1taPj40XSxKLmh1ZmZtYW5UYWJsZUFDPWJbMTUmWl0sVi5wdXNoKEopfXZhciBRPWVbbCsrXSxlZT1lW2wrK10sdGU9ZVtsKytdO3RyeXt2YXIgcmU9VChlLGwsYyxWLHUsUSxlZSx0ZT4+NCwxNSZ0ZSx6KTtsKz1yZX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4oMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLiIpKSx0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pO2lmKHQgaW5zdGFuY2VvZiB5KXsoMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS4iKSk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bCs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbbF0mJmwtLTticmVhaztkZWZhdWx0OnZhciBuZT1qKGUsbC0yLGwtMyk7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCksbD1uZS5vZmZzZXQ7YnJlYWt9aWYoIW5lfHxsPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgZygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIray50b1N0cmluZygxNikpfWs9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9dGhpcy53aWR0aD1jLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWMuc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9aCx0aGlzLmNvbXBvbmVudHM9W107dmFyIGFlLGllPWkoYy5jb21wb25lbnRzKTt0cnl7Zm9yKGllLnMoKTshKGFlPWllLm4oKSkuZG9uZTspe3ZhciBvZT1hZS52YWx1ZSxzZT1wW29lLnF1YW50aXphdGlvbklkXTtzZSYmKG9lLnF1YW50aXphdGlvblRhYmxlPXNlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6b2UuaW5kZXgsb3V0cHV0OkUoMCxvZSksc2NhbGVYOm9lLmgvYy5tYXhILHNjYWxlWTpvZS52L2MubWF4VixibG9ja3NQZXJMaW5lOm9lLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOm9lLmJsb2Nrc1BlckNvbHVtbn0pfX1jYXRjaChlKXtpZS5lKGUpfWZpbmFsbHl7aWUuZigpfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofX0se2tleToiX2dldExpbmVhcml6ZWRCbG9ja0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzLGMsdSxsLGYsaCxkLHA9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPXRoaXMud2lkdGgvZSx2PXRoaXMuaGVpZ2h0L3QseT0wLG09dGhpcy5jb21wb25lbnRzLmxlbmd0aCxiPWUqdCptLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGIpLGs9bmV3IFVpbnQzMkFycmF5KGUpLFM9NDI5NDk2NzI4ODtmb3IoYz0wO2M8bTtjKyspe2lmKG49KHI9dGhpcy5jb21wb25lbnRzW2NdKS5zY2FsZVgqZyxhPXIuc2NhbGVZKnYseT1jLGg9ci5vdXRwdXQsaT1yLmJsb2Nrc1BlckxpbmUrMTw8MyxuIT09ZCl7Zm9yKG89MDtvPGU7bysrKXU9MHxvKm4sa1tvXT0odSZTKTw8M3w3JnU7ZD1ufWZvcihzPTA7czx0O3MrKylmb3IoZj1pKigodT0wfHMqYSkmUyl8KDcmdSk8PDMsbz0wO288ZTtvKyspd1t5XT1oW2Yra1tvXV0seSs9bX12YXIgeD10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocHx8NCE9PW18fHh8fCh4PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSx4KWZvcihjPTA7YzxiOylmb3IodT0wLGw9MDt1PG07dSsrLGMrKyxsKz0yKXdbY109KHdbY10qeFtsXT4+OCkreFtsKzFdO3JldHVybiB3fX0se2tleToiX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX19LHtrZXk6Il9jb252ZXJ0WWNjVG9SZ2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTMpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09dC0xNzkuNDU2KzEuNDAyKm4sZVthKzFdPXQrMTM1LjQ1OS0uMzQ0KnItLjcxNCpuLGVbYSsyXT10LTIyNi44MTYrMS43NzIqcjtyZXR1cm4gZX19LHtrZXk6Il9jb252ZXJ0WWNja1RvUmdiIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaT0wLG89MCxzPWUubGVuZ3RoO288cztvKz00KXQ9ZVtvXSxyPWVbbysxXSxuPWVbbysyXSxhPWVbbyszXSxlW2krK109ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmEtLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyphKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqYSsuNDgzNTcwODg0NTEyNjUpK2EqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmErLjQ4NDc5MTU2MTQ5MDc3NiksZVtpKytdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyphLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMiphLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCphKy4yNTgwMjkxMDIwNjg0NSkrYSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqYS0uMjEzNzQyNDAwMzIzNjY1KSxlW2krK109ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqYSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMiphLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyphKy4xMTY5MzUwMjA0NjUxNDUpK2EqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmErLjI0MTY1MjYwMjMyNDA3KTtyZXR1cm4gZS5zdWJhcnJheSgwLGkpfX0se2tleToiX2NvbnZlcnRZY2NrVG9DbXlrIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9fSx7a2V5OiJfY29udmVydENteWtUb1JnYiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGk9MCxvPTAscz1lLmxlbmd0aDtvPHM7bys9NCl0PWVbb10scj1lW28rMV0sbj1lW28rMl0sYT1lW28rM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuZm9yY2VSR0IsYT12b2lkIDAhPT1uJiZuLG89ZS5pc1NvdXJjZVBERixzPXZvaWQgMCE9PW8mJm87aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IGcoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTt2YXIgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiZhKXt2YXIgdSxsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMubGVuZ3RoKSxmPTAsaD1pKGMpO3RyeXtmb3IoaC5zKCk7ISh1PWgubigpKS5kb25lOyl7dmFyIGQ9dS52YWx1ZTtsW2YrK109ZCxsW2YrK109ZCxsW2YrK109ZH19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGx9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihjKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fV0pLGV9KCk7dC5KcGVnSW1hZ2U9TX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDE1OSksbz1yKDIpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX12YXIgbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYyhlLHQpfShoLGUpO3ZhciB0LHIsYSxsLGY9KGE9aCxsPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9dShhKTtpZihsKXt2YXIgcj11KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxoKSwobj1mLmNhbGwodGhpcyx0KSkuc3RyZWFtPWUsbi5kaWN0PWUuZGljdCxuLm1heWJlTGVuZ3RoPXQsbi5wYXJhbXM9cixufXJldHVybiB0PWgsKHI9W3trZXk6ImJ5dGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZil7dmFyIGU9bmV3IGkuSnB4SW1hZ2U7ZS5wYXJzZSh0aGlzLmJ5dGVzKTt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxhPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1hKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtmb3IodmFyIG89bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqcipuKSxzPTA7czxhO3MrKylmb3IodmFyIGM9ZS50aWxlc1tzXSx1PWMud2lkdGgsbD1jLmhlaWdodCxmPWMubGVmdCxoPWMudG9wLGQ9Yy5pdGVtcyxwPTAsZz0odCpoK2YpKm4sdj10Km4seT11Km4sbT0wO208bDttKyspe3ZhciBiPWQuc3ViYXJyYXkocCxwK3kpO28uc2V0KGIsZykscCs9eSxnKz12fXRoaXMuYnVmZmVyPW99dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoLHRoaXMuZW9mPSEwfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksaH0oYS5EZWNvZGVTdHJlYW0pO3QuSnB4U3RyZWFtPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweEltYWdlPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxMzUpLG89cigxNTUpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZihlLHQpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZChlKTtpZih0KXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9dmFyIHA9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfXJldHVybiBjKHIpfShhLkJhc2VFeGNlcHRpb24pLGc9e0xMOjAsTEg6MSxITDoxLEhIOjJ9LHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dSh0aGlzLGUpLHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cmV0dXJuIGMoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsaS5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD1lLmxlbmd0aCxyPTA7cjx0Oyl7dmFyIG49OCxvPSgwLGkucmVhZFVpbnQzMikoZSxyKSxzPSgwLGkucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPW4sMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLHIpKygwLGkucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsbis9OCksMD09PW8mJihvPXQtcituKSxvPG4pdGhyb3cgbmV3IHAoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgYz1vLW4sdT0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOnU9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciBsPWVbcl07aWYoMT09PWwpe3ZhciBmPSgwLGkucmVhZFVpbnQzMikoZSxyKzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLGEud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT1sJiYoMCxhLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUscixyK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLGkucmVhZFVpbnQzMikoZSxyKSYmKDAsYS53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsYS53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQocywiICgiKS5jb25jYXQoaCwiKS4iKSl9dSYmKHIrPWMpfWVsc2UgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKX19LHtrZXk6InBhcnNlSW1hZ2VQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRCeXRlKCk7dD49MDspaWYoNjUzNjE9PSh0PDw4fCh0PWUuZ2V0Qnl0ZSgpKSkpe2Uuc2tpcCg0KTt2YXIgcj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7dmFyIG89ZS5nZXRVaW50MTYoKTtyZXR1cm4gdGhpcy53aWR0aD1yLWEsdGhpcy5oZWlnaHQ9bi1pLHRoaXMuY29tcG9uZW50c0NvdW50PW8sdm9pZCh0aGlzLmJpdHNQZXJDb21wb25lbnQ9OCl9dGhyb3cgbmV3IHAoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19LHtrZXk6InBhcnNlQ29kZXN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9LG89ITE7dHJ5e2Zvcih2YXIgcz10O3MrMTxyOyl7dmFyIGM9KDAsaS5yZWFkVWludDE2KShlLHMpO3MrPTI7dmFyIHU9MCxsPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2goYyl7Y2FzZSA2NTM1OTpuLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnU9KDAsaS5yZWFkVWludDE2KShlLHMpO3ZhciBiPXt9O2IuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUscys0KSxiLllzaXo9KDAsaS5yZWFkVWludDMyKShlLHMrOCksYi5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxMiksYi5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxNiksYi5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyMCksYi5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyNCksYi5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLHMrMjgpLGIuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxzKzMyKTt2YXIgdz0oMCxpLnJlYWRVaW50MTYpKGUscyszNik7Yi5Dc2l6PXc7dmFyIGs9W107bD1zKzM4O2Zvcih2YXIgUz0wO1M8dztTKyspe3ZhciB4PXtwcmVjaXNpb246MSsoMTI3JmVbbF0pLGlzU2lnbmVkOiEhKDEyOCZlW2xdKSxYUnNpejplW2wrMV0sWVJzaXo6ZVtsKzJdfTtsKz0zLHkoeCxiKSxrLnB1c2goeCl9bi5TSVo9YixuLmNvbXBvbmVudHM9ayxtKG4sayksbi5RQ0M9W10sbi5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgTz17fTtzd2l0Y2gobD1zKzIsMzEmKGY9ZVtsKytdKSl7Y2FzZSAwOmQ9OCxnPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGc9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrZil9Zm9yKE8ubm9RdWFudGl6YXRpb249OD09PWQsTy5zY2FsYXJFeHBvdW5kZWQ9ZyxPLmd1YXJkQml0cz1mPj41LGg9W107bDx1K3M7KXt2YXIgQT17fTs4PT09ZD8oQS5lcHNpbG9uPWVbbCsrXT4+MyxBLm11PTApOihBLmVwc2lsb249ZVtsXT4+MyxBLm11PSg3JmVbbF0pPDw4fGVbbCsxXSxsKz0yKSxoLnB1c2goQSl9Ty5TUHFjZHM9aCxuLm1haW5IZWFkZXI/bi5RQ0Q9Tzoobi5jdXJyZW50VGlsZS5RQ0Q9TyxuLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgQz17fTtsPXMrMjt2YXIgRj12b2lkIDA7c3dpdGNoKG4uU0laLkNzaXo8MjU3P0Y9ZVtsKytdOihGPSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yKSwzMSYoZj1lW2wrK10pKXtjYXNlIDA6ZD04LGc9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZz0hMTticmVhaztjYXNlIDI6ZD0xNixnPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitmKX1mb3IoQy5ub1F1YW50aXphdGlvbj04PT09ZCxDLnNjYWxhckV4cG91bmRlZD1nLEMuZ3VhcmRCaXRzPWY+PjUsaD1bXTtsPHUrczspe3ZhciBQPXt9Ozg9PT1kPyhQLmVwc2lsb249ZVtsKytdPj4zLFAubXU9MCk6KFAuZXBzaWxvbj1lW2xdPj4zLFAubXU9KDcmZVtsXSk8PDh8ZVtsKzFdLGwrPTIpLGgucHVzaChQKX1DLlNQcWNkcz1oLG4ubWFpbkhlYWRlcj9uLlFDQ1tGXT1DOm4uY3VycmVudFRpbGUuUUNDW0ZdPUM7YnJlYWs7Y2FzZSA2NTM2Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgVD17fTtsPXMrMjt2YXIgaj1lW2wrK107VC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmaiksVC5zb3BNYXJrZXJVc2VkPSEhKDImaiksVC5lcGhNYXJrZXJVc2VkPSEhKDQmaiksVC5wcm9ncmVzc2lvbk9yZGVyPWVbbCsrXSxULmxheWVyc0NvdW50PSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yLFQubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtsKytdLFQuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbbCsrXSxULnhjYj0yKygxNSZlW2wrK10pLFQueWNiPTIrKDE1JmVbbCsrXSk7dmFyIEw9ZVtsKytdO2lmKFQuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkwpLFQucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkwpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmTCksVC52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmTCksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkwpLFQuc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZMKSxULnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2wrK10sVC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtmb3IodmFyIFI9W107bDx1K3M7KXt2YXIgTj1lW2wrK107Ui5wdXNoKHtQUHg6MTUmTixQUHk6Tj4+NH0pfVQucHJlY2luY3RzU2l6ZXM9Un12YXIgRD1bXTtULnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkQucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZELnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLFQudmVydGljYWxseVN0cmlwZSYmRC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZELnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxELmxlbmd0aD4wJiYobz0hMCwoMCxhLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChELmpvaW4oIiwgIiksIikuIikpKSxuLm1haW5IZWFkZXI/bi5DT0Q9VDoobi5jdXJyZW50VGlsZS5DT0Q9VCxuLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKSwodj17fSkuaW5kZXg9KDAsaS5yZWFkVWludDE2KShlLHMrMiksdi5sZW5ndGg9KDAsaS5yZWFkVWludDMyKShlLHMrNCksdi5kYXRhRW5kPXYubGVuZ3RoK3MtMix2LnBhcnRJbmRleD1lW3MrOF0sdi5wYXJ0c0NvdW50PWVbcys5XSxuLm1haW5IZWFkZXI9ITEsMD09PXYucGFydEluZGV4JiYodi5DT0Q9bi5DT0Qsdi5DT0M9bi5DT0Muc2xpY2UoMCksdi5RQ0Q9bi5RQ0Qsdi5RQ0M9bi5RQ0Muc2xpY2UoMCkpLG4uY3VycmVudFRpbGU9djticmVhaztjYXNlIDY1NDI3OjA9PT0odj1uLmN1cnJlbnRUaWxlKS5wYXJ0SW5kZXgmJihfKG4sdi5pbmRleCksSShuKSksRShuLGUscyx1PXYuZGF0YUVuZC1zKTticmVhaztjYXNlIDY1MzYzOigwLGEud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrYy50b1N0cmluZygxNikpfXMrPXV9fWNhdGNoKGUpe2lmKG98fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IHAoZS5tZXNzYWdlKTsoMCxhLndhcm4pKCdKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICInLmNvbmNhdChlLm1lc3NhZ2UsJyIuJykpfXRoaXMudGlsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W10saT0wLG89ZS50aWxlcy5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWUudGlsZXNbaV0sYz1bXSx1PTA7dTxuO3UrKyljW3VdPU0oZSxzLHUpO3ZhciBsPWNbMF0sZj1uZXcgVWludDhDbGFtcGVkQXJyYXkobC5pdGVtcy5sZW5ndGgqbiksaD17bGVmdDpsLmxlZnQsdG9wOmwudG9wLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGl0ZW1zOmZ9LGQ9dm9pZCAwLHA9dm9pZCAwLGc9MCx2PXZvaWQgMCx5PXZvaWQgMCxtPXZvaWQgMCxiPXZvaWQgMCx3PXZvaWQgMDtpZihzLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pe3ZhciBrPTQ9PT1uLFM9Y1swXS5pdGVtcyx4PWNbMV0uaXRlbXMsTz1jWzJdLml0ZW1zLEE9az9jWzNdLml0ZW1zOm51bGw7cD0uNSsoMTI4PDwoZD1yWzBdLnByZWNpc2lvbi04KSk7dmFyIEM9cy5jb21wb25lbnRzWzBdLEY9bi0zO2lmKHk9Uy5sZW5ndGgsQy5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcih2PTA7djx5O3YrKyxnKz1GKXttPVNbdl0rcCxiPXhbdl07dmFyIFA9bS0oKHc9T1t2XSkrYj4+Mik7ZltnKytdPVArdz4+ZCxmW2crK109UD4+ZCxmW2crK109UCtiPj5kfWVsc2UgZm9yKHY9MDt2PHk7disrLGcrPUYpbT1TW3ZdK3AsYj14W3ZdLHc9T1t2XSxmW2crK109bSsxLjQwMip3Pj5kLGZbZysrXT1tLS4zNDQxMypiLS43MTQxNCp3Pj5kLGZbZysrXT1tKzEuNzcyKmI+PmQ7aWYoaylmb3Iodj0wLGc9Mzt2PHk7disrLGcrPTQpZltnXT1BW3ZdK3A+PmR9ZWxzZSBmb3IodmFyIFQ9MDtUPG47VCsrKXt2YXIgST1jW1RdLml0ZW1zO2ZvcihwPS41KygxMjg8PChkPXJbVF0ucHJlY2lzaW9uLTgpKSxnPVQsdj0wLHk9SS5sZW5ndGg7djx5O3YrKylmW2ddPUlbdl0rcD4+ZCxnKz1ufWEucHVzaChoKX1yZXR1cm4gYX0obiksdGhpcy53aWR0aD1uLlNJWi5Yc2l6LW4uU0laLlhPc2l6LHRoaXMuaGVpZ2h0PW4uU0laLllzaXotbi5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9bi5TSVouQ3Npen19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHIsbj1lLlNJWixhPVtdLGk9TWF0aC5jZWlsKChuLlhzaXotbi5YVE9zaXopL24uWFRzaXopLG89TWF0aC5jZWlsKChuLllzaXotbi5ZVE9zaXopL24uWVRzaXopLHM9MDtzPG87cysrKWZvcih2YXIgYz0wO2M8aTtjKyspKHI9e30pLnR4MD1NYXRoLm1heChuLlhUT3NpeitjKm4uWFRzaXosbi5YT3Npeiksci50eTA9TWF0aC5tYXgobi5ZVE9zaXorcypuLllUc2l6LG4uWU9zaXopLHIudHgxPU1hdGgubWluKG4uWFRPc2l6KyhjKzEpKm4uWFRzaXosbi5Yc2l6KSxyLnR5MT1NYXRoLm1pbihuLllUT3NpeisocysxKSpuLllUc2l6LG4uWXNpeiksci53aWR0aD1yLnR4MS1yLnR4MCxyLmhlaWdodD1yLnR5MS1yLnR5MCxyLmNvbXBvbmVudHM9W10sYS5wdXNoKHIpO2UudGlsZXM9YTtmb3IodmFyIHU9MCxsPW4uQ3Npejt1PGw7dSsrKWZvcih2YXIgZj10W3VdLGg9MCxkPWEubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPXt9O3I9YVtoXSxwLnRjeDA9TWF0aC5jZWlsKHIudHgwL2YuWFJzaXopLHAudGN5MD1NYXRoLmNlaWwoci50eTAvZi5ZUnNpeikscC50Y3gxPU1hdGguY2VpbChyLnR4MS9mLlhSc2l6KSxwLnRjeTE9TWF0aC5jZWlsKHIudHkxL2YuWVJzaXopLHAud2lkdGg9cC50Y3gxLXAudGN4MCxwLmhlaWdodD1wLnRjeTEtcC50Y3kwLHIuY29tcG9uZW50c1t1XT1wfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxhPXt9O3JldHVybiBuLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM/KGEuUFB4PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB4LGEuUFB5PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB5KTooYS5QUHg9MTUsYS5QUHk9MTUpLGEueGNiXz1yPjA/TWF0aC5taW4obi54Y2IsYS5QUHgtMSk6TWF0aC5taW4obi54Y2IsYS5QUHgpLGEueWNiXz1yPjA/TWF0aC5taW4obi55Y2IsYS5QUHktMSk6TWF0aC5taW4obi55Y2IsYS5QUHkpLGF9ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLG89MTw8ci5QUHgrKGk/MDotMSkscz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLHU9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsbD1jKnU7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOnUsbnVtcHJlY2luY3RzOmwscHJlY2luY3RXaWR0aEluU3ViYmFuZDpvLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOnN9fWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBuLGEsaSxvLHM9ci54Y2JfLGM9ci55Y2JfLHU9MTw8cyxsPTE8PGMsZj10LnRieDA+PnMsaD10LnRieTA+PmMsZD10LnRieDErdS0xPj5zLHA9dC50YnkxK2wtMT4+YyxnPXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsdj1bXSx5PVtdO2ZvcihhPWg7YTxwO2ErKylmb3Iobj1mO248ZDtuKyspaWYoKGk9e2NieDpuLGNieTphLHRieDA6dSpuLHRieTA6bCphLHRieDE6dSoobisxKSx0YnkxOmwqKGErMSl9KS50YngwXz1NYXRoLm1heCh0LnRieDAsaS50YngwKSxpLnRieTBfPU1hdGgubWF4KHQudGJ5MCxpLnRieTApLGkudGJ4MV89TWF0aC5taW4odC50YngxLGkudGJ4MSksaS50YnkxXz1NYXRoLm1pbih0LnRieTEsaS50YnkxKSxvPU1hdGguZmxvb3IoKGkudGJ4MF8tdC50YngwKS9nLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKGkudGJ5MF8tdC50YnkwKS9nLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSpnLm51bXByZWNpbmN0c3dpZGUsaS5wcmVjaW5jdE51bWJlcj1vLGkuc3ViYmFuZFR5cGU9dC50eXBlLGkuTGJsb2NrPTMsIShpLnRieDFfPD1pLnRieDBffHxpLnRieTFfPD1pLnRieTBfKSl7di5wdXNoKGkpO3ZhciBtPXlbb107dm9pZCAwIT09bT8objxtLmNieE1pbj9tLmNieE1pbj1uOm4+bS5jYnhNYXgmJihtLmNieE1heD1uKSxhPG0uY2J5TWluP20uY2J4TWluPWE6YT5tLmNieU1heCYmKG0uY2J5TWF4PWEpKTp5W29dPW09e2NieE1pbjpuLGNieU1pbjphLGNieE1heDpuLGNieU1heDphfSxpLnByZWNpbmN0PW19dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpzLGNvZGVibG9ja0hlaWdodDpjLG51bWNvZGVibG9ja3dpZGU6ZC1mKzEsbnVtY29kZWJsb2NraGlnaDpwLWgrMX0sdC5jb2RlYmxvY2tzPXYsdC5wcmVjaW5jdHM9eX1mdW5jdGlvbiBTKGUsdCxyKXtmb3IodmFyIG49W10sYT1lLnN1YmJhbmRzLGk9MCxvPWEubGVuZ3RoO2k8bztpKyspZm9yKHZhciBzPWFbaV0uY29kZWJsb2NrcyxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgbD1zW2NdO2wucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2gobCl9cmV0dXJue2xheWVyTnVtYmVyOnIsY29kZWJsb2NrczpufX1mdW5jdGlvbiB4KGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89MCxzPTA7czxpO3MrKylvPU1hdGgubWF4KG8sbi5jb21wb25lbnRzW3NdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsdT0wLGw9MCxmPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPGE7YysrKXtmb3IoO3U8PW87dSsrKXtmb3IoO2w8aTtsKyspe3ZhciBlPW4uY29tcG9uZW50c1tsXTtpZighKHU+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbdV0scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZjxyOyl7dmFyIHM9Uyh0LGYsYyk7cmV0dXJuIGYrKyxzfWY9MH19bD0wfXU9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixvPTAscz0wO3M8aTtzKyspbz1NYXRoLm1heChvLG4uY29tcG9uZW50c1tzXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTt2YXIgYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7Yzw9bztjKyspe2Zvcig7dTxhO3UrKyl7Zm9yKDtsPGk7bCsrKXt2YXIgZT1uLmNvbXBvbmVudHNbbF07aWYoIShjPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe2Zvcih2YXIgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Y8cjspe3ZhciBzPVModCxmLHUpO3JldHVybiBmKyssc31mPTB9fWw9MH11PTB9dGhyb3cgbmV3IHAoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIEEoZSl7dmFyIHQscixuLGEsaT1lLlNJWixvPWUuY3VycmVudFRpbGUuaW5kZXgscz1lLnRpbGVzW29dLGM9cy5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LHU9aS5Dc2l6LGw9MDtmb3Iobj0wO248dTtuKyspe3ZhciBmPXMuY29tcG9uZW50c1tuXTtsPU1hdGgubWF4KGwsZi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX12YXIgaD1uZXcgSW50MzJBcnJheShsKzEpO2ZvcihyPTA7cjw9bDsrK3Ipe3ZhciBkPTA7Zm9yKG49MDtuPHU7KytuKXt2YXIgZz1zLmNvbXBvbmVudHNbbl0ucmVzb2x1dGlvbnM7cjxnLmxlbmd0aCYmKGQ9TWF0aC5tYXgoZCxnW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX1oW3JdPWR9dD0wLHI9MCxuPTAsYT0wLHRoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cjw9bDtyKyspe2Zvcig7YTxoW3JdO2ErKyl7Zm9yKDtuPHU7bisrKXt2YXIgZT1zLmNvbXBvbmVudHNbbl07aWYoIShyPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe3ZhciBpPWUucmVzb2x1dGlvbnNbcl0sbz1pLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShhPj1vKSl7Zm9yKDt0PGM7KXt2YXIgZj1TKGksYSx0KTtyZXR1cm4gdCsrLGZ9dD0wfX19bj0wfWE9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPW8sYz0wLHU9MCxsPTAsZj0wLGg9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2g8cy5tYXhOdW1IaWdoO2grKyl7Zm9yKDtmPHMubWF4TnVtV2lkZTtmKyspe2Zvcig7bDxpO2wrKyl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1tsXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDt1PD10O3UrKyl7dmFyIHI9ZS5yZXNvbHV0aW9uc1t1XSxkPW8uY29tcG9uZW50c1tsXS5yZXNvbHV0aW9uc1t1XSxnPVAoZixoLGQscyxyKTtpZihudWxsIT09Zyl7Zm9yKDtjPGE7KXt2YXIgdj1TKHIsZyxjKTtyZXR1cm4gYysrLHZ9Yz0wfX11PTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPTAsYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7dTxpOysrdSl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1t1XSx0PW8uY29tcG9uZW50c1t1XSxyPWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmPHQubWF4TnVtSGlnaDtmKyspe2Zvcig7bDx0Lm1heE51bVdpZGU7bCsrKXtmb3IoO2M8PXI7YysrKXt2YXIgaD1lLnJlc29sdXRpb25zW2NdLGQ9dC5yZXNvbHV0aW9uc1tjXSxnPVAobCxmLGQsdCxoKTtpZihudWxsIT09Zyl7Zm9yKDtzPGE7KXt2YXIgdj1TKGgsZyxzKTtyZXR1cm4gcysrLHZ9cz0wfX1jPTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUChlLHQscixuLGEpe3ZhciBpPWUqbi5taW5XaWR0aCxvPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxvJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO3ZhciBzPW8vci53aWR0aCphLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO3JldHVybiBpL3IuaGVpZ2h0K3N9ZnVuY3Rpb24gVChlKXtmb3IodmFyIHQ9ZS5jb21wb25lbnRzLmxlbmd0aCxyPU51bWJlci5NQVhfVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLGE9MCxpPTAsbz1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe2Zvcih2YXIgYz1lLmNvbXBvbmVudHNbc10sdT1jLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkodSsxKSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLGQ9MCxwPTAsZz0xLHY9dTt2Pj0wOy0tdil7dmFyIHk9Yy5yZXNvbHV0aW9uc1t2XSxtPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxiPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7Zj1NYXRoLm1pbihmLG0pLGg9TWF0aC5taW4oaCxiKSxkPU1hdGgubWF4KGQseS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSkscD1NYXRoLm1heChwLHkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbdl09e3dpZHRoOm0saGVpZ2h0OmJ9LGc8PD0xfXI9TWF0aC5taW4ocixmKSxuPU1hdGgubWluKG4saCksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxwKSxvW3NdPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmYsbWluSGVpZ2h0OmgsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6cH19cmV0dXJue2NvbXBvbmVudHM6byxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIEkoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT10LkNzaXosaT0wO2k8YTtpKyspe2Zvcih2YXIgbz1uLmNvbXBvbmVudHNbaV0scz1vLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsYz1bXSx1PVtdLGw9MDtsPD1zO2wrKyl7dmFyIGY9YigwLG8sbCksaD17fSxkPTE8PHMtbDtoLnRyeDA9TWF0aC5jZWlsKG8udGN4MC9kKSxoLnRyeTA9TWF0aC5jZWlsKG8udGN5MC9kKSxoLnRyeDE9TWF0aC5jZWlsKG8udGN4MS9kKSxoLnRyeTE9TWF0aC5jZWlsKG8udGN5MS9kKSxoLnJlc0xldmVsPWwsdygwLGgsZiksYy5wdXNoKGgpO3ZhciBnPXZvaWQgMDtpZigwPT09bCkoZz17fSkudHlwZT0iTEwiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL2QpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL2QpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL2QpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL2QpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSxoLnN1YmJhbmRzPVtnXTtlbHNle3ZhciB2PTE8PHMtbCsxLHk9W107KGc9e30pLnR5cGU9IkhMIixnLnRieDA9TWF0aC5jZWlsKG8udGN4MC92LS41KSxnLnRieTA9TWF0aC5jZWlsKG8udGN5MC92KSxnLnRieDE9TWF0aC5jZWlsKG8udGN4MS92LS41KSxnLnRieTE9TWF0aC5jZWlsKG8udGN5MS92KSxnLnJlc29sdXRpb249aCxrKDAsZyxmKSx1LnB1c2goZykseS5wdXNoKGcpLChnPXt9KS50eXBlPSJMSCIsZy50YngwPU1hdGguY2VpbChvLnRjeDAvdiksZy50YnkwPU1hdGguY2VpbChvLnRjeTAvdi0uNSksZy50YngxPU1hdGguY2VpbChvLnRjeDEvdiksZy50YnkxPU1hdGguY2VpbChvLnRjeTEvdi0uNSksZy5yZXNvbHV0aW9uPWgsaygwLGcsZiksdS5wdXNoKGcpLHkucHVzaChnKSwoZz17fSkudHlwZT0iSEgiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL3YtLjUpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL3YtLjUpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL3YtLjUpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL3YtLjUpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSx5LnB1c2goZyksaC5zdWJiYW5kcz15fX1vLnJlc29sdXRpb25zPWMsby5zdWJiYW5kcz11fXZhciBtPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChtKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHgoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBPKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgQShlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IEMoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBGKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHAoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KG0pKX19ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgYSxvPTAscz0wLGM9ITE7ZnVuY3Rpb24gdShlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssYz8oYT1hPDw3fG4scys9NyxjPSExKTooYT1hPDw4fG4scys9OCksMjU1PT09biYmKGM9ITApfXJldHVybiBhPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGMmJihvKyssYz0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT11KDEpKXJldHVybiAxO2lmKDA9PT11KDEpKXJldHVybiAyO3ZhciBlPXUoMik7cmV0dXJuIGU8Mz9lKzM6KGU9dSg1KSk8MzE/ZSs2OihlPXUoNykpKzM3fWZvcih2YXIgZz1lLmN1cnJlbnRUaWxlLmluZGV4LHY9ZS50aWxlc1tnXSx5PWUuQ09ELnNvcE1hcmtlclVzZWQsbT1lLkNPRC5lcGhNYXJrZXJVc2VkLGI9di5wYWNrZXRzSXRlcmF0b3I7bzxuOyl7aCgpLHkmJmwoMTQ1KSYmZig0KTt2YXIgdz1iLm5leHRQYWNrZXQoKTtpZih1KDEpKXtmb3IodmFyIGs9dy5sYXllck51bWJlcixTPVtdLHg9dm9pZCAwLE89MCxBPXcuY29kZWJsb2Nrcy5sZW5ndGg7TzxBO08rKyl7dmFyIEM9KHg9dy5jb2RlYmxvY2tzW09dKS5wcmVjaW5jdCxGPXguY2J4LUMuY2J4TWluLFA9eC5jYnktQy5jYnlNaW4sVD0hMSxJPSExLEU9dm9pZCAwO2lmKHZvaWQgMCE9PXguaW5jbHVkZWQpVD0hIXUoMSk7ZWxzZXt2YXIgaj12b2lkIDA7aWYodm9pZCAwIT09KEM9eC5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlqPUMuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBNPUMuY2J4TWF4LUMuY2J4TWluKzEsXz1DLmNieU1heC1DLmNieU1pbisxO2o9bmV3IFUoTSxfLGspLEU9bmV3IEIoTSxfKSxDLmluY2x1c2lvblRyZWU9aixDLnplcm9CaXRQbGFuZXNUcmVlPUU7Zm9yKHZhciBMPTA7TDxrO0wrKylpZigwIT09dSgxKSl0aHJvdyBuZXcgcCgiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGoucmVzZXQoRixQLGspKWZvcig7Oyl7aWYoIXUoMSkpe2ouaW5jcmVtZW50VmFsdWUoayk7YnJlYWt9aWYoIWoubmV4dExldmVsKCkpe3guaW5jbHVkZWQ9ITAsVD1JPSEwO2JyZWFrfX19aWYoVCl7aWYoSSl7Zm9yKChFPUMuemVyb0JpdFBsYW5lc1RyZWUpLnJlc2V0KEYsUCk7OylpZih1KDEpKXtpZighRS5uZXh0TGV2ZWwoKSlicmVha31lbHNlIEUuaW5jcmVtZW50VmFsdWUoKTt4Lnplcm9CaXRQbGFuZXM9RS52YWx1ZX1mb3IodmFyIFI9ZCgpO3UoMSk7KXguTGJsb2NrKys7dmFyIE49KDAsaS5sb2cyKShSKSxEPXUoKFI8MTw8Tj9OLTE6TikreC5MYmxvY2spO1MucHVzaCh7Y29kZWJsb2NrOngsY29kaW5ncGFzc2VzOlIsZGF0YUxlbmd0aDpEfSl9fWZvcihoKCksbSYmbCgxNDYpO1MubGVuZ3RoPjA7KXt2YXIgJD1TLnNoaWZ0KCk7dm9pZCAwPT09KHg9JC5jb2RlYmxvY2spLmRhdGEmJih4LmRhdGE9W10pLHguZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citvLGVuZDpyK28rJC5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczokLmNvZGluZ3Bhc3Nlc30pLG8rPSQuZGF0YUxlbmd0aH19fXJldHVybiBvfWZ1bmN0aW9uIGooZSx0LHIsbixhLGkscyxjLHUpe2Zvcih2YXIgbD1uLnRieDAsZj1uLnRieTAsaD1uLnRieDEtbi50YngwLGQ9bi5jb2RlYmxvY2tzLHA9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAsZz0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCx2PTAseT1kLmxlbmd0aDt2PHk7Kyt2KXt2YXIgbT1kW3ZdLGI9bS50YngxXy1tLnRieDBfLHc9bS50YnkxXy1tLnRieTBfO2lmKDAhPT1iJiYwIT09dyYmdm9pZCAwIT09bS5kYXRhKXt2YXIgaz1uZXcgJChiLHcsbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMsaSksUz0yLHg9bS5kYXRhLE89MCxBPTAsQz12b2lkIDAsRj12b2lkIDAsUD12b2lkIDA7Zm9yKEM9MCxGPXgubGVuZ3RoO0M8RjtDKyspTys9KFA9eFtDXSkuZW5kLVAuc3RhcnQsQSs9UC5jb2RpbmdwYXNzZXM7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoTyksST0wO2ZvcihDPTAsRj14Lmxlbmd0aDtDPEY7QysrKXt2YXIgRT0oUD14W0NdKS5kYXRhLnN1YmFycmF5KFAuc3RhcnQsUC5lbmQpO1Quc2V0KEUsSSksSSs9RS5sZW5ndGh9dmFyIGo9bmV3IG8uQXJpdGhtZXRpY0RlY29kZXIoVCwwLE8pO2ZvcihrLnNldERlY29kZXIoaiksQz0wO0M8QTtDKyspe3N3aXRjaChTKXtjYXNlIDA6ay5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6ay5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjprLnJ1bkNsZWFudXBQYXNzKCksYyYmay5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfXUmJmsucmVzZXQoKSxTPShTKzEpJTN9dmFyIE09bS50YngwXy1sKyhtLnRieTBfLWYpKmgsXz1rLmNvZWZmaWNlbnRzU2lnbixMPWsuY29lZmZpY2VudHNNYWduaXR1ZGUsUj1rLmJpdHNEZWNvZGVkLE49cz8wOi41LEQ9dm9pZCAwLEI9dm9pZCAwLFU9dm9pZCAwO0k9MDt2YXIgWD0iTEwiIT09bi50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7dmFyIEg9MiooTS9ofDApKih0LWgpK3ArZztmb3IoRD0wO0Q8YjtEKyspe2lmKDAhPT0oQj1MW0ldKSlCPShCK04pKmEsMCE9PV9bSV0mJihCPS1CKSxVPVJbSV0sZVtYP0grKE08PDEpOk1dPXMmJlU+PWk/QjpCKigxPDxpLVUpO00rKyxJKyt9TSs9aC1ifX19fWZ1bmN0aW9uIE0oZSx0LHIpe2Zvcih2YXIgbj10LmNvbXBvbmVudHNbcl0sYT1uLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxpPW4ucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWEuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LHM9aS5TUHFjZHMsYz1pLnNjYWxhckV4cG91bmRlZCx1PWkuZ3VhcmRCaXRzLGw9YS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGY9YS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGg9ZS5jb21wb25lbnRzW3JdLnByZWNpc2lvbixkPWEucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9ZD9uZXcgcTpuZXcgSCx2PVtdLHk9MCxtPTA7bTw9bzttKyspe2Zvcih2YXIgYj1uLnJlc29sdXRpb25zW21dLHc9Yi50cngxLWIudHJ4MCxrPWIudHJ5MS1iLnRyeTAsUz1uZXcgRmxvYXQzMkFycmF5KHcqaykseD0wLE89Yi5zdWJiYW5kcy5sZW5ndGg7eDxPO3grKyl7dmFyIEE9dm9pZCAwLEM9dm9pZCAwO2M/KEE9c1t5XS5tdSxDPXNbeV0uZXBzaWxvbix5KyspOihBPXNbMF0ubXUsQz1zWzBdLmVwc2lsb24rKG0+MD8xLW06MCkpO3ZhciBGPWIuc3ViYmFuZHNbeF0sUD1nW0YudHlwZV07aihTLHcsMCxGLGQ/MTpNYXRoLnBvdygyLGgrUC1DKSooMStBLzIwNDgpLHUrQy0xLGQsbCxmKX12LnB1c2goe3dpZHRoOncsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBUPXAuY2FsY3VsYXRlKHYsbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6VC53aWR0aCxoZWlnaHQ6VC5oZWlnaHQsaXRlbXM6VC5pdGVtc319ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5KcHhJbWFnZT12O3ZhciBMLFIsTixELEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dSh0aGlzLGUpO3ZhciBuPSgwLGkubG9nMikoTWF0aC5tYXgodCxyKSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgbz17d2lkdGg6dCxoZWlnaHQ6cixpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChvKSx0PU1hdGguY2VpbCh0LzIpLHI9TWF0aC5jZWlsKHIvMil9fXJldHVybiBjKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPTAsYT0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGk9ZSt0KihyPXRoaXMubGV2ZWxzW25dKS53aWR0aDtpZih2b2lkIDAhPT1yLml0ZW1zW2ldKXthPXIuaXRlbXNbaV07YnJlYWt9ci5pbmRleD1pLGU+Pj0xLHQ+Pj0xLG4rK31uLS0sKHI9dGhpcy5sZXZlbHNbbl0pLml0ZW1zW3IuaW5kZXhdPWEsdGhpcy5jdXJyZW50TGV2ZWw9bixkZWxldGUgdGhpcy52YWx1ZX19LHtrZXk6ImluY3JlbWVudFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9fSx7a2V5OiJuZXh0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuLS1lPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsKHQ9dGhpcy5sZXZlbHNbZV0pLml0ZW1zW3QuaW5kZXhdPXIsITApfX1dKSxlfSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt1KHRoaXMsZSk7dmFyIGE9KDAsaS5sb2cyKShNYXRoLm1heCh0LHIpKSsxO3RoaXMubGV2ZWxzPVtdO2Zvcih2YXIgbz0wO288YTtvKyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSh0KnIpLGM9MCxsPXMubGVuZ3RoO2M8bDtjKyspc1tjXT1uO3ZhciBmPXt3aWR0aDp0LGhlaWdodDpyLGl0ZW1zOnN9O3RoaXMubGV2ZWxzLnB1c2goZiksdD1NYXRoLmNlaWwodC8yKSxyPU1hdGguY2VpbChyLzIpfX1yZXR1cm4gYyhlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGE9dGhpcy5sZXZlbHNbbl0saT1lK3QqYS53aWR0aDthLmluZGV4PWk7dmFyIG89YS5pdGVtc1tpXTtpZigyNTU9PT1vKWJyZWFrO2lmKG8+cilyZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bix0aGlzLnByb3BhZ2F0ZVZhbHVlcygpLCExO2U+Pj0xLHQ+Pj0xLG4rK31yZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bi0xLCEwfX0se2tleToiaW5jcmVtZW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfX0se2tleToicHJvcGFnYXRlVmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdLHI9dC5pdGVtc1t0LmluZGV4XTstLWU+PTA7KSh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yfX0se2tleToibmV4dExldmVsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybiB0Lml0ZW1zW3QuaW5kZXhdPTI1NSwhKC0tZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSwodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09ciwwKSl9fV0pLGV9KCksJD0oTD0xNyxSPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLE49bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSksRD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpKXt2YXIgbzt1KHRoaXMsZSksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsbz0iSEgiPT09bj9EOiJITCI9PT1uP046Uix0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW87dmFyIHMsYz10KnI7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkoYyksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkoYykscz1pPjE0P25ldyBVaW50MzJBcnJheShjKTppPjY/bmV3IFVpbnQxNkFycmF5KGMpOm5ldyBVaW50OEFycmF5KGMpLHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9cyx0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShjKTt2YXIgbD1uZXcgVWludDhBcnJheShjKTtpZigwIT09YSlmb3IodmFyIGY9MDtmPGM7ZisrKWxbZl09YTt0aGlzLmJpdHNEZWNvZGVkPWwsdGhpcy5yZXNldCgpfXJldHVybiBjKGUsW3trZXk6InNldERlY29kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1sxN109OTIsdGhpcy5jb250ZXh0c1sxOF09Nn19LHtrZXk6InNldE5laWdoYm9yc1NpZ25pZmljYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLndpZHRoLG89dGhpcy5oZWlnaHQscz10PjAsYz10KzE8aTtlPjAmJihuPXItaSxzJiYoYVtuLTFdKz0xNiksYyYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLGUrMTxvJiYobj1yK2kscyYmKGFbbi0xXSs9MTYpLGMmJihhW24rMV0rPTE2KSxhW25dKz00KSxzJiYoYVtyLTFdKz0xKSxjJiYoYVtyKzFdKz0xKSxhW3JdfD0xMjh9fSx7a2V5OiJydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSx1PXRoaXMuYml0c0RlY29kZWQsbD0wO2w8cjtsKz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPWwqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPWwrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgZz1jW2lbaF1dO2lmKGUucmVhZEJpdChzLGcpKXt2YXIgdj10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09dixuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9dVtoXSsrLG9baF18PTF9fX19LHtrZXk6ImRlY29kZVNpZ25CaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdT10aGlzLndpZHRoLGw9dGhpcy5oZWlnaHQsZj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGg9dGhpcy5jb2VmZmljZW50c1NpZ247bz10PjAmJjAhPT1mW3ItMV0sdCsxPHUmJjAhPT1mW3IrMV0/KGk9aFtyKzFdLG49bz8xLWktKGE9aFtyLTFdKToxLWktaSk6bj1vPzEtKGE9aFtyLTFdKS1hOjA7dmFyIGQ9MypuO3JldHVybiBvPWU+MCYmMCE9PWZbci11XSxlKzE8bCYmMCE9PWZbcit1XT8oaT1oW3IrdV0sbj1vPzEtaS0oYT1oW3ItdV0pK2Q6MS1pLWkrZCk6bj1vPzEtKGE9aFtyLXVdKS1hK2Q6ZCxuPj0wPyhzPTkrbixjPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpOihzPTktbixjPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyxzKSksY319LHtrZXk6InJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxvPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLGM9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsdT1yKm4sbD00KnIsZj0wO2Y8dTtmPWUpe2U9TWF0aC5taW4odSxmK2wpO2Zvcih2YXIgaD0wO2g8cjtoKyspZm9yKHZhciBkPWYraDtkPGU7ZCs9cilpZihhW2RdJiYwPT0oMSZjW2RdKSl7dmFyIHA9MTY7MCE9KDImY1tkXSkmJihjW2RdXj0yLHA9MD09KDEyNyZpW2RdKT8xNToxNCk7dmFyIGc9dC5yZWFkQml0KG8scCk7YVtkXT1hW2RdPDwxfGcsc1tkXSsrLGNbZF18PTF9fX19LHtrZXk6InJ1bkNsZWFudXBQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsdT10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIGc9cCpyLHY9cCszPG4seT0wO3k8cjt5Kyspe3ZhciBtPWcreSxiPTAsdz1tLGs9cCxTPXZvaWQgMDtpZih2JiYwPT09bFttXSYmMD09PWxbbStmXSYmMD09PWxbbStoXSYmMD09PWxbbStkXSYmMD09PWFbbV0mJjA9PT1hW20rZl0mJjA9PT1hW20raF0mJjA9PT1hW20rZF0pe2lmKCF0LnJlYWRCaXQocywxOCkpe3VbbV0rKyx1W20rZl0rKyx1W20raF0rKyx1W20rZF0rKztjb250aW51ZX0wIT0oYj10LnJlYWRCaXQocyxMKTw8MXx0LnJlYWRCaXQocyxMKSkmJihrPXArYix3Kz1iKnIpLFM9dGhpcy5kZWNvZGVTaWduQml0KGsseSx3KSxvW3ddPVMsaVt3XT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsseSx3KSxsW3ddfD0yLHc9bTtmb3IodmFyIHg9cDt4PD1rO3grKyx3Kz1yKXVbd10rKztiKyt9Zm9yKGs9cCtiO2s8ZTtrKyssdys9cilpZighaVt3XSYmMD09KDEmbFt3XSkpe3ZhciBPPWNbYVt3XV07MT09PXQucmVhZEJpdChzLE8pJiYoUz10aGlzLmRlY29kZVNpZ25CaXQoayx5LHcpLG9bd109UyxpW3ddPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2Uoayx5LHcpLGxbd118PTIpLHVbd10rK319fX19LHtrZXk6ImNoZWNrU2VnbWVudGF0aW9uU3ltYm9sIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMuY29udGV4dHM7aWYoMTAhPShlLnJlYWRCaXQodCxMKTw8M3xlLnJlYWRCaXQodCxMKTw8MnxlLnJlYWRCaXQodCxMKTw8MXxlLnJlYWRCaXQodCxMKSkpdGhyb3cgbmV3IHAoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1dKSxlfSgpKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFRyYW5zZm9ybS4iKX1yZXR1cm4gYyhlLFt7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dC0xLGE9dCsxLGk9dCtyLTIsbz10K3I7ZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuXT1lW2FdLGVbb109ZVtpXX19LHtrZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGZpbHRlcmAgY2FsbGVkIil9fSx7a2V5OiJpdGVyYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG8scyxjLHUsbD1lLndpZHRoLGY9ZS5oZWlnaHQsaD1lLml0ZW1zLGQ9dC53aWR0aCxwPXQuaGVpZ2h0LGc9dC5pdGVtcztmb3Iobz0wLGE9MDthPGY7YSsrKWZvcihzPTIqYSpkLGk9MDtpPGw7aSsrLG8rKyxzKz0yKWdbc109aFtvXTtoPWUuaXRlbXM9bnVsbDt2YXIgdj1uZXcgRmxvYXQzMkFycmF5KGQrOCk7aWYoMT09PWQpe2lmKDAhPSgxJnIpKWZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZClnW29dKj0uNX1lbHNlIGZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZCl2LnNldChnLnN1YmFycmF5KG8sbytkKSw0KSx0aGlzLmV4dGVuZCh2LDQsZCksdGhpcy5maWx0ZXIodiw0LGQpLGcuc2V0KHYuc3ViYXJyYXkoNCw0K2QpLG8pO3ZhciB5PTE2LG09W107Zm9yKGE9MDthPHk7YSsrKW0ucHVzaChuZXcgRmxvYXQzMkFycmF5KHArOCkpO3ZhciBiLHc9MDtpZihlPTQrcCwxPT09cCl7aWYoMCE9KDEmbikpZm9yKGM9MDtjPGQ7YysrKWdbY10qPS41fWVsc2UgZm9yKGM9MDtjPGQ7YysrKXtpZigwPT09dyl7Zm9yKHk9TWF0aC5taW4oZC1jLHkpLG89YyxzPTQ7czxlO28rPWQscysrKWZvcihiPTA7Yjx5O2IrKyltW2JdW3NdPWdbbytiXTt3PXl9dmFyIGs9bVstLXddO2lmKHRoaXMuZXh0ZW5kKGssNCxwKSx0aGlzLmZpbHRlcihrLDQscCksMD09PXcpZm9yKG89Yy15KzEscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8eTtiKyspZ1tvK2JdPW1bYl1bc119cmV0dXJue3dpZHRoOmQsaGVpZ2h0OnAsaXRlbXM6Z319fV0pLGV9KCksSD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzPXI+PjEsYz0tMS41ODYxMzQzNDIwNTk5MjQsdT0tLjA1Mjk4MDExODU3Mjk2MSxsPS44ODI5MTEwNzU1MzA5MzQsZj0uNDQzNTA2ODUyMDQzOTcxLGg9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKG49KHR8PTApLTMsYT1zKzQ7YS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGk9ZiplWyhuPXQtMiktMV0sYT1zKzM7YS0tJiYobz1mKmVbbisxXSxlW25dPWgqZVtuXS1pLW8sYS0tKTtuKz0yKWk9ZiplWyhuKz0yKSsxXSxlW25dPWgqZVtuXS1pLW87Zm9yKGk9bCplWyhuPXQtMSktMV0sYT1zKzI7YS0tJiYobz1sKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9bCplWyhuKz0yKSsxXSxlW25dLT1pK287Zm9yKGk9dSplWyhuPXQpLTFdLGE9cysxO2EtLSYmKG89dSplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPXUqZVsobis9MikrMV0sZVtuXS09aStvO2lmKDAhPT1zKWZvcihpPWMqZVsobj10KzEpLTFdLGE9czthLS0mJihvPWMqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT1jKmVbKG4rPTIpKzFdLGVbbl0tPWkrb319XSkscn0oWCkscT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9cj4+MTtmb3Iobj10fD0wLGE9aSsxO2EtLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsYT1pO2EtLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fV0pLHJ9KFgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBpPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LG8oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmNhY2hlZERhdGE9MCxuLmJpdHNDYWNoZWQ9MDtmb3IodmFyIGE9NDA5NixpPXtlYXJseUNoYW5nZTpyLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShhKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkoYSksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkoYSksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfSxvPTA7bzwyNTY7KytvKWkuZGljdGlvbmFyeVZhbHVlc1tvXT1vLGkuZGljdGlvbmFyeUxlbmd0aHNbb109MTtyZXR1cm4gbi5sendTdGF0ZT1pLG59cmV0dXJuIHQ9bCwocj1be2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJpdHNDYWNoZWQscj10aGlzLmNhY2hlZERhdGE7dDxlOyl7dmFyIG49dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09bilyZXR1cm4gdGhpcy5lb2Y9ITAsbnVsbDtyPXI8PDh8bix0Kz04fXJldHVybiB0aGlzLmJpdHNDYWNoZWQ9dC09ZSx0aGlzLmNhY2hlZERhdGE9cix0aGlzLmxhc3RDb2RlPW51bGwscj4+PnQmKDE8PGUpLTF9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49MTAyNCxhPXRoaXMubHp3U3RhdGU7aWYoYSl7dmFyIGk9YS5lYXJseUNoYW5nZSxvPWEubmV4dENvZGUscz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLHU9YS5kaWN0aW9uYXJ5UHJldkNvZGVzLGw9YS5jb2RlTGVuZ3RoLGY9YS5wcmV2Q29kZSxoPWEuY3VycmVudFNlcXVlbmNlLGQ9YS5jdXJyZW50U2VxdWVuY2VMZW5ndGgscD0wLGc9dGhpcy5idWZmZXJMZW5ndGgsdj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtuKTtmb3IoZT0wO2U8NTEyO2UrKyl7dmFyIHk9dGhpcy5yZWFkQml0cyhsKSxtPWQ+MDtpZih5PDI1NiloWzBdPXksZD0xO2Vsc2V7aWYoISh5Pj0yNTgpKXtpZigyNTY9PT15KXtsPTksbz0yNTgsZD0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwLGRlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKHk8bylmb3IodD0oZD1jW3ldKS0xLHI9eTt0Pj0wO3QtLSloW3RdPXNbcl0scj11W3JdO2Vsc2UgaFtkKytdPWhbMF19aWYobSYmKHVbb109ZixjW29dPWNbZl0rMSxzW29dPWhbMF0sbD0rK28raSZvK2ktMT9sOjB8TWF0aC5taW4oTWF0aC5sb2cobytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksZj15LG48KHArPWQpKXtkb3tuKz01MTJ9d2hpbGUobjxwKTt2PXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxkO3QrKyl2W2crK109aFt0XX1hLm5leHRDb2RlPW8sYS5jb2RlTGVuZ3RoPWwsYS5wcmV2Q29kZT1mLGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWQsdGhpcy5idWZmZXJMZW5ndGg9Z319fV0pJiZhKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuTFpXU3RyZWFtPXN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIGE9cigxNDgpLGk9cigxMzQpLG89cigyKTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsKGUpfWZ1bmN0aW9uIGwoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9dmFyIGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oZCxlKTt2YXIgdCxyLG4sYSxoPShuPWQsYT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWYobik7aWYoYSl7dmFyIHI9Zih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdSh0aGlzLGUpfSk7ZnVuY3Rpb24gZChlLHQscil7dmFyIG47aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSxuPWguY2FsbCh0aGlzLHQpLCEociBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIHUobixlKTt2YXIgYT1uLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gdShuLGUpO2lmKDIhPT1hJiYoYTwxMHx8YT4xNSkpdGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoYSkpO24ucmVhZEJsb2NrPTI9PT1hP24ucmVhZEJsb2NrVGlmZjpuLnJlYWRCbG9ja1BuZyxuLnN0cj1lLG4uZGljdD1lLmRpY3Q7dmFyIHM9bi5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLGM9bi5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsZj1uLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gbi5waXhCeXRlcz1zKmMrNz4+MyxuLnJvd0J5dGVzPWYqcypjKzc+PjMsdShuLGwobikpfXJldHVybiB0PWQsKHI9W3trZXk6InJlYWRCbG9ja1RpZmYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxuPXRoaXMuYml0cyxhPXRoaXMuY29sb3JzLGk9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IWkubGVuZ3RoLCF0aGlzLmVvZil7dmFyIG8scz0wLGM9MCx1PTAsbD0wLGY9dDtpZigxPT09biYmMT09PWEpZm9yKG89MDtvPGU7KytvKXt2YXIgaD1pW29dXnM7aF49aD4+MSxoXj1oPj4yLHM9KDEmKGhePWg+PjQpKTw8NyxyW2YrK109aH1lbHNlIGlmKDg9PT1uKXtmb3Iobz0wO288YTsrK28pcltmKytdPWlbb107Zm9yKDtvPGU7KytvKXJbZl09cltmLWFdK2lbb10sZisrfWVsc2UgaWYoMTY9PT1uKXt2YXIgZD0yKmE7Zm9yKG89MDtvPGQ7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlO28rPTIpe3ZhciBwPSgoMjU1Jmlbb10pPDw4KSsoMjU1JmlbbysxXSkrKCgyNTUmcltmLWRdKTw8OCkrKDI1NSZyW2YtZCsxXSk7cltmKytdPXA+PjgmMjU1LHJbZisrXT0yNTUmcH19ZWxzZXt2YXIgZz1uZXcgVWludDhBcnJheShhKzEpLHY9KDE8PG4pLTEseT0wLG09dCxiPXRoaXMuY29sdW1ucztmb3Iobz0wO288YjsrK28pZm9yKHZhciB3PTA7dzxhOysrdyl1PG4mJihzPXM8PDh8MjU1JmlbeSsrXSx1Kz04KSxnW3ddPWdbd10rKHM+PnUtbikmdix1LT1uLGM9Yzw8bnxnW3ddLChsKz1uKT49OCYmKHJbbSsrXT1jPj5sLTgmMjU1LGwtPTgpO2w+MCYmKHJbbSsrXT0oYzw8OC1sKSsocyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fX0se2tleToicmVhZEJsb2NrUG5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLCF0aGlzLmVvZil7dmFyIGE9dGhpcy5idWZmZXJMZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihhK2UpLHM9aS5zdWJhcnJheShhLWUsYSk7MD09PXMubGVuZ3RoJiYocz1uZXcgVWludDhBcnJheShlKSk7dmFyIGMsdSxsLGY9YTtzd2l0Y2gocil7Y2FzZSAwOmZvcihjPTA7YzxlOysrYylpW2YrK109bltjXTticmVhaztjYXNlIDE6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT1uW2NdO2Zvcig7YzxlOysrYylpW2ZdPWlbZi10XStuW2NdJjI1NSxmKys7YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylpW2YrK109c1tjXStuW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT0oc1tjXT4+MSkrbltjXTtmb3IoO2M8ZTsrK2MpaVtmXT0oc1tjXStpW2YtdF0+PjEpK25bY10mMjU1LGYrKzticmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXU9c1tjXSxsPW5bY10saVtmKytdPXUrbDtmb3IoO2M8ZTsrK2Mpe3U9c1tjXTt2YXIgaD1zW2MtdF0sZD1pW2YtdF0scD1kK3UtaCxnPXAtZDtnPDAmJihnPS1nKTt2YXIgdj1wLXU7djwwJiYodj0tdik7dmFyIHk9cC1oO3k8MCYmKHk9LXkpLGw9bltjXSxpW2YrK109Zzw9diYmZzw9eT9kK2w6djw9eT91K2w6aCtsfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQocikpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZH0oYS5EZWNvZGVTdHJlYW0pO3QuUHJlZGljdG9yU3RyZWFtPWh9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZpKGUsdCl9KGwsZSk7dmFyIHQscixzLGMsdT0ocz1sLGM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1vKHMpO2lmKGMpe3ZhciByPW8odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwocj11LmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyfXJldHVybiB0PWwsKHI9W3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5SdW5MZW5ndGhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnQ9dC5FcnJvckZvbnQ9dm9pZCAwO3ZhciBuPXIoMiksYT1yKDE2NCksaT1yKDE2Nyksbz1yKDE2OSkscz1yKDE2OCksYz1yKDE2NiksdT1yKDE3MCksbD1yKDE3MSksZj1yKDE3MiksaD1yKDE3MyksZD1yKDE3NCkscD1yKDE3NSksZz1yKDE0NSksdj1yKDE3NikseT1yKDEzNSksbT1yKDEzOSksYj1yKDE3Nyk7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxTKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBrKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1TKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB4KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/eChlLHQpOnZvaWQgMH19ZnVuY3Rpb24geChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PU8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1PKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4gdCYmQyhlLnByb3RvdHlwZSx0KSxyJiZDKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgUD1bWzU3MzQ0LDYzNzQzXSxbMTA0ODU3NiwxMTE0MTA5XV0sVD0xZTMsST1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiZm9udFR5cGUiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJ0eXBlIiwidmVydGljYWwiXSxFPVsiY01hcCIsImRlZmF1bHRFbmNvZGluZyIsImRpZmZlcmVuY2VzIiwiaXNNb25vc3BhY2UiLCJpc1NlcmlmRm9udCIsImlzU3ltYm9saWNGb250Iiwic2VhY01hcCIsInRvRm9udENoYXIiLCJ0b1VuaWNvZGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGooZSl7aWYoZS5mb250TWF0cml4JiZlLmZvbnRNYXRyaXhbMF0hPT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXt2YXIgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxyPWUud2lkdGhzO2Zvcih2YXIgYSBpbiByKXJbYV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9fWZ1bmN0aW9uIE0oZSl7aWYoZS5mYWxsYmFja1RvVW5pY29kZSYmIShlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXApKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMocil8fCh0W3JdPWUuZmFsbGJhY2tUb1VuaWNvZGVbcl0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpLG8scyxjLHUpe0EodGhpcyxlKSx0aGlzLm9yaWdpbmFsQ2hhckNvZGU9dCx0aGlzLmZvbnRDaGFyPXIsdGhpcy51bmljb2RlPW4sdGhpcy5hY2NlbnQ9YSx0aGlzLndpZHRoPWksdGhpcy52bWV0cmljPW8sdGhpcy5vcGVyYXRvckxpc3RJZD1zLHRoaXMuaXNTcGFjZT1jLHRoaXMuaXNJbkZvbnQ9dX1yZXR1cm4gRihlLFt7a2V5OiJjYXRlZ29yeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxvLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX0se2tleToibm9ybWFsaXplZFVuaWNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJub3JtYWxpemVkVW5pY29kZSIsKDAsby5yZXZlcnNlSWZSdGwpKGUuX05vcm1hbGl6ZWRVbmljb2Rlc1t0aGlzLnVuaWNvZGVdfHx0aGlzLnVuaWNvZGUpLCEwKX19XSxbe2tleToiX05vcm1hbGl6ZWRVbmljb2RlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9Ob3JtYWxpemVkVW5pY29kZXMiLCgwLG8uZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpKX19XSksZX0oKTtmdW5jdGlvbiBMKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gUihlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGU+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gJChlLHQpe2Zvcih2YXIgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gWChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLHM9ZS5sZW5ndGg7aTxzO2krKyktMSE9PShuPSgwLG8uZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBjIGluIHIpLTEhPT0obj0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkocltjXSx0KSkmJihhWytjXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX12YXIgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIHEoZSx0LHIsYSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBNYXAscz1bXSxjPW5ldyBTZXQsdT0wLGw9UFt1XVswXSxmPWwsaD1QW3VdWzFdO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2R8PTBdO2lmKHQocCkpe2lmKGY+aCl7aWYoKyt1Pj1QLmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Zj1QW3VdWzBdLGg9UFt1XVsxXX12YXIgZz1mKys7MD09PXAmJihwPXIpO3ZhciB2PWEuZ2V0KGQpOyJzdHJpbmciPT10eXBlb2YgdiYmKHY9di5jb2RlUG9pbnRBdCgwKSksdiYmdjxsJiYhYy5oYXMocCkmJihvLnNldCh2LHApLGMuYWRkKHApKSxpW2ddPXAsc1tkXT1nfX1yZXR1cm57dG9Gb250Q2hhcjpzLGNoYXJDb2RlVG9HbHlwaElkOmksdG9Vbmljb2RlRXh0cmFNYXA6byxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmZ9fWZ1bmN0aW9uIEcoZSx0LHIpe3ZhciBhLGksbyxzLGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8YSxnbHlwaElkOmVbYV19KTtpZih0KXt2YXIgaSxvPWsodCk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz13KGkudmFsdWUsMiksYz1zWzBdLHU9c1sxXTt1Pj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTpjLGdseXBoSWQ6dX0pfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19MD09PW4ubGVuZ3RoJiZuLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLG4uc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBsPVtdLGY9bi5sZW5ndGgsaD0wO2g8Zjspe3ZhciBkPW5baF0uZm9udENoYXJDb2RlLHA9W25baF0uZ2x5cGhJZF07KytoO2Zvcih2YXIgZz1kO2g8ZiYmZysxPT09bltoXS5mb250Q2hhckNvZGUmJihwLnB1c2gobltoXS5nbHlwaElkKSwrK2gsNjU1MzUhPSsrZyk7KTtsLnB1c2goW2QsZyxwXSl9cmV0dXJuIGx9KGUsdCxyKSx1PWMuYXQoLTEpWzFdPjY1NTM1PzI6MSxsPSJcMFwwIitEKHUpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCp1KTtmb3IoYT1jLmxlbmd0aC0xO2E+PTAmJiEoY1thXVswXTw9NjU1MzUpOy0tYSk7dmFyIGY9YSsxO2NbYV1bMF08NjU1MzUmJjY1NTM1PT09Y1thXVsxXSYmKGNbYV1bMV09NjU1MzQpO3ZhciBoLGQscCxnLHk9Y1thXVsxXTw2NTUzNT8xOjAsbT1mK3ksYj12Lk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG0sMiksUz0iIix4PSIiLE89IiIsQT0iIixDPSIiLEY9MDtmb3IoYT0wLGk9ZjthPGk7YSsrKXtkPShoPWNbYV0pWzBdLHA9aFsxXSxTKz1EKGQpLHgrPUQocCk7dmFyIFA9ITA7Zm9yKG89MSxzPShnPWhbMl0pLmxlbmd0aDtvPHM7KytvKWlmKGdbb10hPT1nW28tMV0rMSl7UD0hMTticmVha31pZihQKU8rPUQoZ1swXS1kJjY1NTM1KSxBKz1EKDApO2Vsc2V7dmFyIFQ9MioobS1hKSsyKkY7Zm9yKEYrPXAtZCsxLE8rPUQoMCksQSs9RChUKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKUMrPUQoZ1tvXSl9fXk+MCYmKHgrPSLDv8O/IixTKz0iw7/DvyIsTys9IlwwASIsQSs9IlwwXDAiKTt2YXIgST0iXDBcMCIrRCgyKm0pK0QoYi5yYW5nZSkrRChiLmVudHJ5KStEKGIucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytPK0ErQyxFPSIiLGo9IiI7aWYodT4xKXtmb3IobCs9IlwwA1wwXG4iKygwLG4uc3RyaW5nMzIpKDQrOCp1KzQrSS5sZW5ndGgpLEU9IiIsYT0wLGk9Yy5sZW5ndGg7YTxpO2ErKyl7ZD0oaD1jW2FdKVswXTt2YXIgTT0oZz1oWzJdKVswXTtmb3Iobz0xLHM9Zy5sZW5ndGg7bzxzOysrbylnW29dIT09Z1tvLTFdKzEmJihwPWhbMF0rby0xLEUrPSgwLG4uc3RyaW5nMzIpKGQpKygwLG4uc3RyaW5nMzIpKHApKygwLG4uc3RyaW5nMzIpKE0pLGQ9cCsxLE09Z1tvXSk7RSs9KDAsbi5zdHJpbmczMikoZCkrKDAsbi5zdHJpbmczMikoaFsxXSkrKDAsbi5zdHJpbmczMikoTSl9aj0iXDBcZlwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoLzEyKX1yZXR1cm4gbCsiXDAEIitEKEkubGVuZ3RoKzQpK0kraitFfWZ1bmN0aW9uIHooZSx0LHIpe3I9cnx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07dmFyIGE9MCxpPTAscz0wLGM9MCx1PW51bGwsbD0wO2lmKHQpe2Zvcih2YXIgZiBpbiB0KXsodT4oZnw9MCl8fCF1KSYmKHU9ZiksbDxmJiYobD1mKTt2YXIgaD0oMCxvLmdldFVuaWNvZGVSYW5nZUZvcikoZik7aWYoaDwzMilhfD0xPDxoO2Vsc2UgaWYoaDw2NClpfD0xPDxoLTMyO2Vsc2UgaWYoaDw5NilzfD0xPDxoLTY0O2Vsc2V7aWYoIShoPDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PGgtOTZ9fWw+NjU1MzUmJihsPTY1NTM1KX1lbHNlIHU9MCxsPTI1NTt2YXIgZD1lLmJib3h8fFswLDAsMCwwXSxwPXIudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6cC9ULHY9ci5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKSx5PXIuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTt5PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih5PS15KTt2YXIgbT1yLnlNYXh8fHYsYj0tci55TWlufHwteTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShzKSsoMCxuLnN0cmluZzMyKShjKSsiKjIxKiIrRChlLml0YWxpY0FuZ2xlPzE6MCkrRCh1fHxlLmZpcnN0Q2hhcikrRChsfHxlLmxhc3RDaGFyKStEKHYpK0QoeSkrIlwwZCIrRChtKStEKGIpKyJcMFwwXDBcMFwwXDBcMFwwIitEKGUueEhlaWdodCkrRChlLmNhcEhlaWdodCkrRCgwKStEKHV8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBXKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIFkoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8VihlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYz1bXTtmb3Iocj0wLG49cy5sZW5ndGg7cjxuO3IrKyl7dmFyIHU9W107Zm9yKGE9MCxpPShvPXRbMV1bcl18fHNbcl0pLmxlbmd0aDthPGk7YSsrKXUucHVzaChEKG8uY2hhckNvZGVBdChhKSkpO2MucHVzaCh1LmpvaW4oIiIpKX12YXIgbD1bcyxjXSxmPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLHA9cy5sZW5ndGgqZi5sZW5ndGgsZz0iXDBcMCIrRChwKStEKDEyKnArNiksdj0wO2ZvcihyPTAsbj1mLmxlbmd0aDtyPG47cisrKXt2YXIgeT1sW3JdO2ZvcihhPTAsaT15Lmxlbmd0aDthPGk7YSsrKW89eVthXSxnKz1mW3JdK2hbcl0rZFtyXStEKGEpK0Qoby5sZW5ndGgpK0Qodiksdis9by5sZW5ndGh9cmV0dXJuIGcrKHMuam9pbigiIikrYy5qb2luKCIiKSl9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixhKXtBKHRoaXMsZSksdGhpcy5uYW1lPXQsdGhpcy5wc05hbWU9bnVsbCx0aGlzLm1pbWV0eXBlPW51bGwsdGhpcy5kaXNhYmxlRm9udEZhY2U9ITEsdGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZSx0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQsdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm8sdGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgbz0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlNlcmlmKTtpZighbyYmIWEuaXNTaW11bGF0ZWRGbGFncyl7dmFyIHMsYz10LnJlcGxhY2UoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sbD0oMCx1LmdldFNlcmlmRm9udHMpKCksaD1rKGMuc3BsaXQoIisiKSk7dHJ5e2ZvcihoLnMoKTshKHM9aC5uKCkpLmRvbmU7KWlmKGxbcy52YWx1ZV0pe289ITA7YnJlYWt9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX10aGlzLmlzU2VyaWZGb250PW8sdGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7dmFyIGQ9YS50eXBlLHA9YS5zdWJ0eXBlO3RoaXMudHlwZT1kLHRoaXMuc3VidHlwZT1wO3ZhciBnPXQubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO2lmKHRoaXMuaXNJbnZhbGlkUERGanNGb250PSEhZyx0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1nWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIix0aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXMsdGhpcy53aWR0aHM9YS53aWR0aHMsdGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGgsdGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGUsdGhpcy5jTWFwPWEuY01hcCx0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC9ULHRoaXMuYXNjZW50PWEuYXNjZW50L1QsdGhpcy5kZXNjZW50PWEuZGVzY2VudC9ULHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQsdGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeCx0aGlzLmJib3g9YS5iYm94LHRoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09YS50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiLHRoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3MpLCFyfHxyLmlzRW1wdHkpcmV0dXJuIHImJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJyt0KyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTt2YXIgdixtPXcoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLHkucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFUoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHIsYSksMik7ZD1tWzBdLHA9bVsxXSxkPT09dGhpcy50eXBlJiZwPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChkLCIvIikuY29uY2F0KHAsIi4iKSk7dHJ5e3N3aXRjaChkKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIit0KyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBTPSJUeXBlMUMiPT09cHx8IkNJREZvbnRUeXBlMEMiPT09cD9uZXcgZi5DRkZGb250KHIsYSk6bmV3IGIuVHlwZTFGb250KHQscixhKTtqKGEpLHY9dGhpcy5jb252ZXJ0KHQsUyxhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsdj10aGlzLmNoZWNrQW5kUmVwYWlyKHQscixhKSx0aGlzLmlzT3BlblR5cGUmJihqKGEpLGQ9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChkLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9TShhKSx0aGlzLmRhdGE9dix0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGQscCxhLmlzU3RhbmRhcmRGb250KSx0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4LHRoaXMud2lkdGhzPWEud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1hLnNlYWNNYXB9ZWxzZXtmb3IodmFyIHg9MDt4PDI1Njt4KyspdGhpcy50b0ZvbnRDaGFyW3hdPXRoaXMuZGlmZmVyZW5jZXNbeF18fGEuZGVmYXVsdEVuY29kaW5nW3hdO3RoaXMuZm9udFR5cGU9bi5Gb250VHlwZS5UWVBFM319cmV0dXJuIEYoZSxbe2tleToicmVuZGVyZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPWguRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bXS5jb25jYXQoSSxFKTpJLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWsobik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXZvaWQgMCE9PSh0PXRoaXNbZT1yLnZhbHVlXSkmJihhW2VdPXQpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0se2tleToiZmFsbGJhY2tUb1N5c3RlbUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5taXNzaW5nRmlsZT0hMDt2YXIgcj10aGlzLm5hbWUsYT10aGlzLnR5cGUsZj10aGlzLnN1YnR5cGUsaD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShyKSxwPSgwLHUuZ2V0U3RkRm9udE1hcCkoKSxnPSgwLHUuZ2V0Tm9uU3RkRm9udE1hcCkoKSx2PSEhcFtoXSx5PSEoIWdbaF18fCFwW2dbaF1dKTtoPXBbaF18fGdbaF18fGg7dmFyIG09KDAsZC5nZXRGb250QmFzaWNNZXRyaWNzKSgpW2hdO20mJihpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1tLmFzY2VudC9UKSxpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PW0uZGVzY2VudC9UKSxpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1tLmNhcEhlaWdodC9UKSksdGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoaCksdGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoaCksdGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHIpO3ZhciBiPS9OYXJyb3cvZy50ZXN0KHIpO2lmKHRoaXMucmVtZWFzdXJlPSghdnx8YikmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MCwodnx8eSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7dmFyIHc9ZS5jaWRUb0dpZE1hcCxrPVtdO2lmKCQoaywoMCx1LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3Qocik/JChrLCgwLHUuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QocikmJiQoaywoMCx1LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSksdyl7Zm9yKHZhciBTIGluIGspe3ZhciB4PWtbU107dm9pZCAwIT09d1t4XSYmKGtbK1NdPXdbeF0pfXcubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9a1tlXTt2b2lkIDA9PT13W3JdJiYoa1srZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2tbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWssdGhpcy50b1VuaWNvZGU9bmV3IGwuVG9Vbmljb2RlTWFwKGspfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QoaCkpdGhpcy50b0ZvbnRDaGFyPVgoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxzLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGgpKS9XaW5nZGluZ3MvaS50ZXN0KHIpJiYoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuIiksdGhpcy50b0ZvbnRDaGFyPVgoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKHYpe3ZhciBPPVgodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAscy5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe09bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPU99ZWxzZXt2YXIgQT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKCksQz1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCF0LmNvbXBvc2l0ZSl7dmFyIG49dC5kaWZmZXJlbmNlc1tlXXx8dC5kZWZhdWx0RW5jb2RpbmdbZV0sYT0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkobixBKTstMSE9PWEmJihyPWEpfUNbK2VdPXJ9KSksdGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1RhaG9tYXxWZXJkYW5hL2kudGVzdChyKSYmJChDLCgwLHUuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKSx0aGlzLnRvRm9udENoYXI9Q31NKGUpLHRoaXMubG9hZGVkTmFtZT1oLnNwbGl0KCItIilbMF0sdGhpcy5mb250VHlwZT0oMCxpLmdldEZvbnRUeXBlKShhLGYsZS5pc1N0YW5kYXJkRm9udCl9fSx7a2V5OiJjaGVja0FuZFJlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyWyJPUy8yIl09bnVsbCxyLmNtYXA9bnVsbCxyLmhlYWQ9bnVsbCxyLmhoZWE9bnVsbCxyLmhtdHg9bnVsbCxyLm1heHA9bnVsbCxyLm5hbWU9bnVsbCxyLnBvc3Q9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgYT1oKGUpO28uaW5jbHVkZXMoYS50YWcpJiYwIT09YS5sZW5ndGgmJihyW2EudGFnXT1hKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MCxlLnNraXAobik7dmFyIG89ZS5nZXRCeXRlcyhhKTtyZXR1cm4gZS5wb3M9aSwiaGVhZCI9PT10JiYob1s4XT1vWzldPW9bMTBdPW9bMTFdPTAsb1sxN118PTMyKSx7dGFnOnQsY2hlY2tzdW06cixsZW5ndGg6YSxvZmZzZXQ6bixkYXRhOm99fWZ1bmN0aW9uIGQoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiB5KGUsdCxyLG4sYSxpKXt2YXIgbz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHItdDw9MTIpcmV0dXJuIG87dmFyIHM9ZS5zdWJhcnJheSh0LHIpLGM9TihzWzBdLHNbMV0pO2lmKGM8MClyZXR1cm4gUihzLDAsYz0tMSksbi5zZXQocyxhKSxvLmxlbmd0aD1zLmxlbmd0aCxvO3ZhciB1LGw9MTAsZj0wO2Zvcih1PTA7dTxjO3UrKylmPTErKHNbbF08PDh8c1tsKzFdKSxsKz0yO3ZhciBoPWwsZD1zW2xdPDw4fHNbbCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz1kO3ZhciBwPWwrPTIrZCxnPTA7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgdj1zW2wrK107MTkyJnYmJihzW2wtMV09NjMmdik7dmFyIHk9MjsyJnY/eT0xOjE2JnYmJih5PTApO3ZhciBtPTI7NCZ2P209MTozMiZ2JiYobT0wKTt2YXIgYj15K207aWYoZys9Yiw4JnYpe3ZhciB3PXNbbCsrXTt1Kz13LGcrPXcqYn19aWYoMD09PWcpcmV0dXJuIG87dmFyIGs9bCtnO3JldHVybiBrPnMubGVuZ3RoP286IWkmJmQ+MD8obi5zZXQocy5zdWJhcnJheSgwLGgpLGEpLG4uc2V0KFswLDBdLGEraCksbi5zZXQocy5zdWJhcnJheShwLGspLGEraCsyKSxrLT1kLHMubGVuZ3RoLWs+MyYmKGs9ayszJi00KSxvLmxlbmd0aD1rLG8pOnMubGVuZ3RoLWs+Mz8oaz1rKzMmLTQsbi5zZXQocy5zdWJhcnJheSgwLGspLGEpLG8ubGVuZ3RoPWssbyk6KG4uc2V0KHMsYSksby5sZW5ndGg9cy5sZW5ndGgsbyl9ZnVuY3Rpb24gYihlKXt2YXIgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjt2YXIgbj1bW10sW11dLGE9ZS5sZW5ndGgsaT1yK2E7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGE8NilyZXR1cm4gbjt2YXIgbyxzLGM9dC5nZXRVaW50MTYoKSx1PXQuZ2V0VWludDE2KCksbD1bXTtmb3Iobz0wO288YyYmdC5wb3MrMTI8PWk7bysrKXt2YXIgZj17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoMT09PWYucGxhdGZvcm0mJjA9PT1mLmVuY29kaW5nJiYwPT09Zi5sYW5ndWFnZXx8Mz09PWYucGxhdGZvcm0mJjE9PT1mLmVuY29kaW5nJiYxMDMzPT09Zi5sYW5ndWFnZSkmJmwucHVzaChmKX1mb3Iobz0wLHM9bC5sZW5ndGg7bzxzO28rKyl7dmFyIGg9bFtvXTtpZighKGgubGVuZ3RoPD0wKSl7dmFyIGQ9cit1K2gub2Zmc2V0O2lmKCEoZCtoLmxlbmd0aD5pKSl7dC5wb3M9ZDt2YXIgcD1oLm5hbWU7aWYoaC5lbmNvZGluZyl7Zm9yKHZhciBnPSIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kz0yKWcrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7blsxXVtwXT1nfWVsc2UgblswXVtwXT10LmdldFN0cmluZyhoLmxlbmd0aCl9fX1yZXR1cm4gbn12YXIgdyxTLHgsTyxBPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcixhLGksbyxzLGM9ZS5kYXRhLHU9MCxsPTAsZj0wLGg9W10sZD1bXSxwPVtdLGc9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsdj0hMSx5PTAsbT0wLGI9Yy5sZW5ndGg7dTxiOyl7dmFyIHc9Y1t1KytdO2lmKDY0PT09dylpZihhPWNbdSsrXSx2fHxtKXUrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaC5wdXNoKGNbdSsrXSk7ZWxzZSBpZig2NT09PXcpaWYoYT1jW3UrK10sdnx8bSl1Kz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW3UrK10saC5wdXNoKGk8PDh8Y1t1KytdKTtlbHNlIGlmKDE3Nj09KDI0OCZ3KSlpZihhPXctMTc2KzEsdnx8bSl1Kz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChjW3UrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JncpKWlmKGE9dy0xODQrMSx2fHxtKXUrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbdSsrXSxoLnB1c2goaTw8OHxjW3UrK10pO2Vsc2UgaWYoNDMhPT13fHxnKWlmKDQ0IT09d3x8Zyl7aWYoNDU9PT13KWlmKHYpdj0hMSxsPXU7ZWxzZXtpZighKHM9ZC5wb3AoKSkpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO289cC5wb3AoKSxjPXMuZGF0YSx1PXMuaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW29dPWgubGVuZ3RoLXMuc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT13KSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dTtlbHNlIGlmKDg4PT09dykrK3k7ZWxzZSBpZigyNz09PXcpbT15O2Vsc2UgaWYoODk9PT13KW09PT15JiYobT0wKSwtLXk7ZWxzZSBpZigyOD09PXcmJiF2JiYhbSl7dmFyIGs9aC5hdCgtMSk7az4wJiYodSs9ay0xKX19ZWxzZSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dSxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmMsaTp1fTtlbHNlIGlmKCF2JiYhbSlpZihvPWguYXQoLTEpLGlzTmFOKG8pKSgwLG4uaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNlIGlmKHQuZnVuY3Rpb25zVXNlZFtvXT0hMCxvIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe3ZhciBTPWgubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbb107aWYoUzwwKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtoLmxlbmd0aD1TfWVsc2UgaWYobyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKG8pKXtpZihkLnB1c2goe2RhdGE6YyxpOnUsc3RhY2tUb3A6aC5sZW5ndGgtMX0pLHAucHVzaChvKSwhKHM9dC5mdW5jdGlvbnNEZWZpbmVkW29dKSlyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7Yz1zLmRhdGEsdT1zLml9aWYoIXYmJiFtKXt2YXIgeD0wO2Zvcih3PD0xNDI/eD1BW3ddOnc+PTE5MiYmdzw9MjIzP3g9LTE6dz49MjI0JiYoeD0tMiksdz49MTEzJiZ3PD0xMTcmJihhPWgucG9wKCksaXNOYU4oYSl8fCh4PTIqLWEpKTt4PDAmJmgubGVuZ3RoPjA7KWgucG9wKCkseCsrO2Zvcig7eD4wOyloLnB1c2goTmFOKSx4LS19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPWc7dmFyIE89W2NdO3U+Yy5sZW5ndGgmJk8ucHVzaChuZXcgVWludDhBcnJheSh1LWMubGVuZ3RoKSksZj5sJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSxPLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe3ZhciByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O3ZhciBpPW5ldyBVaW50OEFycmF5KGEpLG89MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLG8pLG8rPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLE8pfWlmKFUodD1uZXcgbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXt2YXIgRj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2Zvcih2YXIgcj1lLmdldFVpbnQxNigpLGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0SW50MzIoKT4+PjAsbz1bXSxzPTA7czxpO3MrKylvLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7dmFyIGM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjpyLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6b307c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gYztjYXNlIDI6cmV0dXJuIGMuZHNpZ1RhZz1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ0xlbmd0aD1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ09mZnNldD1lLmdldEludDMyKCk+Pj4wLGN9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICIuY29uY2F0KHIsIi4iKSl9KGUpLGk9YS5udW1Gb250cyxvPWEub2Zmc2V0VGFibGUscz10LnNwbGl0KCIrIiksYz0wO2M8aTtjKyspe2UucG9zPShlLnN0YXJ0fHwwKStvW2NdO3ZhciBsPWQoZSksZj11KGUsbC5udW1UYWJsZXMpO2lmKCFmLm5hbWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Zm9yKHZhciBoPWIoZi5uYW1lKSxwPTAsZz1oLmxlbmd0aDtwPGc7cCsrKWZvcih2YXIgdj0wLHk9aFtwXS5sZW5ndGg7djx5O3YrKyl7dmFyIG09aFtwXVt2XSYmaFtwXVt2XS5yZXBsYWNlKC9ccy9nLCIiKTtpZihtKXtpZihtPT09dClyZXR1cm57aGVhZGVyOmwsdGFibGVzOmZ9O2lmKCEocy5sZW5ndGg8Mikpe3ZhciB3LFM9ayhzKTt0cnl7Zm9yKFMucygpOyEodz1TLm4oKSkuZG9uZTspe3ZhciB4PXcudmFsdWU7bT09PXgmJihyPXtuYW1lOngsaGVhZGVyOmwsdGFibGVzOmZ9KX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fX19fWlmKHIpcmV0dXJuKDAsbi53YXJuKSgnVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQsICcpKydmYWxsaW5nIGJhY2sgdG8gIicuY29uY2F0KHIubmFtZSwnIiBmb250IGluc3RlYWQuJykpLHtoZWFkZXI6ci5oZWFkZXIsdGFibGVzOnIudGFibGVzfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQuJykpfSh0LHRoaXMubmFtZSk7dz1GLmhlYWRlcixTPUYudGFibGVzfWVsc2Ugdz1kKHQpLFM9dSh0LHcubnVtVGFibGVzKTt2YXIgUD0hU1siQ0ZGICJdO2lmKFApe2lmKCFTLmxvY2EpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtTLmdseWZ8fCgoMCxuLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpLFMuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdGhpcy5pc09wZW5UeXBlPSExfWVsc2V7dmFyIFQ9ci5jb21wb3NpdGUmJigoci5jaWRUb0dpZE1hcHx8W10pLmxlbmd0aD4wfHwhKHIuY01hcCBpbnN0YW5jZW9mIGcuSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09dy52ZXJzaW9uJiYhVHx8IVMuaGVhZHx8IVMuaGhlYXx8IVMubWF4cHx8IVMucG9zdClyZXR1cm4gTz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLHg9bmV3IGYuQ0ZGRm9udChPLHIpLGoociksdGhpcy5jb252ZXJ0KGUseCxyKTtkZWxldGUgUy5nbHlmLGRlbGV0ZSBTLmxvY2EsZGVsZXRlIFMuZnBnbSxkZWxldGUgUy5wcmVwLGRlbGV0ZSBTWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFTLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrUy5tYXhwLm9mZnNldDt2YXIgST10LmdldEludDMyKCksRT10LmdldFVpbnQxNigpO2lmKHIuc2NhbGVGYWN0b3JzJiZyLnNjYWxlRmFjdG9ycy5sZW5ndGg9PT1FJiZQKXt2YXIgTT1yLnNjYWxlRmFjdG9ycyxfPUwoUy5oZWFkLmRhdGFbNTBdLFMuaGVhZC5kYXRhWzUxXSksRD1uZXcgcC5HbHlmVGFibGUoe2dseWZUYWJsZTpTLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzpfLGxvY2FUYWJsZTpTLmxvY2EuZGF0YSxudW1HbHlwaHM6RX0pO0Quc2NhbGUoTSk7dmFyIEI9RC53cml0ZSgpLCQ9Qi5nbHlmLFg9Qi5sb2NhLFY9Qi5pc0xvY2F0aW9uTG9uZztTLmdseWYuZGF0YT0kLFMubG9jYS5kYXRhPVgsViE9PSEhXyYmKFMuaGVhZC5kYXRhWzUwXT0wLFMuaGVhZC5kYXRhWzUxXT1WPzE6MCk7Zm9yKHZhciBLPVMuaG10eC5kYXRhLEo9MDtKPEU7SisrKXt2YXIgWj00KkosUT1NYXRoLnJvdW5kKE1bSl0qTChLW1pdLEtbWisxXSkpO0tbWl09UT4+OCYyNTUsS1taKzFdPTI1NSZRLFIoSyxaKzIsTWF0aC5yb3VuZChNW0pdKk4oS1taKzJdLEtbWiszXSkpKX19dmFyIGVlPUUrMSx0ZT0hMDtlZT42NTUzNSYmKHRlPSExLGVlPUUsKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIikpO3ZhciByZT0wLG5lPTA7ST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYodC5wb3MrPTgsdC5nZXRVaW50MTYoKT4yJiYoUy5tYXhwLmRhdGFbMTRdPTAsUy5tYXhwLmRhdGFbMTVdPTIpLHQucG9zKz00LHJlPXQuZ2V0VWludDE2KCksdC5wb3MrPTQsbmU9dC5nZXRVaW50MTYoKSksUy5tYXhwLmRhdGFbNF09ZWU+PjgsUy5tYXhwLmRhdGFbNV09MjU1JmVlO3ZhciBhZT1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZDKGUsaSksdCYmQyh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KFMuZnBnbSxTLnByZXAsU1siY3Z0ICJdLHJlKTtpZihhZXx8KGRlbGV0ZSBTLmZwZ20sZGVsZXRlIFMucHJlcCxkZWxldGUgU1siY3Z0ICJdKSxmdW5jdGlvbihlLHQscixhLGksbyl7aWYodCl7ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0LGUucG9zKz00LGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yO3ZhciBzPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7dmFyIGM9ZS5nZXRVaW50MTYoKTswIT09cyYmKDImTChhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSAiKSsiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCIuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTt2YXIgdT1pLWMtKHIubGVuZ3RoLTQqYz4+MSk7aWYodT4wKXt2YXIgbD1uZXcgVWludDhBcnJheShyLmxlbmd0aCsyKnUpO2wuc2V0KHIuZGF0YSksbyYmKGxbci5sZW5ndGhdPXIuZGF0YVsyXSxsW3IubGVuZ3RoKzFdPXIuZGF0YVszXSksci5kYXRhPWx9fWVsc2UgciYmKHIuZGF0YT1udWxsKX0odCxTLmhoZWEsUy5obXR4LFMuaGVhZCxlZSx0ZSksIVMuaGVhZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbihlLHQscil7dmFyIGE9ZS5kYXRhLGk9KGFbMF08PDI0KSsoYVsxXTw8MTYpKyhhWzJdPDw4KSthWzNdO2k+PjE2IT0xJiYoKDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSksYVswXT0wLGFbMV09MSxhWzJdPTAsYVszXT0wKTt2YXIgbz1MKGFbNTBdLGFbNTFdKTtpZihvPDB8fG8+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbyk7dmFyIHM9dCsxO2lmKHI9PT1zPDwxKWFbNTBdPTAsYVs1MV09MDtlbHNle2lmKHIhPT1zPDwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICIrbyk7YVs1MF09MCxhWzUxXT0xfX19KFMuaGVhZCxFLFA/Uy5sb2NhLmxlbmd0aDowKTt2YXIgaWU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihQKXt2YXIgb2U9TChTLmhlYWQuZGF0YVs1MF0sUy5oZWFkLmRhdGFbNTFdKSxzZT1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU7bj8ocz00LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+Pj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfSk6KHM9MixjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+PjkmMjU1LGVbdCsxXT1yPj4xJjI1NX0pO3ZhciBsPWk/cisxOnIsZj1zKigxK2wpLGg9bmV3IFVpbnQ4QXJyYXkoZik7aC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsZikpLGUuZGF0YT1oO3ZhciBkLHAsZz10LmRhdGEsdj1nLmxlbmd0aCxtPW5ldyBVaW50OEFycmF5KHYpLGI9W107Zm9yKGQ9MCxwPTA7ZDxyKzE7ZCsrLHArPXMpe3ZhciB3PWMoaCxwKTt3PnYmJih3PXYpLGIucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6dyxlbmRPZmZzZXQ6MH0pfWZvcihiLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpLGQ9MDtkPHI7ZCsrKWJbZF0uZW5kT2Zmc2V0PWJbZCsxXS5vZmZzZXQ7Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLGQ9MDtkPHI7ZCsrKXt2YXIgaz1iW2RdLFM9ay5vZmZzZXQseD1rLmVuZE9mZnNldDtpZigwIT09U3x8MCE9PXgpYnJlYWs7dmFyIE89YltkKzFdLm9mZnNldDtpZigwIT09Tyl7YltkXS5lbmRPZmZzZXQ9TzticmVha319dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKSxDPTA7Zm9yKHUoaCwwLEMpLGQ9MCxwPXM7ZDxyO2QrKyxwKz1zKXt2YXIgRj15KGcsYltkXS5vZmZzZXQsYltkXS5lbmRPZmZzZXQsbSxDLGEpLFA9Ri5sZW5ndGg7MD09PVAmJihBW2RdPSEwKSxGLnNpemVPZkluc3RydWN0aW9ucz5vJiYobz1GLnNpemVPZkluc3RydWN0aW9ucyksdShoLHAsQys9UCl9aWYoMD09PUMpe3ZhciBUPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAscD1zO2Q8bDtkKysscCs9cyl1KGgscCxULmxlbmd0aCk7dC5kYXRhPVR9ZWxzZSBpZihpKXt2YXIgST1jKGgscyk7bS5sZW5ndGg+SStDP3QuZGF0YT1tLnN1YmFycmF5KDAsSStDKToodC5kYXRhPW5ldyBVaW50OEFycmF5KEkrQyksdC5kYXRhLnNldChtLnN1YmFycmF5KDAsQykpKSx0LmRhdGEuc2V0KG0uc3ViYXJyYXkoMCxJKSxDKSx1KGUuZGF0YSxoLmxlbmd0aC1zLEMrSSl9ZWxzZSB0LmRhdGE9bS5zdWJhcnJheSgwLEMpO3JldHVybnttaXNzaW5nR2x5cGhzOkEsbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm99fShTLmxvY2EsUy5nbHlmLEUsb2UsYWUsdGUsbmUpO2llPXNlLm1pc3NpbmdHbHlwaHMsST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYoUy5tYXhwLmRhdGFbMjZdPXNlLm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxTLm1heHAuZGF0YVsyN109MjU1JnNlLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIVMuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1TLmhoZWEuZGF0YVsxMF0mJjA9PT1TLmhoZWEuZGF0YVsxMV0mJihTLmhoZWEuZGF0YVsxMF09MjU1LFMuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBjZT17dW5pdHNQZXJFbTpMKFMuaGVhZC5kYXRhWzE4XSxTLmhlYWQuZGF0YVsxOV0pLHlNYXg6TChTLmhlYWQuZGF0YVs0Ml0sUy5oZWFkLmRhdGFbNDNdKSx5TWluOk4oUy5oZWFkLmRhdGFbMzhdLFMuaGVhZC5kYXRhWzM5XSksYXNjZW50Ok4oUy5oaGVhLmRhdGFbNF0sUy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6TihTLmhoZWEuZGF0YVs2XSxTLmhoZWEuZGF0YVs3XSksbGluZUdhcDpOKFMuaGhlYS5kYXRhWzhdLFMuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Y2UuYXNjZW50L2NlLnVuaXRzUGVyRW0sdGhpcy5kZXNjZW50PWNlLmRlc2NlbnQvY2UudW5pdHNQZXJFbSx0aGlzLmxpbmVHYXA9Y2UubGluZUdhcC9jZS51bml0c1BlckVtLHRoaXMuY3NzRm9udEluZm8mJnRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodD8odGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0LHRoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcCk6dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXAsUy5wb3N0JiZmdW5jdGlvbihlLHIsYSl7dmFyIG89KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPW87dmFyIHMsYz1vK2UubGVuZ3RoLHU9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7dmFyIGwsZj0hMDtzd2l0Y2godSl7Y2FzZSA2NTUzNjpzPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOnZhciBoPXQuZ2V0VWludDE2KCk7aWYoaCE9PWEpe2Y9ITE7YnJlYWt9dmFyIGQ9W107Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD10LmdldFVpbnQxNigpO2lmKHA+PTMyNzY4KXtmPSExO2JyZWFrfWQucHVzaChwKX1pZighZilicmVhaztmb3IodmFyIGc9W10sdj1bXTt0LnBvczxjOyl7dmFyIHk9dC5nZXRCeXRlKCk7Zm9yKHYubGVuZ3RoPXksbD0wO2w8eTsrK2wpdltsXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtnLnB1c2godi5qb2luKCIiKSl9Zm9yKHM9W10sbD0wO2w8aDsrK2wpe3ZhciBtPWRbbF07bTwyNTg/cy5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW21dKTpzLnB1c2goZ1ttLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIit1KSxmPSExLHIuZGVmYXVsdEVuY29kaW5nJiYocz1yLmRlZmF1bHRFbmNvZGluZyl9ci5nbHlwaE5hbWVzPXN9KFMucG9zdCxyLEUpLFMucG9zdD17dGFnOiJwb3N0IixkYXRhOlcocil9O3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXtyZXR1cm4haWVbZV19aWYoci5jb21wb3NpdGUpe3ZhciBmZT1yLmNpZFRvR2lkTWFwfHxbXSxoZT0wPT09ZmUubGVuZ3RoO3IuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9SChlLHQsITApKSx0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9LTE7aGU/cj10OnZvaWQgMCE9PWZlW3RdJiYocj1mZVt0XSkscj49MCYmcjxFJiZsZShyKSYmKHVlW2VdPXIpfSkpfWVsc2V7dmFyIGRlPWZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybigwLG4ud2FybikoIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgaSxvPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1vLHQuc2tpcCgyKTtmb3IodmFyIHMsYz10LmdldFVpbnQxNigpLHU9ITEsbD0wO2w8YztsKyspe3ZhciBmPXQuZ2V0VWludDE2KCksaD10LmdldFVpbnQxNigpLGQ9dC5nZXRJbnQzMigpPj4+MCxwPSExO2lmKCFzfHxzLnBsYXRmb3JtSWQhPT1mfHxzLmVuY29kaW5nSWQhPT1oKXtpZigwIT09Znx8MCE9PWgmJjEhPT1oJiYzIT09aClpZigxPT09ZiYmMD09PWgpcD0hMDtlbHNlIGlmKDMhPT1mfHwxIT09aHx8IWEmJnMpe2lmKHImJjM9PT1mJiYwPT09aCl7cD0hMDt2YXIgZz0hMDtpZihsPGMtMSl7dmFyIHY9dC5wZWVrQnl0ZXMoMik7TCh2WzBdLHZbMV0pPGYmJihnPSExKX1nJiYodT0hMCl9fWVsc2UgcD0hMCxyfHwodT0hMCk7ZWxzZSBwPSEwO2lmKHAmJihzPXtwbGF0Zm9ybUlkOmYsZW5jb2RpbmdJZDpoLG9mZnNldDpkfSksdSlicmVha319aWYocyYmKHQucG9zPW8rcy5vZmZzZXQpLCFzfHwtMT09PXQucGVla0J5dGUoKSlyZXR1cm4oMCxuLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgeSxtLGI9dC5nZXRVaW50MTYoKSx3PSExLGs9W107aWYoMD09PWIpe2Zvcih0LnNraXAoNCkseT0wO3k8MjU2O3krKyl7dmFyIFM9dC5nZXRCeXRlKCk7UyYmay5wdXNoKHtjaGFyQ29kZTp5LGdseXBoSWQ6U30pfXc9ITB9ZWxzZSBpZigyPT09Yil7dC5za2lwKDQpO2Zvcih2YXIgeD1bXSxPPTAsQT0wO0E8MjU2O0ErKyl7dmFyIEM9dC5nZXRVaW50MTYoKT4+Mzt4LnB1c2goQyksTz1NYXRoLm1heChDLE8pfWZvcih2YXIgRj1bXSxQPTA7UDw9TztQKyspRi5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpOKHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IodmFyIFQ9MDtUPDI1NjtUKyspaWYoMD09PXhbVF0pdC5wb3M9RlswXS5pZFJhbmdlUG9zKzIqVCxtPXQuZ2V0VWludDE2KCksay5wdXNoKHtjaGFyQ29kZTpULGdseXBoSWQ6bX0pO2Vsc2V7dmFyIEk9Rlt4W1RdXTtmb3IoeT0wO3k8SS5lbnRyeUNvdW50O3krKyl7dmFyIEU9KFQ8PDgpK3krSS5maXJzdENvZGU7dC5wb3M9SS5pZFJhbmdlUG9zKzIqeSwwIT09KG09dC5nZXRVaW50MTYoKSkmJihtPShtK0kuaWREZWx0YSklNjU1MzYpLGsucHVzaCh7Y2hhckNvZGU6RSxnbHlwaElkOm19KX19fWVsc2UgaWYoND09PWIpe3Quc2tpcCg0KTt2YXIgaj10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTt2YXIgTSxfPVtdO2ZvcihNPTA7TTxqO00rKylfLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7Zm9yKHQuc2tpcCgyKSxNPTA7TTxqO00rKylfW01dLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKE09MDtNPGo7TSsrKV9bTV0uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgUixEPTA7Zm9yKE09MDtNPGo7TSsrKXtpPV9bTV07dmFyIEI9dC5nZXRVaW50MTYoKTtCPyhSPShCPj4xKS0oai1NKSxpLm9mZnNldEluZGV4PVIsRD1NYXRoLm1heChELFIraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX12YXIgVT1bXTtmb3IoeT0wO3k8RDt5KyspVS5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihNPTA7TTxqO00rKyl7bz0oaT1fW01dKS5zdGFydDt2YXIgJD1pLmVuZCxYPWkuZGVsdGE7Zm9yKFI9aS5vZmZzZXRJbmRleCx5PW87eTw9JDt5KyspNjU1MzUhPT15JiYobT0obT1SPDA/eTpVW1IreS1vXSkrWCY2NTUzNSxrLnB1c2goe2NoYXJDb2RlOnksZ2x5cGhJZDptfSkpfX1lbHNlIGlmKDY9PT1iKXt0LnNraXAoNCk7dmFyIEg9dC5nZXRVaW50MTYoKSxxPXQuZ2V0VWludDE2KCk7Zm9yKHk9MDt5PHE7eSsrKXttPXQuZ2V0VWludDE2KCk7dmFyIEc9SCt5O2sucHVzaCh7Y2hhckNvZGU6RyxnbHlwaElkOm19KX19ZWxzZXtpZigxMiE9PWIpcmV0dXJuKDAsbi53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2IpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt0LnNraXAoMTApO3ZhciB6PXQuZ2V0SW50MzIoKT4+PjA7Zm9yKHk9MDt5PHo7eSsrKWZvcih2YXIgVz10LmdldEludDMyKCk+Pj4wLFY9dC5nZXRJbnQzMigpPj4+MCxZPXQuZ2V0SW50MzIoKT4+PjAsSz1XO0s8PVY7SysrKWsucHVzaCh7Y2hhckNvZGU6SyxnbHlwaElkOlkrK30pfWsuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2Zvcih2YXIgSj0xO0o8ay5sZW5ndGg7SisrKWtbSi0xXS5jaGFyQ29kZT09PWtbSl0uY2hhckNvZGUmJihrLnNwbGljZShKLDEpLEotLSk7cmV0dXJue3BsYXRmb3JtSWQ6cy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6cy5lbmNvZGluZ0lkLG1hcHBpbmdzOmssaGFzU2hvcnRDbWFwOnd9fShTLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLHBlPWRlLnBsYXRmb3JtSWQsZ2U9ZGUuZW5jb2RpbmdJZCx2ZT1kZS5tYXBwaW5ncyx5ZT1bXSxtZT0hMTtpZighci5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXIuYmFzZUVuY29kaW5nTmFtZXx8KHllPSgwLGMuZ2V0RW5jb2RpbmcpKHIuYmFzZUVuY29kaW5nTmFtZSkpLHIuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PXBlJiYxPT09Z2V8fDE9PT1wZSYmMD09PWdlKSlmb3IodmFyIGJlPSgwLHMuZ2V0R2x5cGhzVW5pY29kZSkoKSx3ZT0wO3dlPDI1Njt3ZSsrKXt2YXIga2U7aWYoa2U9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t3ZV0/dGhpcy5kaWZmZXJlbmNlc1t3ZV06eWUubGVuZ3RoJiYiIiE9PXllW3dlXT95ZVt3ZV06Yy5TdGFuZGFyZEVuY29kaW5nW3dlXSl7dmFyIFNlPSgwLGkucmVjb3ZlckdseXBoTmFtZSkoa2UsYmUpLHhlPXZvaWQgMDtpZigzPT09cGUmJjE9PT1nZT94ZT1iZVtTZV06MT09PXBlJiYwPT09Z2UmJih4ZT1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihTZSkpLHZvaWQgMD09PXhlKXtpZighci5nbHlwaE5hbWVzJiZyLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciBPZT10aGlzLnRvVW5pY29kZS5nZXQod2UpO09lJiYoeGU9T2UuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PXhlKWNvbnRpbnVlfXZhciBBZSxDZT1rKHZlKTt0cnl7Zm9yKENlLnMoKTshKEFlPUNlLm4oKSkuZG9uZTspe3ZhciBGZT1BZS52YWx1ZTtpZihGZS5jaGFyQ29kZT09PXhlKXt1ZVt3ZV09RmUuZ2x5cGhJZDticmVha319fWNhdGNoKGUpe0NlLmUoZSl9ZmluYWxseXtDZS5mKCl9fX1lbHNlIGlmKDA9PT1wZSl7dmFyIFBlLFRlPWsodmUpO3RyeXtmb3IoVGUucygpOyEoUGU9VGUubigpKS5kb25lOyl7dmFyIEllPVBlLnZhbHVlO3VlW0llLmNoYXJDb2RlXT1JZS5nbHlwaElkfX1jYXRjaChlKXtUZS5lKGUpfWZpbmFsbHl7VGUuZigpfW1lPSEwfWVsc2V7dmFyIEVlLGplPWsodmUpO3RyeXtmb3IoamUucygpOyEoRWU9amUubigpKS5kb25lOyl7dmFyIE1lPUVlLnZhbHVlLF9lPU1lLmNoYXJDb2RlOzM9PT1wZSYmX2U+PTYxNDQwJiZfZTw9NjE2OTUmJihfZSY9MjU1KSx1ZVtfZV09TWUuZ2x5cGhJZH19Y2F0Y2goZSl7amUuZShlKX1maW5hbGx5e2plLmYoKX19aWYoci5nbHlwaE5hbWVzJiYoeWUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKHZhciBMZT0wO0xlPDI1NjsrK0xlKWlmKG1lfHx2b2lkIDA9PT11ZVtMZV0pe3ZhciBSZT10aGlzLmRpZmZlcmVuY2VzW0xlXXx8eWVbTGVdO2lmKFJlKXt2YXIgTmU9ci5nbHlwaE5hbWVzLmluZGV4T2YoUmUpO05lPjAmJmxlKE5lKSYmKHVlW0xlXT1OZSl9fX0wPT09dWUubGVuZ3RoJiYodWVbMF09MCk7dmFyIERlPWVlLTE7aWYodGV8fChEZT0wKSwhci5jc3NGb250SW5mbyl7dmFyIEJlPXEodWUsbGUsRGUsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1CZS50b0ZvbnRDaGFyLFMuY21hcD17dGFnOiJjbWFwIixkYXRhOkcoQmUuY2hhckNvZGVUb0dseXBoSWQsQmUudG9Vbmljb2RlRXh0cmFNYXAsZWUpfSxTWyJPUy8yIl0mJmZ1bmN0aW9uKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3ZhciByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5za2lwKDYpLDA9PT10LmdldFVpbnQxNigpfHwoZS5kYXRhWzhdPWUuZGF0YVs5XT0wLDApKSl9KFNbIk9TLzIiXSx0KXx8KFNbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOnoocixCZS5jaGFyQ29kZVRvR2x5cGhJZCxjZSl9KX1pZighUCl0cnl7Tz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLCh4PW5ldyBhLkNGRlBhcnNlcihPLHIsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCkpLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgVWU9bmV3IGEuQ0ZGQ29tcGlsZXIoeCk7U1siQ0ZGICJdLmRhdGE9VWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKFMubmFtZSl7dmFyICRlPWIoUy5uYW1lKTtTLm5hbWUuZGF0YT1ZKGUsJGUpLHRoaXMucHNOYW1lPSRlWzBdWzZdfHxudWxsfWVsc2UgUy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6WSh0aGlzLm5hbWUpfTt2YXIgWGU9bmV3IHYuT3BlblR5cGVGaWxlQnVpbGRlcih3LnZlcnNpb24pO2Zvcih2YXIgSGUgaW4gUylYZS5hZGRUYWJsZShIZSxTW0hlXS5kYXRhKTtyZXR1cm4gWGUudG9BcnJheSgpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludGVybmFsRm9udCYmIShlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciByPVtdLG49KDAscy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KWlmKCFlLmhhc0VuY29kaW5nfHwwIT09ZS5kaWZmZXJlbmNlcy5sZW5ndGgmJnZvaWQgMD09PWUuZGlmZmVyZW5jZXNbYV0pe3ZhciBpPXRbYV0sYz0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxuKTstMSE9PWMmJihyW2FdPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7dmFyIGE9MTt0IGluc3RhbmNlb2YgZi5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTt2YXIgdT10LmdldEdseXBoTWFwcGluZyhyKSxoPW51bGwsZD11LHA9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoaD1xKHUsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWgudG9Gb250Q2hhcixkPWguY2hhckNvZGVUb0dseXBoSWQscD1oLnRvVW5pY29kZUV4dHJhTWFwKTt2YXIgZz10Lm51bUdseXBocztmdW5jdGlvbiB5KGUsdCl7dmFyIHI9bnVsbDtmb3IodmFyIG4gaW4gZSl0PT09ZVtuXSYmKHJ8fChyPVtdKSxyLnB1c2goMHxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHQ9PT1lW3JdKXJldHVybiAwfHI7cmV0dXJuIGguY2hhckNvZGVUb0dseXBoSWRbaC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10LGgubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfXZhciBiPXQuc2VhY3M7aWYoaCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJmImJmIubGVuZ3RoKXt2YXIgdz1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsUz10LmdldENoYXJzZXQoKSx4PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBPIGluIGIpe3ZhciBBPWJbT3w9MF0sQz1jLlN0YW5kYXJkRW5jb2RpbmdbQVsyXV0sRj1jLlN0YW5kYXJkRW5jb2RpbmdbQVszXV0sUD1TLmluZGV4T2YoQyksVD1TLmluZGV4T2YoRik7aWYoIShQPDB8fFQ8MCkpe3ZhciBJPXt4OkFbMF0qd1swXStBWzFdKndbMl0rd1s0XSx5OkFbMF0qd1sxXStBWzFdKndbM10rd1s1XX0sRT15KHUsTyk7aWYoRSl7dmFyIGosTT1rKEUpO3RyeXtmb3IoTS5zKCk7IShqPU0ubigpKS5kb25lOyl7dmFyIF89ai52YWx1ZSxMPWguY2hhckNvZGVUb0dseXBoSWQsUj1tKEwsUCksTj1tKEwsVCk7eFtfXT17YmFzZUZvbnRDaGFyQ29kZTpSLGFjY2VudEZvbnRDaGFyQ29kZTpOLGFjY2VudE9mZnNldDpJfX19Y2F0Y2goZSl7TS5lKGUpfWZpbmFsbHl7TS5mKCl9fX19ci5zZWFjTWFwPXh9dmFyIFU9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSwkPW5ldyB2Lk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4gJC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSwkLmFkZFRhYmxlKCJPUy8yIix6KHIsZCkpLCQuYWRkVGFibGUoImNtYXAiLEcoZCxwLGcpKSwkLmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrQihVKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Ioci5kZXNjZW50KSsiD8O/IitCKHIuYXNjZW50KStEKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIiksJC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Ioci5hc2NlbnQpK0Ioci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Ioci5jYXBIZWlnaHQpK0IoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitEKGcpKSwkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2Zvcih2YXIgZT10LmNoYXJzdHJpbmdzLHI9dC5jZmY/dC5jZmYud2lkdGhzOm51bGwsbj0iXDBcMFwwXDAiLGE9MSxpPWc7YTxpO2ErKyl7dmFyIG89MDtpZihlKXt2YXIgcz1lW2EtMV07bz0id2lkdGgiaW4gcz9zLndpZHRoOjB9ZWxzZSByJiYobz1NYXRoLmNlaWwoclthXXx8MCkpO24rPUQobykrRCgwKX1yZXR1cm4gbn0oKSksJC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK0QoZykpLCQuYWRkVGFibGUoIm5hbWUiLFkoZSkpLCQuYWRkVGFibGUoInBvc3QiLFcocikpLCQudG9BcnJheSgpfX0se2tleToic3BhY2VXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxyPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07aWYoYSBpbiB0aGlzLndpZHRocyl7ZT10aGlzLndpZHRoc1thXTticmVha312YXIgaT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKClbYV0sbz0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoaSkmJiJzdHJpbmciPT10eXBlb2Yobz10aGlzLmNNYXAubG9va3VwKGkpKSYmKG89SChpLG8pKSwhbyYmdGhpcy50b1VuaWNvZGUmJihvPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoaSkpLG88PTAmJihvPWkpLGU9dGhpcy53aWR0aHNbb10pYnJlYWt9cmV0dXJuIGU9ZXx8dGhpcy5kZWZhdWx0V2lkdGgsKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLGUpfX0se2tleToiX2NoYXJUb0dseXBoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzJiZzLmlzU3BhY2U9PT1pKXJldHVybiBzO3ZhciBjPWU7dGhpcy5jTWFwJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkmJiJzdHJpbmciPT10eXBlb2YoYz10aGlzLmNNYXAubG9va3VwKGUpKSYmKGM9SChlLGMpKSwibnVtYmVyIiE9dHlwZW9mKHI9dGhpcy53aWR0aHNbY10pJiYocj10aGlzLmRlZmF1bHRXaWR0aCk7dmFyIHU9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXSxsPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGwmJihsPVN0cmluZy5mcm9tQ2hhckNvZGUobCkpO3ZhciBmPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpZih0PXRoaXMudG9Gb250Q2hhcltlXXx8ZSx0aGlzLm1pc3NpbmdGaWxlKXt2YXIgaD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT1oJiYiIiE9PWh8fCJUeXBlMSIhPT10aGlzLnR5cGV8fCh0PTMyKSx0PSgwLG8ubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHQpfXRoaXMuaXNUeXBlM0ZvbnQmJihhPXQpO3ZhciBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe2Y9ITA7dmFyIHA9dGhpcy5zZWFjTWFwW2VdO3Q9cC5iYXNlRm9udENoYXJDb2RlLGQ9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHAuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6cC5hY2NlbnRPZmZzZXR9fXZhciBnPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8PTExMTQxMTE/Zz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdCh0KSkpLHM9bmV3IF8oZSxnLGwsZCxyLHUsYSxpLGYpLHRoaXMuX2dseXBoQ2FjaGVbZV09c319LHtrZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUubGVuZ3RoLGE9MDthPG47KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsYSxyKTt2YXIgaT1yLmNoYXJjb2RlLG89ci5sZW5ndGg7YSs9bzt2YXIgcz10aGlzLl9jaGFyVG9HbHlwaChpLDE9PT1vJiYzMj09PWUuY2hhckNvZGVBdChhLTEpKTt0LnB1c2gocyl9ZWxzZSBmb3IodmFyIGM9MCx1PWUubGVuZ3RoO2M8dTsrK2Mpe3ZhciBsPWUuY2hhckNvZGVBdChjKSxmPXRoaXMuX2NoYXJUb0dseXBoKGwsMzI9PT1sKTt0LnB1c2goZil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH19LHtrZXk6ImdldENoYXJQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTA7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO3ZhciBhPXIubGVuZ3RoO3QucHVzaChbbixuK2FdKSxuKz1hfWVsc2UgZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH19LHtrZXk6ImdseXBoQ2FjaGVWYWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfX0se2tleToiZW5jb2RlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPVtdLG49W10sYT1mdW5jdGlvbigpe3JldHVybiByLmxlbmd0aCUyPT0xfSxpPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcD9mdW5jdGlvbihlKXtyZXR1cm4gdC50b1VuaWNvZGUuY2hhckNvZGVPZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpfSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1lLmNvZGVQb2ludEF0KG8pO2lmKGM+NTUyOTUmJihjPDU3MzQ0fHxjPjY1NTMzKSYmbysrLHRoaXMudG9Vbmljb2RlKXt2YXIgdT1pKGMpO2lmKC0xIT09dSl7YSgpJiYoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApO2Zvcih2YXIgZj0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aCh1KToxKS0xO2Y+PTA7Zi0tKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHU+PjgqZiYyNTUpKTtjb250aW51ZX19YSgpfHwoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApLG4ucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSl9cmV0dXJuIHIucHVzaChuLmpvaW4oIiIpKSxyfX1dKSxlfSgpO3QuRm9udD1LO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtBKHRoaXMsZSksdGhpcy5lcnJvcj10LHRoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIix0aGlzLm1pc3NpbmdGaWxlPSEwfXJldHVybiBGKGUsW3trZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSx7a2V5OiJlbmNvZGVTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlXX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1dKSxlfSgpO3QuRXJyb3JGb250PUp9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY1KSxpPXIoMTY2KTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGQoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHAoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9wKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1mKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmdihlLnByb3RvdHlwZSx0KSxyJiZ2KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1tO3ZhciBiPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLHc9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2codGhpcyxlKSx0aGlzLmJ5dGVzPXQuZ2V0Qnl0ZXMoKSx0aGlzLnByb3BlcnRpZXM9cix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFufXJldHVybiB5KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBTO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoUCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixmPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZiYmKGUuZm9udE1hdHJpeD1mKTt2YXIgaCxkLHA9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYocCYmKGUuYXNjZW50PU1hdGgubWF4KHBbM10scFsxXSksZS5kZXNjZW50PU1hdGgubWluKHBbMV0scFszXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIGc9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix2PTAseT1nLmNvdW50O3Y8eTsrK3Ype3ZhciBtPWcuZ2V0KHYpLGI9dGhpcy5jcmVhdGVEaWN0KFAsdGhpcy5wYXJzZURpY3QobSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYiksdC5mZEFycmF5LnB1c2goYil9ZD1udWxsLGg9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2UgaD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSksZD10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsaC5jaGFyc2V0KTt0LmNoYXJzZXQ9aCx0LmVuY29kaW5nPWQ7dmFyIHc9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpsLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9dy5jaGFyU3RyaW5ncyx0LnNlYWNzPXcuc2VhY3MsdC53aWR0aHM9dy53aWR0aHMsdH19LHtrZXk6InBhcnNlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ5dGVzLHQ9ZS5sZW5ndGgscj0wO3I8dCYmMSE9PWVbcl07KSsrcjtpZihyPj10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTswIT09ciYmKCgwLG4uaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKSxlPWUuc3ViYXJyYXkociksdGhpcy5ieXRlcz1lKTt2YXIgYT1lWzBdLGk9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybntvYmo6bmV3IHgoYSxpLG8scyksZW5kUG9zOm99fX0se2tleToicGFyc2VEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wO3ZhciByLGE9W10saT1bXTt0PTA7Zm9yKHZhciBvPWUubGVuZ3RoO3Q8bzspe3ZhciBzPWVbdF07czw9MjE/KDEyPT09cyYmKHM9czw8OHxlWysrdF0pLGkucHVzaChbcyxhXSksYT1bXSwrK3QpOmEucHVzaCgocj12b2lkIDAsMzA9PT0ocj1lW3QrK10pP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IEEsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGM9YVtlKytdLHU9ZSsoaSsxKSpjLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIGw9MCxmPTA7ZjxjOysrZilsPDw9OCxsKz1hW2UrK107by5wdXNoKHUrbCl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBoPW9bdF0sZD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShoLGQpKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fX0se2tleToicGFyc2VOYW1lSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH19LHtrZXk6InBhcnNlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgTyxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QuYWRkKCgwLG4uYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fX0se2tleToiY3JlYXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPW5ldyBlKHIpLHM9aCh0KTt0cnl7Zm9yKHMucygpOyEobj1zLm4oKSkuZG9uZTspe3ZhciBjPShhPW4udmFsdWUsaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGEsaSl8fGQoYSxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PWNbMF0sbD1jWzFdO28uc2V0QnlLZXkodSxsKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG99fSx7a2V5OiJwYXJzZUNoYXJTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtmb3IodmFyIGk9ZS5zdGFja1NpemUsbz1lLnN0YWNrLHM9dC5sZW5ndGgsYz0wO2M8czspe3ZhciB1PXRbYysrXSxsPW51bGw7aWYoMTI9PT11KXt2YXIgZj10W2MrK107MD09PWY/KHRbYy0yXT0xMzksdFtjLTFdPTIyLGk9MCk6bD13W2ZdfWVsc2UgaWYoMjg9PT11KW9baV09KHRbY108PDI0fHRbYysxXTw8MTYpPj4xNixjKz0yLGkrKztlbHNlIGlmKDE0PT09dSl7aWYoaT49NCYmKGktPTQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSlyZXR1cm4gZS5zZWFjPW8uc2xpY2UoaSxpKzQpLCExO2w9Ylt1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpb1tpXT11LTEzOSxpKys7ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NClvW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtjXSsxMDg6LSh1LTI1MTw8OCktdFtjXS0xMDgsYysrLGkrKztlbHNlIGlmKDI1NT09PXUpb1tpXT0odFtjXTw8MjR8dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKS82NTUzNixjKz00LGkrKztlbHNlIGlmKDE5PT09dXx8MjA9PT11KWUuaGludHMrPWk+PjEsYys9ZS5oaW50cys3Pj4zLGklPTIsbD1iW3VdO2Vsc2V7aWYoMTA9PT11fHwyOT09PXUpe3ZhciBoPXZvaWQgMDtpZighKGg9MTA9PT11P3I6YSkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCksITE7dmFyIGQ9MzI3Njg7aC5jb3VudDwxMjQwP2Q9MTA3OmguY291bnQ8MzM5MDAmJihkPTExMzEpO3ZhciBwPW9bLS1pXStkO2lmKHA8MHx8cD49aC5jb3VudHx8aXNOYU4ocCkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKSwhMTtpZihlLnN0YWNrU2l6ZT1pLGUuY2FsbERlcHRoKyssIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsaC5nZXQocCkscixhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tLGk9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXJldHVybiBlLnN0YWNrU2l6ZT1pLCEwO2lmKDA9PT11JiZjPT09dC5sZW5ndGgpdFtjLTFdPTE0LGw9YlsxNF07ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGMtMSxjLC0xKSxjLT0xLHMtPTE7Y29udGludWV9bD1iW3VdfX1pZihsKXtpZihsLnN0ZW0mJihlLmhpbnRzKz1pPj4xLDM9PT11fHwyMz09PXU/ZS5oYXNWU3RlbXM9ITA6IWUuaGFzVlN0ZW1zfHwxIT09dSYmMTghPT11fHwoKDAsbi53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIiksdFtjLTFdPTE9PT11PzM6MjMpKSwibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pcmV0dXJuKDAsbi53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2wuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrbC5taW4pLDA9PT1pJiYodFtjLTFdPTE0LCEwKTtlLmZpcnN0U3RhY2tDbGVhcmluZyYmbC5zdGFja0NsZWFyaW5nJiYoZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKGktPWwubWluKT49MiYmbC5zdGVtP2klPTI6aT4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIiksaT4wJiYoZS53aWR0aD1vW2ktMV0pKSwic3RhY2tEZWx0YSJpbiBsPygic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obyxpKSxpKz1sLnN0YWNrRGVsdGEpOmwuc3RhY2tDbGVhcmluZz9pPTA6bC5yZXNldFN0YWNrPyhpPTAsZS51bmRlZlN0YWNrPSExKTpsLnVuZGVmU3RhY2smJihpPTAsZS51bmRlZlN0YWNrPSEwLGUuZmlyc3RTdGFja0NsZWFyaW5nPSExKX19cmV0dXJuIHM8dC5sZW5ndGgmJnQuZmlsbCgxNCxzKSxlLnN0YWNrU2l6ZT1pLCEwfX0se2tleToicGFyc2VDaGFyU3RyaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2hhclN0cmluZ3Mscj1lLmxvY2FsU3VickluZGV4LGE9ZS5nbG9iYWxTdWJySW5kZXgsaT1lLmZkU2VsZWN0LG89ZS5mZEFycmF5LHM9ZS5wcml2YXRlRGljdCxjPVtdLHU9W10sbD10LmNvdW50LGY9MDtmPGw7ZisrKXt2YXIgaD10LmdldChmKSxkPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX0scD0hMCxnPW51bGwsdj1zO2lmKGkmJm8ubGVuZ3RoKXt2YXIgeT1pLmdldEZESW5kZXgoZik7LTE9PT15JiYoKDAsbi53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKSxwPSExKSx5Pj1vLmxlbmd0aCYmKCgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpLHA9ITEpLHAmJihnPSh2PW9beV0ucHJpdmF0ZURpY3QpLnN1YnJzSW5kZXgpfWVsc2UgciYmKGc9cik7aWYocCYmKHA9dGhpcy5wYXJzZUNoYXJTdHJpbmcoZCxoLGcsYSkpLG51bGwhPT1kLndpZHRoKXt2YXIgbT12LmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO3VbZl09bStkLndpZHRofWVsc2V7dmFyIGI9di5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTt1W2ZdPWJ9bnVsbCE9PWQuc2VhYyYmKGNbZl09ZC5zZWFjKSxwfHx0LnNldChmLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczp1fX19LHtrZXk6ImVtcHR5UHJpdmF0ZURpY3Rpb25hcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChJLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fX0se2tleToicGFyc2VQcml2YXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNOYW1lKCJQcml2YXRlIikpe3ZhciB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoKXt2YXIgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLG89dGhpcy5wYXJzZURpY3QoaSkscz10aGlzLmNyZWF0ZURpY3QoSSxvLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1zLHMuZ2V0QnlOYW1lKCJTdWJycyIpKXt2YXIgYz1zLmdldEJ5TmFtZSgiU3VicnMiKSx1PW4rYztpZigwPT09Y3x8dT49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGw9dGhpcy5wYXJzZUluZGV4KHUpO3Muc3VicnNJbmRleD1sLm9ian19fX1lbHNlIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIil9ZWxzZSB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl9fSx7a2V5OiJwYXJzZUNoYXJzZXRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixpKXtpZigwPT09ZSlyZXR1cm4gbmV3IGooITAsRS5JU09fQURPQkUsYS5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVCxhLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVF9TVUJTRVQsYS5FeHBlcnRTdWJzZXRDaGFyc2V0KTt2YXIgbyxzLGMsdT10aGlzLmJ5dGVzLGw9ZSxmPXVbZSsrXSxoPVtpPzA6Ii5ub3RkZWYiXTtzd2l0Y2godC09MSxmKXtjYXNlIDA6Zm9yKGM9MDtjPHQ7YysrKW89dVtlKytdPDw4fHVbZSsrXSxoLnB1c2goaT9vOnIuZ2V0KG8pKTticmVhaztjYXNlIDE6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89dVtlKytdPDw4fHVbZSsrXSxzPXVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2Nhc2UgMjpmb3IoO2gubGVuZ3RoPD10Oylmb3Iobz11W2UrK108PDh8dVtlKytdLHM9dVtlKytdPDw4fHVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX12YXIgZD1lLHA9dS5zdWJhcnJheShsLGQpO3JldHVybiBuZXcgaighMSxmLGgscCl9fSx7a2V5OiJwYXJzZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbyxzLGMsdT1PYmplY3QuY3JlYXRlKG51bGwpLGw9dGhpcy5ieXRlcyxmPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2Y9ITAsbz1lO3ZhciBkPWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKHM9MCxjPWEubGVuZ3RoO3M8YztzKyspe3ZhciBwPWQuaW5kZXhPZihhW3NdKTstMSE9PXAmJih1W3BdPXMpfX1lbHNle3ZhciBnPWU7c3dpdGNoKDEyNyYobz1sW2UrK10pKXtjYXNlIDA6dmFyIHY9bFtlKytdO2ZvcihzPTE7czw9djtzKyspdVtsW2UrK11dPXM7YnJlYWs7Y2FzZSAxOnZhciB5PWxbZSsrXSxtPTE7Zm9yKHM9MDtzPHk7cysrKWZvcih2YXIgYj1sW2UrK10sdz1sW2UrK10saz1iO2s8PWIrdztrKyspdVtrXT1tKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KG8sIiBpbiBDRkYiKSl9dmFyIFM9ZTsxMjgmbyYmKGxbZ10mPTEyNyxmdW5jdGlvbigpe3ZhciB0PWxbZSsrXTtmb3Iocz0wO3M8dDtzKyspe3ZhciBuPWxbZSsrXSxpPShsW2UrK108PDgpKygyNTUmbFtlKytdKTt1W25dPWEuaW5kZXhPZihyLmdldChpKSl9fSgpKSxoPWwuc3ViYXJyYXkoZyxTKX1yZXR1cm4gbmV3IE0oZixvJj0xMjcsdSxoKX19LHtrZXk6InBhcnNlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBjPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09dSYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx1PTApO2Zvcih2YXIgbD1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPXU7aDxmOysraClvLnB1c2gobCl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IF8oaSxvKX19XSksZX0oKTt0LkNGRlBhcnNlcj1rO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2codGhpcyxlKSx0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyBPLHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiB5KGUsW3trZXk6ImR1cGxpY2F0ZUZpcnN0R2x5cGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGFyU3RyaW5ncy5jb3VudD49NjU1MzUpKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7ZWxzZXt2YXIgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKSx0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfX19LHtrZXk6Imhhc0dseXBoSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fV0pLGV9KCk7dC5DRkY9Uzt2YXIgeD15KChmdW5jdGlvbiBlKHQscixuLGEpe2codGhpcyxlKSx0aGlzLm1ham9yPXQsdGhpcy5taW5vcj1yLHRoaXMuaGRyU2l6ZT1uLHRoaXMub2ZmU2l6ZT1hfSkpO3QuQ0ZGSGVhZGVyPXg7dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMuc3RyaW5ncz1bXX1yZXR1cm4geShlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0zOTA/bVtlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOm1bMF19fSx7a2V5OiJnZXRTSUQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW0uaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDotMSE9PSh0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpKT90KzM5MTotMX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9fSx7a2V5OiJjb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fV0pLGV9KCk7dC5DRkZTdHJpbmdzPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiB5KGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMub2JqZWN0cy5wdXNoKGUpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfX0se2tleToiY291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1dKSxlfSgpO3QuQ0ZGSW5kZXg9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5rZXlUb05hbWVNYXA9dC5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9dC5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz10LmRlZmF1bHRzLHRoaXMudHlwZXM9dC50eXBlcyx0aGlzLm9wY29kZXM9dC5vcGNvZGVzLHRoaXMub3JkZXI9dC5vcmRlcix0aGlzLnN0cmluZ3M9cix0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6InNldEJ5S2V5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO3ZhciByLGE9aCh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYoaXNOYU4oaSkpcmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJy5jb25jYXQodCwnIiBmb3Iga2V5ICInKS5jb25jYXQoZSwnIi4nKSksITB9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXZhciBvPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1vJiYic2lkIiE9PW8mJiJvZmZzZXQiIT09b3x8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH19LHtrZXk6InNldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH19LHtrZXk6Imhhc05hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfX0se2tleToiZ2V0QnlOYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19fSx7a2V5OiJyZW1vdmVCeU5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19fV0sW3trZXk6ImNyZWF0ZVRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfSxuPWgoZSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlLGk9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Iua2V5VG9OYW1lTWFwW2ldPWFbMV0sci5uYW1lVG9LZXlNYXBbYVsxXV09aSxyLnR5cGVzW2ldPWFbMl0sci5kZWZhdWx0c1tpXT1hWzNdLHIub3Bjb2Rlc1tpXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dLHIub3JkZXIucHVzaChpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fV0pLGV9KCksRj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLFA9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHIudGFibGVzLGUpKS5wcml2YXRlRGljdD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKEYpKX19XSkscn0oQyk7dC5DRkZUb3BEaWN0PVA7dmFyIFQ9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXSxJPWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGcodGhpcyxyKSwobj10LmNhbGwodGhpcyxyLnRhYmxlcyxlKSkuc3VicnNJbmRleD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKFQpKX19XSkscn0oQyk7dC5DRkZQcml2YXRlRGljdD1JO3ZhciBFPXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9LGo9eSgoZnVuY3Rpb24gZSh0LHIsbixhKXtnKHRoaXMsZSksdGhpcy5wcmVkZWZpbmVkPXQsdGhpcy5mb3JtYXQ9cix0aGlzLmNoYXJzZXQ9bix0aGlzLnJhdz1hfSkpO3QuQ0ZGQ2hhcnNldD1qO3ZhciBNPXkoKGZ1bmN0aW9uIGUodCxyLG4sYSl7Zyh0aGlzLGUpLHRoaXMucHJlZGVmaW5lZD10LHRoaXMuZm9ybWF0PXIsdGhpcy5lbmNvZGluZz1uLHRoaXMucmF3PWF9KSksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5mb3JtYXQ9dCx0aGlzLmZkU2VsZWN0PXJ9cmV0dXJuIHkoZSxbe2tleToiZ2V0RkRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8ZT49dGhpcy5mZFNlbGVjdC5sZW5ndGg/LTE6dGhpcy5mZFNlbGVjdFtlXX19XSksZX0oKTt0LkNGRkZEU2VsZWN0PV87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6ImlzVHJhY2tpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c319LHtrZXk6InRyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH19LHtrZXk6Im9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9fSx7a2V5OiJzZXRFbnRyeUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Zm9yKHZhciBhPXIuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXSxvPTAscz10Lmxlbmd0aDtvPHM7KytvKXt2YXIgYz01Km8raSx1PWMrMSxsPWMrMixmPWMrMyxoPWMrNDtpZigyOSE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtsXXx8MCE9PWFbZl18fDAhPT1hW2hdKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO3ZhciBkPXRbb107YVtjXT0yOSxhW3VdPWQ+PjI0JjI1NSxhW2xdPWQ+PjE2JjI1NSxhW2ZdPWQ+PjgmMjU1LGFbaF09MjU1JmR9fX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2codGhpcyxlKSx0aGlzLmNmZj10fXJldHVybiB5KGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7dmFyIG8scz1oKGUuZmRBcnJheSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9aS5zbGljZSgwKTtjLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKHU9bi5VdGlsLnRyYW5zZm9ybSh1LGMuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKSxjLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsdSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX12YXIgbD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7bCYmbC5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKSxlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQoZi5vdXRwdXQpO3ZhciBkPWYudHJhY2tlcnNbMF0scD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQocCk7dmFyIGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGcpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClkLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHY9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZCh2KX12YXIgeT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKHkpO3ZhciBtPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGQuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQobSksZS5pc0NJREZvbnQpe2Quc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIGI9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYiksZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGQuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZChmLm91dHB1dCk7dmFyIHc9Zi50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHcsdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZF0sdCksdC5hZGQoWzBdKSx0LmRhdGF9fSx7a2V5OiJlbmNvZGVOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfX0se2tleToiZW5jb2RlRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudG9TdHJpbmcoKSxuPWUuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyhyKTtpZihuKXt2YXIgYT1wYXJzZUZsb2F0KCIxZSIrKChuWzJdPytuWzJdOjApK25bMV0ubGVuZ3RoKSk7cj0oTWF0aC5yb3VuZCh0KmEpL2EpLnRvU3RyaW5nKCl9dmFyIGksbyxzPSIiO2ZvcihpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYz1yW2ldO3MrPSJlIj09PWM/Ii0iPT09clsrK2ldPyJjIjoiYiI6Ii4iPT09Yz8iYSI6Ii0iPT09Yz8iZSI6Y312YXIgdT1bMzBdO2ZvcihpPTAsbz0ocys9MSZzLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2k8bztpKz0yKXUucHVzaChwYXJzZUludChzLnN1YnN0cmluZyhpLGkrMiksMTYpKTtyZXR1cm4gdX19LHtrZXk6ImVuY29kZUludGVnZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX19LHtrZXk6ImNvbXBpbGVIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfX0se2tleToiY29tcGlsZU5hbWVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgQSxhPWgoZSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXtmb3IodmFyIGk9dC52YWx1ZSxvPU1hdGgubWluKGkubGVuZ3RoLDEyNykscz1uZXcgQXJyYXkobyksYz0wO2M8bztjKyspe3ZhciB1PWlbY107KHU8IiEifHx1PiJ+Inx8IlsiPT09dXx8Il0iPT09dXx8IigiPT09dXx8IikiPT09dXx8InsiPT09dXx8In0iPT09dXx8IjwiPT09dXx8Ij4iPT09dXx8Ii8iPT09dXx8IiUiPT09dSkmJih1PSJfIiksc1tjXT11fSIiPT09KHM9cy5qb2luKCIiKSkmJihzPSJCYWRfRm9udF9OYW1lIiksci5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShzKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleChyKX19LHtrZXk6ImNvbXBpbGVUb3BEaWN0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9W10saT1uZXcgQSxvPWgoZSk7dHJ5e2ZvcihvLnMoKTshKG49by5uKCkpLmRvbmU7KXt2YXIgcz1uLnZhbHVlO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyk7YS5wdXNoKGMpLGkuYWRkKHUpLGMub2Zmc2V0KHQpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6aT10aGlzLmNvbXBpbGVJbmRleChpLGEpfX19LHtrZXk6ImNvbXBpbGVQcml2YXRlRGljdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyksbD1yLmxlbmd0aDtpZihjLm9mZnNldChsKSx1Lmxlbmd0aHx8KGw9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbdS5sZW5ndGgsbF0sciksci5hZGQodSkscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7Yy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW3UubGVuZ3RoXSxyKSxyLmFkZChmKX19fX0se2tleToiY29tcGlsZURpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPWgoZS5vcmRlcik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKHMgaW4gZS52YWx1ZXMpe3ZhciBjPWUudmFsdWVzW3NdLHU9ZS50eXBlc1tzXTtpZihBcnJheS5pc0FycmF5KHUpfHwodT1bdV0pLEFycmF5LmlzQXJyYXkoYyl8fChjPVtjXSksMCE9PWMubGVuZ3RoKXtmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpe3ZhciBkPXVbbF0scD1jW2xdO3N3aXRjaChkKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIocCkpKTticmVhaztjYXNlIm9mZnNldCI6dmFyIGc9ZS5rZXlUb05hbWVNYXBbc107dC5pc1RyYWNraW5nKGcpfHx0LnRyYWNrKGcsYS5sZW5ndGgpLGEucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2guYXBwbHkoYSxvKHRoaXMuZW5jb2RlTnVtYmVyKHApKSk7Zm9yKHZhciB2PTEseT1jLmxlbmd0aDt2PHk7Kyt2KWEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIoY1t2XSkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChkKSl9fWEucHVzaC5hcHBseShhLG8oZS5vcGNvZGVzW3NdKSl9fX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIGF9fSx7a2V5OiJjb21waWxlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEEsYT1oKGUpO3RyeXtmb3IoYS5zKCk7ISh0PWEubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZTtyLmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKGkpKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHIpfX0se2tleToiY29tcGlsZUdsb2JhbFN1YnJJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7dGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZSkpfX0se2tleToiY29tcGlsZUNoYXJTdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEEscj0wO3I8ZS5jb3VudDtyKyspe3ZhciBuPWUuZ2V0KHIpOzAhPT1uLmxlbmd0aD90LmFkZChuKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX19LHtrZXk6ImNvbXBpbGVDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXQtMTtpZihhKWk9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLG8+PjgmMjU1LDI1NSZvXSk7ZWxzZXsoaT1uZXcgVWludDhBcnJheSgxKzIqbykpWzBdPTA7Zm9yKHZhciBzPTAsYz1lLmNoYXJzZXQubGVuZ3RoLHU9ITEsbD0xO2w8aS5sZW5ndGg7bCs9Mil7dmFyIGY9MDtpZihzPGMpe3ZhciBoPWUuY2hhcnNldFtzKytdOy0xPT09KGY9ci5nZXRTSUQoaCkpJiYoZj0wLHV8fCh1PSEwLCgwLG4ud2FybikoIkNvdWxkbid0IGZpbmQgIi5jb25jYXQoaCwiIGluIENGRiBzdHJpbmdzIikpKSl9aVtsXT1mPj44JjI1NSxpW2wrMV09MjU1JmZ9fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfX0se2tleToiY29tcGlsZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9fSx7a2V5OiJjb21waWxlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmZvcm1hdDtzd2l0Y2gobil7Y2FzZSAwOmZvcigodD1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKSlbMF09bixyPTA7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspdFtyKzFdPWUuZmRTZWxlY3Rbcl07YnJlYWs7Y2FzZSAzOnZhciBhPWUuZmRTZWxlY3RbMF0saT1bbiwwLDAsMCwwLGFdO2ZvcihyPTE7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspe3ZhciBvPWUuZmRTZWxlY3Rbcl07byE9PWEmJihpLnB1c2gocj4+OCYyNTUsMjU1JnIsbyksYT1vKX12YXIgcz0oaS5sZW5ndGgtMykvMztpWzFdPXM+PjgmMjU1LGlbMl09MjU1JnMsaS5wdXNoKHI+PjgmMjU1LDI1NSZyKSx0PW5ldyBVaW50OEFycmF5KGkpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHQpfX0se2tleToiY29tcGlsZVR5cGVkQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KytyKXRbcl09ZVtyXTtyZXR1cm4gdH19LHtrZXk6ImNvbXBpbGVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLHI9ZS5vYmplY3RzLG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuWzAsMF07dmFyIGEsaSxzPVtuPj44JjI1NSwyNTUmbl0sYz0xO2ZvcihhPTA7YTxuOysrYSljKz1yW2FdLmxlbmd0aDtpPWM8MjU2PzE6Yzw2NTUzNj8yOmM8MTY3NzcyMTY/Mzo0LHMucHVzaChpKTt2YXIgdT0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP3MucHVzaCgyNTUmdSk6Mj09PWk/cy5wdXNoKHU+PjgmMjU1LDI1NSZ1KTozPT09aT9zLnB1c2godT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1KTpzLnB1c2godT4+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnUpLHJbYV0mJih1Kz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXRbYV0mJnRbYV0ub2Zmc2V0KHMubGVuZ3RoKSxzLnB1c2guYXBwbHkocyxvKHJbYV0pKTtyZXR1cm4gc319XSxbe2tleToiRW5jb2RlRmxvYXRSZWdFeHAiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfX1dKSxlfSgpO3QuQ0ZGQ29tcGlsZXI9Un0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDAsdC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXSx0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sdC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMCx0LmdldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBhO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBzO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTt2YXIgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9cjt2YXIgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTt2YXIgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7dmFyIG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPW87dmFyIHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPXM7dmFyIGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwLHQuZ2V0Rm9udFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3N3aXRjaChlKXtjYXNlIlR5cGUxIjpyZXR1cm4gcj9uLkZvbnRUeXBlLlRZUEUxU1RBTkRBUkQ6IlR5cGUxQyI9PT10P24uRm9udFR5cGUuVFlQRTFDOm4uRm9udFR5cGUuVFlQRTE7Y2FzZSJDSURGb250VHlwZTAiOnJldHVybiJDSURGb250VHlwZTBDIj09PXQ/bi5Gb250VHlwZS5DSURGT05UVFlQRTBDOm4uRm9udFR5cGUuQ0lERk9OVFRZUEUwO2Nhc2UiT3BlblR5cGUiOnJldHVybiBuLkZvbnRUeXBlLk9QRU5UWVBFO2Nhc2UiVHJ1ZVR5cGUiOnJldHVybiBuLkZvbnRUeXBlLlRSVUVUWVBFO2Nhc2UiQ0lERm9udFR5cGUyIjpyZXR1cm4gbi5Gb250VHlwZS5DSURGT05UVFlQRTI7Y2FzZSJNTVR5cGUxIjpyZXR1cm4gbi5Gb250VHlwZS5NTVRZUEUxO2Nhc2UiVHlwZTAiOnJldHVybiBuLkZvbnRUeXBlLlRZUEUwO2RlZmF1bHQ6cmV0dXJuIG4uRm9udFR5cGUuVU5LTk9XTn19LHQubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyxfXS9nLCItIikucmVwbGFjZSgvXHMvZywiIil9LHQucmVjb3ZlckdseXBoTmFtZT1jLHQudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixvLHUsbD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ISEoZS5mbGFncyZzLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KWZvcih1PXQsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpZm9yKHU9KDAsYS5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKSxvPTA7bzx1Lmxlbmd0aDtvKyspbj1yLmluZGV4T2YodVtvXSksbFtvXT1uPj0wP246MDtlbHNlIGlmKGYpZm9yKG8gaW4gdClsW29dPXRbb107ZWxzZSBmb3IodT1hLlN0YW5kYXJkRW5jb2Rpbmcsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7dmFyIGgsZD1lLmRpZmZlcmVuY2VzO2lmKGQpZm9yKG8gaW4gZCl7dmFyIHA9ZFtvXTtpZigtMT09PShuPXIuaW5kZXhPZihwKSkpe2h8fChoPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7dmFyIGc9YyhwLGgpO2chPT1wJiYobj1yLmluZGV4T2YoZykpfWxbb109bj49MD9uOjB9cmV0dXJuIGx9O3ZhciBuPXIoMiksYT1yKDE2NiksaT1yKDE2OCksbz1yKDE2OSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7dmFyIHM9e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07ZnVuY3Rpb24gYyhlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7dmFyIHI9KDAsby5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1yKWZvcih2YXIgYSBpbiB0KWlmKHRbYV09PT1yKXJldHVybiBhO3JldHVybigwLG4uaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1zLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDEzNSk7Y29uc3QgYT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsbi5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQscik9PntyLnIodCksci5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+cCxnZXRDaGFyVW5pY29kZUNhdGVnb3J5OigpPT5kLGdldE5vcm1hbGl6ZWRVbmljb2RlczooKT0+dSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9Pm8sZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5jLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5pLHJldmVyc2VJZlJ0bDooKT0+bH0pO3ZhciBuPXIoMTM1KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/YSgpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBvKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBjKGUpe2ZvcihsZXQgdD0wLHI9cy5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1zW3RdO2lmKGU+PXIuYmVnaW4mJmU8ci5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgdT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIsKoIiwiIMyIIiwiwq8iLCIgzIQiLCLCtCIsIiDMgSIsIsK1IiwizrwiLCLCuCIsIiDMpyIsIsSyIiwiSUoiLCLEsyIsImlqIiwixL8iLCJMwrciLCLFgCIsImzCtyIsIsWJIiwiyrxuIiwixb8iLCJzIiwix4QiLCJExb0iLCLHhSIsIkTFviIsIseGIiwiZMW+Iiwix4ciLCJMSiIsIseIIiwiTGoiLCLHiSIsImxqIiwix4oiLCJOSiIsIseLIiwiTmoiLCLHjCIsIm5qIiwix7EiLCJEWiIsIseyIiwiRHoiLCLHsyIsImR6Iiwiy5giLCIgzIYiLCLLmSIsIiDMhyIsIsuaIiwiIMyKIiwiy5siLCIgzKgiLCLLnCIsIiDMgyIsIsudIiwiIMyLIiwizboiLCIgzYUiLCLOhCIsIiDMgSIsIs+QIiwizrIiLCLPkSIsIs64Iiwiz5IiLCLOpSIsIs+VIiwiz4YiLCLPliIsIs+AIiwiz7AiLCLOuiIsIs+xIiwiz4EiLCLPsiIsIs+CIiwiz7QiLCLOmCIsIs+1IiwizrUiLCLPuSIsIs6jIiwi1ociLCLVpdaCIiwi2bUiLCLYp9m0Iiwi2bYiLCLZiNm0Iiwi2bciLCLbh9m0Iiwi2bgiLCLZitm0Iiwi4LizIiwi4LmN4LiyIiwi4LqzIiwi4LuN4LqyIiwi4LucIiwi4Lqr4LqZIiwi4LudIiwi4Lqr4LqhIiwi4L23Iiwi4L6y4L6BIiwi4L25Iiwi4L6z4L6BIiwi4bqaIiwiYcq+Iiwi4b69IiwiIMyTIiwi4b6/IiwiIMyTIiwi4b+AIiwiIM2CIiwi4b++IiwiIMyUIiwi4oCCIiwiICIsIuKAgyIsIiAiLCLigIQiLCIgIiwi4oCFIiwiICIsIuKAhiIsIiAiLCLigIgiLCIgIiwi4oCJIiwiICIsIuKAiiIsIiAiLCLigJciLCIgzLMiLCLigKQiLCIuIiwi4oClIiwiLi4iLCLigKYiLCIuLi4iLCLigLMiLCLigLLigLIiLCLigLQiLCLigLLigLLigLIiLCLigLYiLCLigLXigLUiLCLigLciLCLigLXigLXigLUiLCLigLwiLCIhISIsIuKAviIsIiDMhSIsIuKBhyIsIj8/Iiwi4oGIIiwiPyEiLCLigYkiLCIhPyIsIuKBlyIsIuKAsuKAsuKAsuKAsiIsIuKBnyIsIiAiLCLigqgiLCJScyIsIuKEgCIsImEvYyIsIuKEgSIsImEvcyIsIuKEgyIsIsKwQyIsIuKEhSIsImMvbyIsIuKEhiIsImMvdSIsIuKEhyIsIsaQIiwi4oSJIiwiwrBGIiwi4oSWIiwiTm8iLCLihKEiLCJURUwiLCLihLUiLCLXkCIsIuKEtiIsIteRIiwi4oS3Iiwi15IiLCLihLgiLCLXkyIsIuKEuyIsIkZBWCIsIuKFoCIsIkkiLCLihaEiLCJJSSIsIuKFoiIsIklJSSIsIuKFoyIsIklWIiwi4oWkIiwiViIsIuKFpSIsIlZJIiwi4oWmIiwiVklJIiwi4oWnIiwiVklJSSIsIuKFqCIsIklYIiwi4oWpIiwiWCIsIuKFqiIsIlhJIiwi4oWrIiwiWElJIiwi4oWsIiwiTCIsIuKFrSIsIkMiLCLiha4iLCJEIiwi4oWvIiwiTSIsIuKFsCIsImkiLCLihbEiLCJpaSIsIuKFsiIsImlpaSIsIuKFsyIsIml2Iiwi4oW0IiwidiIsIuKFtSIsInZpIiwi4oW2IiwidmlpIiwi4oW3IiwidmlpaSIsIuKFuCIsIml4Iiwi4oW5IiwieCIsIuKFuiIsInhpIiwi4oW7IiwieGlpIiwi4oW8IiwibCIsIuKFvSIsImMiLCLihb4iLCJkIiwi4oW/IiwibSIsIuKIrCIsIuKIq+KIqyIsIuKIrSIsIuKIq+KIq+KIqyIsIuKIryIsIuKIruKIriIsIuKIsCIsIuKIruKIruKIriIsIuKRtCIsIigxKSIsIuKRtSIsIigyKSIsIuKRtiIsIigzKSIsIuKRtyIsIig0KSIsIuKRuCIsIig1KSIsIuKRuSIsIig2KSIsIuKRuiIsIig3KSIsIuKRuyIsIig4KSIsIuKRvCIsIig5KSIsIuKRvSIsIigxMCkiLCLikb4iLCIoMTEpIiwi4pG/IiwiKDEyKSIsIuKSgCIsIigxMykiLCLikoEiLCIoMTQpIiwi4pKCIiwiKDE1KSIsIuKSgyIsIigxNikiLCLikoQiLCIoMTcpIiwi4pKFIiwiKDE4KSIsIuKShiIsIigxOSkiLCLikociLCIoMjApIiwi4pKIIiwiMS4iLCLikokiLCIyLiIsIuKSiiIsIjMuIiwi4pKLIiwiNC4iLCLikowiLCI1LiIsIuKSjSIsIjYuIiwi4pKOIiwiNy4iLCLiko8iLCI4LiIsIuKSkCIsIjkuIiwi4pKRIiwiMTAuIiwi4pKSIiwiMTEuIiwi4pKTIiwiMTIuIiwi4pKUIiwiMTMuIiwi4pKVIiwiMTQuIiwi4pKWIiwiMTUuIiwi4pKXIiwiMTYuIiwi4pKYIiwiMTcuIiwi4pKZIiwiMTguIiwi4pKaIiwiMTkuIiwi4pKbIiwiMjAuIiwi4pKcIiwiKGEpIiwi4pKdIiwiKGIpIiwi4pKeIiwiKGMpIiwi4pKfIiwiKGQpIiwi4pKgIiwiKGUpIiwi4pKhIiwiKGYpIiwi4pKiIiwiKGcpIiwi4pKjIiwiKGgpIiwi4pKkIiwiKGkpIiwi4pKlIiwiKGopIiwi4pKmIiwiKGspIiwi4pKnIiwiKGwpIiwi4pKoIiwiKG0pIiwi4pKpIiwiKG4pIiwi4pKqIiwiKG8pIiwi4pKrIiwiKHApIiwi4pKsIiwiKHEpIiwi4pKtIiwiKHIpIiwi4pKuIiwiKHMpIiwi4pKvIiwiKHQpIiwi4pKwIiwiKHUpIiwi4pKxIiwiKHYpIiwi4pKyIiwiKHcpIiwi4pKzIiwiKHgpIiwi4pK0IiwiKHkpIiwi4pK1IiwiKHopIiwi4qiMIiwi4oir4oir4oir4oirIiwi4qm0IiwiOjo9Iiwi4qm1IiwiPT0iLCLiqbYiLCI9PT0iLCLiup8iLCLmr40iLCLiu7MiLCLpvp8iLCLivIAiLCLkuIAiLCLivIEiLCLkuKgiLCLivIIiLCLkuLYiLCLivIMiLCLkuL8iLCLivIQiLCLkuZkiLCLivIUiLCLkuoUiLCLivIYiLCLkuowiLCLivIciLCLkuqAiLCLivIgiLCLkuroiLCLivIkiLCLlhL8iLCLivIoiLCLlhaUiLCLivIsiLCLlhasiLCLivIwiLCLlhoIiLCLivI0iLCLlhpYiLCLivI4iLCLlhqsiLCLivI8iLCLlh6AiLCLivJAiLCLlh7UiLCLivJEiLCLliIAiLCLivJIiLCLlipsiLCLivJMiLCLli7kiLCLivJQiLCLljJUiLCLivJUiLCLljJoiLCLivJYiLCLljLgiLCLivJciLCLljYEiLCLivJgiLCLljZwiLCLivJkiLCLljakiLCLivJoiLCLljoIiLCLivJsiLCLljrYiLCLivJwiLCLlj4giLCLivJ0iLCLlj6MiLCLivJ4iLCLlm5ciLCLivJ8iLCLlnJ8iLCLivKAiLCLlo6siLCLivKEiLCLlpIIiLCLivKIiLCLlpIoiLCLivKMiLCLlpJUiLCLivKQiLCLlpKciLCLivKUiLCLlpbMiLCLivKYiLCLlrZAiLCLivKciLCLlroAiLCLivKgiLCLlr7giLCLivKkiLCLlsI8iLCLivKoiLCLlsKIiLCLivKsiLCLlsLgiLCLivKwiLCLlsa4iLCLivK0iLCLlsbEiLCLivK4iLCLlt5siLCLivK8iLCLlt6UiLCLivLAiLCLlt7EiLCLivLEiLCLlt74iLCLivLIiLCLlubIiLCLivLMiLCLluboiLCLivLQiLCLlub8iLCLivLUiLCLlu7QiLCLivLYiLCLlu74iLCLivLciLCLlvIsiLCLivLgiLCLlvJMiLCLivLkiLCLlvZAiLCLivLoiLCLlvaEiLCLivLsiLCLlvbMiLCLivLwiLCLlv4MiLCLivL0iLCLmiIgiLCLivL4iLCLmiLYiLCLivL8iLCLmiYsiLCLivYAiLCLmlK8iLCLivYEiLCLmlLQiLCLivYIiLCLmlociLCLivYMiLCLmlpciLCLivYQiLCLmlqQiLCLivYUiLCLmlrkiLCLivYYiLCLml6AiLCLivYciLCLml6UiLCLivYgiLCLmm7AiLCLivYkiLCLmnIgiLCLivYoiLCLmnKgiLCLivYsiLCLmrKAiLCLivYwiLCLmraIiLCLivY0iLCLmrbkiLCLivY4iLCLmrrMiLCLivY8iLCLmr4siLCLivZAiLCLmr5QiLCLivZEiLCLmr5siLCLivZIiLCLmsI8iLCLivZMiLCLmsJQiLCLivZQiLCLmsLQiLCLivZUiLCLngasiLCLivZYiLCLniKoiLCLivZciLCLniLYiLCLivZgiLCLniLsiLCLivZkiLCLniL8iLCLivZoiLCLniYciLCLivZsiLCLniZkiLCLivZwiLCLniZsiLCLivZ0iLCLniqwiLCLivZ4iLCLnjoQiLCLivZ8iLCLnjokiLCLivaAiLCLnk5wiLCLivaEiLCLnk6YiLCLivaIiLCLnlJgiLCLivaMiLCLnlJ8iLCLivaQiLCLnlKgiLCLivaUiLCLnlLAiLCLivaYiLCLnlosiLCLivaciLCLnlpIiLCLivagiLCLnmbYiLCLivakiLCLnmb0iLCLivaoiLCLnmq4iLCLivasiLCLnmr8iLCLivawiLCLnm64iLCLiva0iLCLnn5siLCLiva4iLCLnn6IiLCLiva8iLCLnn7MiLCLivbAiLCLnpLoiLCLivbEiLCLnprgiLCLivbIiLCLnpr4iLCLivbMiLCLnqbQiLCLivbQiLCLnq4siLCLivbUiLCLnq7kiLCLivbYiLCLnsbMiLCLivbciLCLns7giLCLivbgiLCLnvLYiLCLivbkiLCLnvZEiLCLivboiLCLnvooiLCLivbsiLCLnvr0iLCLivbwiLCLogIEiLCLivb0iLCLogIwiLCLivb4iLCLogJIiLCLivb8iLCLogLMiLCLivoAiLCLogb8iLCLivoEiLCLogokiLCLivoIiLCLoh6MiLCLivoMiLCLoh6oiLCLivoQiLCLoh7MiLCLivoUiLCLoh7wiLCLivoYiLCLoiIwiLCLivociLCLoiJsiLCLivogiLCLoiJ8iLCLivokiLCLoia4iLCLivooiLCLoibIiLCLivosiLCLoibgiLCLivowiLCLomY0iLCLivo0iLCLomasiLCLivo4iLCLooYAiLCLivo8iLCLooYwiLCLivpAiLCLooaMiLCLivpEiLCLopb4iLCLivpIiLCLoposiLCLivpMiLCLop5IiLCLivpQiLCLoqIAiLCLivpUiLCLosLciLCLivpYiLCLosYYiLCLivpciLCLosZUiLCLivpgiLCLosbgiLCLivpkiLCLosp0iLCLivpoiLCLotaQiLCLivpsiLCLotbAiLCLivpwiLCLotrMiLCLivp0iLCLouqsiLCLivp4iLCLou4oiLCLivp8iLCLovpsiLCLivqAiLCLovrAiLCLivqEiLCLovrUiLCLivqIiLCLpgpEiLCLivqMiLCLphYkiLCLivqQiLCLph4YiLCLivqUiLCLph4wiLCLivqYiLCLph5EiLCLivqciLCLplbciLCLivqgiLCLploAiLCLivqkiLCLpmJwiLCLivqoiLCLpmrYiLCLivqsiLCLpmrkiLCLivqwiLCLpm6giLCLivq0iLCLpnZEiLCLivq4iLCLpnZ4iLCLivq8iLCLpnaIiLCLivrAiLCLpnakiLCLivrEiLCLpn4siLCLivrIiLCLpn60iLCLivrMiLCLpn7MiLCLivrQiLCLpoIEiLCLivrUiLCLpoqgiLCLivrYiLCLpo5siLCLivrciLCLpo58iLCLivrgiLCLpppYiLCLivrkiLCLpppkiLCLivroiLCLppqwiLCLivrsiLCLpqqgiLCLivrwiLCLpq5giLCLivr0iLCLpq58iLCLivr4iLCLprKUiLCLivr8iLCLprK8iLCLiv4AiLCLprLIiLCLiv4EiLCLprLwiLCLiv4IiLCLprZoiLCLiv4MiLCLps6UiLCLiv4QiLCLpubUiLCLiv4UiLCLpub8iLCLiv4YiLCLpuqUiLCLiv4ciLCLpursiLCLiv4giLCLpu4MiLCLiv4kiLCLpu40iLCLiv4oiLCLpu5EiLCLiv4siLCLpu7kiLCLiv4wiLCLpu70iLCLiv40iLCLpvI4iLCLiv44iLCLpvJMiLCLiv48iLCLpvKAiLCLiv5AiLCLpvLsiLCLiv5EiLCLpvYoiLCLiv5IiLCLpvZIiLCLiv5MiLCLpvo0iLCLiv5QiLCLpvpwiLCLiv5UiLCLpvqAiLCLjgLYiLCLjgJIiLCLjgLgiLCLljYEiLCLjgLkiLCLljYQiLCLjgLoiLCLljYUiLCLjgpsiLCIg44KZIiwi44KcIiwiIOOCmiIsIuOEsSIsIuGEgCIsIuOEsiIsIuGEgSIsIuOEsyIsIuGGqiIsIuOEtCIsIuGEgiIsIuOEtSIsIuGGrCIsIuOEtiIsIuGGrSIsIuOEtyIsIuGEgyIsIuOEuCIsIuGEhCIsIuOEuSIsIuGEhSIsIuOEuiIsIuGGsCIsIuOEuyIsIuGGsSIsIuOEvCIsIuGGsiIsIuOEvSIsIuGGsyIsIuOEviIsIuGGtCIsIuOEvyIsIuGGtSIsIuOFgCIsIuGEmiIsIuOFgSIsIuGEhiIsIuOFgiIsIuGEhyIsIuOFgyIsIuGEiCIsIuOFhCIsIuGEoSIsIuOFhSIsIuGEiSIsIuOFhiIsIuGEiiIsIuOFhyIsIuGEiyIsIuOFiCIsIuGEjCIsIuOFiSIsIuGEjSIsIuOFiiIsIuGEjiIsIuOFiyIsIuGEjyIsIuOFjCIsIuGEkCIsIuOFjSIsIuGEkSIsIuOFjiIsIuGEkiIsIuOFjyIsIuGFoSIsIuOFkCIsIuGFoiIsIuOFkSIsIuGFoyIsIuOFkiIsIuGFpCIsIuOFkyIsIuGFpSIsIuOFlCIsIuGFpiIsIuOFlSIsIuGFpyIsIuOFliIsIuGFqCIsIuOFlyIsIuGFqSIsIuOFmCIsIuGFqiIsIuOFmSIsIuGFqyIsIuOFmiIsIuGFrCIsIuOFmyIsIuGFrSIsIuOFnCIsIuGFriIsIuOFnSIsIuGFryIsIuOFniIsIuGFsCIsIuOFnyIsIuGFsSIsIuOFoCIsIuGFsiIsIuOFoSIsIuGFsyIsIuOFoiIsIuGFtCIsIuOFoyIsIuGFtSIsIuOFpCIsIuGFoCIsIuOFpSIsIuGElCIsIuOFpiIsIuGElSIsIuOFpyIsIuGHhyIsIuOFqCIsIuGHiCIsIuOFqSIsIuGHjCIsIuOFqiIsIuGHjiIsIuOFqyIsIuGHkyIsIuOFrCIsIuGHlyIsIuOFrSIsIuGHmSIsIuOFriIsIuGEnCIsIuOFryIsIuGHnSIsIuOFsCIsIuGHnyIsIuOFsSIsIuGEnSIsIuOFsiIsIuGEniIsIuOFsyIsIuGEoCIsIuOFtCIsIuGEoiIsIuOFtSIsIuGEoyIsIuOFtiIsIuGEpyIsIuOFtyIsIuGEqSIsIuOFuCIsIuGEqyIsIuOFuSIsIuGErCIsIuOFuiIsIuGErSIsIuOFuyIsIuGEriIsIuOFvCIsIuGEryIsIuOFvSIsIuGEsiIsIuOFviIsIuGEtiIsIuOFvyIsIuGFgCIsIuOGgCIsIuGFhyIsIuOGgSIsIuGFjCIsIuOGgiIsIuGHsSIsIuOGgyIsIuGHsiIsIuOGhCIsIuGFlyIsIuOGhSIsIuGFmCIsIuOGhiIsIuGFmSIsIuOGhyIsIuGGhCIsIuOGiCIsIuGGhSIsIuOGiSIsIuGGiCIsIuOGiiIsIuGGkSIsIuOGiyIsIuGGkiIsIuOGjCIsIuGGlCIsIuOGjSIsIuGGniIsIuOGjiIsIuGGoSIsIuOIgCIsIijhhIApIiwi44iBIiwiKOGEgikiLCLjiIIiLCIo4YSDKSIsIuOIgyIsIijhhIUpIiwi44iEIiwiKOGEhikiLCLjiIUiLCIo4YSHKSIsIuOIhiIsIijhhIkpIiwi44iHIiwiKOGEiykiLCLjiIgiLCIo4YSMKSIsIuOIiSIsIijhhI4pIiwi44iKIiwiKOGEjykiLCLjiIsiLCIo4YSQKSIsIuOIjCIsIijhhJEpIiwi44iNIiwiKOGEkikiLCLjiI4iLCIo4YSA4YWhKSIsIuOIjyIsIijhhILhhaEpIiwi44iQIiwiKOGEg+GFoSkiLCLjiJEiLCIo4YSF4YWhKSIsIuOIkiIsIijhhIbhhaEpIiwi44iTIiwiKOGEh+GFoSkiLCLjiJQiLCIo4YSJ4YWhKSIsIuOIlSIsIijhhIvhhaEpIiwi44iWIiwiKOGEjOGFoSkiLCLjiJciLCIo4YSO4YWhKSIsIuOImCIsIijhhI/hhaEpIiwi44iZIiwiKOGEkOGFoSkiLCLjiJoiLCIo4YSR4YWhKSIsIuOImyIsIijhhJLhhaEpIiwi44icIiwiKOGEjOGFrikiLCLjiJ0iLCIo4YSL4YWp4YSM4YWl4YarKSIsIuOIniIsIijhhIvhhanhhJLhha4pIiwi44igIiwiKOS4gCkiLCLjiKEiLCIo5LqMKSIsIuOIoiIsIijkuIkpIiwi44ijIiwiKOWbmykiLCLjiKQiLCIo5LqUKSIsIuOIpSIsIijlha0pIiwi44imIiwiKOS4gykiLCLjiKciLCIo5YWrKSIsIuOIqCIsIijkuZ0pIiwi44ipIiwiKOWNgSkiLCLjiKoiLCIo5pyIKSIsIuOIqyIsIijngaspIiwi44isIiwiKOawtCkiLCLjiK0iLCIo5pyoKSIsIuOIriIsIijph5EpIiwi44ivIiwiKOWcnykiLCLjiLAiLCIo5pelKSIsIuOIsSIsIijmoKopIiwi44iyIiwiKOaciSkiLCLjiLMiLCIo56S+KSIsIuOItCIsIijlkI0pIiwi44i1IiwiKOeJuSkiLCLjiLYiLCIo6LKhKSIsIuOItyIsIijnpZ0pIiwi44i4IiwiKOWKtCkiLCLjiLkiLCIo5LujKSIsIuOIuiIsIijlkbwpIiwi44i7IiwiKOWtpikiLCLjiLwiLCIo55ujKSIsIuOIvSIsIijkvIEpIiwi44i+IiwiKOizhykiLCLjiL8iLCIo5Y2UKSIsIuOJgCIsIijnpa0pIiwi44mBIiwiKOS8kSkiLCLjiYIiLCIo6IeqKSIsIuOJgyIsIijoh7MpIiwi44uAIiwiMeaciCIsIuOLgSIsIjLmnIgiLCLji4IiLCIz5pyIIiwi44uDIiwiNOaciCIsIuOLhCIsIjXmnIgiLCLji4UiLCI25pyIIiwi44uGIiwiN+aciCIsIuOLhyIsIjjmnIgiLCLji4giLCI55pyIIiwi44uJIiwiMTDmnIgiLCLji4oiLCIxMeaciCIsIuOLiyIsIjEy5pyIIiwi442YIiwiMOeCuSIsIuONmSIsIjHngrkiLCLjjZoiLCIy54K5Iiwi442bIiwiM+eCuSIsIuONnCIsIjTngrkiLCLjjZ0iLCI154K5Iiwi442eIiwiNueCuSIsIuONnyIsIjfngrkiLCLjjaAiLCI454K5Iiwi442hIiwiOeeCuSIsIuONoiIsIjEw54K5Iiwi442jIiwiMTHngrkiLCLjjaQiLCIxMueCuSIsIuONpSIsIjEz54K5Iiwi442mIiwiMTTngrkiLCLjjaciLCIxNeeCuSIsIuONqCIsIjE254K5Iiwi442pIiwiMTfngrkiLCLjjaoiLCIxOOeCuSIsIuONqyIsIjE554K5Iiwi442sIiwiMjDngrkiLCLjja0iLCIyMeeCuSIsIuONriIsIjIy54K5Iiwi442vIiwiMjPngrkiLCLjjbAiLCIyNOeCuSIsIuOPoCIsIjHml6UiLCLjj6EiLCIy5pelIiwi44+iIiwiM+aXpSIsIuOPoyIsIjTml6UiLCLjj6QiLCI15pelIiwi44+lIiwiNuaXpSIsIuOPpiIsIjfml6UiLCLjj6ciLCI45pelIiwi44+oIiwiOeaXpSIsIuOPqSIsIjEw5pelIiwi44+qIiwiMTHml6UiLCLjj6siLCIxMuaXpSIsIuOPrCIsIjEz5pelIiwi44+tIiwiMTTml6UiLCLjj64iLCIxNeaXpSIsIuOPryIsIjE25pelIiwi44+wIiwiMTfml6UiLCLjj7EiLCIxOOaXpSIsIuOPsiIsIjE55pelIiwi44+zIiwiMjDml6UiLCLjj7QiLCIyMeaXpSIsIuOPtSIsIjIy5pelIiwi44+2IiwiMjPml6UiLCLjj7ciLCIyNOaXpSIsIuOPuCIsIjI15pelIiwi44+5IiwiMjbml6UiLCLjj7oiLCIyN+aXpSIsIuOPuyIsIjI45pelIiwi44+8IiwiMjnml6UiLCLjj70iLCIzMOaXpSIsIuOPviIsIjMx5pelIiwi76yAIiwiZmYiLCLvrIEiLCJmaSIsIu+sgiIsImZsIiwi76yDIiwiZmZpIiwi76yEIiwiZmZsIiwi76yFIiwixb90Iiwi76yGIiwic3QiLCLvrJMiLCLVtNW2Iiwi76yUIiwi1bTVpSIsIu+slSIsItW01asiLCLvrJYiLCLVvtW2Iiwi76yXIiwi1bTVrSIsIu+tjyIsIteQ15wiLCLvrZAiLCLZsSIsIu+tkSIsItmxIiwi762SIiwi2bsiLCLvrZMiLCLZuyIsIu+tlCIsItm7Iiwi762VIiwi2bsiLCLvrZYiLCLZviIsIu+tlyIsItm+Iiwi762YIiwi2b4iLCLvrZkiLCLZviIsIu+tmiIsItqAIiwi762bIiwi2oAiLCLvrZwiLCLagCIsIu+tnSIsItqAIiwi762eIiwi2boiLCLvrZ8iLCLZuiIsIu+toCIsItm6Iiwi762hIiwi2boiLCLvraIiLCLZvyIsIu+toyIsItm/Iiwi762kIiwi2b8iLCLvraUiLCLZvyIsIu+tpiIsItm5Iiwi762nIiwi2bkiLCLvragiLCLZuSIsIu+tqSIsItm5Iiwi762qIiwi2qQiLCLvrasiLCLapCIsIu+trCIsItqkIiwi762tIiwi2qQiLCLvra4iLCLapiIsIu+tryIsItqmIiwi762wIiwi2qYiLCLvrbEiLCLapiIsIu+tsiIsItqEIiwi762zIiwi2oQiLCLvrbQiLCLahCIsIu+ttSIsItqEIiwi7622Iiwi2oMiLCLvrbciLCLagyIsIu+tuCIsItqDIiwi7625Iiwi2oMiLCLvrboiLCLahiIsIu+tuyIsItqGIiwi7628Iiwi2oYiLCLvrb0iLCLahiIsIu+tviIsItqHIiwi762/Iiwi2ociLCLvroAiLCLahyIsIu+ugSIsItqHIiwi766CIiwi2o0iLCLvroMiLCLajSIsIu+uhCIsItqMIiwi766FIiwi2owiLCLvroYiLCLajiIsIu+uhyIsItqOIiwi766IIiwi2ogiLCLvrokiLCLaiCIsIu+uiiIsItqYIiwi766LIiwi2pgiLCLvrowiLCLakSIsIu+ujSIsItqRIiwi766OIiwi2qkiLCLvro8iLCLaqSIsIu+ukCIsItqpIiwi766RIiwi2qkiLCLvrpIiLCLaryIsIu+ukyIsItqvIiwi766UIiwi2q8iLCLvrpUiLCLaryIsIu+uliIsItqzIiwi766XIiwi2rMiLCLvrpgiLCLasyIsIu+umSIsItqzIiwi766aIiwi2rEiLCLvrpsiLCLasSIsIu+unCIsItqxIiwi766dIiwi2rEiLCLvrp4iLCLauiIsIu+unyIsItq6Iiwi766gIiwi2rsiLCLvrqEiLCLauyIsIu+uoiIsItq7Iiwi766jIiwi2rsiLCLvrqQiLCLbgCIsIu+upSIsItuAIiwi766mIiwi24EiLCLvrqciLCLbgSIsIu+uqCIsItuBIiwi766pIiwi24EiLCLvrqoiLCLaviIsIu+uqyIsItq+Iiwi766sIiwi2r4iLCLvrq0iLCLaviIsIu+uriIsItuSIiwi766vIiwi25IiLCLvrrAiLCLbkyIsIu+usSIsItuTIiwi76+TIiwi2q0iLCLvr5QiLCLarSIsIu+vlSIsItqtIiwi76+WIiwi2q0iLCLvr5ciLCLbhyIsIu+vmCIsItuHIiwi76+ZIiwi24YiLCLvr5oiLCLbhiIsIu+vmyIsItuIIiwi76+cIiwi24giLCLvr50iLCLZtyIsIu+vniIsItuLIiwi76+fIiwi24siLCLvr6AiLCLbhSIsIu+voSIsItuFIiwi76+iIiwi24kiLCLvr6MiLCLbiSIsIu+vpCIsItuQIiwi76+lIiwi25AiLCLvr6YiLCLbkCIsIu+vpyIsItuQIiwi76+oIiwi2YkiLCLvr6kiLCLZiSIsIu+vqiIsItim2KciLCLvr6siLCLYptinIiwi76+sIiwi2KbblSIsIu+vrSIsItim25UiLCLvr64iLCLYptmIIiwi76+vIiwi2KbZiCIsIu+vsCIsItim24ciLCLvr7EiLCLYptuHIiwi76+yIiwi2KbbhiIsIu+vsyIsItim24YiLCLvr7QiLCLYptuIIiwi76+1Iiwi2KbbiCIsIu+vtiIsItim25AiLCLvr7ciLCLYptuQIiwi76+4Iiwi2KbbkCIsIu+vuSIsItim2YkiLCLvr7oiLCLYptmJIiwi76+7Iiwi2KbZiSIsIu+vvCIsItuMIiwi76+9Iiwi24wiLCLvr74iLCLbjCIsIu+vvyIsItuMIiwi77CAIiwi2KbYrCIsIu+wgSIsItim2K0iLCLvsIIiLCLYptmFIiwi77CDIiwi2KbZiSIsIu+whCIsItim2YoiLCLvsIUiLCLYqNisIiwi77CGIiwi2KjYrSIsIu+whyIsItio2K4iLCLvsIgiLCLYqNmFIiwi77CJIiwi2KjZiSIsIu+wiiIsItio2YoiLCLvsIsiLCLYqtisIiwi77CMIiwi2KrYrSIsIu+wjSIsItiq2K4iLCLvsI4iLCLYqtmFIiwi77CPIiwi2KrZiSIsIu+wkCIsItiq2YoiLCLvsJEiLCLYq9isIiwi77CSIiwi2KvZhSIsIu+wkyIsItir2YkiLCLvsJQiLCLYq9mKIiwi77CVIiwi2KzYrSIsIu+wliIsItis2YUiLCLvsJciLCLYrdisIiwi77CYIiwi2K3ZhSIsIu+wmSIsItiu2KwiLCLvsJoiLCLYrtitIiwi77CbIiwi2K7ZhSIsIu+wnCIsItiz2KwiLCLvsJ0iLCLYs9itIiwi77CeIiwi2LPYriIsIu+wnyIsItiz2YUiLCLvsKAiLCLYtditIiwi77ChIiwi2LXZhSIsIu+woiIsIti22KwiLCLvsKMiLCLYttitIiwi77CkIiwi2LbYriIsIu+wpSIsIti22YUiLCLvsKYiLCLYt9itIiwi77CnIiwi2LfZhSIsIu+wqCIsIti42YUiLCLvsKkiLCLYudisIiwi77CqIiwi2LnZhSIsIu+wqyIsIti62KwiLCLvsKwiLCLYutmFIiwi77CtIiwi2YHYrCIsIu+wriIsItmB2K0iLCLvsK8iLCLZgdiuIiwi77CwIiwi2YHZhSIsIu+wsSIsItmB2YkiLCLvsLIiLCLZgdmKIiwi77CzIiwi2YLYrSIsIu+wtCIsItmC2YUiLCLvsLUiLCLZgtmJIiwi77C2Iiwi2YLZiiIsIu+wtyIsItmD2KciLCLvsLgiLCLZg9isIiwi77C5Iiwi2YPYrSIsIu+wuiIsItmD2K4iLCLvsLsiLCLZg9mEIiwi77C8Iiwi2YPZhSIsIu+wvSIsItmD2YkiLCLvsL4iLCLZg9mKIiwi77C/Iiwi2YTYrCIsIu+xgCIsItmE2K0iLCLvsYEiLCLZhNiuIiwi77GCIiwi2YTZhSIsIu+xgyIsItmE2YkiLCLvsYQiLCLZhNmKIiwi77GFIiwi2YXYrCIsIu+xhiIsItmF2K0iLCLvsYciLCLZhdiuIiwi77GIIiwi2YXZhSIsIu+xiSIsItmF2YkiLCLvsYoiLCLZhdmKIiwi77GLIiwi2YbYrCIsIu+xjCIsItmG2K0iLCLvsY0iLCLZhtiuIiwi77GOIiwi2YbZhSIsIu+xjyIsItmG2YkiLCLvsZAiLCLZhtmKIiwi77GRIiwi2YfYrCIsIu+xkiIsItmH2YUiLCLvsZMiLCLZh9mJIiwi77GUIiwi2YfZiiIsIu+xlSIsItmK2KwiLCLvsZYiLCLZititIiwi77GXIiwi2YrYriIsIu+xmCIsItmK2YUiLCLvsZkiLCLZitmJIiwi77GaIiwi2YrZiiIsIu+xmyIsItiw2bAiLCLvsZwiLCLYsdmwIiwi77GdIiwi2YnZsCIsIu+xniIsIiDZjNmRIiwi77GfIiwiINmN2ZEiLCLvsaAiLCIg2Y7ZkSIsIu+xoSIsIiDZj9mRIiwi77GiIiwiINmQ2ZEiLCLvsaMiLCIg2ZHZsCIsIu+xpCIsItim2LEiLCLvsaUiLCLYptiyIiwi77GmIiwi2KbZhSIsIu+xpyIsItim2YYiLCLvsagiLCLYptmJIiwi77GpIiwi2KbZiiIsIu+xqiIsItio2LEiLCLvsasiLCLYqNiyIiwi77GsIiwi2KjZhSIsIu+xrSIsItio2YYiLCLvsa4iLCLYqNmJIiwi77GvIiwi2KjZiiIsIu+xsCIsItiq2LEiLCLvsbEiLCLYqtiyIiwi77GyIiwi2KrZhSIsIu+xsyIsItiq2YYiLCLvsbQiLCLYqtmJIiwi77G1Iiwi2KrZiiIsIu+xtiIsItir2LEiLCLvsbciLCLYq9iyIiwi77G4Iiwi2KvZhSIsIu+xuSIsItir2YYiLCLvsboiLCLYq9mJIiwi77G7Iiwi2KvZiiIsIu+xvCIsItmB2YkiLCLvsb0iLCLZgdmKIiwi77G+Iiwi2YLZiSIsIu+xvyIsItmC2YoiLCLvsoAiLCLZg9inIiwi77KBIiwi2YPZhCIsIu+ygiIsItmD2YUiLCLvsoMiLCLZg9mJIiwi77KEIiwi2YPZiiIsIu+yhSIsItmE2YUiLCLvsoYiLCLZhNmJIiwi77KHIiwi2YTZiiIsIu+yiCIsItmF2KciLCLvsokiLCLZhdmFIiwi77KKIiwi2YbYsSIsIu+yiyIsItmG2LIiLCLvsowiLCLZhtmFIiwi77KNIiwi2YbZhiIsIu+yjiIsItmG2YkiLCLvso8iLCLZhtmKIiwi77KQIiwi2YnZsCIsIu+ykSIsItmK2LEiLCLvspIiLCLZitiyIiwi77KTIiwi2YrZhSIsIu+ylCIsItmK2YYiLCLvspUiLCLZitmJIiwi77KWIiwi2YrZiiIsIu+ylyIsItim2KwiLCLvspgiLCLYptitIiwi77KZIiwi2KbYriIsIu+ymiIsItim2YUiLCLvspsiLCLYptmHIiwi77KcIiwi2KjYrCIsIu+ynSIsItio2K0iLCLvsp4iLCLYqNiuIiwi77KfIiwi2KjZhSIsIu+yoCIsItio2YciLCLvsqEiLCLYqtisIiwi77KiIiwi2KrYrSIsIu+yoyIsItiq2K4iLCLvsqQiLCLYqtmFIiwi77KlIiwi2KrZhyIsIu+ypiIsItir2YUiLCLvsqciLCLYrNitIiwi77KoIiwi2KzZhSIsIu+yqSIsItit2KwiLCLvsqoiLCLYrdmFIiwi77KrIiwi2K7YrCIsIu+yrCIsItiu2YUiLCLvsq0iLCLYs9isIiwi77KuIiwi2LPYrSIsIu+yryIsItiz2K4iLCLvsrAiLCLYs9mFIiwi77KxIiwi2LXYrSIsIu+ysiIsIti12K4iLCLvsrMiLCLYtdmFIiwi77K0Iiwi2LbYrCIsIu+ytSIsIti22K0iLCLvsrYiLCLYttiuIiwi77K3Iiwi2LbZhSIsIu+yuCIsIti32K0iLCLvsrkiLCLYuNmFIiwi77K6Iiwi2LnYrCIsIu+yuyIsIti52YUiLCLvsrwiLCLYutisIiwi77K9Iiwi2LrZhSIsIu+yviIsItmB2KwiLCLvsr8iLCLZgditIiwi77OAIiwi2YHYriIsIu+zgSIsItmB2YUiLCLvs4IiLCLZgtitIiwi77ODIiwi2YLZhSIsIu+zhCIsItmD2KwiLCLvs4UiLCLZg9itIiwi77OGIiwi2YPYriIsIu+zhyIsItmD2YQiLCLvs4giLCLZg9mFIiwi77OJIiwi2YTYrCIsIu+ziiIsItmE2K0iLCLvs4siLCLZhNiuIiwi77OMIiwi2YTZhSIsIu+zjSIsItmE2YciLCLvs44iLCLZhdisIiwi77OPIiwi2YXYrSIsIu+zkCIsItmF2K4iLCLvs5EiLCLZhdmFIiwi77OSIiwi2YbYrCIsIu+zkyIsItmG2K0iLCLvs5QiLCLZhtiuIiwi77OVIiwi2YbZhSIsIu+zliIsItmG2YciLCLvs5ciLCLZh9isIiwi77OYIiwi2YfZhSIsIu+zmSIsItmH2bAiLCLvs5oiLCLZitisIiwi77ObIiwi2YrYrSIsIu+znCIsItmK2K4iLCLvs50iLCLZitmFIiwi77OeIiwi2YrZhyIsIu+znyIsItim2YUiLCLvs6AiLCLYptmHIiwi77OhIiwi2KjZhSIsIu+zoiIsItio2YciLCLvs6MiLCLYqtmFIiwi77OkIiwi2KrZhyIsIu+zpSIsItir2YUiLCLvs6YiLCLYq9mHIiwi77OnIiwi2LPZhSIsIu+zqCIsItiz2YciLCLvs6kiLCLYtNmFIiwi77OqIiwi2LTZhyIsIu+zqyIsItmD2YQiLCLvs6wiLCLZg9mFIiwi77OtIiwi2YTZhSIsIu+zriIsItmG2YUiLCLvs68iLCLZhtmHIiwi77OwIiwi2YrZhSIsIu+zsSIsItmK2YciLCLvs7IiLCLZgNmO2ZEiLCLvs7MiLCLZgNmP2ZEiLCLvs7QiLCLZgNmQ2ZEiLCLvs7UiLCLYt9mJIiwi77O2Iiwi2LfZiiIsIu+ztyIsIti52YkiLCLvs7giLCLYudmKIiwi77O5Iiwi2LrZiSIsIu+zuiIsIti62YoiLCLvs7siLCLYs9mJIiwi77O8Iiwi2LPZiiIsIu+zvSIsIti02YkiLCLvs74iLCLYtNmKIiwi77O/Iiwi2K3ZiSIsIu+0gCIsItit2YoiLCLvtIEiLCLYrNmJIiwi77SCIiwi2KzZiiIsIu+0gyIsItiu2YkiLCLvtIQiLCLYrtmKIiwi77SFIiwi2LXZiSIsIu+0hiIsIti12YoiLCLvtIciLCLYttmJIiwi77SIIiwi2LbZiiIsIu+0iSIsIti02KwiLCLvtIoiLCLYtNitIiwi77SLIiwi2LTYriIsIu+0jCIsIti02YUiLCLvtI0iLCLYtNixIiwi77SOIiwi2LPYsSIsIu+0jyIsIti12LEiLCLvtJAiLCLYttixIiwi77SRIiwi2LfZiSIsIu+0kiIsIti32YoiLCLvtJMiLCLYudmJIiwi77SUIiwi2LnZiiIsIu+0lSIsIti62YkiLCLvtJYiLCLYutmKIiwi77SXIiwi2LPZiSIsIu+0mCIsItiz2YoiLCLvtJkiLCLYtNmJIiwi77SaIiwi2LTZiiIsIu+0myIsItit2YkiLCLvtJwiLCLYrdmKIiwi77SdIiwi2KzZiSIsIu+0niIsItis2YoiLCLvtJ8iLCLYrtmJIiwi77SgIiwi2K7ZiiIsIu+0oSIsIti12YkiLCLvtKIiLCLYtdmKIiwi77SjIiwi2LbZiSIsIu+0pCIsIti22YoiLCLvtKUiLCLYtNisIiwi77SmIiwi2LTYrSIsIu+0pyIsIti02K4iLCLvtKgiLCLYtNmFIiwi77SpIiwi2LTYsSIsIu+0qiIsItiz2LEiLCLvtKsiLCLYtdixIiwi77SsIiwi2LbYsSIsIu+0rSIsIti02KwiLCLvtK4iLCLYtNitIiwi77SvIiwi2LTYriIsIu+0sCIsIti02YUiLCLvtLEiLCLYs9mHIiwi77SyIiwi2LTZhyIsIu+0syIsIti32YUiLCLvtLQiLCLYs9isIiwi77S1Iiwi2LPYrSIsIu+0tiIsItiz2K4iLCLvtLciLCLYtNisIiwi77S4Iiwi2LTYrSIsIu+0uSIsIti02K4iLCLvtLoiLCLYt9mFIiwi77S7Iiwi2LjZhSIsIu+0vCIsItin2YsiLCLvtL0iLCLYp9mLIiwi77WQIiwi2KrYrNmFIiwi77WRIiwi2KrYrdisIiwi77WSIiwi2KrYrdisIiwi77WTIiwi2KrYrdmFIiwi77WUIiwi2KrYrtmFIiwi77WVIiwi2KrZhdisIiwi77WWIiwi2KrZhditIiwi77WXIiwi2KrZhdiuIiwi77WYIiwi2KzZhditIiwi77WZIiwi2KzZhditIiwi77WaIiwi2K3ZhdmKIiwi77WbIiwi2K3ZhdmJIiwi77WcIiwi2LPYrdisIiwi77WdIiwi2LPYrNitIiwi77WeIiwi2LPYrNmJIiwi77WfIiwi2LPZhditIiwi77WgIiwi2LPZhditIiwi77WhIiwi2LPZhdisIiwi77WiIiwi2LPZhdmFIiwi77WjIiwi2LPZhdmFIiwi77WkIiwi2LXYrditIiwi77WlIiwi2LXYrditIiwi77WmIiwi2LXZhdmFIiwi77WnIiwi2LTYrdmFIiwi77WoIiwi2LTYrdmFIiwi77WpIiwi2LTYrNmKIiwi77WqIiwi2LTZhdiuIiwi77WrIiwi2LTZhdiuIiwi77WsIiwi2LTZhdmFIiwi77WtIiwi2LTZhdmFIiwi77WuIiwi2LbYrdmJIiwi77WvIiwi2LbYrtmFIiwi77WwIiwi2LbYrtmFIiwi77WxIiwi2LfZhditIiwi77WyIiwi2LfZhditIiwi77WzIiwi2LfZhdmFIiwi77W0Iiwi2LfZhdmKIiwi77W1Iiwi2LnYrNmFIiwi77W2Iiwi2LnZhdmFIiwi77W3Iiwi2LnZhdmFIiwi77W4Iiwi2LnZhdmJIiwi77W5Iiwi2LrZhdmFIiwi77W6Iiwi2LrZhdmKIiwi77W7Iiwi2LrZhdmJIiwi77W8Iiwi2YHYrtmFIiwi77W9Iiwi2YHYrtmFIiwi77W+Iiwi2YLZhditIiwi77W/Iiwi2YLZhdmFIiwi77aAIiwi2YTYrdmFIiwi77aBIiwi2YTYrdmKIiwi77aCIiwi2YTYrdmJIiwi77aDIiwi2YTYrNisIiwi77aEIiwi2YTYrNisIiwi77aFIiwi2YTYrtmFIiwi77aGIiwi2YTYrtmFIiwi77aHIiwi2YTZhditIiwi77aIIiwi2YTZhditIiwi77aJIiwi2YXYrdisIiwi77aKIiwi2YXYrdmFIiwi77aLIiwi2YXYrdmKIiwi77aMIiwi2YXYrNitIiwi77aNIiwi2YXYrNmFIiwi77aOIiwi2YXYrtisIiwi77aPIiwi2YXYrtmFIiwi77aSIiwi2YXYrNiuIiwi77aTIiwi2YfZhdisIiwi77aUIiwi2YfZhdmFIiwi77aVIiwi2YbYrdmFIiwi77aWIiwi2YbYrdmJIiwi77aXIiwi2YbYrNmFIiwi77aYIiwi2YbYrNmFIiwi77aZIiwi2YbYrNmJIiwi77aaIiwi2YbZhdmKIiwi77abIiwi2YbZhdmJIiwi77acIiwi2YrZhdmFIiwi77adIiwi2YrZhdmFIiwi77aeIiwi2KjYrtmKIiwi77afIiwi2KrYrNmKIiwi77agIiwi2KrYrNmJIiwi77ahIiwi2KrYrtmKIiwi77aiIiwi2KrYrtmJIiwi77ajIiwi2KrZhdmKIiwi77akIiwi2KrZhdmJIiwi77alIiwi2KzZhdmKIiwi77amIiwi2KzYrdmJIiwi77anIiwi2KzZhdmJIiwi77aoIiwi2LPYrtmJIiwi77apIiwi2LXYrdmKIiwi77aqIiwi2LTYrdmKIiwi77arIiwi2LbYrdmKIiwi77asIiwi2YTYrNmKIiwi77atIiwi2YTZhdmKIiwi77auIiwi2YrYrdmKIiwi77avIiwi2YrYrNmKIiwi77awIiwi2YrZhdmKIiwi77axIiwi2YXZhdmKIiwi77ayIiwi2YLZhdmKIiwi77azIiwi2YbYrdmKIiwi77a0Iiwi2YLZhditIiwi77a1Iiwi2YTYrdmFIiwi77a2Iiwi2LnZhdmKIiwi77a3Iiwi2YPZhdmKIiwi77a4Iiwi2YbYrNitIiwi77a5Iiwi2YXYrtmKIiwi77a6Iiwi2YTYrNmFIiwi77a7Iiwi2YPZhdmFIiwi77a8Iiwi2YTYrNmFIiwi77a9Iiwi2YbYrNitIiwi77a+Iiwi2KzYrdmKIiwi77a/Iiwi2K3YrNmKIiwi77eAIiwi2YXYrNmKIiwi77eBIiwi2YHZhdmKIiwi77eCIiwi2KjYrdmKIiwi77eDIiwi2YPZhdmFIiwi77eEIiwi2LnYrNmFIiwi77eFIiwi2LXZhdmFIiwi77eGIiwi2LPYrtmKIiwi77eHIiwi2YbYrNmKIiwi77mJIiwi4oC+Iiwi77mKIiwi4oC+Iiwi77mLIiwi4oC+Iiwi77mMIiwi4oC+Iiwi77mNIiwiXyIsIu+5jiIsIl8iLCLvuY8iLCJfIiwi77qAIiwi2KEiLCLvuoEiLCLYoiIsIu+6giIsItiiIiwi77qDIiwi2KMiLCLvuoQiLCLYoyIsIu+6hSIsItikIiwi77qGIiwi2KQiLCLvuociLCLYpSIsIu+6iCIsItilIiwi77qJIiwi2KYiLCLvuooiLCLYpiIsIu+6iyIsItimIiwi77qMIiwi2KYiLCLvuo0iLCLYpyIsIu+6jiIsItinIiwi77qPIiwi2KgiLCLvupAiLCLYqCIsIu+6kSIsItioIiwi77qSIiwi2KgiLCLvupMiLCLYqSIsIu+6lCIsItipIiwi77qVIiwi2KoiLCLvupYiLCLYqiIsIu+6lyIsItiqIiwi77qYIiwi2KoiLCLvupkiLCLYqyIsIu+6miIsItirIiwi77qbIiwi2KsiLCLvupwiLCLYqyIsIu+6nSIsItisIiwi77qeIiwi2KwiLCLvup8iLCLYrCIsIu+6oCIsItisIiwi77qhIiwi2K0iLCLvuqIiLCLYrSIsIu+6oyIsItitIiwi77qkIiwi2K0iLCLvuqUiLCLYriIsIu+6piIsItiuIiwi77qnIiwi2K4iLCLvuqgiLCLYriIsIu+6qSIsItivIiwi77qqIiwi2K8iLCLvuqsiLCLYsCIsIu+6rCIsItiwIiwi77qtIiwi2LEiLCLvuq4iLCLYsSIsIu+6ryIsItiyIiwi77qwIiwi2LIiLCLvurEiLCLYsyIsIu+6siIsItizIiwi77qzIiwi2LMiLCLvurQiLCLYsyIsIu+6tSIsIti0Iiwi77q2Iiwi2LQiLCLvurciLCLYtCIsIu+6uCIsIti0Iiwi77q5Iiwi2LUiLCLvuroiLCLYtSIsIu+6uyIsIti1Iiwi77q8Iiwi2LUiLCLvur0iLCLYtiIsIu+6viIsIti2Iiwi77q/Iiwi2LYiLCLvu4AiLCLYtiIsIu+7gSIsIti3Iiwi77uCIiwi2LciLCLvu4MiLCLYtyIsIu+7hCIsIti3Iiwi77uFIiwi2LgiLCLvu4YiLCLYuCIsIu+7hyIsIti4Iiwi77uIIiwi2LgiLCLvu4kiLCLYuSIsIu+7iiIsIti5Iiwi77uLIiwi2LkiLCLvu4wiLCLYuSIsIu+7jSIsIti6Iiwi77uOIiwi2LoiLCLvu48iLCLYuiIsIu+7kCIsIti6Iiwi77uRIiwi2YEiLCLvu5IiLCLZgSIsIu+7kyIsItmBIiwi77uUIiwi2YEiLCLvu5UiLCLZgiIsIu+7liIsItmCIiwi77uXIiwi2YIiLCLvu5giLCLZgiIsIu+7mSIsItmDIiwi77uaIiwi2YMiLCLvu5siLCLZgyIsIu+7nCIsItmDIiwi77udIiwi2YQiLCLvu54iLCLZhCIsIu+7nyIsItmEIiwi77ugIiwi2YQiLCLvu6EiLCLZhSIsIu+7oiIsItmFIiwi77ujIiwi2YUiLCLvu6QiLCLZhSIsIu+7pSIsItmGIiwi77umIiwi2YYiLCLvu6ciLCLZhiIsIu+7qCIsItmGIiwi77upIiwi2YciLCLvu6oiLCLZhyIsIu+7qyIsItmHIiwi77usIiwi2YciLCLvu60iLCLZiCIsIu+7riIsItmIIiwi77uvIiwi2YkiLCLvu7AiLCLZiSIsIu+7sSIsItmKIiwi77uyIiwi2YoiLCLvu7MiLCLZiiIsIu+7tCIsItmKIiwi77u1Iiwi2YTYoiIsIu+7tiIsItmE2KIiLCLvu7ciLCLZhNijIiwi77u4Iiwi2YTYoyIsIu+7uSIsItmE2KUiLCLvu7oiLCLZhNilIiwi77u7Iiwi2YTYpyIsIu+7vCIsItmE2KciXX0pKTtmdW5jdGlvbiBsKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9MXx8IWZ1bmN0aW9uKGUpe2xldCB0PXNbMTNdO3JldHVybiBlPj10LmJlZ2luJiZlPHQuZW5kfHwodD1zWzExXSxlPj10LmJlZ2luJiZlPHQuZW5kKX0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCByPVtdO2ZvcihsZXQgbj10LTE7bj49MDtuLS0pci5wdXNoKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfWNvbnN0IGY9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGg9bmV3IE1hcDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9aC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCByPWUubWF0Y2goZiksbj17aXNXaGl0ZXNwYWNlOiEoIXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFyfHwhclsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIXJ8fCFyWzNdKX07cmV0dXJuIGguc2V0KGUsbiksbn1mdW5jdGlvbiBwKCl7aC5jbGVhcigpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwLHQuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciBuPXIoMTM1KSxhPXIoMTY3KSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGUuQ291cmllcj0iQ291cmllciIsZS5TeW1ib2w9IlN5bWJvbCIsZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyIsZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiLGVbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIixlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWw9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbE1UPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3PSJDb3VyaWVyIixlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCIsZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIixlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCIsZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO3ZhciBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkZveGl0U2Fucy5wZmIiLGVbIkhlbHZldGljYS1Cb2xkIl09IkZveGl0U2Fuc0JvbGQucGZiIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iRm94aXRTYW5zQm9sZEl0YWxpYy5wZmIiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkZveGl0U2Fuc0l0YWxpYy5wZmIiLGVbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIixlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiLGVbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiIsZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiIsZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIixlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1vO3ZhciBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyIsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0iWmFwZkRpbmdiYXRzIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9czt2YXIgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO3ZhciB1PSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMCxlLlN5bWJvbD0hMCxlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz11O3ZhciBsPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyXT0xMCxlWzNdPTMyLGVbNF09MzMsZVs1XT0zNCxlWzZdPTM1LGVbN109MzYsZVs4XT0zNyxlWzldPTM4LGVbMTBdPTM5LGVbMTFdPTQwLGVbMTJdPTQxLGVbMTNdPTQyLGVbMTRdPTQzLGVbMTVdPTQ0LGVbMTZdPTQ1LGVbMTddPTQ2LGVbMThdPTQ3LGVbMTldPTQ4LGVbMjBdPTQ5LGVbMjFdPTUwLGVbMjJdPTUxLGVbMjNdPTUyLGVbMjRdPTUzLGVbMjVdPTU0LGVbMjZdPTU1LGVbMjddPTU2LGVbMjhdPTU3LGVbMjldPTU4LGVbMzBdPTg5NCxlWzMxXT02MCxlWzMyXT02MSxlWzMzXT02MixlWzM0XT02MyxlWzM1XT02NCxlWzM2XT02NSxlWzM3XT02NixlWzM4XT02NyxlWzM5XT02OCxlWzQwXT02OSxlWzQxXT03MCxlWzQyXT03MSxlWzQzXT03MixlWzQ0XT03MyxlWzQ1XT03NCxlWzQ2XT03NSxlWzQ3XT03NixlWzQ4XT03NyxlWzQ5XT03OCxlWzUwXT03OSxlWzUxXT04MCxlWzUyXT04MSxlWzUzXT04MixlWzU0XT04MyxlWzU1XT04NCxlWzU2XT04NSxlWzU3XT04NixlWzU4XT04NyxlWzU5XT04OCxlWzYwXT04OSxlWzYxXT05MCxlWzYyXT05MSxlWzYzXT05MixlWzY0XT05MyxlWzY1XT05NCxlWzY2XT05NSxlWzY3XT05NixlWzY4XT05NyxlWzY5XT05OCxlWzcwXT05OSxlWzcxXT0xMDAsZVs3Ml09MTAxLGVbNzNdPTEwMixlWzc0XT0xMDMsZVs3NV09MTA0LGVbNzZdPTEwNSxlWzc3XT0xMDYsZVs3OF09MTA3LGVbNzldPTEwOCxlWzgwXT0xMDksZVs4MV09MTEwLGVbODJdPTExMSxlWzgzXT0xMTIsZVs4NF09MTEzLGVbODVdPTExNCxlWzg2XT0xMTUsZVs4N109MTE2LGVbODhdPTExNyxlWzg5XT0xMTgsZVs5MF09MTE5LGVbOTFdPTEyMCxlWzkyXT0xMjEsZVs5M109MTIyLGVbOTRdPTEyMyxlWzk1XT0xMjQsZVs5Nl09MTI1LGVbOTddPTEyNixlWzk4XT0xOTYsZVs5OV09MTk3LGVbMTAwXT0xOTksZVsxMDFdPTIwMSxlWzEwMl09MjA5LGVbMTAzXT0yMTQsZVsxMDRdPTIyMCxlWzEwNV09MjI1LGVbMTA2XT0yMjQsZVsxMDddPTIyNixlWzEwOF09MjI4LGVbMTA5XT0yMjcsZVsxMTBdPTIyOSxlWzExMV09MjMxLGVbMTEyXT0yMzMsZVsxMTNdPTIzMixlWzExNF09MjM0LGVbMTE1XT0yMzUsZVsxMTZdPTIzNyxlWzExN109MjM2LGVbMTE4XT0yMzgsZVsxMTldPTIzOSxlWzEyMF09MjQxLGVbMTIxXT0yNDMsZVsxMjJdPTI0MixlWzEyM109MjQ0LGVbMTI0XT0yNDYsZVsxMjVdPTI0NSxlWzEyNl09MjUwLGVbMTI3XT0yNDksZVsxMjhdPTI1MSxlWzEyOV09MjUyLGVbMTMwXT04MjI0LGVbMTMxXT0xNzYsZVsxMzJdPTE2MixlWzEzM109MTYzLGVbMTM0XT0xNjcsZVsxMzVdPTgyMjYsZVsxMzZdPTE4MixlWzEzN109MjIzLGVbMTM4XT0xNzQsZVsxMzldPTE2OSxlWzE0MF09ODQ4MixlWzE0MV09MTgwLGVbMTQyXT0xNjgsZVsxNDNdPTg4MDAsZVsxNDRdPTE5OCxlWzE0NV09MjE2LGVbMTQ2XT04NzM0LGVbMTQ3XT0xNzcsZVsxNDhdPTg4MDQsZVsxNDldPTg4MDUsZVsxNTBdPTE2NSxlWzE1MV09MTgxLGVbMTUyXT04NzA2LGVbMTUzXT04NzIxLGVbMTU0XT04NzE5LGVbMTU2XT04NzQ3LGVbMTU3XT0xNzAsZVsxNThdPTE4NixlWzE1OV09ODQ4NixlWzE2MF09MjMwLGVbMTYxXT0yNDgsZVsxNjJdPTE5MSxlWzE2M109MTYxLGVbMTY0XT0xNzIsZVsxNjVdPTg3MzAsZVsxNjZdPTQwMixlWzE2N109ODc3NixlWzE2OF09ODcxMCxlWzE2OV09MTcxLGVbMTcwXT0xODcsZVsxNzFdPTgyMzAsZVsxNzldPTgyMjAsZVsxODBdPTgyMjEsZVsxODFdPTgyMTYsZVsxODJdPTgyMTcsZVsyMDBdPTE5MyxlWzIwM109MjA1LGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjZdPTM1MixlWzIyN109MzUzLGVbMjI4XT0zODEsZVsyMjldPTM4MixlWzIzM109MjIxLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY3XT0yODIsZVsyNjhdPTI4MyxlWzI2OV09MzEzLGVbMjc1XT0zMjMsZVsyNzZdPTMyNCxlWzI3OF09MzI4LGVbMjgzXT0zNDQsZVsyODRdPTM0NSxlWzI4NV09MzQ2LGVbMjg2XT0zNDcsZVsyOTJdPTM2NyxlWzI5NV09Mzc3LGVbMjk2XT0zNzgsZVsyOThdPTM4MCxlWzMwNV09OTYzLGVbMzA2XT05NjQsZVszMDddPTk2NixlWzMwOF09ODIxNSxlWzMwOV09ODI1MixlWzMxMF09ODMxOSxlWzMxMV09ODM1OSxlWzMxMl09ODU5MixlWzMxM109ODU5MyxlWzMzN109OTU1MixlWzQ5M109MTAzOSxlWzQ5NF09MTA0MCxlWzY3Ml09MTQ4OCxlWzY3M109MTQ4OSxlWzY3NF09MTQ5MCxlWzY3NV09MTQ5MSxlWzY3Nl09MTQ5MixlWzY3N109MTQ5MyxlWzY3OF09MTQ5NCxlWzY3OV09MTQ5NSxlWzY4MF09MTQ5NixlWzY4MV09MTQ5NyxlWzY4Ml09MTQ5OCxlWzY4M109MTQ5OSxlWzY4NF09MTUwMCxlWzY4NV09MTUwMSxlWzY4Nl09MTUwMixlWzY4N109MTUwMyxlWzY4OF09MTUwNCxlWzY4OV09MTUwNSxlWzY5MF09MTUwNixlWzY5MV09MTUwNyxlWzY5Ml09MTUwOCxlWzY5M109MTUwOSxlWzY5NF09MTUxMCxlWzY5NV09MTUxMSxlWzY5Nl09MTUxMixlWzY5N109MTUxMyxlWzY5OF09MTUxNCxlWzcwNV09MTUyNCxlWzcwNl09ODM2MixlWzcxMF09NjQyODgsZVs3MTFdPTY0Mjk4LGVbNzU5XT0xNjE3LGVbNzYxXT0xNzc2LGVbNzYzXT0xNzc4LGVbNzc1XT0xNjUyLGVbNzc3XT0xNzY0LGVbNzc4XT0xNzgwLGVbNzc5XT0xNzgxLGVbNzgwXT0xNzgyLGVbNzgyXT03NzEsZVs3ODNdPTY0NzI2LGVbNzg2XT04MzYzLGVbNzg4XT04NTMyLGVbNzkwXT03NjgsZVs3OTFdPTc2OSxlWzc5Ml09NzY4LGVbNzk1XT04MDMsZVs3OTddPTY0MzM2LGVbNzk4XT02NDMzNyxlWzc5OV09NjQzNDIsZVs4MDBdPTY0MzQzLGVbODAxXT02NDM0NCxlWzgwMl09NjQzNDUsZVs4MDNdPTY0MzYyLGVbODA0XT02NDM2MyxlWzgwNV09NjQzNjQsZVsyNDI0XT03ODIxLGVbMjQyNV09NzgyMixlWzI0MjZdPTc4MjMsZVsyNDI3XT03ODI0LGVbMjQyOF09NzgyNSxlWzI0MjldPTc4MjYsZVsyNDMwXT03ODI3LGVbMjQzM109NzY4MixlWzI2NzhdPTgwNDUsZVsyNjc5XT04MDQ2LGVbMjgzMF09MTU1MixlWzI4MzhdPTY4NixlWzI4NDBdPTc1MSxlWzI4NDJdPTc1MyxlWzI4NDNdPTc1NCxlWzI4NDRdPTc1NSxlWzI4NDZdPTc1NyxlWzI4NTZdPTc2NyxlWzI4NTddPTg0OCxlWzI4NThdPTg0OSxlWzI4NjJdPTg1MyxlWzI4NjNdPTg1NCxlWzI4NjRdPTg1NSxlWzI4NjVdPTg2MSxlWzI4NjZdPTg2MixlWzI5MDZdPTc0NjAsZVsyOTA4XT03NDYyLGVbMjkwOV09NzQ2MyxlWzI5MTBdPTc0NjQsZVsyOTEyXT03NDY2LGVbMjkxM109NzQ2NyxlWzI5MTRdPTc0NjgsZVsyOTE2XT03NDcwLGVbMjkxN109NzQ3MSxlWzI5MThdPTc0NzIsZVsyOTIwXT03NDc0LGVbMjkyMV09NzQ3NSxlWzI5MjJdPTc0NzYsZVsyOTI0XT03NDc4LGVbMjkyNV09NzQ3OSxlWzI5MjZdPTc0ODAsZVsyOTI4XT03NDgyLGVbMjkyOV09NzQ4MyxlWzI5MzBdPTc0ODQsZVsyOTMyXT03NDg2LGVbMjkzM109NzQ4NyxlWzI5MzRdPTc0ODgsZVsyOTM2XT03NDkwLGVbMjkzN109NzQ5MSxlWzI5MzhdPTc0OTIsZVsyOTQwXT03NDk0LGVbMjk0MV09NzQ5NSxlWzI5NDJdPTc0OTYsZVsyOTQ0XT03NDk4LGVbMjk0Nl09NzUwMCxlWzI5NDhdPTc1MDIsZVsyOTUwXT03NTA0LGVbMjk1MV09NzUwNSxlWzI5NTJdPTc1MDYsZVsyOTU0XT03NTA4LGVbMjk1NV09NzUwOSxlWzI5NTZdPTc1MTAsZVsyOTU4XT03NTEyLGVbMjk1OV09NzUxMyxlWzI5NjBdPTc1MTQsZVsyOTYyXT03NTE2LGVbMjk2M109NzUxNyxlWzI5NjRdPTc1MTgsZVsyOTY2XT03NTIwLGVbMjk2N109NzUyMSxlWzI5NjhdPTc1MjIsZVsyOTcwXT03NTI0LGVbMjk3MV09NzUyNSxlWzI5NzJdPTc1MjYsZVsyOTc0XT03NTI4LGVbMjk3NV09NzUyOSxlWzI5NzZdPTc1MzAsZVsyOTc4XT0xNTM3LGVbMjk3OV09MTUzOCxlWzI5ODBdPTE1MzksZVsyOTgyXT0xNTQ5LGVbMjk4M109MTU1MSxlWzI5ODRdPTE1NTIsZVsyOTg2XT0xNTU0LGVbMjk4N109MTU1NSxlWzI5ODhdPTE1NTYsZVsyOTkwXT0xNjIzLGVbMjk5MV09MTYyNCxlWzI5OTVdPTE3NzUsZVsyOTk5XT0xNzkxLGVbMzAwMl09NjQyOTAsZVszMDAzXT02NDI5MSxlWzMwMDRdPTY0MjkyLGVbMzAwNl09NjQyOTQsZVszMDA3XT02NDI5NSxlWzMwMDhdPTY0Mjk2LGVbMzAxMV09MTkwMCxlWzMwMTRdPTgyMjMsZVszMDE1XT04MjQ0LGVbMzAxN109NzUzMixlWzMwMThdPTc1MzMsZVszMDE5XT03NTM0LGVbMzA3NV09NzU5MCxlWzMwNzZdPTc1OTEsZVszMDc5XT03NTk0LGVbMzA4MF09NzU5NSxlWzMwODNdPTc1OTgsZVszMDg0XT03NTk5LGVbMzA4N109NzYwMixlWzMwODhdPTc2MDMsZVszMDkxXT03NjA2LGVbMzA5Ml09NzYwNyxlWzMwOTVdPTc2MTAsZVszMDk2XT03NjExLGVbMzA5OV09NzYxNCxlWzMxMDBdPTc2MTUsZVszMTAzXT03NjE4LGVbMzEwNF09NzYxOSxlWzMxMDddPTgzMzcsZVszMTA4XT04MzM4LGVbMzExNl09MTg4NCxlWzMxMTldPTE4ODUsZVszMTIwXT0xODg1LGVbMzEyM109MTg4NixlWzMxMjRdPTE4ODYsZVszMTI3XT0xODg3LGVbMzEyOF09MTg4NyxlWzMxMzFdPTE4ODgsZVszMTMyXT0xODg4LGVbMzEzNV09MTg4OSxlWzMxMzZdPTE4ODksZVszMTM5XT0xODkwLGVbMzE0MF09MTg5MCxlWzMxNDNdPTE4OTEsZVszMTQ0XT0xODkxLGVbMzE0N109MTg5MixlWzMxNDhdPTE4OTIsZVszMTUzXT01ODAsZVszMTU0XT01ODEsZVszMTU3XT01ODQsZVszMTU4XT01ODUsZVszMTYxXT01ODgsZVszMTYyXT01ODksZVszMTY1XT04OTEsZVszMTY2XT04OTIsZVszMTY5XT0xMjc0LGVbMzE3MF09MTI3NSxlWzMxNzNdPTEyNzgsZVszMTc0XT0xMjc5LGVbMzE4MV09NzYyMixlWzMxODJdPTc2MjMsZVszMjgyXT0xMTc5OSxlWzMzMTZdPTU3OCxlWzMzNzldPTQyNzg1LGVbMzM5M109MTE1OSxlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9bDt2YXIgZj0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPWY7dmFyIGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzFdPTMyLGVbNF09NjUsZVs1XT0xOTIsZVs2XT0xOTMsZVs5XT0xOTYsZVsxN109NjYsZVsxOF09NjcsZVsyMV09MjY4LGVbMjRdPTY4LGVbMjhdPTY5LGVbMjldPTIwMCxlWzMwXT0yMDEsZVszMl09MjgyLGVbMzhdPTcwLGVbMzldPTcxLGVbNDRdPTcyLGVbNDddPTczLGVbNDhdPTIwNCxlWzQ5XT0yMDUsZVs1OF09NzQsZVs2MF09NzUsZVs2Ml09NzYsZVs2OF09NzcsZVs2OV09NzgsZVs3NV09NzksZVs3Nl09MjEwLGVbODBdPTIxNCxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzkyXT0zNDQsZVs5NF09ODMsZVs5N109MzUyLGVbMTAwXT04NCxlWzEwNF09ODUsZVsxMDldPTIyMCxlWzExNV09ODYsZVsxMTZdPTg3LGVbMTIxXT04OCxlWzEyMl09ODksZVsxMjRdPTIyMSxlWzEyN109OTAsZVsxMjldPTM4MSxlWzI1OF09OTcsZVsyNTldPTIyNCxlWzI2MF09MjI1LGVbMjYzXT0yMjgsZVsyNjhdPTI2MSxlWzI3MV09OTgsZVsyNzJdPTk5LGVbMjczXT0yNjMsZVsyNzVdPTI2OSxlWzI4Ml09MTAwLGVbMjg2XT0xMDEsZVsyODddPTIzMixlWzI4OF09MjMzLGVbMjkwXT0yODMsZVsyOTVdPTI4MSxlWzI5Nl09MTAyLGVbMzM2XT0xMDMsZVszNDZdPTEwNCxlWzM0OV09MTA1LGVbMzUwXT0yMzYsZVszNTFdPTIzNyxlWzM2MV09MTA2LGVbMzY0XT0xMDcsZVszNjddPTEwOCxlWzM3MV09MzIyLGVbMzczXT0xMDksZVszNzRdPTExMCxlWzM4MV09MTExLGVbMzgyXT0yNDIsZVszODNdPTI0MyxlWzM4Nl09MjQ2LGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbMzk4XT0zNDUsZVs0MDBdPTExNSxlWzQwMV09MzQ3LGVbNDAzXT0zNTMsZVs0MTBdPTExNixlWzQzN109MTE3LGVbNDQyXT0yNTIsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ1N109MjUzLGVbNDYwXT0xMjIsZVs0NjJdPTM4MixlWzQ2M109MzgwLGVbODUzXT00NCxlWzg1NV09NTgsZVs4NTZdPTQ2LGVbODc2XT00NyxlWzg3OF09NDUsZVs4ODJdPTQ1LGVbODk0XT00MCxlWzg5NV09NDEsZVs4OTZdPTkxLGVbODk3XT05MyxlWzkyM109NjQsZVsxMDA0XT00OCxlWzEwMDVdPTQ5LGVbMTAwNl09NTAsZVsxMDA3XT01MSxlWzEwMDhdPTUyLGVbMTAwOV09NTMsZVsxMDEwXT01NCxlWzEwMTFdPTU1LGVbMTAxMl09NTYsZVsxMDEzXT01NyxlWzEwODFdPTM3LGVbMTA4NV09NDMsZVsxMDg2XT00NX0pKTt0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9Vbmljb2RlTWFwPXQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtpKHRoaXMsZSksdGhpcy5fbWFwPXR9cmV0dXJuIHMoZSxbe2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfX0se2tleToiYW1lbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1dKSxlfSgpO3QuVG9Vbmljb2RlTWFwPWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMuZmlyc3RDaGFyPXQsdGhpcy5sYXN0Q2hhcj1yfXJldHVybiBzKGUsW3trZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9fSx7a2V5OiJhbWVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fV0pLGV9KCk7dC5JZGVudGl0eVRvVW5pY29kZU1hcD11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigxNjcpLGk9cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnByb3BlcnRpZXM9cjt2YXIgbz1uZXcgbi5DRkZQYXJzZXIodCxyLGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1vLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO3ZhciBzPW5ldyBuLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTt0aGlzLnNlYWNzPXRoaXMuY2ZmLnNlYWNzO3RyeXt0aGlzLmRhdGE9cy5jb21waWxlKCl9Y2F0Y2goZSl7KDAsaS53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK3IubG9hZGVkTmFtZSksdGhpcy5kYXRhPXR9dGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJudW1HbHlwaHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudH19LHtrZXk6ImdldENoYXJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsaT1uLmNpZFRvR2lkTWFwLG89bi5jTWFwLHM9ci5jaGFyc2V0LmNoYXJzZXQ7aWYobi5jb21wb3NpdGUpe3ZhciBjLHU7aWYoaSYmaS5sZW5ndGg+MCl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbD0wLGY9aS5sZW5ndGg7bDxmO2wrKyl7dmFyIGg9aVtsXTt2b2lkIDAhPT1oJiYoY1toXT1sKX19aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxzLmxlbmd0aDt0Kyspe3ZhciBkPXNbdF07dT1vLmNoYXJDb2RlT2YoZCksYyYmdm9pZCAwIT09Y1t1XSYmKHU9Y1t1XSksZVt1XT10fWVsc2UgZm9yKHQ9MDt0PHIuY2hhclN0cmluZ3MuY291bnQ7dCsrKWVbdT1vLmNoYXJDb2RlT2YodCldPXQ7cmV0dXJuIGV9dmFyIHA9ci5lbmNvZGluZz9yLmVuY29kaW5nLmVuY29kaW5nOm51bGw7cmV0dXJuIG4uaXNJbnRlcm5hbEZvbnQmJihwPW4uZGVmYXVsdEVuY29kaW5nKSwoMCxhLnR5cGUxRm9udEdseXBoTWFwcGluZykobixwLHMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9fSx7a2V5OiJfY3JlYXRlQnVpbHRJbkVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2ZmLHQ9ZS5jaGFyc2V0LHI9ZS5lbmNvZGluZztpZih0JiZyKXt2YXIgbj10LmNoYXJzZXQsYT1yLmVuY29kaW5nLGk9W107Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107aWYocz49MCl7dmFyIGM9bltzXTtjJiYoaVtvXT1jKX19aS5sZW5ndGg+MCYmKHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2Rpbmc9aSl9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0ZGRm9udD1jfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY0KSxpPXIoMTY4KSxvPXIoMTY2KSxzPXIoMTM5KTtmdW5jdGlvbiBjKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1mKGUpO2lmKHQpe3ZhciBhPWYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxoKGUpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWgoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1oKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNik+PjE2fWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gbShlLHQpLzE2Mzg0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5sZW5ndGgscj0zMjc2ODtyZXR1cm4gdDwxMjQwP3I9MTA3OnQ8MzM5MDAmJihyPTExMzEpLHJ9ZnVuY3Rpb24gUyhlLHQscil7dmFyIGEsaSxvLHM9MT09PXkoZSx0KzIpP3YoZSx0KzgpOnYoZSx0KzE2KSxjPXkoZSx0K3MpO2lmKDQ9PT1jKXt5KGUsdCtzKzIpO3ZhciB1PXkoZSx0K3MrNik+PjE7Zm9yKGk9dCtzKzE0LGE9W10sbz0wO288dTtvKyssaSs9MilhW29dPXtlbmQ6eShlLGkpfTtmb3IoaSs9MixvPTA7bzx1O28rKyxpKz0yKWFbb10uc3RhcnQ9eShlLGkpO2ZvcihvPTA7bzx1O28rKyxpKz0yKWFbb10uaWREZWx0YT15KGUsaSk7Zm9yKG89MDtvPHU7bysrLGkrPTIpe3ZhciBsPXkoZSxpKTtpZigwIT09bCl7YVtvXS5pZHM9W107Zm9yKHZhciBmPTAsaD1hW29dLmVuZC1hW29dLnN0YXJ0KzE7ZjxoO2YrKylhW29dLmlkc1tmXT15KGUsaStsKSxsKz0yfX1yZXR1cm4gYX1pZigxMj09PWMpe3ZhciBkPXYoZSx0K3MrMTIpO2ZvcihpPXQrcysxNixhPVtdLG89MDtvPGQ7bysrKXQ9dihlLGkpLGEucHVzaCh7c3RhcnQ6dCxlbmQ6dihlLGkrNCksaWREZWx0YTp2KGUsaSs4KS10fSksaSs9MTI7cmV0dXJuIGF9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGNtYXA6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiB4KGUsdCxyLG4pe3ZhciBpPW5ldyBhLkNGRlBhcnNlcihuZXcgcy5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3QmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleCYmaS5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgcj10LmNvZGVQb2ludEF0KDApLG49MCxhPTAsaT1lLmxlbmd0aC0xO2E8aTspe3ZhciBvPWEraSsxPj4xO3I8ZVtvXS5zdGFydD9pPW8tMTphPW99cmV0dXJuIGVbYV0uc3RhcnQ8PXImJnI8PWVbYV0uZW5kJiYobj1lW2FdLmlkRGVsdGErKGVbYV0uaWRzP2VbYV0uaWRzW3ItZVthXS5zdGFydF06cikmNjU1MzUpLHtjaGFyQ29kZTpyLGdseXBoSWQ6bn19ZnVuY3Rpb24gQShlLHQscil7ZnVuY3Rpb24gbihlLHIpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBhKGUscil7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UscixuLGFdfSl9dmFyIG8scz0wLGM9bShlLHMpLHU9MCxsPTA7aWYocys9MTAsYzwwKWRve289eShlLHMpO3ZhciBmPXkoZSxzKzIpO3MrPTQ7dmFyIGg9dm9pZCAwLGQ9dm9pZCAwOzEmbz8oMiZvPyhoPW0oZSxzKSxkPW0oZSxzKzIpKTooaD15KGUscyksZD15KGUscysyKSkscys9NCk6MiZvPyhoPWIoZSxzKyspLGQ9YihlLHMrKykpOihoPWVbcysrXSxkPWVbcysrXSksMiZvPyh1PWgsbD1kKToodT0wLGw9MCk7dmFyIHA9MSxnPTEsdj0wLGs9MDs4Jm8/KHA9Zz13KGUscykscys9Mik6NjQmbz8ocD13KGUscyksZz13KGUscysyKSxzKz00KToxMjgmbyYmKHA9dyhlLHMpLHY9dyhlLHMrMiksaz13KGUscys0KSxnPXcoZSxzKzYpLHMrPTgpO3ZhciBTPXIuZ2x5cGhzW2ZdO1MmJih0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbcCx2LGssZyx1LGxdfSksQShTLHQsciksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJm8pO2Vsc2V7dmFyIHgsTyxDPVtdO2Zvcih4PTA7eDxjO3grKylDLnB1c2goeShlLHMpKSxzKz0yO3MrPTIreShlLHMpO2Zvcih2YXIgRj1DLmF0KC0xKSsxLFA9W107UC5sZW5ndGg8Rjspe3ZhciBUPTE7Zm9yKDgmKG89ZVtzKytdKSYmKFQrPWVbcysrXSk7VC0tID4wOylQLnB1c2goe2ZsYWdzOm99KX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgxOCZQW3hdLmZsYWdzKXtjYXNlIDA6dSs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSAyOnUtPWVbcysrXTticmVhaztjYXNlIDE4OnUrPWVbcysrXX1QW3hdLng9dX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgzNiZQW3hdLmZsYWdzKXtjYXNlIDA6bCs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSA0OmwtPWVbcysrXTticmVhaztjYXNlIDM2OmwrPWVbcysrXX1QW3hdLnk9bH12YXIgST0wO2ZvcihzPTA7czxjO3MrKyl7dmFyIEU9Q1tzXSxqPVAuc2xpY2UoSSxFKzEpO2lmKDEmalswXS5mbGFncylqLnB1c2goalswXSk7ZWxzZSBpZigxJmouYXQoLTEpLmZsYWdzKWoudW5zaGlmdChqLmF0KC0xKSk7ZWxzZXt2YXIgTT17ZmxhZ3M6MSx4OihqWzBdLngrai5hdCgtMSkueCkvMix5OihqWzBdLnkrai5hdCgtMSkueSkvMn07ai51bnNoaWZ0KE0pLGoucHVzaChNKX1mb3IobihqWzBdLngsalswXS55KSx4PTEsTz1qLmxlbmd0aDt4PE87eCsrKTEmalt4XS5mbGFncz9hKGpbeF0ueCxqW3hdLnkpOjEmalt4KzFdLmZsYWdzPyhpKGpbeF0ueCxqW3hdLnksalt4KzFdLngsalt4KzFdLnkpLHgrKyk6aShqW3hdLngsalt4XS55LChqW3hdLngralt4KzFdLngpLzIsKGpbeF0ueStqW3grMV0ueSkvMik7ST1FKzF9fX1mdW5jdGlvbiBDKGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gcyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxvKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLG9dfSl9dmFyIHU9W10sbD0wLGY9MCxoPTA7IWZ1bmN0aW9uIGUoZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDspe3ZhciBnPSExLHY9ZFtwKytdLHk9dm9pZCAwLG09dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLFM9dm9pZCAwLHg9dm9pZCAwLEE9dm9pZCAwLEY9dm9pZCAwO3N3aXRjaCh2KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpoKz11Lmxlbmd0aD4+MSxnPSEwO2JyZWFrO2Nhc2UgNDpmKz11LnBvcCgpLGkobCxmKSxnPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3UubGVuZ3RoPjA7KWwrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNjpmb3IoO3UubGVuZ3RoPjAmJihzKGwrPXUuc2hpZnQoKSxmKSwwIT09dS5sZW5ndGgpOylmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNzpmb3IoO3UubGVuZ3RoPjAmJihmKz11LnNoaWZ0KCkscyhsLGYpLDAhPT11Lmxlbmd0aCk7KXMobCs9dS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgODpmb3IoO3UubGVuZ3RoPjA7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2Nhc2UgMTA6aWYoQT11LnBvcCgpLEY9bnVsbCxyLmlzQ0ZGQ0lERm9udCl7dmFyIFA9ci5mZFNlbGVjdC5nZXRGREluZGV4KGEpO2lmKFA+PTAmJlA8ci5mZEFycmF5Lmxlbmd0aCl7dmFyIFQ9ci5mZEFycmF5W1BdLEk9dm9pZCAwO1QucHJpdmF0ZURpY3QmJlQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKEk9VC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpLEkmJihGPUlbQSs9ayhJKV0pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tBK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKHY9ZFtwKytdKXtjYXNlIDM0Om09KHk9bCt1LnNoaWZ0KCkpK3Uuc2hpZnQoKSxTPWYrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LGYsbSxTLGwsUyksbT0oeT1sK3Uuc2hpZnQoKSkrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LFMsbSxmLGwsZik7YnJlYWs7Y2FzZSAzNTp5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx1LnBvcCgpO2JyZWFrO2Nhc2UgMzY6Yyh5PWwrdS5zaGlmdCgpLFM9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx4PVMrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCkseCksYyh5PWwrdS5zaGlmdCgpLHgsbT15K3Uuc2hpZnQoKSx4K3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgMzc6dmFyIEU9bCxqPWY7eT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZikseT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0sZj13LE1hdGguYWJzKGwtRSk+TWF0aC5hYnMoZi1qKT9sKz11LnNoaWZ0KCk6Zis9dS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KHYpKX1icmVhaztjYXNlIDE0OmlmKHUubGVuZ3RoPj00KXt2YXIgTT11LnBvcCgpLF89dS5wb3AoKTtmPXUucG9wKCksbD11LnBvcCgpLHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNsYXRlIixhcmdzOltsLGZdfSk7dmFyIEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbTV1dKSk7QyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpLHQucHVzaCh7Y21kOiJyZXN0b3JlIn0pLEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbX11dKSksQyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6cCs9KGgrPXUubGVuZ3RoPj4xKSs3Pj4zLGc9ITA7YnJlYWs7Y2FzZSAyMTpmKz11LnBvcCgpLGkobCs9dS5wb3AoKSxmKSxnPSEwO2JyZWFrO2Nhc2UgMjI6aShsKz11LnBvcCgpLGYpLGc9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3UubGVuZ3RoPjI7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2wrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDt1Lmxlbmd0aD42OylsKz11LnNoaWZ0KCksZis9dS5zaGlmdCgpLHMobCxmKTt5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKTticmVhaztjYXNlIDI2OmZvcih1Lmxlbmd0aCUyJiYobCs9dS5zaGlmdCgpKTt1Lmxlbmd0aD4wOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZik7YnJlYWs7Y2FzZSAyNzpmb3IodS5sZW5ndGglMiYmKGYrPXUuc2hpZnQoKSk7dS5sZW5ndGg+MDspYyh5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcpO2JyZWFrO2Nhc2UgMjg6dS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpBPXUucG9wKCkrci5nc3VicnNCaWFzLChGPXIuZ3N1YnJzW0FdKSYmZShGKTticmVhaztjYXNlIDMwOmZvcig7dS5sZW5ndGg+MCYmKHk9bCxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dysoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxjKHksYixtLHcsbCxmKSwwIT09dS5sZW5ndGgpOyl5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbD1tKygxPT09dS5sZW5ndGg/dS5zaGlmdCgpOjApLGYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDt1Lmxlbmd0aD4wJiYoeT1sK3Uuc2hpZnQoKSxiPWYsbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGw9bSsoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxmKSwwIT09dS5sZW5ndGgpOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrKDE9PT11Lmxlbmd0aD91LnNoaWZ0KCk6MCksYyh5LGIsbSx3LGwsZik7YnJlYWs7ZGVmYXVsdDppZih2PDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdCh2KSk7djwyNDc/dS5wdXNoKHYtMTM5KTp2PDI1MT91LnB1c2goMjU2Kih2LTI0NykrZFtwKytdKzEwOCk6djwyNTU/dS5wdXNoKDI1NiotKHYtMjUxKS1kW3ArK10tMTA4KToodS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2fGRbcCsyXTw8OHxkW3ArM10pLzY1NTM2KSxwKz00KX1nJiYodS5sZW5ndGg9MCl9fShlKX12YXIgRj1bXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtkKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb21waWxlZEZvbnQuIiksdGhpcy5mb250TWF0cml4PXQsdGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBnKGUsW3trZXk6ImdldFBhdGhKcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkLGE9dGhpcy5jb21waWxlZEdseXBoc1tuXTtpZighYSl0cnl7YT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tuXSxuKSx0aGlzLmNvbXBpbGVkR2x5cGhzW25dPWF9Y2F0Y2goZSl7dGhyb3cgdGhpcy5jb21waWxlZEdseXBoc1tuXT1GLHZvaWQgMD09PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXSYmKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXT1uKSxlfXJldHVybiB2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl09biksYX19LHtrZXk6ImNvbXBpbGVHbHlwaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZXx8MD09PWUubGVuZ3RofHwxND09PWVbMF0pcmV0dXJuIEY7dmFyIHI9dGhpcy5mb250TWF0cml4O2lmKHRoaXMuaXNDRkZDSURGb250KXt2YXIgYT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7YT49MCYmYTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2FdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfXZhciBpPVt7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOnIuc2xpY2UoKX0se2NtZDoic2NhbGUiLGFyZ3M6WyJzaXplIiwiLXNpemUiXX1dO3JldHVybiB0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkO3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXBpbGVkR2x5cGhzW25dJiZ2b2lkIDAhPT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl19fV0pLGV9KCksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gZCh0aGlzLHIpLChpPXQuY2FsbCh0aGlzLGF8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSkuZ2x5cGhzPWUsaS5jbWFwPW4saX1yZXR1cm4gZyhyLFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQpe0EoZSx0LHRoaXMpfX1dKSxyfShQKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsbyl7dmFyIHM7cmV0dXJuIGQodGhpcyxyKSwocz10LmNhbGwodGhpcyxhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKSkuZ2x5cGhzPWUuZ2x5cGhzLHMuZ3N1YnJzPWUuZ3N1YnJzfHxbXSxzLnN1YnJzPWUuc3VicnN8fFtdLHMuY21hcD1uLHMuZ2x5cGhOYW1lTWFwPW98fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSxzLmdzdWJyc0JpYXM9ayhzLmdzdWJycykscy5zdWJyc0JpYXM9ayhzLnN1YnJzKSxzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxzLmZkU2VsZWN0PWUuZmRTZWxlY3Qscy5mZEFycmF5PWUuZmRBcnJheSxzfXJldHVybiBnKHIsW3trZXk6ImNvbXBpbGVHbHlwaEltcGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtDKGUsdCx0aGlzLHIpfX1dKSxyfShQKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2QodGhpcyxlKX1yZXR1cm4gZyhlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYSxpLG8scyxjLHU9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxsPXkodSw0KSxmPTAsaD0xMjtmPGw7ZisrLGgrPTE2KXt2YXIgZD0oMCxuLmJ5dGVzVG9TdHJpbmcpKHUuc3ViYXJyYXkoaCxoKzQpKSxwPXYodSxoKzgpLGc9dih1LGgrMTIpO3N3aXRjaChkKXtjYXNlImNtYXAiOnI9Uyh1LHApO2JyZWFrO2Nhc2UiZ2x5ZiI6YT11LnN1YmFycmF5KHAscCtnKTticmVhaztjYXNlImxvY2EiOmk9dS5zdWJhcnJheShwLHArZyk7YnJlYWs7Y2FzZSJoZWFkIjpjPXkodSxwKzE4KSxzPXkodSxwKzUwKTticmVhaztjYXNlIkNGRiAiOm89eCh1LHAscCtnLHQpfX1pZihhKXt2YXIgbT1jP1sxL2MsMCwwLDEvYywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9dik6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqeShlLHQpfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBjPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGMpKSxvPWN9cmV0dXJuIGl9KGEsaSxzKSxyLG0pfXJldHVybiBuZXcgSShvLHIsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19XSksZX0oKTt0LkZvbnRSZW5kZXJlckZhY3Rvcnk9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgbj1yKDEzNSksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YTt2YXIgaT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9LGVbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fSxlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fSxlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn0sZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9LGVbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX0sZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9LGVbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn0sZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfSxlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1pKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIHQmJmMoZS5wcm90b3R5cGUsdCksciYmYyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2x5ZlRhYmxlPXZvaWQgMDt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5nbHlmVGFibGUsbj10LmlzR2x5cGhMb2NhdGlvbnNMb25nLGE9dC5sb2NhVGFibGUsaT10Lm51bUdseXBocztzKHRoaXMsZSksdGhpcy5nbHlwaHM9W107Zm9yKHZhciBvPW5ldyBEYXRhVmlldyhhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxjPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx1PW4/NDoyLGw9bj9vLmdldFVpbnQzMigwKToyKm8uZ2V0VWludDE2KDApLGg9MCxkPTA7ZDxpO2QrKyl7aCs9dTt2YXIgcD1uP28uZ2V0VWludDMyKGgpOjIqby5nZXRVaW50MTYoaCk7aWYocCE9PWwpe3ZhciBnPWYucGFyc2UobCxjKTt0aGlzLmdseXBocy5wdXNoKGcpLGw9cH1lbHNlIHRoaXMuZ2x5cGhzLnB1c2gobmV3IGYoe30pKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0LmdldFNpemUoKSszJi00KX0pLDApfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxyPWU+MTMxMDcwLG49cj80OjIsaT1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqbikpO3I/aS5zZXRVaW50MzIoMCwwKTppLnNldFVpbnQxNigwLDApO3ZhciBvLHM9MCxjPTAsdT1hKHRoaXMuZ2x5cGhzKTt0cnl7Zm9yKHUucygpOyEobz11Lm4oKSkuZG9uZTspcz0ocys9by52YWx1ZS53cml0ZShzLHQpKSszJi00LGMrPW4scj9pLnNldFVpbnQzMihjLHMpOmkuc2V0VWludDE2KGMscz4+MSl9Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJue2lzTG9jYXRpb25Mb25nOnIsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8cjt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fV0pLGV9KCk7dC5HbHlmVGFibGU9bDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5oZWFkZXIsbj12b2lkIDA9PT1yP251bGw6cixhPXQuc2ltcGxlLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LmNvbXBvc2l0ZXMsYz12b2lkIDA9PT1vP251bGw6bztzKHRoaXMsZSksdGhpcy5oZWFkZXI9bix0aGlzLnNpbXBsZT1pLHRoaXMuY29tcG9zaXRlcz1jfXJldHVybiB1KGUsW3trZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuZ2V0U2l6ZSgpfSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2V7dmFyIG4saT1hKHRoaXMuY29tcG9zaXRlcyk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KWUrPW4udmFsdWUud3JpdGUoZSx0KX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuIGUtcn19LHtrZXk6InNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmhlYWRlcil7dmFyIHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjtpZih0aGlzLmhlYWRlci5zY2FsZSh0LGUpLHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZXt2YXIgcixuPWEodGhpcy5jb21wb3NpdGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5zY2FsZSh0LGUpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fX1dLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgYT1yKGgucGFyc2UodCxuKSwyKSxpPWFbMF0sbz1hWzFdO2lmKHQrPWksby5udW1iZXJPZkNvbnRvdXJzPDApe2Zvcih2YXIgcz1bXTs7KXt2YXIgYz1yKGcucGFyc2UodCxuKSwyKSx1PWNbMF0sbD1jWzFdO2lmKHQrPXUscy5wdXNoKGwpLCEoMzImbC5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBlKHtoZWFkZXI6byxjb21wb3NpdGVzOnN9KX1yZXR1cm4gbmV3IGUoe2hlYWRlcjpvLHNpbXBsZTpwLnBhcnNlKHQsbixvLm51bWJlck9mQ29udG91cnMpfSl9fV0pLGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5udW1iZXJPZkNvbnRvdXJzLG49dC54TWluLGE9dC55TWluLGk9dC54TWF4LG89dC55TWF4O3ModGhpcyxlKSx0aGlzLm51bWJlck9mQ29udG91cnM9cix0aGlzLnhNaW49bix0aGlzLnlNaW49YSx0aGlzLnhNYXg9aSx0aGlzLnlNYXg9b31yZXR1cm4gdShlLFt7a2V5OiJnZXRTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuWzEwLG5ldyBlKHtudW1iZXJPZkNvbnRvdXJzOnIuZ2V0SW50MTYodCkseE1pbjpyLmdldEludDE2KHQrMikseU1pbjpyLmdldEludDE2KHQrNCkseE1heDpyLmdldEludDE2KHQrNikseU1heDpyLmdldEludDE2KHQrOCl9KV19fV0pLGV9KCksZD11KChmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LnhDb29yZGluYXRlcyxhPXQueUNvb3JkaW5hdGVzO3ModGhpcyxlKSx0aGlzLnhDb29yZGluYXRlcz1uLHRoaXMueUNvb3JkaW5hdGVzPWEsdGhpcy5mbGFncz1yfSkpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuY29udG91cnMsbj10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5jb250b3Vycz1yLHRoaXMuaW5zdHJ1Y3Rpb25zPW59cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgscj0wLG49MCxpPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgbz1lLnZhbHVlO3QrPW8uZmxhZ3MubGVuZ3RoO2Zvcih2YXIgcz0wLGM9by54Q29vcmRpbmF0ZXMubGVuZ3RoO3M8YztzKyspe3ZhciB1PW8ueENvb3JkaW5hdGVzW3NdLGw9by55Q29vcmRpbmF0ZXNbc10sZj1NYXRoLmFicyh1LXIpO2Y+MjU1P3QrPTI6Zj4wJiYodCs9MSkscj11LChmPU1hdGguYWJzKGwtbikpPjI1NT90Kz0yOmY+MCYmKHQrPTEpLG49bH19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiB0fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lLGk9W10sbz1bXSxzPVtdLGM9MCx1PTAsbD1hKHRoaXMuY29udG91cnMpO3RyeXtmb3IobC5zKCk7IShyPWwubigpKS5kb25lOyl7Zm9yKHZhciBmPXIudmFsdWUsaD0wLGQ9Zi54Q29vcmRpbmF0ZXMubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPWYuZmxhZ3NbaF0sZz1mLnhDb29yZGluYXRlc1toXSx2PWctYztpZigwPT09dilwfD0xNixpLnB1c2goMCk7ZWxzZXt2YXIgeT1NYXRoLmFicyh2KTt5PD0yNTU/KHB8PXY+PTA/MTg6MixpLnB1c2goeSkpOmkucHVzaCh2KX1jPWc7dmFyIG09Zi55Q29vcmRpbmF0ZXNbaF07aWYoMD09KHY9bS11KSlwfD0zMixvLnB1c2goMCk7ZWxzZXt2YXIgYj1NYXRoLmFicyh2KTtiPD0yNTU/KHB8PXY+PTA/MzY6NCxvLnB1c2goYikpOm8ucHVzaCh2KX11PW0scy5wdXNoKHApfXQuc2V0VWludDE2KGUsaS5sZW5ndGgtMSksZSs9Mn19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtmb3IodmFyIHc9MCxrPXM7dzxrLmxlbmd0aDt3Kyspe3ZhciBTPWtbd107dC5zZXRVaW50OChlKyssUyl9Zm9yKHZhciB4PTAsTz1pLmxlbmd0aDt4PE87eCsrKXt2YXIgQT1pW3hdLEM9c1t4XTsyJkM/dC5zZXRVaW50OChlKyssQSk6MTYmQ3x8KHQuc2V0SW50MTYoZSxBKSxlKz0yKX1mb3IodmFyIEY9MCxQPW8ubGVuZ3RoO0Y8UDtGKyspe3ZhciBUPW9bRl0sST1zW0ZdOzQmST90LnNldFVpbnQ4KGUrKyxUKTozMiZJfHwodC5zZXRJbnQxNihlLFQpLGUrPTIpfXJldHVybiBlLW59fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKHZhciBvPTAscz1pLnhDb29yZGluYXRlcy5sZW5ndGg7bzxzO28rKylpLnhDb29yZGluYXRlc1tvXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW29dLWUpKnQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPVtdLGk9MDtpPG47aSsrKXt2YXIgbz1yLmdldFVpbnQxNih0KTt0Kz0yLGEucHVzaChvKX12YXIgcz1hW24tMV0rMSxjPXIuZ2V0VWludDE2KHQpO3QrPTI7dmFyIHU9bmV3IFVpbnQ4QXJyYXkocikuc2xpY2UodCx0K2MpO3QrPWM7Zm9yKHZhciBsPVtdLGY9MDtmPHM7dCsrLGYrKyl7dmFyIGg9ci5nZXRVaW50OCh0KTtpZihsLnB1c2goaCksOCZoKXt2YXIgcD1yLmdldFVpbnQ4KCsrdCk7aF49ODtmb3IodmFyIGc9MDtnPHA7ZysrKWwucHVzaChoKTtmKz1wfX1mb3IodmFyIHY9W10seT1bXSxtPVtdLGI9W10sdz1bXSxrPTAsUz0wLHg9MDt4PHM7eCsrKXt2YXIgTz1sW3hdO2lmKDImTyl7dmFyIEE9ci5nZXRVaW50OCh0KyspO1MrPTE2Jk8/QTotQSx5LnB1c2goUyl9ZWxzZSAxNiZPfHwoUys9ci5nZXRJbnQxNih0KSx0Kz0yKSx5LnB1c2goUyk7YVtrXT09PXgmJihrKyssdi5wdXNoKHkpLHk9W10pfVM9MCxrPTA7Zm9yKHZhciBDPTA7QzxzO0MrKyl7dmFyIEY9bFtDXTtpZig0JkYpe3ZhciBQPXIuZ2V0VWludDgodCsrKTtTKz0zMiZGP1A6LVAsbS5wdXNoKFMpfWVsc2UgMzImRnx8KFMrPXIuZ2V0SW50MTYodCksdCs9MiksbS5wdXNoKFMpO2IucHVzaCgxJkZ8NjQmRiksYVtrXT09PUMmJih5PXZba10saysrLHcucHVzaChuZXcgZCh7ZmxhZ3M6Yix4Q29vcmRpbmF0ZXM6eSx5Q29vcmRpbmF0ZXM6bX0pKSxtPVtdLGI9W10pfXJldHVybiBuZXcgZSh7Y29udG91cnM6dyxpbnN0cnVjdGlvbnM6dX0pfX1dKSxlfSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LmdseXBoSW5kZXgsYT10LmFyZ3VtZW50MSxpPXQuYXJndW1lbnQyLG89dC50cmFuc2YsYz10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5mbGFncz1yLHRoaXMuZ2x5cGhJbmRleD1uLHRoaXMuYXJndW1lbnQxPWEsdGhpcy5hcmd1bWVudDI9aSx0aGlzLnRyYW5zZj1vLHRoaXMuaW5zdHJ1Y3Rpb25zPWN9cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoO3JldHVybiAyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSxlKz0yLDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKSxlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpLHQuc2V0VWludDE2KGUsdGhpcy5mbGFncyksdC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCksZSs9NCwxJnRoaXMuZmxhZ3M/KDImdGhpcy5mbGFncz8odC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50MikpOih0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKSxlKz00KToodC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50MiksZSs9MiksMjU2JnRoaXMuZmxhZ3MmJih0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpKSxlLXJ9fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt9fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuLGEsaT10LG89W10scz1yLmdldFVpbnQxNih0KSxjPXIuZ2V0VWludDE2KHQrMik7dCs9NCwxJnM/KDImcz8obj1yLmdldEludDE2KHQpLGE9ci5nZXRJbnQxNih0KzIpKToobj1yLmdldFVpbnQxNih0KSxhPXIuZ2V0VWludDE2KHQrMikpLHQrPTQsc149MSk6KDImcz8obj1yLmdldEludDgodCksYT1yLmdldEludDgodCsxKSk6KG49ci5nZXRVaW50OCh0KSxhPXIuZ2V0VWludDgodCsxKSksdCs9MiksOCZzPyhvLnB1c2goci5nZXRVaW50MTYodCkpLHQrPTIpOjY0JnM/KG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpKSx0Kz00KToxMjgmcyYmKG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpLHIuZ2V0VWludDE2KHQrNCksci5nZXRVaW50MTYodCs2KSksdCs9OCk7dmFyIHU9bnVsbDtpZigyNTYmcyl7dmFyIGw9ci5nZXRVaW50MTYodCk7dCs9Mix1PW5ldyBVaW50OEFycmF5KHIpLnNsaWNlKHQsdCtsKSx0Kz1sfXJldHVyblt0LWksbmV3IGUoe2ZsYWdzOnMsZ2x5cGhJbmRleDpjLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjphLHRyYW5zZjpvLGluc3RydWN0aW9uczp1fSldfX1dKSxlfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMDt2YXIgYT1yKDEzNSksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQscil7ZVt0XT1yPj44JjI1NSxlW3QrMV09MjU1JnJ9ZnVuY3Rpb24gdShlLHQscil7ZVt0XT1yPj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfWZ1bmN0aW9uIGwoZSx0LHIpe2lmKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KHIsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2V7dmFyIGksbz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fShyKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBjPWkudmFsdWU7ZVt0KytdPTI1NSZjfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnNmbnQ9dCx0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciB0LHIsbjtyZXR1cm4gdD1lLG49W3trZXk6ImdldFNlYXJjaFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fX1dLChyPVt7a2V5OiJ0b0FycmF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2ZudCxyPXRoaXMudGFibGVzLG49T2JqZWN0LmtleXMocik7bi5zb3J0KCk7dmFyIG8scyxmLGgsZCxwPW4ubGVuZ3RoLGc9MTIrMTYqcCx2PVtnXTtmb3Iobz0wO288cDtvKyspZys9KChoPXJbbltvXV0pLmxlbmd0aCszJi00KT4+PjAsdi5wdXNoKGcpO3ZhciB5PW5ldyBVaW50OEFycmF5KGcpO2ZvcihvPTA7bzxwO28rKyloPXJbbltvXV0sbCh5LHZbb10saCk7InRydWUiPT09dCYmKHQ9KDAsaS5zdHJpbmczMikoNjU1MzYpKSx5WzBdPTI1NSZ0LmNoYXJDb2RlQXQoMCkseVsxXT0yNTUmdC5jaGFyQ29kZUF0KDEpLHlbMl09MjU1JnQuY2hhckNvZGVBdCgyKSx5WzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyksYyh5LDQscCk7dmFyIG09ZS5nZXRTZWFyY2hQYXJhbXMocCwxNik7Zm9yKGMoeSw2LG0ucmFuZ2UpLGMoeSw4LG0uZW50cnkpLGMoeSwxMCxtLnJhbmdlU2hpZnQpLGc9MTIsbz0wO288cDtvKyspe2Q9bltvXSx5W2ddPTI1NSZkLmNoYXJDb2RlQXQoMCkseVtnKzFdPTI1NSZkLmNoYXJDb2RlQXQoMSkseVtnKzJdPTI1NSZkLmNoYXJDb2RlQXQoMikseVtnKzNdPTI1NSZkLmNoYXJDb2RlQXQoMyk7dmFyIGI9MDtmb3Iocz12W29dLGY9dltvKzFdO3M8ZjtzKz00KWI9YisoMCxhLnJlYWRVaW50MzIpKHkscyk+Pj4wO3UoeSxnKzQsYiksdSh5LGcrOCx2W29dKSx1KHksZysxMixyW2RdLmxlbmd0aCksZys9MTZ9cmV0dXJuIHl9fSx7a2V5OiJhZGRUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1dKSYmbyh0LnByb3RvdHlwZSxyKSxuJiZvKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigyKSxpPXIoMTY3KSxvPXIoMTM1KSxzPXIoMTM5KSxjPXIoMTc4KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPXQubGVuZ3RoLGk9bi1hLHM9cixjPSExO3M8aTspe2Zvcih2YXIgdT0wO3U8YSYmZVtzK3VdPT09dFt1XTspdSsrO2lmKHU+PWEpe2ZvcihzKz11O3M8biYmKDAsby5pc1doaXRlU3BhY2UpKGVbc10pOylzKys7Yz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOnN9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSk7dmFyIG89bi5sZW5ndGgxLHU9KG4ubGVuZ3RoMixyLnBlZWtCeXRlcyg2KSksbD0xMjg9PT11WzBdJiYxPT09dVsxXTtsJiYoci5za2lwKDYpLG89dVs1XTw8MjR8dVs0XTw8MTZ8dVszXTw8OHx1WzJdKTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGM9WzEwMSwxMDEsMTIwLDEwMSw5OV0sdT1lLnBvczt0cnl7bj0ocj1lLmdldEJ5dGVzKHQpKS5sZW5ndGh9Y2F0Y2goZSl7fWlmKG49PT10JiYoaT1kKHIsYyx0LTIqYy5sZW5ndGgpKS5mb3VuZCYmaS5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IHMuU3RyZWFtKHIpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz11OzAhPT0oaT1kKGUucGVla0J5dGVzKDIwNDgpLGMsMCkpLmxlbmd0aDspaWYoZS5wb3MrPWkubGVuZ3RoLGkuZm91bmQpe289ZS5wb3MtdTticmVha31yZXR1cm4gZS5wb3M9dSxvP3tzdHJlYW06bmV3IHMuU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgcy5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0ocixvKTtuZXcgYy5UeXBlMVBhcnNlcihmLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIobiksbCYmKCh1PXIuZ2V0Qnl0ZXMoNikpWzVdLHVbNF0sdVszXSx1WzJdKTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciByPWUuZ2V0Qnl0ZXMoKTtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgcy5TdHJlYW0ociksbGVuZ3RoOnIubGVuZ3RofX0ocikscD1uZXcgYy5UeXBlMVBhcnNlcihoLnN0cmVhbSwhMCxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRQcm9ncmFtKG4pO2Zvcih2YXIgZyBpbiBwLnByb3BlcnRpZXMpbltnXT1wLnByb3BlcnRpZXNbZ107dmFyIHY9cC5jaGFyc3RyaW5ncyx5PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyh2KSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhwLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXYsdGhpcy5kYXRhPXRoaXMud3JhcCh0LHksdGhpcy5jaGFyc3RyaW5ncyxtLG4pLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhwLmNoYXJzdHJpbmdzKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6Im51bUdseXBocyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9fSx7a2V5OiJnZXRDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9WyIubm90ZGVmIl0scj1sKHRoaXMuY2hhcnN0cmluZ3MpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZS5nbHlwaE5hbWU7dC5wdXNoKG4pfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGE9dC5sZW5ndGg7bjxhO24rKylyW2UuY01hcC5jaGFyQ29kZU9mKG4pXT1uKzE7cmV0dXJuIHJ9dmFyIG8scyxjPVsiLm5vdGRlZiJdO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspYy5wdXNoKHRbc10uZ2x5cGhOYW1lKTt2YXIgdT1lLmJ1aWx0SW5FbmNvZGluZztpZih1KWZvcih2YXIgbCBpbiBvPU9iamVjdC5jcmVhdGUobnVsbCksdSkocz1jLmluZGV4T2YodVtsXSkpPj0wJiYob1tsXT1zKTtyZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxvLGMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9fSx7a2V5OiJnZXRTZWFjcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07YS5zZWFjJiYodFtyKzFdPWEuc2VhYyl9cmV0dXJuIHR9fSx7a2V5OiJnZXRUeXBlMkNoYXJzdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPVtdLG49bChlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7ci5wdXNoKGEuY2hhcnN0cmluZyl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByfX0se2tleToiZ2V0VHlwZTJTdWJycyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O3ZhciBuLGE9W107Zm9yKG49MDtuPHQ7bisrKWEucHVzaChbMTFdKTtmb3Iobj0wO248cjtuKyspYS5wdXNoKGVbbl0pO3JldHVybiBhfX0se2tleToid3JhcCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxpKXt2YXIgbz1uZXcgbi5DRkY7by5oZWFkZXI9bmV3IG4uQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBuLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWMsby5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7dmFyIHUsbCxmPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07Zm9yKHU9MDt1PGY7dSsrKXt2YXIgZD1yW3VdLmdseXBoTmFtZTstMT09PW4uQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoZCkmJmMuYWRkKGQpLGgucHVzaChkKX1vLmNoYXJzZXQ9bmV3IG4uQ0ZGQ2hhcnNldCghMSwwLGgpO3ZhciBwPW5ldyBuLkNGRkluZGV4O2ZvcihwLmFkZChbMTM5LDE0XSksdT0wO3U8Zjt1KyspcC5hZGQodFt1XSk7by5jaGFyU3RyaW5ncz1wO3ZhciBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7dmFyIHY9WyJCbHVlVmFsdWVzIiwiT3RoZXJCbHVlcyIsIkZhbWlseUJsdWVzIiwiRmFtaWx5T3RoZXJCbHVlcyIsIlN0ZW1TbmFwSCIsIlN0ZW1TbmFwViIsIkJsdWVTaGlmdCIsIkJsdWVGdXp6IiwiQmx1ZVNjYWxlIiwiTGFuZ3VhZ2VHcm91cCIsIkV4cGFuc2lvbkZhY3RvciIsIkZvcmNlQm9sZCIsIlN0ZEhXIiwiU3RkVlciXTtmb3IodT0wLGw9di5sZW5ndGg7dTxsO3UrKyl7dmFyIHk9dlt1XTtpZih5IGluIGkucHJpdmF0ZURhdGEpe3ZhciBtPWkucHJpdmF0ZURhdGFbeV07aWYoQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIGI9bS5sZW5ndGgtMTtiPjA7Yi0tKW1bYl0tPW1bYi0xXTtnLnNldEJ5TmFtZSh5LG0pfX1vLnRvcERpY3QucHJpdmF0ZURpY3Q9Zzt2YXIgdz1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGw9YS5sZW5ndGg7dTxsO3UrKyl3LmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PXcsbmV3IG4uQ0ZGQ29tcGlsZXIobykuY29tcGlsZSgpfX1dKSYmaCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuVHlwZTFGb250PXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIG49cigxNjYpLGE9cigxMzUpLGk9cigxMzkpLG89cigyKTtmdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPVs0XSxkPVs1XSxwPVs2XSxnPVs3XSx2PVs4XSx5PVsxMiwzNV0sbT1bMTRdLGI9WzIxXSx3PVsyMl0saz1bMzBdLFM9WzMxXSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1yZXR1cm4gZihlLFt7a2V5OiJjb252ZXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzPWUubGVuZ3RoLGM9ITEsdT0wO3U8czt1Kyspe3ZhciBsPWVbdV07aWYobDwzMil7c3dpdGNoKDEyPT09bCYmKGw9KGw8PDgpK2VbKyt1XSksbCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7Yz0hMDticmVha312YXIgZj10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGYpO2JyZWFrfWM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgNTpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixkKTticmVhaztjYXNlIDY6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSA3OmM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGcpO2JyZWFrO2Nhc2UgODpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix2KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2M9ITA7YnJlYWt9aWYoIXRbaT10aGlzLnN0YWNrLnBvcCgpXSl7Yz0hMDticmVha31jPXRoaXMuY29udmVydCh0W2ldLHQscik7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gYztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe2M9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMix3KTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2gobVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYik7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31jPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSx3KTticmVhaztjYXNlIDMwOmM9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGspO2JyZWFrO2Nhc2UgMzE6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsUyk7YnJlYWs7Y2FzZSAzMDc4OmlmKHIpe3ZhciB4PXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLXgsYz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsbSl9ZWxzZSBjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7Yz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLG49dGhpcy5zdGFjay5wb3AoKTt2YXIgTz10aGlzLnN0YWNrLnBvcCgpO2E9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhLE8pLGM9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGIpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfXZhciBBPXRoaXMuc3RhY2sucG9wKCksQz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChDL0EpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfWk9dGhpcy5zdGFjay5wb3AoKTt2YXIgRj10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1pJiYzPT09Ril7dmFyIFA9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChQWzJdK1BbMF0sUFszXStQWzFdLFBbNF0sUFs1XSxQWzZdLFBbN10sUFs4XSxQWzldLFBbMTBdLFBbMTFdLFBbMTJdLFBbMTNdLFBbMTRdKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMseSwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChQWzE1XSxQWzE2XSl9ZWxzZSAxPT09aSYmMD09PUYmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLG8ud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytsKyciJyl9aWYoYylicmVha31lbHNlIGw8PTI0Nj9sLT0xMzk6bD1sPD0yNTA/MjU2KihsLTI0NykrZVsrK3VdKzEwODpsPD0yNTQ/LTI1NioobC0yNTEpLWVbKyt1XS0xMDg6KDI1NSZlWysrdV0pPDwyNHwoMjU1JmVbKyt1XSk8PDE2fCgyNTUmZVsrK3VdKTw8OHwoMjU1JmVbKyt1XSk8PDAsdGhpcy5zdGFjay5wdXNoKGwpfXJldHVybiBjfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5pKXJldHVybiEwO2Zvcih2YXIgbz1pLWUscz1vO3M8aTtzKyspe3ZhciB1PXRoaXMuc3RhY2tbc107TnVtYmVyLmlzSW50ZWdlcih1KT90aGlzLm91dHB1dC5wdXNoKDI4LHU+PjgmMjU1LDI1NSZ1KToodT02NTUzNip1fDAsdGhpcy5vdXRwdXQucHVzaCgyNTUsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSkpfXJldHVybihuPXRoaXMub3V0cHV0KS5wdXNoLmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYyhlKX0oYT10KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShhKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX0oYSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpLHI/dGhpcy5zdGFjay5zcGxpY2UobyxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wLCExfX1dKSxlfSgpO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIEEoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGM9ZVtuXTtzW2FdPWNeaT4+OCxpPTUyODQ1KihjK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7aWYodSh0aGlzLGUpLHIpe3ZhciBvPXQuZ2V0Qnl0ZXMoKSxzPSEoKE8ob1swXSl8fCgwLGEuaXNXaGl0ZVNwYWNlKShvWzBdKSkmJk8ob1sxXSkmJk8ob1syXSkmJk8ob1szXSkmJk8ob1s0XSkmJk8ob1s1XSkmJk8ob1s2XSkmJk8ob1s3XSkpO3Q9bmV3IGkuU3RyZWFtKHM/QShvLDU1NjY1LDQpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9NTU2NjUsbz1lLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KG8+Pj4xKTtmb3Iobj0wLGE9MDtuPG87bisrKXt2YXIgYz1lW25dO2lmKE8oYykpe24rKztmb3IodmFyIHU9dm9pZCAwO248byYmIU8odT1lW25dKTspbisrO2lmKG48byl7dmFyIGw9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjLHUpLDE2KTtzW2ErK109bF5pPj44LGk9NTI4NDUqKGwraSkrMjI3MTkmNjU1MzV9fX1yZXR1cm4gcy5zbGljZSg0LGEpfShvKSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhbix0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKX1yZXR1cm4gZihlLFt7a2V5OiJyZWFkTnVtYmVyQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfX0se2tleToicmVhZE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9fSx7a2V5OiJyZWFkSW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX19LHtrZXk6InJlYWRCb29sZWFuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9fSx7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJwcmV2Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0uc2tpcCgtMiksdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxhLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoQyh0KSlyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLFN0cmluZy5mcm9tQ2hhckNvZGUodCk7dmFyIHI9IiI7ZG97cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsYS5pc1doaXRlU3BhY2UpKHQpJiYhQyh0KSk7cmV0dXJuIHJ9fSx7a2V5OiJyZWFkQ2hhclN0cmluZ3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT10P2U6QShlLDQzMzAsdCl9fSx7a2V5OiJleHRyYWN0Rm9udFByb2dyYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyZWFtLHI9W10sbj1bXSxhPU9iamVjdC5jcmVhdGUobnVsbCk7YS5sZW5JVj00O2Zvcih2YXIgaSxvLHMsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bnVsbCE9PShpPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWkpc3dpdGNoKGk9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oaT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWk7KWlmKCIvIj09PWkpe3ZhciBsPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBmPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1pJiZ0aGlzLnByZXZDaGFyKCksbi5wdXNoKHtnbHlwaDpsLGVuY29kZWQ6Zn0pfWJyZWFrO2Nhc2UiU3VicnMiOmZvcih0aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCk7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXt2YXIgaD10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBkPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpJiZ0aGlzLmdldFRva2VuKCkscltoXT1kfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOnZhciBwPXRoaXMucmVhZE51bWJlckFycmF5KCk7cC5sZW5ndGg+MCYmcC5sZW5ndGg7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVtpXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ldPXRoaXMucmVhZEJvb2xlYW4oKX1mb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKyspe3ZhciB5PXZbZ10sbT15LmVuY29kZWQsYj15LmdseXBoLHc9bmV3IHgsaz13LmNvbnZlcnQobSxyLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCksUz13Lm91dHB1dDtrJiYoUz1bMTRdKTt2YXIgTz17Z2x5cGhOYW1lOmIsY2hhcnN0cmluZzpTLHdpZHRoOncud2lkdGgsbHNiOncubHNiLHNlYWM6dy5zZWFjfTtpZigiLm5vdGRlZiI9PT1iP3UuY2hhcnN0cmluZ3MudW5zaGlmdChPKTp1LmNoYXJzdHJpbmdzLnB1c2goTyksZS5idWlsdEluRW5jb2Rpbmcpe3ZhciBBPWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYik7QT4tMSYmdm9pZCAwPT09ZS53aWR0aHNbQV0mJkE+PWUuZmlyc3RDaGFyJiZBPD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbQV09dy53aWR0aCl9fXJldHVybiB1fX0se2tleToiZXh0cmFjdEZvbnRIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgYT10aGlzLmdldFRva2VuKCksaT12b2lkIDA7aWYoL15cZCskLy50ZXN0KGEpKXtpPVtdO3ZhciBvPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgcz0wO3M8bztzKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYobnVsbD09PSh0PXRoaXMuZ2V0VG9rZW4oKSkpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhazt2YXIgYz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7dmFyIHU9dGhpcy5nZXRUb2tlbigpO2lbY109dSx0aGlzLmdldFRva2VuKCl9fWVsc2UgaT0oMCxuLmdldEVuY29kaW5nKShhKTtlLmJ1aWx0SW5FbmNvZGluZz1pO2JyZWFrO2Nhc2UiRm9udEJCb3giOnZhciBsPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgobFszXSxsWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4obFsxXSxsWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fV0pLGV9KCk7dC5UeXBlMVBhcnNlcj1GfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGF0dGVybj12b2lkIDAsdC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxvPXQuZ2V0KCJYU3RlcCIpLHM9dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksdT10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxvLHMsYyx1XX07dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTQzKSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49aChlKTtpZih0KXt2YXIgYT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmKHRoaXMscil9fWZ1bmN0aW9uIGYoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZChlKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1kKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWQoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3AodGhpcyxlKSwoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1yZXR1cm4gdihlLG51bGwsW3trZXk6InBhcnNlU2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzLGMpe3ZhciB1PWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbD11LmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGwpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyB3KHUsdCxyLHMsYyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgeChlLHQscixzLGMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2wpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiBpLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJufSksKDAsbi53YXJuKShlKSxuZXcgT319fV0pLGV9KCk7dC5QYXR0ZXJuPXk7dmFyIG0sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1yZXR1cm4gdihlLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1dLFt7a2V5OiJTTUFMTF9OVU1CRVIiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJTTUFMTF9OVU1CRVIiLDFlLTYpfX1dKSxlfSgpLHc9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLGEsbyxjLHUpe3ZhciBsO3AodGhpcyxyKSwobD10LmNhbGwodGhpcykpLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSxsLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO3ZhciBoPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjphLHJlc291cmNlczpvLHBkZkZ1bmN0aW9uRmFjdG9yeTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KSxkPWUuZ2V0QXJyYXkoIkJCb3giKTtBcnJheS5pc0FycmF5KGQpJiY0PT09ZC5sZW5ndGg/bC5iYm94PW4uVXRpbC5ub3JtYWxpemVSZWN0KGQpOmwuYmJveD1udWxsO3ZhciBnPTAsdj0xO2lmKGUuaGFzKCJEb21haW4iKSl7dmFyIHk9ZS5nZXRBcnJheSgiRG9tYWluIik7Zz15WzBdLHY9eVsxXX12YXIgbT0hMSx3PSExO2lmKGUuaGFzKCJFeHRlbmQiKSl7dmFyIGs9ZS5nZXRBcnJheSgiRXh0ZW5kIik7bT1rWzBdLHc9a1sxXX1pZighKDMhPT1sLnNoYWRpbmdUeXBlfHxtJiZ3KSl7dmFyIFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShsLmNvb3Jkc0Fyciw2KSx4PVNbMF0sTz1TWzFdLEE9U1syXSxDPVNbM10sRj1TWzRdLFA9U1s1XSxUPU1hdGguaHlwb3QoeC1DLE8tRik7QTw9UCtUJiZQPD1BK1QmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX1sLmV4dGVuZFN0YXJ0PW0sbC5leHRlbmRFbmQ9dzt2YXIgST1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWMuY3JlYXRlRnJvbUFycmF5KEkpLGo9KHYtZykvMTAsTT1sLmNvbG9yU3RvcHM9W107aWYoZz49dnx8ajw9MClyZXR1cm4oMCxuLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIiksZihsKTtmb3IodmFyIF8sTD1uZXcgRmxvYXQzMkFycmF5KGgubnVtQ29tcHMpLFI9bmV3IEZsb2F0MzJBcnJheSgxKSxOPTA7Tjw9MTA7TisrKXtSWzBdPWcrTipqLEUoUiwwLEwsMCksXz1oLmdldFJnYihMLDApO3ZhciBEPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pO00ucHVzaChbTi8xMCxEXSl9dmFyIEI9InRyYW5zcGFyZW50IjtyZXR1cm4gZS5oYXMoIkJhY2tncm91bmQiKSYmKF89aC5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxCPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pKSxtfHwoTS51bnNoaWZ0KFswLEJdKSxNWzFdWzBdKz1iLlNNQUxMX05VTUJFUiksd3x8KE0uYXQoLTEpWzBdLT1iLlNNQUxMX05VTUJFUixNLnB1c2goWzEsQl0pKSxsLmNvbG9yU3RvcHM9TSxsfXJldHVybiB2KHIsW3trZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGksbz10aGlzLmNvb3Jkc0FycixzPXRoaXMuc2hhZGluZ1R5cGU7cmV0dXJuIDI9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bMl0sb1szXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOjM9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bM10sb1s0XV0sYT1vWzJdLGk9b1s1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHMpKSxbIlJhZGlhbEF4aWFsIixlLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsdCxyLGEsaV19fV0pLHJ9KGIpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5jb250ZXh0PXIsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciBuPXIubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KG4pO3ZhciBhPXIuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9ci5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1yZXR1cm4gdihlLFt7a2V5OiJoYXNEYXRhIixnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTt2YXIgbj10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIHRoaXMuYnVmZmVyPW4mKDE8PHIpLTEsKHQ8PDgtcnwoMjU1Jm4pPj5yKT4+PjB9aWYoOD09PWUmJjA9PT1yKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtyPGU7KXQ9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkscis9ODtyZXR1cm4gci09ZSx0aGlzLmJ1ZmZlckxlbmd0aD1yLHRoaXMuYnVmZmVyPXQmKDE8PHIpLTEsdD4+cn19LHtrZXk6ImFsaWduIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MH19LHtrZXk6InJlYWRGbGFnIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9fSx7a2V5OiJyZWFkQ29vcmRpbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5yZWFkQml0cyhlKSxuPXRoaXMuY29udGV4dC5kZWNvZGUsYT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KmEqKG5bMV0tblswXSkrblswXSxyKmEqKG5bM10tblsyXSkrblsyXV19fSx7a2V5OiJyZWFkQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQscj10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLG49dGhpcy5jb250ZXh0LmRlY29kZSxhPXRoaXMudG1wQ29tcHNCdWYsaT0wLG89NDtpPGU7aSsrLG8rPTIpe3ZhciBzPXRoaXMucmVhZEJpdHModCk7YVtpXT1zKnIqKG5bbysxXS1uW29dKStuW29dfXZhciBjPXRoaXMudG1wQ3NDb21wc0J1ZjtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKGEsMCxjLDApLHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjLDApfX1dKSxlfSgpLFM9KG09W10sZnVuY3Rpb24oZSl7cmV0dXJuIG1bZV18fChtW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjw9ZTtyKyspe3ZhciBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fShlKSksbVtlXX0pLHg9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLG8scyxjLHUpe3ZhciBsO2lmKHAodGhpcyxyKSxsPXQuY2FsbCh0aGlzKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7dmFyIGY9ZS5kaWN0O2wuc2hhZGluZ1R5cGU9Zi5nZXQoIlNoYWRpbmdUeXBlIik7dmFyIGg9Zi5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9sLmJib3g9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoaCk6bC5iYm94PW51bGw7dmFyIGQ9aS5Db2xvclNwYWNlLnBhcnNlKHtjczpmLmdldFJhdygiQ1MiKXx8Zi5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOm8scmVzb3VyY2VzOnMscGRmRnVuY3Rpb25GYWN0b3J5OmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dX0pO2wuYmFja2dyb3VuZD1mLmhhcygiQmFja2dyb3VuZCIpP2QuZ2V0UmdiKGYuZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgZz1mLmdldFJhdygiRnVuY3Rpb24iKSx2PWc/Yy5jcmVhdGVGcm9tQXJyYXkoZyk6bnVsbDtsLmNvb3Jkcz1bXSxsLmNvbG9ycz1bXSxsLmZpZ3VyZXM9W107dmFyIHk9e2JpdHNQZXJDb29yZGluYXRlOmYuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Zi5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpmLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Zi5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjp2LGNvbG9yU3BhY2U6ZCxudW1Db21wczp2PzE6ZC5udW1Db21wc30sbT1uZXcgayhlLHkpLGI9ITE7c3dpdGNoKGwuc2hhZGluZ1R5cGUpe2Nhc2UgNDpsLl9kZWNvZGVUeXBlNFNoYWRpbmcobSk7YnJlYWs7Y2FzZSA1OnZhciB3PTB8Zi5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYodzwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7bC5fZGVjb2RlVHlwZTVTaGFkaW5nKG0sdyk7YnJlYWs7Y2FzZSA2OmwuX2RlY29kZVR5cGU2U2hhZGluZyhtKSxiPSEwO2JyZWFrO2Nhc2UgNzpsLl9kZWNvZGVUeXBlN1NoYWRpbmcobSksYj0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYoYil7bC5fdXBkYXRlQm91bmRzKCk7Zm9yKHZhciBTPTAseD1sLmZpZ3VyZXMubGVuZ3RoO1M8eDtTKyspbC5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goUyl9cmV0dXJuIGwuX3VwZGF0ZUJvdW5kcygpLGwuX3BhY2tEYXRhKCksbH1yZXR1cm4gdihyLFt7a2V5OiJfZGVjb2RlVHlwZTRTaGFkaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W10sbz0wO2UuaGFzRGF0YTspe3ZhciBzPWUucmVhZEZsYWcoKSxjPWUucmVhZENvb3JkaW5hdGUoKSx1PWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09byl7aWYoISgwPD1zJiZzPD0yKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7c3dpdGNoKHMpe2Nhc2UgMDpvPTM7YnJlYWs7Y2FzZSAxOmkucHVzaChpLmF0KC0yKSxpLmF0KC0xKSksbz0xO2JyZWFrO2Nhc2UgMjppLnB1c2goaS5hdCgtMyksaS5hdCgtMSkpLG89MX1hLnB1c2gocyl9aS5wdXNoKHQubGVuZ3RoKSx0LnB1c2goYyksci5wdXNoKHUpLG8tLSxlLmFsaWduKCl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InRyaWFuZ2xlcyIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX0se2tleToiX2RlY29kZVR5cGU1U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2UuaGFzRGF0YTspe3ZhciBpPWUucmVhZENvb3JkaW5hdGUoKSxvPWUucmVhZENvbXBvbmVudHMoKTthLnB1c2goci5sZW5ndGgpLHIucHVzaChpKSxuLnB1c2gobyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoYSksdmVydGljZXNQZXJSb3c6dH0pfX0se2tleToiX2RlY29kZVR5cGU2U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzg6MTI7Yzx1O2MrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtmb3IodmFyIGw9ci5sZW5ndGgsZj0wLGg9MCE9PW8/Mjo0O2Y8aDtmKyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7dmFyIGQ9dm9pZCAwLHA9dm9pZCAwLGc9dm9pZCAwLHY9dm9pZCAwO3N3aXRjaChvKXtjYXNlIDA6YVsxMl09cyszLGFbMTNdPXMrNCxhWzE0XT1zKzUsYVsxNV09cys2LGFbOF09cysyLGFbMTFdPXMrNyxhWzRdPXMrMSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVsxMV09cyszLGFbNF09cCxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbMTFdPXMrMyxhWzRdPXAsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVsxMV09cyszLGFbNF09YVsyXSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9YVs1XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pLGFbNl09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKSxhWzldPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKSxhWzEwXT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSksdGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2RlY29kZVR5cGU3U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzEyOjE2O2M8dTtjKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Zm9yKHZhciBsPXIubGVuZ3RoLGY9MCxoPTAhPT1vPzI6NDtmPGg7ZisrKXIucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO3ZhciBkPXZvaWQgMCxwPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2gobyl7Y2FzZSAwOmFbMTJdPXMrMyxhWzEzXT1zKzQsYVsxNF09cys1LGFbMTVdPXMrNixhWzhdPXMrMixhWzldPXMrMTMsYVsxMF09cysxNCxhWzExXT1zKzcsYVs0XT1zKzEsYVs1XT1zKzEyLGFbNl09cysxNSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1wLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbOV09cys5LGFbMTBdPXMrMTAsYVsxMV09cyszLGFbNF09cCxhWzVdPXMrOCxhWzZdPXMrMTEsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1hWzJdLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2J1aWxkRmlndXJlRnJvbVBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpZ3VyZXNbZV07KDAsbi5hc3NlcnQpKCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTt2YXIgYT10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLG89dC5jb29yZHMscz10LmNvbG9ycyxjPU1hdGgubWluKGFbb1swXV1bMF0sYVtvWzNdXVswXSxhW29bMTJdXVswXSxhW29bMTVdXVswXSksdT1NYXRoLm1pbihhW29bMF1dWzFdLGFbb1szXV1bMV0sYVtvWzEyXV1bMV0sYVtvWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtvWzBdXVswXSxhW29bM11dWzBdLGFbb1sxMl1dWzBdLGFbb1sxNV1dWzBdKSxmPU1hdGgubWF4KGFbb1swXV1bMV0sYVtvWzNdXVsxXSxhW29bMTJdXVsxXSxhW29bMTVdXVsxXSksaD1NYXRoLmNlaWwoKGwtYykqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO2g9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTt2YXIgZD1NYXRoLmNlaWwoKGYtdSkqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGQpKTtmb3IodmFyIHA9aCsxLGc9bmV3IEludDMyQXJyYXkoKGQrMSkqcCksdj1uZXcgSW50MzJBcnJheSgoZCsxKSpwKSx5PTAsbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHc9aVtzWzBdXSxrPWlbc1sxXV0seD1pW3NbMl1dLE89aVtzWzNdXSxBPVMoZCksQz1TKGgpLEY9MDtGPD1kO0YrKyl7bVswXT0od1swXSooZC1GKSt4WzBdKkYpL2R8MCxtWzFdPSh3WzFdKihkLUYpK3hbMV0qRikvZHwwLG1bMl09KHdbMl0qKGQtRikreFsyXSpGKS9kfDAsYlswXT0oa1swXSooZC1GKStPWzBdKkYpL2R8MCxiWzFdPShrWzFdKihkLUYpK09bMV0qRikvZHwwLGJbMl09KGtbMl0qKGQtRikrT1syXSpGKS9kfDA7Zm9yKHZhciBQPTA7UDw9aDtQKysseSsrKWlmKDAhPT1GJiZGIT09ZHx8MCE9PVAmJlAhPT1oKXtmb3IodmFyIFQ9MCxJPTAsRT0wLGo9MDtqPD0zO2orKylmb3IodmFyIE09MDtNPD0zO00rKyxFKyspe3ZhciBfPUFbRl1bal0qQ1tQXVtNXTtUKz1hW29bRV1dWzBdKl8sSSs9YVtvW0VdXVsxXSpffWdbeV09YS5sZW5ndGgsYS5wdXNoKFtULEldKSx2W3ldPWkubGVuZ3RoO3ZhciBMPW5ldyBVaW50OEFycmF5KDMpO0xbMF09KG1bMF0qKGgtUCkrYlswXSpQKS9ofDAsTFsxXT0obVsxXSooaC1QKStiWzFdKlApL2h8MCxMWzJdPShtWzJdKihoLVApK2JbMl0qUCkvaHwwLGkucHVzaChMKX19Z1swXT1vWzBdLHZbMF09c1swXSxnW2hdPW9bM10sdltoXT1zWzFdLGdbcCpkXT1vWzEyXSx2W3AqZF09c1syXSxnW3AqZCtoXT1vWzE1XSx2W3AqZCtoXT1zWzNdLHRoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOmcsY29sb3JzOnYsdmVydGljZXNQZXJSb3c6cH19fSx7a2V5OiJfdXBkYXRlQm91bmRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLHI9ZSxuPXQsYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe3ZhciBvPXRoaXMuY29vcmRzW2FdWzBdLHM9dGhpcy5jb29yZHNbYV1bMV07ZT1lPm8/bzplLHQ9dD5zP3M6dCxyPXI8bz9vOnIsbj1uPHM/czpufXRoaXMuYm91bmRzPVtlLHQscixuXX19LHtrZXk6Il9wYWNrRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixhPXRoaXMuY29vcmRzLGk9bmV3IEZsb2F0MzJBcnJheSgyKmEubGVuZ3RoKTtmb3IoZT0wLHI9MCx0PWEubGVuZ3RoO2U8dDtlKyspe3ZhciBvPWFbZV07aVtyKytdPW9bMF0saVtyKytdPW9bMV19dGhpcy5jb29yZHM9aTt2YXIgcz10aGlzLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7dmFyIHU9c1tlXTtjW3IrK109dVswXSxjW3IrK109dVsxXSxjW3IrK109dVsyXX10aGlzLmNvbG9ycz1jO3ZhciBsPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGY9bFtlXSxoPWYuY29vcmRzLGQ9Zi5jb2xvcnM7Zm9yKHI9MCxuPWgubGVuZ3RoO3I8bjtyKyspaFtyXSo9MixkW3JdKj0zfX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fV0sW3trZXk6Ik1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpfX0se2tleToiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfX0se2tleToiVFJJQU5HTEVfREVOU0lUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKX19XSkscn0oYiksTz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIkR1bW15Il19fV0pLHJ9KGIpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPXQuYmFzZVdpZHRocyxhPXQuYmFzZU1hcHBpbmcsaT10LmZhY3RvcnM7cj1pP24ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlKmlbdF19KSk6bjt2YXIgbyxzLGM9LTIsdT1bXSxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1oKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oYS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdF19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLDEpWzBdLWYodCwxKVswXX0pKSk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgZD1mKHMudmFsdWUsMikscD1kWzBdLHY9ZFsxXTstMSE9PXAmJihwPT09YysxPyhvLnB1c2goclt2XSksYys9MSk6KGM9cCxvPVtyW3ZdXSx1LnB1c2gocCxvKSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdX0oZSkscj1uZXcgYS5EaWN0KG51bGwpO3Iuc2V0KCJCYXNlRm9udCIsYS5OYW1lLmdldChlKSksci5zZXQoIlR5cGUiLGEuTmFtZS5nZXQoIkZvbnQiKSksci5zZXQoIlN1YnR5cGUiLGEuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKSxyLnNldCgiRW5jb2RpbmciLGEuTmFtZS5nZXQoIklkZW50aXR5LUgiKSksci5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxyLnNldCgiVyIsdCksci5zZXQoIkZpcnN0Q2hhciIsdFswXSksci5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7dmFyIG49bmV3IGEuRGljdChudWxsKTtyLnNldCgiRm9udERlc2NyaXB0b3IiLG4pO3ZhciBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9Zzt2YXIgbj1yKDE4MSksYT1yKDEzNCksaT1yKDE4Miksbz1yKDE4Mykscz1yKDE4NCksYz1yKDE4NSksdT1yKDEzNSksbD1yKDE2Nyk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxoKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBwPSgwLHUuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6cy5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnMuTXlyaWFkUHJvQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpzLk15cmlhZFByb0JvbGRNZXRyaWNzfSxlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6cy5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzfSxlWyJNeXJpYWRQcm8tQm9sZEl0Il09ZVsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3N9LGUuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmd9LGVbIkFyaWFsLUJvbGRNVCJdPWVbIkFyaWFsLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmd9LGVbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nfSxlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT1lWyJBcmlhbC1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGJhc2VXaWR0aHM6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nfSxlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpuLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpuLkNhbGlicmlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRNZXRyaWNzfSxlWyJDYWxpYnJpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6bi5DYWxpYnJpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkNhbGlicmlJdGFsaWNNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpjLlNlZ29ldWlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpjLlNlZ29ldWlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRNZXRyaWNzfSxlWyJTZWdvZXVpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmkuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzfX0pKTtmdW5jdGlvbiBnKGUpe3ZhciB0PSgwLGwubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBwKClbdF19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz10LkNhbGlicmlSZWd1bGFyRmFjdG9ycz10LkNhbGlicmlJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZE1ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZEZhY3RvcnM9dm9pZCAwLHQuQ2FsaWJyaUJvbGRGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NDY1NywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzMyOTMsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MTIxLC44Njk0MywuNzk3OTUsLjg4MTk4LC43Nzk1OCwuNzA4NjQsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDE3LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjU0NjU3LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuODg3NjIsLjg3ODUsLjc1MjQxLC44Nzg1LC45MDUxOCwuOTUwMTUsLjc3NjE4LC44Nzg1LC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTE0ODgsLjg3ODUsLjg4MDEsLjg3ODUsLjg3ODUsLjkxMzQzLC43MTczLDEuMDQxMDYsLjg3ODUsLjg1MDc1LC45NTc5NCwuODI2MTYsLjg1MTYyLC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xMjQwMSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MzI5MywuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTEyMSwuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44NTI4NCwuODc1MDgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44NzE1LC43NTI0MSwuOTA1MTgsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44Nzg1LC44ODAxLC44ODAxLC44ODAxLC44ODAxLC44ODAxLC45MDc0NywuODkwNDksLjg3ODUsLjg3ODUsLjg3ODUsLjg3ODUsLjg1MTYyLC44Nzg1LC44NTE2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC44NzI4OSwuODMwMTYsLjg4NTA2LC45MzEyNSwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsMSwxLC44NzM1NiwuODc4NSwuOTEwNzUsLjg5NjA4LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzYyMjksLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc5NDY4LC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTEyMSwuODc4NSwxLDEsLjkxMjEsLjg3ODUsLjg3ODAyLC44ODY1NiwuODc4NSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODc0MDIsLjg5MjkxLC43Nzk1OCwuOTEzNDMsMSwxLC43Nzk1OCwuOTEzNDMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuODg3NjIsLjc3NTM5LC44NzE1LC44NzUwOCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwNjc0LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjA2MzAzLC44MzkwOCwuODAzNTIsLjU3MTg0LC42OTY1LC41NjI4OSwuODIwMDEsLjU2MDI5LC44MTIzNSwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjgxNTYsLjgwMzY3LC43MzEzMywuNzgyNTcsLjg3MzU2LC44Njk0MywuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MTIxLC43NjQ4LC44Njk0MywuODczNTYsLjc5Nzk1LC43ODI3NSwuODEwNTUsLjc3ODkyLC45NzYyLC44MjU3NywuOTk4MTksLjg0ODk2LC45NTk1OCwuNzc4OTIsLjk2MTA4LDEuMDE0MDcsLjg5MDQ5LDEuMDI5ODgsLjk0MjExLC45NjEwOCwuODkzNiwuODQwMjEsLjg3ODQyLC45NjM5OSwuNzkxMDksLjg5MDQ5LDEuMDA4MTMsMS4wMjk4OCwuODYwNzcsLjg3NDQ1LC45MjA5OSwuODQ3MjMsLjg2NTEzLC44ODAxLC43NTYzOCwuODU3MTQsLjc4MjE2LC43OTU4NiwuODc5NjUsLjk0MjExLC45Nzc0NywuNzgyODcsLjk3OTI2LC44NDk3MSwxLjAyOTg4LC45NDIxMSwuODgwMSwuOTQyMTEsLjg0OTcxLC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTAyNjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTE4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDU0OCwxLDEsMSwxLDEsMSwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMTQzLDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTM4MzUsLjgzNDA2LC45MTEzMywuODQxMDcsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwMDYsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx0LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTYyMzksLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjcxODA1LC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTA4NzIsLjg1OTM4LC43OTc5NSwuODcwNjgsLjc3OTU4LC42OTc2NiwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwNjgsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTI5LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuOTQ5MDgsLjg2NDExLC43NDAxMiwuODY0MTEsLjg4MzIzLC45NTAxNSwuODY0MTEsLjg2MzMxLC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTAzOSwuODYzMzEsLjg2MzMxLC44NjQxMSwuODY0MTEsLjkwNDY0LC43MDg1MiwxLjA0MTA2LC44NjMzMSwuODQzNzIsLjk1Nzk0LC44MjYxNiwuODQ1NDgsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjE5MTI5LC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjcxODA1LC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MDg3MiwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTI4NCwuODcwNjgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC44NTg4NywuNzQwMTIsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuOTA3NDcsLjg5MDQ5LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODQ1NDgsLjg2NDExLC44NDU0OCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC44NzI4OSwuNzk1MzgsLjg4NTA2LC45MjcyNiwuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsMSwxLC44NzM1NiwuODYzMzEsLjkxMDc1LC44Nzc3LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzY0NjcsLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc3MzEyLC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTA4NzIsLjg2MzMxLDEsMSwuOTA4NzIsLjg2MzMxLC44NjkwNiwuODgxMTYsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NzQwMiwuODY1NDksLjc3OTU4LC45MDQ2NCwxLDEsLjc3OTU4LC45MDQ2NCwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuOTQ5MDgsLjc3NTM5LC44NTg4NywuODcwNjgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDA4OCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS40ODM4NywuODM5MDgsLjgwMzUyLC41NzExOCwuNjk2NSwuNTYzNDcsLjc5MTc5LC41NTg1MywuODAzNDYsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY3MTc0LC44NjAzNiwuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY0NDEsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTA4NzIsLjc0ODg5LC44NTkzOCwuODc4OTEsLjc5Nzk1LC43OTU3LC44MTA1NSwuNzc4OTIsLjk3NDQ3LC44MjU3NywuOTc0NjYsLjg3MTc5LC45NTk1OCwuNzc4OTIsLjk0MjUyLC45NTYxMiwuODc1MywxLjAyOTg4LC45MjczMywuOTQyNTIsLjg3NDExLC44NDAyMSwuODcyOCwuOTU2MTIsLjc0MDgxLC44NzUzLDEuMDIxODksMS4wMjk4OCwuODQ4MTQsLjg3NDQ1LC45MTgyMiwuODQ3MjMsLjg1NjY4LC44NjMzMSwuODEzNDQsLjg3NTgxLC43NjQyMiwuODIwNDYsLjk2MDU3LC45MjczMywuOTkzNzUsLjc4MDIyLC45NTQ1MiwuODYwMTUsMS4wMjk4OCwuOTI3MzMsLjg2MzMxLC45MjczMywuODYwMTUsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDYzMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODgzMjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1MTc0LDEsMSwxLDEsMSwxLC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg5ODA3LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzEwOTQsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45Mjk3MiwuODM0MDYsLjkxMTMzLC44MzMyNiwuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNjE2LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTA3LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpUmVndWxhckZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz10LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPXQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz10LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz12b2lkIDAsdC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sdC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPXQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz10LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9dm9pZCAwLHQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3NDAsNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4Miw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM5Niw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw3MjIsMzMzLDg1NCw5MDYsNDczLDg0NCw5MzAsODQ3LDI3OCw3MjIsNzIyLDYxMCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjU3LDc3OCw3MTgsNjY3LDU5MCw2MTEsNjY3LDgyMiw2NjcsODI5LDc4MSwyNzgsNjY3LDYyMCw0NzksNjExLDI3OCw1OTEsNjIwLDYyMSw1NTYsNjEwLDQ3OSw0OTIsNjExLDU1OCwyNzgsNTY2LDU1Niw2MDMsNTU2LDQ1MCw2MTEsNzEyLDYwNSw1MzIsNjY0LDQwOSw1OTEsNzA0LDU3OCw3NzMsODM0LDI3OCw1OTEsNjExLDU5MSw4MzQsNjY3LDY2Nyw4ODYsNjE0LDcxOSw2NjcsMjc4LDI3OCw1NTYsMTA5NCwxMDQyLDg1NCw2MjIsNzE5LDY3Nyw3MTksNzIyLDcwOCw3MjIsNjE0LDcyMiw2NjcsOTI3LDY0Myw3MTksNzE5LDYxNSw2ODcsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDY3Nyw3ODEsNjY3LDcyOSw3MDgsOTc5LDk4OSw4NTQsMWUzLDcwOCw3MTksMTA0Miw3MjksNTU2LDYxOSw2MDQsNTM0LDYxOCw1NTYsNzM2LDUxMCw2MTEsNjExLDUwNyw2MjIsNzQwLDYwNCw2MTEsNjExLDYxMSw1NTYsODg5LDU1Niw4ODUsNTU2LDY0Niw1ODMsODg5LDkzNSw3MDcsODU0LDU5NCw1NTIsODY1LDU4OSw1NTYsNTU2LDYxMSw0NjksNTYzLDU1NiwyNzgsMjc4LDI3OCw5NjksOTA2LDYxMSw1MDcsNjE5LDU1Niw2MTEsNzc4LDYxMSw1NzUsNDY3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDExMDQsNTU2LDg4NSw1MTYsMTE0NiwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsOTk5LDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MjUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczMyw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI4MSw1NTYsNDAwLDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjE1LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM1NCw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4OSw4NDYsMzg5LDc5NCw4NjUsNzc1LDIyMiw2NjcsNjY3LDU3MCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY3LDgzMyw3MjIsNjQ4LDc3OCw3MjUsNjY3LDYwMCw2MTEsNjY3LDgzNyw2NjcsODMxLDc2MSwyNzgsNjY3LDU3MCw0MzksNTU1LDIyMiw1NTAsNTcwLDU3MSw1MDAsNTU2LDQzOSw0NjMsNTU1LDU0MiwyMjIsNTAwLDQ5Miw1NDgsNTAwLDQ0Nyw1NTYsNjcwLDU3Myw0ODYsNjAzLDM3NCw1NTAsNjUyLDU0Niw3MjgsNzc5LDIyMiw1NTAsNTU2LDU1MCw3NzksNjY3LDY2Nyw4NDMsNTQ0LDcwOCw2NjcsMjc4LDI3OCw1MDAsMTA2Niw5ODIsODQ0LDU4OSw3MTUsNjM5LDcyNCw2NjcsNjUxLDY2Nyw1NDQsNzA0LDY2Nyw5MTcsNjE0LDcxNSw3MTUsNTg5LDY4Niw4MzMsNzIyLDc3OCw3MjUsNjY3LDcyMiw2MTEsNjM5LDc5NSw2NjcsNzI3LDY3Myw5MjAsOTIzLDgwNSw4ODYsNjUxLDY5NCwxMDIyLDY4Miw1NTYsNTYyLDUyMiw0OTMsNTUzLDU1Niw2ODgsNDY1LDU1Niw1NTYsNDcyLDU2NCw2ODYsNTUwLDU1Niw1NTYsNTU2LDUwMCw4MzMsNTAwLDgzNSw1MDAsNTcyLDUxOCw4MzAsODUxLDYyMSw3MzYsNTI2LDQ5Miw3NTIsNTM0LDU1Niw1NTYsNTU2LDM3OCw0OTYsNTAwLDIyMiwyMjIsMjIyLDkxMCw4MjgsNTU2LDQ3Miw1NjUsNTAwLDU1Niw3NzgsNTU2LDQ5MiwzMzksOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDgzLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDk5OCw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTg0LDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYxNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzM1LDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjkyLDU1NiwzMzQsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MDQsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzc1LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg0LDgzOCwzODQsNzc0LDg1NSw3NTIsMjIyLDY2Nyw2NjcsNTUxLDY2OCw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjgsODMzLDcyMiw2NTAsNzc4LDcyMiw2NjcsNjE4LDYxMSw2NjcsNzk4LDY2Nyw4MzUsNzQ4LDI3OCw2NjcsNTc4LDQ0Niw1NTYsMjIyLDU0Nyw1NzgsNTc1LDUwMCw1NTcsNDQ2LDQ0MSw1NTYsNTU2LDIyMiw1MDAsNTAwLDU3Niw1MDAsNDQ4LDU1Niw2OTAsNTY5LDQ4Miw2MTcsMzk1LDU0Nyw2NDgsNTI1LDcxMyw3ODEsMjIyLDU0Nyw1NTYsNTQ3LDc4MSw2NjcsNjY3LDg2NSw1NDIsNzE5LDY2NywyNzgsMjc4LDUwMCwxMDU3LDEwMTAsODU0LDU4Myw3MjIsNjM1LDcxOSw2NjcsNjU2LDY2Nyw1NDIsNjc3LDY2Nyw5MjMsNjA0LDcxOSw3MTksNTgzLDY1Niw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjM1LDc2MCw2NjcsNzQwLDY2Nyw5MTcsOTM4LDc5Miw4ODUsNjU2LDcxOSwxMDEwLDcyMiw1NTYsNTczLDUzMSwzNjUsNTgzLDU1Niw2NjksNDU4LDU1OSw1NTksNDM4LDU4Myw2ODgsNTUyLDU1Niw1NDIsNTU2LDUwMCw0NTgsNTAwLDgyMyw1MDAsNTczLDUyMSw4MDIsODIzLDYyNSw3MTksNTIxLDUxMCw3NTAsNTQyLDU1Niw1NTYsNTU2LDM2NSw1MTAsNTAwLDIyMiwyNzgsMjIyLDkwNiw4MTIsNTU2LDQzOCw1NTksNTAwLDU1Miw3NzgsNTU2LDQ4OSw0MTEsOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDczLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz10Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPXQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz12b2lkIDAsdC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9Cb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWdvZXVpUmVndWxhck1ldHJpY3M9dC5TZWdvZXVpUmVndWxhckZhY3RvcnM9dC5TZWdvZXVpSXRhbGljTWV0cmljcz10LlNlZ29ldWlJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRGYWN0b3JzPXZvaWQgMCx0LlNlZ29ldWlCb2xkRmFjdG9ycz1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSx0LlNlZ29ldWlJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4xNDc2MywxLjA1MzY1LDEuMDYyMzQsLjk2OTI3LC45MjU4NiwxLjE1MzczLDEuMTg0MTQsLjkxMzQ5LC45MTM0OSwxLjA3NDAzLDEuMTczMDgsLjc4MzgzLDEuMjAwODgsLjc4MzgzLDEuNDI1MzEsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODM4MywuNzgzODMsMS4xNzMwOCwxLjE3MzA4LDEuMTczMDgsLjc3MzQ5LC45NDU2NSwuOTQ3MjksLjg1OTQ0LC44ODUwNiwuOTg1OCwuNzQ4MTcsLjgwMDE2LC44ODQ0OSwuOTgwMzksLjk1NzgyLC42OTIzOCwuODk4OTgsLjgzMjMxLC45ODE4MywxLjAzOTg5LC45NjkyNCwuODYyMzcsLjk2OTI0LC44MDU5NSwuNzQ1MjQsLjg2MDkxLC45NTQwMiwuOTQxNDMsLjk4NDQ4LC44ODU4LC44MzA4OSwuOTMyODUsMS4wOTQ5LDEuMzkwMTYsMS4wOTQ5LDEuNDU5OTQsLjc0NjI3LDEuMDQ4MzksLjk3NDU0LC45NzQ1NCwuODcyMDcsLjk3NDU0LC44NzUzMywxLjA2MTUxLC45NzQ1NCwxLjAwMTc2LDEuMTY0ODQsMS4wODEzMiwuOTgwNDcsMS4xNjQ4NCwxLjAyOTg5LDEuMDEwNTQsLjk2MjI1LC45NzQ1NCwuOTc0NTQsMS4wNjU5OCwuNzkwMDQsMS4xNjM0NCwxLjAwMzUxLC45NDYyOSwuOTk3MywuOTEwMTYsLjk2Nzc3LC45MDQzLC45MTA4MiwuOTI0ODEsLjkxMDgyLDEuMTczMDgsLjk1NzQ4LC45NjkyNywuOTY5MjcsMSwuOTY5MjcsLjkyNDgxLC44MDU5NywxLjA0ODM5LDEuMjMzOTMsMS4xNzgxLC45MjQ1LDEuMTczMDgsMS4yMDgwOCwuNjMyMTgsLjk0MjYxLDEuMjQ4MjIsMS4wOTk3MSwxLjA5OTcxLDEuMDQ4MzksMSwuODUyNzMsLjc4MDMyLDEuMDQ4MzksMS4wOTk3MSwxLjIyMzI2LC45MjQ1LDEuMDk4MzYsMS4xMzUyNSwxLjE1MjIyLC43MDQyNCwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuODU0OTgsLjg4NTA2LC43NDgxNywuNzQ4MTcsLjc0ODE3LC43NDgxNywuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk4NTgsMS4wMzk4OSwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTczMDgsLjk2OTI0LC45NTQwMiwuOTU0MDIsLjk1NDAyLC45NTQwMiwuODMwODksLjg2MjM3LC44ODQwOSwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTI5MTYsLjg3MjA3LC44NzUzMywuODc1MzMsLjg3NTMzLC44NzUzMywuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzODU0LDEuMDEwNTQsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwxLjI0ODIyLC44NzYxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsLjk2Nzc3LC45NzQ1NCwuOTY3NzcsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuOTg1OCwuOTUzOTEsLjk4NTgsLjk3NDU0LC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwxLDEsLjk4MDM5LDEuMDAxNzYsLjk4MDM5LDEuMDAxNzYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLDEuMTY0ODQsLjk1NzgyLC45MzE0NiwuODQ0MjEsMS4xMjc2MSwuNjkyMzgsMS4wODEzMiwxLDEsLjk4MDQ3LC44MzIzMSwxLjE2NDg0LDEsMSwuODQ3MjMsMS4wNDg2MSwuODQ3MjMsLjc4NzU1LC44MzIzMSwxLjIzNzM2LDEuMDM5ODksMS4wMTA1NCwxLDEsMS4wMzk4OSwxLjAxMDU0LC45ODU3LDEuMDM4NDksMS4wMTA1NCwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTIzODMsLjkwMTcxLC44MDU5NSwxLjA2NTk4LDEsMSwuODA1OTUsMS4wNjU5OCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LDEsMSwuODYwOTEsMS4wMjc1OSwuODU3NzEsMS4xNjM0NCwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywuODMwODksLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsMS4zMTg2OCwuOTY5MjcsLjk0NzI5LC45NzQ1NCwuODU0OTgsLjkyOTE2LC45NjkyNCwuODc2MSwxLDEsLjg2MDkxLDEuMTYzNDQsMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksLjgxOTY1LC44MTk2NSwuOTQ3MjksLjc4MDMyLC43MTAyMiwuOTA4ODMsLjg0MTcxLC45OTg3NywuNzc1OTYsMS4wNTczNCwxLjIsLjk0NzI5LC44NTk0NCwuODI3OTEsLjk2MDcsLjc0ODE3LC45MzI4NSwuOTgwMzksLjk2OTI0LC45NTc4MiwuODk4OTgsLjk4MzE2LC45ODE4MywxLjAzOTg5LC43ODYxNCwuOTY5MjQsLjk3NjQyLC44NjIzNywuODYwNzUsLjg2MDkxLC44MzA4OSwuOTAwODIsLjg4NTgsLjk3Mjk2LDEuMDEyODQsLjk1NzgyLC44MzA4OSwxLjA5NzYsMS4wNCwxLjAzMzQyLDEuMiwxLjA2NzUsMS4wOTc2LC45ODIwNSwxLjAzODA5LDEuMDUwOTcsMS4wNCwuOTUzNjQsMS4wMzM0MiwxLjA1NDAxLDEuMiwxLjAyMTQ4LDEuMDExOSwxLjA0NzI0LDEuMDEyNywxLjAyNzMyLC45NjIyNSwuODk2NSwuOTc3ODMsLjkzNTc0LC45NDgxOCwxLjMwNjc5LDEuMDY3NSwxLjExODI2LC45OTgyMSwxLjA1NTcsMS4wMzI2LDEuMiwxLjA2NzUsLjk2MjI1LDEuMDY3NSwxLjAzMjYsLjc0ODE3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3NTQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3NTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45ODcwNSwxLDEsMSwxLDEsMSwuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsMS4xMjMxNywxLjEyMzE3LDEuMTIzMTcsLjY3NjAzLC42NzYwMywxLjE1NjIxLC43MzU4NCwxLjIxMTkxLDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3MDksLjk2OTI3LDEuMDE0NzMsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4wOTgzNiwxLjA5ODM2LDEuMDk4MzYsMS4wMTUyMiwuODYzMjEsLjk0NDM0LC44NjQ5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjQzOCwxLjE3MzA4LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY3OTEsMS4yNDgyMiwxLjI0ODIyLDEuMTczMDgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xNzk4NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA3NDIsMS4xMDc0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpUmVndWxhckZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvc3RTY3JpcHRFdmFsdWF0b3I9dC5Qb3N0U2NyaXB0Q29tcGlsZXI9dC5QREZGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHQuaXNQREZGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtpZigib2JqZWN0IiE9PWcoZSkpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE4Nyksbz1yKDEzNikscz1yKDE4OCk7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZihlKTtpZih0KXt2YXIgYT1mKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWcodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3AoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWcoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1nKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnkoZS5wcm90b3R5cGUsdCksciYmeShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjt2KHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hfXJldHVybiBtKGUsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn19LHtrZXk6ImNyZWF0ZUZyb21BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTtyZXR1cm4gdGhpcy5fY2FjaGUoZSxyKSxyfX0se2tleToiZ2V0Q2FjaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlIGluc3RhbmNlb2Ygbi5SZWY/dD1lOmUgaW5zdGFuY2VvZiBuLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKSx0KXt2YXIgcj10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH19LHtrZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO3ZhciByO2UgaW5zdGFuY2VvZiBuLlJlZj9yPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9yPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHI9ZS5kaWN0JiZlLmRpY3Qub2JqSWQpLHImJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxyLHQpfX0se2tleToiX2xvY2FsRnVuY3Rpb25DYWNoZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBzLkxvY2FsRnVuY3Rpb25DYWNoZSl9fV0pLGV9KCk7ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW3JdKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKW5bYV09K2VbYV07cmV0dXJuIG59cmV0dXJuIGV9dC5QREZGdW5jdGlvbkZhY3Rvcnk9Yjt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSl9cmV0dXJuIG0oZSxudWxsLFt7a2V5OiJnZXRTYW1wbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPTE7Zm9yKGE9MCxpPWUubGVuZ3RoO2E8aTthKyspbyo9ZVthXTtvKj10O3ZhciBzPW5ldyBBcnJheShvKSxjPTAsdT0wLGw9MS8oTWF0aC5wb3coMixyKS0xKSxmPW4uZ2V0Qnl0ZXMoKG8qcis3KS84KSxoPTA7Zm9yKGE9MDthPG87YSsrKXtmb3IoO2M8cjspdTw8PTgsdXw9ZltoKytdLGMrPTg7Yy09cixzW2FdPSh1Pj5jKSpsLHUmPSgxPDxjKS0xfXJldHVybiBzfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixpPW4uZGljdHx8bjtzd2l0Y2goaS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6aX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9KX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9fSx7a2V5OiJwYXJzZUFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZm5PYmo7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7dmFyIGEsaT1bXSxvPWgobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO2kucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46dC5mZXRjaElmUmVmKHMpfSkpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTAsbz1pLmxlbmd0aDthPG87YSsrKWlbYV0oZSx0LHIsbithKX19fSx7a2V5OiJjb25zdHJ1Y3RTYW1wbGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5mbixyPWUuZGljdDtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MCxhPTA7YTx0O2ErPTIpcltuKytdPVtlW2FdLGVbYSsxXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQscixuLGEpe3JldHVybiBuKyhhLW4pLyhyLXQpKihlLXQpfXZhciBvPXcoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhyLmdldEFycmF5KCJSYW5nZSIpKTtpZighb3x8IXMpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO3ZhciBjPW8ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yO289bihvKSxzPW4ocyk7dmFyIGw9dyhyLmdldEFycmF5KCJTaXplIikpLGY9ci5nZXQoIkJpdHNQZXJTYW1wbGUiKSxoPXIuZ2V0KCJPcmRlciIpfHwxOzEhPT1oJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitoKTt2YXIgZD13KHIuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihkKWQ9bihkKTtlbHNle2Q9W107Zm9yKHZhciBwPTA7cDxjOysrcClkLnB1c2goWzAsbFtwXS0xXSl9dmFyIGc9dyhyLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP24oZyk6czt2YXIgdj10aGlzLmdldFNhbXBsZUFycmF5KGwsdSxmLHQpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxmLGg9MTw8YyxwPW5ldyBGbG9hdDY0QXJyYXkoaCkseT1uZXcgVWludDMyQXJyYXkoaCk7Zm9yKGY9MDtmPGg7ZisrKXBbZl09MTt2YXIgbT11LGI9MTtmb3IoYT0wO2E8YzsrK2Epe3ZhciB3PW9bYV1bMF0saz1vW2FdWzFdLFM9aShNYXRoLm1pbihNYXRoLm1heChlW3QrYV0sdyksayksdyxrLGRbYV1bMF0sZFthXVsxXSkseD1sW2FdLE89KFM9TWF0aC5taW4oTWF0aC5tYXgoUywwKSx4LTEpKTx4LTE/TWF0aC5mbG9vcihTKTpTLTEsQT1PKzEtUyxDPVMtTyxGPU8qbSxQPUYrbTtmb3IoZj0wO2Y8aDtmKyspZiZiPyhwW2ZdKj1DLHlbZl0rPVApOihwW2ZdKj1BLHlbZl0rPUYpO20qPXgsYjw8PTF9Zm9yKGY9MDtmPHU7KytmKXt2YXIgVD0wO2ZvcihhPTA7YTxoO2ErKylUKz12W3lbYV0rZl0qcFthXTtUPWkoVCwwLDEsZ1tmXVswXSxnW2ZdWzFdKSxyW24rZl09TWF0aC5taW4oTWF0aC5tYXgoVCxzW2ZdWzBdKSxzW2ZdWzFdKX19fX0se2tleToiY29uc3RydWN0SW50ZXJwb2xhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7Zm9yKHZhciB0PWUuZGljdCxyPXcodC5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXcodC5nZXRBcnJheSgiQzEiKSl8fFsxXSxhPXQuZ2V0KCJOIiksaT1bXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWkucHVzaChuW29dLXJbb10pO3ZhciBjPWkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIHM9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLHU9MDt1PGM7Kyt1KW5bbyt1XT1yW3VdK3MqaVt1XX19fSx7a2V5OiJjb25zdHJ1Y3RTdGljaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZGljdCxpPXcobi5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT1pLmxlbmd0aC8yKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7dmFyIG8scz1bXSxjPWgobi5nZXQoIkZ1bmN0aW9ucyIpKTt0cnl7Zm9yKGMucygpOyEobz1jLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7cy5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYodSl9KSl9fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXZhciBsPXcobi5nZXRBcnJheSgiQm91bmRzIikpLGY9dyhuLmdldEFycmF5KCJFbmNvZGUiKSksZD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxjPWwubGVuZ3RoO2ZvcihhPTA7YTxjJiYhKG88bFthXSk7KythKTt2YXIgdT1pWzBdO2E+MCYmKHU9bFthLTFdKTt2YXIgaD1pWzFdO2E8bC5sZW5ndGgmJihoPWxbYV0pO3ZhciBwPWZbMiphXSxnPWZbMiphKzFdO2RbMF09dT09PWg/cDpwKyhvLXUpKihnLXApLyhoLXUpLHNbYV0oZCwwLHIsbil9fX0se2tleToiY29uc3RydWN0UG9zdFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS54cmVmO3ZhciB0PWUuaXNFdmFsU3VwcG9ydGVkLHI9ZS5mbixuPWUuZGljdCxvPXcobi5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhuLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFzKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTt2YXIgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIociksdT1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmYS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBsPShuZXcgUikuY29tcGlsZSh1LG8scyk7aWYobClyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsbCl9KDAsYS5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgZj1zLmxlbmd0aD4+MSxoPW8ubGVuZ3RoPj4xLGQ9bmV3IHgodSkscD1PYmplY3QuY3JlYXRlKG51bGwpLGc9ODE5Mix2PW5ldyBGbG9hdDMyQXJyYXkoaCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0iIixjPXY7Zm9yKGE9MDthPGg7YSsrKWk9ZVt0K2FdLGNbYV09aSxvKz1pKyJfIjt2YXIgdT1wW29dO2lmKHZvaWQgMD09PXUpe3ZhciBsPW5ldyBGbG9hdDMyQXJyYXkoZikseT1kLmV4ZWN1dGUoYyksbT15Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT15W20rYV07dmFyIGI9c1syKmFdOyhpPGJ8fGk+KGI9c1syKmErMV0pKSYmKGk9YiksbFthXT1pfWc+MCYmKGctLSxwW29dPWwpLHIuc2V0KGwsbil9ZWxzZSByLnNldCh1LG4pfX19XSksZX0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2KHRoaXMsZSksdGhpcy5zdGFjaz10P0FycmF5LmZyb20odCk6W119cmV0dXJuIG0oZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PWUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaCh0KX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfX0se2tleToiY29weSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGgrdD49ZS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciByPXRoaXMuc3RhY2ssbj1yLmxlbmd0aC10LGE9dC0xO2E+PTA7YS0tLG4rKylyLnB1c2gocltuXSl9fSx7a2V5OiJpbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9fSx7a2V5OiJyb2xsIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnN0YWNrLG49ci5sZW5ndGgtZSxhPXIubGVuZ3RoLTEsaT1uKyh0LU1hdGguZmxvb3IodC9lKSplKSxvPW4scz1hO288cztvKysscy0tKXt2YXIgYz1yW29dO3Jbb109cltzXSxyW3NdPWN9Zm9yKHZhciB1PW4sbD1pLTE7dTxsO3UrKyxsLS0pe3ZhciBmPXJbdV07clt1XT1yW2xdLHJbbF09Zn1mb3IodmFyIGg9aSxkPWE7aDxkO2grKyxkLS0pe3ZhciBwPXJbaF07cltoXT1yW2RdLHJbZF09cH19fV0sW3trZXk6Ik1BWF9TVEFDS19TSVpFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiTUFYX1NUQUNLX1NJWkUiLDEwMCl9fV0pLGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMub3BlcmF0b3JzPXR9cmV0dXJuIG0oZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixpPW5ldyBTKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGM9cy5sZW5ndGg7bzxjOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6bj1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1uKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocituKTticmVhaztjYXNlImFuZCI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHImJm4pOmkucHVzaChyJm4pO2JyZWFrO2Nhc2UiYXRhbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmF0YW4ocikpO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm49aS5wb3AoKSwocj1pLnBvcCgpKT4wP2kucHVzaChyPDxuKTppLnB1c2gocj4+bik7YnJlYWs7Y2FzZSJjZWlsaW5nIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY2VpbChyKSk7YnJlYWs7Y2FzZSJjb3B5IjpyPWkucG9wKCksaS5jb3B5KHIpO2JyZWFrO2Nhc2UiY29zIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY29zKHIpKTticmVhaztjYXNlImN2aSI6cj0wfGkucG9wKCksaS5wdXNoKHIpO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9uKTticmVhaztjYXNlImR1cCI6aS5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI9PT1uKTticmVhaztjYXNlImV4Y2giOmkucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChNYXRoLnBvdyhyLG4pKTticmVhaztjYXNlImZhbHNlIjppLnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5mbG9vcihyKSk7YnJlYWs7Y2FzZSJnZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj49bik7YnJlYWs7Y2FzZSJndCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj5uKTticmVhaztjYXNlImlkaXYiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIvbnwwKTticmVhaztjYXNlImluZGV4IjpyPWkucG9wKCksaS5pbmRleChyKTticmVhaztjYXNlImxlIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPD1uKTticmVhaztjYXNlImxuIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpKTticmVhaztjYXNlImxvZyI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmxvZyhyKS9NYXRoLkxOMTApO2JyZWFrO2Nhc2UibHQiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8bik7YnJlYWs7Y2FzZSJtb2QiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIlbik7YnJlYWs7Y2FzZSJtdWwiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIqbik7YnJlYWs7Y2FzZSJuZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociE9PW4pO2JyZWFrO2Nhc2UibmVnIjpyPWkucG9wKCksaS5wdXNoKC1yKTticmVhaztjYXNlIm5vdCI6ImJvb2xlYW4iPT10eXBlb2Yocj1pLnBvcCgpKT9pLnB1c2goIXIpOmkucHVzaCh+cik7YnJlYWs7Y2FzZSJvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHJ8fG4pOmkucHVzaChyfG4pO2JyZWFrO2Nhc2UicG9wIjppLnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnJvbGwocixuKTticmVhaztjYXNlInJvdW5kIjpyPWkucG9wKCksaS5wdXNoKE1hdGgucm91bmQocikpO2JyZWFrO2Nhc2Uic2luIjpyPWkucG9wKCksaS5wdXNoKE1hdGguc2luKHIpKTticmVhaztjYXNlInNxcnQiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5zcXJ0KHIpKTticmVhaztjYXNlInN1YiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci1uKTticmVhaztjYXNlInRydWUiOmkucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cj0ocj1pLnBvcCgpKTwwP01hdGguY2VpbChyKTpNYXRoLmZsb29yKHIpLGkucHVzaChyKTticmVhaztjYXNlInhvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHIhPT1uKTppLnB1c2gocl5uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319XSksZX0oKTt0LlBvc3RTY3JpcHRFdmFsdWF0b3I9eDt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMudHlwZT10fXJldHVybiBtKGUsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXsoMCxhLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9fV0pLGV9KCksQT1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJhcmdzIikpLmluZGV4PWUsaS5taW49bixpLm1heD1hLGl9cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19XSkscn0oTyksQz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB2KHRoaXMsciksKG49dC5jYWxsKHRoaXMsImxpdGVyYWwiKSkubnVtYmVyPWUsbi5taW49ZSxuLm1heD1lLG59cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1dKSxyfShPKSxGPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSxvKXt2YXIgcztyZXR1cm4gdih0aGlzLHIpLChzPXQuY2FsbCh0aGlzLCJiaW5hcnkiKSkub3A9ZSxzLmFyZzE9bixzLmFyZzI9YSxzLm1pbj1pLHMubWF4PW8sc31yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19XSkscn0oTyksUD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHYodGhpcyxyKSwoYT10LmNhbGwodGhpcywibWF4IikpLmFyZz1lLGEubWluPWUubWluLGEubWF4PW4sYX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdE1pbih0aGlzKX19XSkscn0oTyksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJ2YXIiKSkuaW5kZXg9ZSxpLm1pbj1uLGkubWF4PWEsaX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1dKSxyfShPKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJkZWZpbml0aW9uIikpLnZhcmlhYmxlPWUsYS5hcmc9bixhfXJldHVybiBtKHIsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1dKSxyfShPKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3YodGhpcyxlKSx0aGlzLnBhcnRzPVtdfXJldHVybiBtKGUsW3trZXk6InZpc2l0QXJndW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfX0se2tleToidmlzaXRWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX19LHtrZXk6InZpc2l0TGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX19LHtrZXk6InZpc2l0QmluYXJ5T3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKSxlLmFyZzEudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIiksZS5hcmcyLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiKSIpfX0se2tleToidmlzaXRWYXJpYWJsZURlZmluaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX19LHtrZXk6InZpc2l0TWluIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19XSksZX0oKTtmdW5jdGlvbiBqKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBDKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgRigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBNKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBDKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEMoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fXZhciByPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxuPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEYoIioiLGUsdCxyLG4pfWZ1bmN0aW9uIF8oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEYoIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQyh0KTplLm1heDw9dD9lOm5ldyBQKGUsdCl9dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dih0aGlzLGUpfXJldHVybiBtKGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYSxpLG8scyxjLHUsbCxmPVtdLGg9W10sZz10Lmxlbmd0aD4+MSx2PXIubGVuZ3RoPj4xLHk9MCxtPTA7bTxnO20rKylmLnB1c2gobmV3IEEobSx0WzIqbV0sdFsyKm0rMV0pKTtmb3IodmFyIGI9MCx3PWUubGVuZ3RoO2I8dztiKyspaWYoIm51bWJlciIhPXR5cGVvZihsPWVbYl0pKXN3aXRjaChsKXtjYXNlImFkZCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtvPWYucG9wKCksaT1mLnBvcCgpLGYucHVzaChqKGksbykpO2JyZWFrO2Nhc2UiY3ZyIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihmLmxlbmd0aDwyKXJldHVybiBudWxsO289Zi5wb3AoKSxpPWYucG9wKCksZi5wdXNoKE0oaSxvKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7bz1mLnBvcCgpLGk9Zi5wb3AoKSxmLnB1c2goXyhpLG8pKTticmVhaztjYXNlImV4Y2giOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7cz1mLnBvcCgpLGM9Zi5wb3AoKSxmLnB1c2gocyxjKTticmVhaztjYXNlInBvcCI6aWYoZi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtmLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGYubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiIT09KGk9Zi5wb3AoKSkudHlwZSlyZXR1cm4gbnVsbDtpZigobj1pLm51bWJlcik8MHx8IU51bWJlci5pc0ludGVnZXIobil8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiPT09KHM9ZltmLmxlbmd0aC1uLTFdKS50eXBlfHwidmFyIj09PXMudHlwZSl7Zi5wdXNoKHMpO2JyZWFrfXU9bmV3IFQoeSsrLHMubWluLHMubWF4KSxmW2YubGVuZ3RoLW4tMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2UiZHVwIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVtiKzFdJiYiZ3QiPT09ZVtiKzJdJiZlW2IrM109PT1iKzcmJiJqeiI9PT1lW2IrNF0mJiJwb3AiPT09ZVtiKzVdJiZlW2IrNl09PT1lW2IrMV0pe2k9Zi5wb3AoKSxmLnB1c2goTChpLGVbYisxXSkpLGIrPTY7YnJlYWt9aWYoImxpdGVyYWwiPT09KHM9Zi5hdCgtMSkpLnR5cGV8fCJ2YXIiPT09cy50eXBlKXtmLnB1c2gocyk7YnJlYWt9dT1uZXcgVCh5Kysscy5taW4scy5tYXgpLGZbZi5sZW5ndGgtMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtpZihvPWYucG9wKCksaT1mLnBvcCgpLCJsaXRlcmFsIiE9PW8udHlwZXx8ImxpdGVyYWwiIT09aS50eXBlKXJldHVybiBudWxsO2lmKGE9by5udW1iZXIsKG49aS5udW1iZXIpPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoMD09KGE9KGElbituKSVuKSlicmVhaztmLnB1c2guYXBwbHkoZixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShrPWYuc3BsaWNlKGYubGVuZ3RoLW4sbi1hKSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oayl8fGQoayl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBmLnB1c2gobmV3IEMobCkpO3ZhciBrO2lmKGYubGVuZ3RoIT09dilyZXR1cm4gbnVsbDtmb3IodmFyIFM9W10seD0wLE89aDt4PE8ubGVuZ3RoO3grKyl7dmFyIEY9T1t4XSxQPW5ldyBFO0YudmlzaXQoUCksUy5wdXNoKFAudG9TdHJpbmcoKSl9Zm9yKHZhciBSPTAsTj1mLmxlbmd0aDtSPE47UisrKXt2YXIgRD1mW1JdLEI9bmV3IEU7RC52aXNpdChCKTt2YXIgVT1yWzIqUl0sJD1yWzIqUisxXSxYPVtCLnRvU3RyaW5nKCldO1U+RC5taW4mJihYLnVuc2hpZnQoIk1hdGgubWF4KCIsVSwiLCAiKSxYLnB1c2goIikiKSksJDxELm1heCYmKFgudW5zaGlmdCgiTWF0aC5taW4oIiwkLCIsICIpLFgucHVzaCgiKSIpKSxYLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsUiwiXSA9ICIpLFgucHVzaCgiOyIpLFMucHVzaChYLmpvaW4oIiIpKX1yZXR1cm4gUy5qb2luKCJcbiIpfX1dKSxlfSgpO3QuUG9zdFNjcmlwdENvbXBpbGVyPVJ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG8oZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gdCYmYyhlLnByb3RvdHlwZSx0KSxyJiZjKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMubGV4ZXI9dCx0aGlzLm9wZXJhdG9ycz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5wcmV2PW51bGx9cmV0dXJuIHUoZSxbe2tleToibmV4dFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2tlbi50eXBlPT09ZSYmKHRoaXMubmV4dFRva2VuKCksITApfX0se2tleToiZXhwZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICIuY29uY2F0KHRoaXMudG9rZW4udHlwZSwiIGV4cGVjdGVkICIpLmNvbmNhdChlLCIuIikpfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3QoZi5MQlJBQ0UpLHRoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLm9wZXJhdG9yc319LHtrZXk6InBhcnNlQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KGYuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChmLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQoZi5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fX0se2tleToicGFyc2VDb25kaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChmLlJCUkFDRSksdGhpcy5hY2NlcHQoZi5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChmLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3ZhciB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dmFyIHI9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLmV4cGVjdChmLklGRUxTRSksdGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW3QrMV09ImoiLHRoaXMub3BlcmF0b3JzW2VdPXIsdGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19XSksZX0oKTt0LlBvc3RTY3JpcHRQYXJzZXI9bDt2YXIgZj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ModGhpcyxlKSx0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPXJ9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJvcENhY2hlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9fSx7a2V5OiJnZXRPcGVyYXRvciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUub3BDYWNoZVt0XXx8KGUub3BDYWNoZVt0XT1uZXcgZShmLk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUoZi5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKGYuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUoZi5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKGYuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfXJldHVybiB1KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6ImdldFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IGgoZi5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxoLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGguUkJSQUNFfXZhciByPXRoaXMuc3RyQnVmO2ZvcihyLmxlbmd0aD0wLHJbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO3ZhciBuPXIuam9pbigiIik7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIGguSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBoLklGRUxTRTtkZWZhdWx0OnJldHVybiBoLmdldE9wZXJhdG9yKG4pfX19LHtrZXk6ImdldE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRDaGFyLHQ9dGhpcy5zdHJCdWY7Zm9yKHQubGVuZ3RoPTAsdFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3ZhciByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fV0pLGV9KCk7dC5Qb3N0U2NyaXB0TGV4ZXI9ZH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KTtmdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0scyhlLHQpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49dShlKTtpZih0KXt2YXIgYT11KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWwodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbChlKX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1sKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWwoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0JiZoKGUucHJvdG90eXBlLHQpLHImJmgoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PSh0JiZ0Lm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6ImdldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fb25seVJlZnMmJigwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO3ZhciB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfX0se2tleToiZ2V0QnlSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1dKSxlfSgpLGc9ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBmKHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsSW1hZ2VDYWNoZT1nO3ZhciB2PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gZih0aGlzLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBkKHIsW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiBudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KSx2b2lkIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9dGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxyKX19XSkscn0ocCk7dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT12O3ZhciB5PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx7b25seVJlZnM6ITB9KX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9eTt2YXIgbT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGYodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsR1N0YXRlQ2FjaGU9bTt2YXIgYj1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMse29ubHlSZWZzOiEwfSl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLl9yZWZDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6Il9ieXRlU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX0odGhpcy5faW1hZ2VDYWNoZSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXQrPWUudmFsdWUuYnl0ZVNpemV9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9fSx7a2V5OiJfY2FjaGVMaW1pdFJlYWNoZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPGUuTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8ZS5NQVhfQllURV9TSVpFKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtyZXR1cm4hKChuP24uc2l6ZSsobi5oYXMocik/MDoxKToxKTxlLk5VTV9QQUdFU19USFJFU0hPTER8fCF0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfX0se2tleToiYWRkUGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyfHwocj1uZXcgU2V0LHRoaXMuX3JlZkNhY2hlLnB1dChlLHIpKSxyLmFkZCh0KX19LHtrZXk6ImFkZEJ5dGVTaXplIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3ImJihyLmJ5dGVTaXplfHwoci5ieXRlU2l6ZT10KSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtpZighbilyZXR1cm4gbnVsbDtpZihuLnNpemU8ZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHQpO3JldHVybiBhPyhuLmFkZChyKSxhKTpudWxsfX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgImFkZFBhZ2VJbmRleCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLG4ud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLl9yZWZDYWNoZS5jbGVhcigpLHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19XSxbe2tleToiTlVNX1BBR0VTX1RIUkVTSE9MRCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpfX0se2tleToiTUlOX0lNQUdFU19UT19DQUNIRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1JTl9JTUFHRVNfVE9fQ0FDSEUiLDEwKX19LHtrZXk6Ik1BWF9CWVRFX1NJWkUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfX1dKSxlfSgpO3QuR2xvYmFsSW1hZ2VDYWNoZT13fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYmlkaT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTEscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHA9ITAsZz1lLmxlbmd0aDtpZigwPT09Z3x8cilyZXR1cm4gZihlLHAscik7aC5sZW5ndGg9ZyxkLmxlbmd0aD1nO3ZhciB2LHksbT0wO2Zvcih2PTA7djxnOysrdil7aFt2XT1lLmNoYXJBdCh2KTt2YXIgYj1lLmNoYXJDb2RlQXQodiksdz0iTCI7Yjw9MjU1P3c9YVtiXToxNDI0PD1iJiZiPD0xNTI0P3c9IlIiOjE1MzY8PWImJmI8PTE3OTE/KHc9aVsyNTUmYl0pfHwoMCxuLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrYi50b1N0cmluZygxNikpOjE3OTI8PWImJmI8PTIyMjAmJih3PSJBTCIpLCJSIiE9PXcmJiJBTCIhPT13JiYiQU4iIT09d3x8bSsrLGRbdl09d31pZigwPT09bSlyZXR1cm4gZihlLHA9ITApOy0xPT09dCYmKG0vZzwuMyYmZz40PyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKHY9MDt2PGc7Kyt2KWtbdl09dDt2YXIgUyx4PW8odCk/IlIiOiJMIixPPXgsQT1PLEM9Tztmb3Iodj0wO3Y8ZzsrK3YpIk5TTSI9PT1kW3ZdP2Rbdl09QzpDPWRbdl07Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdikiQUwiPT09KFM9ZFt2XSkmJihkW3ZdPSJSIik7Zm9yKHY9MTt2PGctMTsrK3YpIkVTIj09PWRbdl0mJiJFTiI9PT1kW3YtMV0mJiJFTiI9PT1kW3YrMV0mJihkW3ZdPSJFTiIpLCJDUyIhPT1kW3ZdfHwiRU4iIT09ZFt2LTFdJiYiQU4iIT09ZFt2LTFdfHxkW3YrMV0hPT1kW3YtMV18fChkW3ZdPWRbdi0xXSk7Zm9yKHY9MDt2PGc7Kyt2KWlmKCJFTiI9PT1kW3ZdKXtmb3IodmFyIEY9di0xO0Y+PTAmJiJFVCI9PT1kW0ZdOy0tRilkW0ZdPSJFTiI7Zm9yKHZhciBQPXYrMTtQPGcmJiJFVCI9PT1kW1BdOysrUClkW1BdPSJFTiJ9Zm9yKHY9MDt2PGc7Kyt2KSJXUyIhPT0oUz1kW3ZdKSYmIkVTIiE9PVMmJiJFVCIhPT1TJiYiQ1MiIT09U3x8KGRbdl09Ik9OIik7Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iTCI9PT1DPyJMIjoiRU4iOiJSIiE9PVMmJiJMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdilpZigiT04iPT09ZFt2XSl7dmFyIFQ9YyhkLHYrMSwiT04iKSxJPU87dj4wJiYoST1kW3YtMV0pO3ZhciBFPUE7VCsxPGcmJihFPWRbVCsxXSksIkwiIT09SSYmKEk9IlIiKSwiTCIhPT1FJiYoRT0iUiIpLEk9PT1FJiZ1KGQsdixULEkpLHY9VC0xfWZvcih2PTA7djxnOysrdikiT04iPT09ZFt2XSYmKGRbdl09eCk7Zm9yKHY9MDt2PGc7Kyt2KVM9ZFt2XSxzKGtbdl0pPyJSIj09PVM/a1t2XSs9MToiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0yKToiTCIhPT1TJiYiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0xKTt2YXIgaixNPS0xLF89OTk7Zm9yKHY9MCx5PWsubGVuZ3RoO3Y8eTsrK3YpTTwoaj1rW3ZdKSYmKE09aiksXz5qJiZvKGopJiYoXz1qKTtmb3Ioaj1NO2o+PV87LS1qKXt2YXIgTD0tMTtmb3Iodj0wLHk9ay5sZW5ndGg7djx5OysrdilrW3ZdPGo/TD49MCYmKGwoaCxMLHYpLEw9LTEpOkw8MCYmKEw9dik7TD49MCYmbChoLEwsay5sZW5ndGgpfWZvcih2PTAseT1oLmxlbmd0aDt2PHk7Kyt2KXt2YXIgUj1oW3ZdOyI8IiE9PVImJiI+IiE9PVJ8fChoW3ZdPSIiKX1yZXR1cm4gZihoLmpvaW4oIiIpLHApfTt2YXIgbj1yKDIpLGE9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYTtmb3Iobj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0ibHRyIjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXT9yPSJ0dGIiOnR8fChyPSJydGwiKSx7c3RyOmUsZGlyOnJ9fXZhciBoPVtdLGQ9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhKGUpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxjPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6byx0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om99dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpLHI9MDtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTthKyspe3ZhciBvPWUuY2hhckNvZGVBdChhKTtvPD0yNTU/dFtyKytdPW86KHRbcisrXT1vPj4+OCx0W3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KHQ9ZS5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGw9ci00KnUsZj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCx1KSxoPTAsZD0wLHA9dGhpcy5oMSxnPXRoaXMuaDIsdj0zNDMyOTE4MzUzLHk9NDYxODQ1OTA3LG09MTE2MDEsYj0xMzcxNSx3PTA7dzx1O3crKykxJnc/cD01KihwPShwXj1oPShoPShoPShoPWZbd10pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2Omc9NSooZz0oZ149ZD0oZD0oZD0oZD1mW3ddKSp2JnN8ZCptJmMpPDwxNXxkPj4+MTcpKnkmc3xkKmImYyk8PDEzfGc+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goaD0wLGwpe2Nhc2UgMzpoXj10WzQqdSsyXTw8MTY7Y2FzZSAyOmhePXRbNCp1KzFdPDw4O2Nhc2UgMTpoPShoPShoPShoXj10WzQqdV0pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjLDEmdT9wXj1oOmdePWh9dGhpcy5oMT1wLHRoaXMuaDI9Z319LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtyZXR1cm4gZT0zOTgxODA2Nzk3KihlXj10Pj4+MSkmc3wzNjA0NSplJmMsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCZzfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSplJmMsKChlXj0odD0zMzAxODgyMzY2KnQmc3woMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NdXJtdXJIYXNoM182ND11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3BlcmF0b3JMaXN0PXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHMoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYyhlKX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1jKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBjPXRbb107aT1pW2NdfHwoaVtjXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46cixpdGVyYXRlRm46bixwcm9jZXNzRm46YX19dmFyIGQ9W107aChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1uLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcigiaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwyMDApO2lmKHU8MTApcmV0dXJuIHQtKHQtbyklNDtmb3IodmFyIGw9MCxmPVtdLGg9MCxkPTEscD0xLGc9MDtnPHU7ZysrKXt2YXIgdj1hW3MrKGc8PDIpXSx5PWFbYysoZzw8MildWzBdO2QreS53aWR0aD4xZTMmJihsPU1hdGgubWF4KGwsZCkscCs9aCsyLGQ9MCxoPTApLGYucHVzaCh7dHJhbnNmb3JtOnYseDpkLHk6cCx3Onkud2lkdGgsaDp5LmhlaWdodH0pLGQrPXkud2lkdGgrMixoPU1hdGgubWF4KGgseS5oZWlnaHQpfWZvcih2YXIgbT1NYXRoLm1heChsLGQpKzEsYj1wK2grMSx3PW5ldyBVaW50OEFycmF5KG0qYio0KSxrPW08PDIsUz0wO1M8dTtTKyspe3ZhciB4PWFbYysoUzw8MildWzBdLmRhdGEsTz1mW1NdLnc8PDIsQT0wLEM9ZltTXS54K2ZbU10ueSptPDwyO3cuc2V0KHguc3ViYXJyYXkoMCxPKSxDLWspO2Zvcih2YXIgRj0wLFA9ZltTXS5oO0Y8UDtGKyspdy5zZXQoeC5zdWJhcnJheShBLEErTyksQyksQSs9TyxDKz1rO2Zvcih3LnNldCh4LnN1YmFycmF5KEEtTyxBKSxDKTtDPj0wOyl4W0MtNF09eFtDXSx4W0MtM109eFtDKzFdLHhbQy0yXT14W0MrMl0seFtDLTFdPXhbQyszXSx4W0MrT109eFtDK08tNF0seFtDK08rMV09eFtDK08tM10seFtDK08rMl09eFtDK08tMl0seFtDK08rM109eFtDK08tMV0sQy09a31yZXR1cm4gci5zcGxpY2Uobyw0KnUsbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW3t3aWR0aDptLGhlaWdodDpiLGtpbmQ6bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOnd9LGZdKSxvKzF9KSksaChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsbi5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PW4uT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5mbG9vcigodC1vKS80KTtpZih1PDEwKXJldHVybiB0LSh0LW8pJTQ7dmFyIGwsZixoPSExLGQ9YVtjXVswXSxwPWFbc11bMF0sZz1hW3NdWzFdLHY9YVtzXVsyXSx5PWFbc11bM107aWYoZz09PXYpe2g9ITAsbD1zKzQ7Zm9yKHZhciBtPWMrNCxiPTE7Yjx1O2IrKyxsKz00LG0rPTQpaWYoZj1hW2xdLGFbbV1bMF0hPT1kfHxmWzBdIT09cHx8ZlsxXSE9PWd8fGZbMl0hPT12fHxmWzNdIT09eSl7YjwxMD9oPSExOnU9YjticmVha319aWYoaCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHc9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2w9cztmb3IodmFyIGs9MDtrPHU7aysrLGwrPTQpZj1hW2xdLHdbazw8MV09Zls0XSx3WzErKGs8PDEpXT1mWzVdO3Iuc3BsaWNlKG8sNCp1LG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KnUsW2QscCxnLHYseSx3XSl9ZWxzZXt1PU1hdGgubWluKHUsMTAwKTtmb3IodmFyIFM9W10seD0wO3g8dTt4Kyspe2Y9YVtzKyh4PDwyKV07dmFyIE89YVtjKyh4PDwyKV1bMF07Uy5wdXNoKHtkYXRhOk8uZGF0YSx3aWR0aDpPLndpZHRoLGhlaWdodDpPLmhlaWdodCxpbnRlcnBvbGF0ZTpPLmludGVycG9sYXRlLGNvdW50Ok8uY291bnQsdHJhbnNmb3JtOmZ9KX1yLnNwbGljZShvLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW1NdKX1yZXR1cm4gbysxfSkpLGgoZCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTppZihyW3RdIT09bi5PUFMudHJhbnNmb3JtKXJldHVybiExO3ZhciBvPWUuaUN1cnItMixzPWFbb11bMF0sYz1hW29dWzNdO3JldHVybiBhW3RdWzBdPT09cyYmMD09PWFbdF1bMV0mJjA9PT1hW3RdWzJdJiZhW3RdWzNdPT09YztjYXNlIDI6aWYoclt0XSE9PW4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO3ZhciB1PWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PXU7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixjPWFbaS0xXVswXSx1PWFbc11bMF0sbD1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBnPWFbZF07aFtwPDwxXT1nWzRdLGhbMSsocDw8MSldPWdbNV19dmFyIHY9W2MsdSxsLGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsdiksbysxfSkpLGgoZCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1uLk9QUy5zaG93VGV4dClyZXR1cm4hMTt2YXIgbz1lLmlDdXJyLTMscz1hW29dWzBdLGM9YVtvXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1jO2Nhc2UgNDpyZXR1cm4gclt0XT09PW4uT1BTLmVuZFRleHR9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChpKSl9KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsYz1hLTEsdT1hLGw9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2NdJiZyW2ktMV09PT1yW3VdJiZuW2ktNF1bMF09PT1sJiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsZz0xO2c8aDtnKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKTt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMucXVldWU9dH1yZXR1cm4gZihlLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKSx0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpLHRoaXMuX29wdGltaXplKCl9fSx7a2V5OiJmbHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCksZz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShhLGUpO3ZhciB0LHIsbj0odD1hLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1zKHQpO2lmKHIpe3ZhciBhPXModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Yyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIHUodGhpcyxhKSwodD1uLmNhbGwodGhpcyxlKSkuc3RhdGU9bnVsbCx0LmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5fSx0Lm1hdGNoPW51bGwsdC5sYXN0UHJvY2Vzc2VkPTAsdH1yZXR1cm4gZihhLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZihufHxhfHx0KzEhPT1yfHxkW2VbdF1dKXtmb3IodmFyIGk9dGhpcy5jb250ZXh0O3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLGE9bnVsbCxuPW51bGwsdD49KHI9ZS5sZW5ndGgpKWJyZWFrfShuPShufHxkKVtlW3RdXSkmJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9cn19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7dGhpcy5tYXRjaDspe3ZhciBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fV0pLGF9KHApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt1KHRoaXMsZSksdGhpcy5fc3RyZWFtU2luaz1yLHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSwhcnx8dCZuLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBwKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBnKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLndlaWdodD0wLHRoaXMuX3Jlc29sdmVkPXI/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gZihlLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9fSx7a2V5OiJyZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fX0se2tleToidG90YWxMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH19LHtrZXk6ImFkZE9wIix2YWx1ZTpmdW5jdGlvbih0LHIpe3RoaXMub3B0aW1pemVyLnB1c2godCxyKSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFX0FCT1VUJiYodD09PW4uT1BTLnJlc3RvcmV8fHQ9PT1uLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX19LHtrZXk6ImFkZEltYWdlT3BzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9fSx7a2V5OiJhZGREZXBlbmRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChuLk9QUy5kZXBlbmRlbmN5LFtlXSkpfX0se2tleToiYWRkRGVwZW5kZW5jaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO3RoaXMuYWRkRGVwZW5kZW5jeShuKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9fX0se2tleToiYWRkT3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7dmFyIHIsaT1hKHQuZGVwZW5kZW5jaWVzKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1mb3IodmFyIHM9MCxjPXQubGVuZ3RoO3M8YztzKyspdGhpcy5hZGRPcCh0LmZuQXJyYXlbc10sdC5hcmdzQXJyYXlbc10pfWVsc2UoMCxuLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX19LHtrZXk6Il90cmFuc2ZlcnMiLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZm5BcnJheSxyPXRoaXMuYXJnc0FycmF5LGE9dGhpcy5sZW5ndGgsaT0wO2k8YTtpKyspc3dpdGNoKHRbaV0pe2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6Y2FzZSBuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOmNhc2Ugbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OnZhciBvPXJbaV1bMF07IW8uY2FjaGVkJiZvLmRhdGEmJm8uZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKG8uZGF0YS5idWZmZXIpfXJldHVybiBlfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19XSxbe2tleToiQ0hVTktfU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9fSx7a2V5OiJDSFVOS19TSVpFX0FCT1VUIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiQ0hVTktfU0laRV9BQk9VVCIsdGhpcy5DSFVOS19TSVpFLTUpfX1dKSxlfSgpO3QuT3BlcmF0b3JMaXN0PXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTkzKSxpPXIoMTM2KSxvPXIoMTQzKSxzPXIoMTQ4KSxjPXIoMTU2KSx1PXIoMTU5KSxsPXIoMTM0KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWYoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4oZT10K2Uqcik8MD9lPTA6ZT5uJiYoZT1uKSxlfWZ1bmN0aW9uIHYoZSx0LHIsbixhLGkpe3ZhciBvLHM9YSppO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO3ZhciBjLHUsbCxmLGg9ci9hLGQ9bi9pLHA9MCxnPW5ldyBVaW50MTZBcnJheShhKSx2PXI7Zm9yKGM9MDtjPGE7YysrKWdbY109TWF0aC5mbG9vcihjKmgpO2ZvcihjPTA7YzxpO2MrKylmb3IobD1NYXRoLmZsb29yKGMqZCkqdix1PTA7dTxhO3UrKylmPWwrZ1t1XSxvW3ArK109ZVtmXTtyZXR1cm4gb312YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLGE9dC5yZXMscz10LmltYWdlLGM9dC5pc0lubGluZSxmPXZvaWQgMCE9PWMmJmMsaD10LnNtYXNrLGQ9dm9pZCAwPT09aD9udWxsOmgscD10Lm1hc2ssZz12b2lkIDA9PT1wP251bGw6cCx2PXQuaXNNYXNrLHk9dm9pZCAwIT09diYmdixtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGI9dC5sb2NhbENvbG9yU3BhY2VDYWNoZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmltYWdlPXM7dmFyIHcsaz1zLmRpY3QsUz1rLmdldCgiRiIsIkZpbHRlciIpO2lmKFMgaW5zdGFuY2VvZiBsLk5hbWUpdz1TLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KFMpKXt2YXIgeD1yLmZldGNoSWZSZWYoU1swXSk7eCBpbnN0YW5jZW9mIGwuTmFtZSYmKHc9eC5uYW1lKX1zd2l0Y2godyl7Y2FzZSJKUFhEZWNvZGUiOnZhciBPPW5ldyB1LkpweEltYWdlO08ucGFyc2VJbWFnZVByb3BlcnRpZXMocy5zdHJlYW0pLHMuc3RyZWFtLnJlc2V0KCkscy53aWR0aD1PLndpZHRoLHMuaGVpZ2h0PU8uaGVpZ2h0LHMuYml0c1BlckNvbXBvbmVudD1PLmJpdHNQZXJDb21wb25lbnQscy5udW1Db21wcz1PLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpzLmJpdHNQZXJDb21wb25lbnQ9MSxzLm51bUNvbXBzPTF9dmFyIEE9ay5nZXQoIlciLCJXaWR0aCIpLEM9ay5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMud2lkdGgpJiZzLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIocy5oZWlnaHQpJiZzLmhlaWdodD4wJiYocy53aWR0aCE9PUF8fHMuaGVpZ2h0IT09QykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLEE9cy53aWR0aCxDPXMuaGVpZ2h0KSxBPDF8fEM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoQSwiIG9yIGhlaWdodDogIikuY29uY2F0KEMpKTt0aGlzLndpZHRoPUEsdGhpcy5oZWlnaHQ9Qyx0aGlzLmludGVycG9sYXRlPWsuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSx0aGlzLmltYWdlTWFzaz1rLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEsdGhpcy5tYXR0ZT1rLmdldCgiTWF0dGUiKXx8ITE7dmFyIEY9cy5iaXRzUGVyQ29tcG9uZW50O2lmKCFGJiYhKEY9ay5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKSkpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICIuY29uY2F0KHRoaXMuaW1hZ2VNYXNrKSk7Rj0xfWlmKHRoaXMuYnBjPUYsIXRoaXMuaW1hZ2VNYXNrKXt2YXIgUD1rLmdldFJhdygiQ1MiKXx8ay5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighUClzd2l0Y2goKDAsbi5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpLHMubnVtQ29tcHMpe2Nhc2UgMTpQPWwuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6UD1sLk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6UD1sLk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkpQWCBpbWFnZXMgd2l0aCAiLmNvbmNhdChzLm51bUNvbXBzLCIgY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpKX10aGlzLmNvbG9yU3BhY2U9by5Db2xvclNwYWNlLnBhcnNlKHtjczpQLHhyZWY6cixyZXNvdXJjZXM6Zj9hOm51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pLHRoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfWlmKHRoaXMuZGVjb2RlPWsuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKSx0aGlzLm5lZWRzRGVjb2RlPSExLHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxGKXx8eSYmIW8uQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO3ZhciBUPSgxPDxGKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtmb3IodmFyIEk9dGhpcy5jb2xvclNwYWNlJiYiSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSxFPTAsaj0wO0U8dGhpcy5kZWNvZGUubGVuZ3RoO0UrPTIsKytqKXt2YXIgTT10aGlzLmRlY29kZVtFXSxfPXRoaXMuZGVjb2RlW0UrMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal09ST8oXy1NKS9UOl8tTSx0aGlzLmRlY29kZUFkZGVuZHNbal09ST9NOlQqTX19ZD90aGlzLnNtYXNrPW5ldyBlKHt4cmVmOnIscmVzOmEsaW1hZ2U6ZCxpc0lubGluZTpmLHBkZkZ1bmN0aW9uRmFjdG9yeTptLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmJ9KTpnJiYoZyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9nLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgZSh7eHJlZjpyLHJlczphLGltYWdlOmcsaXNJbmxpbmU6Zixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pOigwLG4ud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKTp0aGlzLm1hc2s9Zyl9dmFyIHQscixmLHksbTtyZXR1cm4gdD1lLHI9W3trZXk6ImRyYXdXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzayYmdGhpcy5zbWFzay53aWR0aHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay53aWR0aHx8MCl9fSx7a2V5OiJkcmF3SGVpZ2h0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzayYmdGhpcy5zbWFzay5oZWlnaHR8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2suaGVpZ2h0fHwwKX19LHtrZXk6ImRlY29kZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxpPXRoaXMuZGVjb2RlQWRkZW5kcyxvPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLHM9KDE8PG4pLTE7aWYoMSE9PW4pe3ZhciBjPTA7Zm9yKHQ9MCxyPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7dDxyO3QrKylmb3IodmFyIHU9MDt1PGE7dSsrKWVbY109ZyhlW2NdLGlbdV0sb1t1XSxzKSxjKyt9ZWxzZSBmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyllW3RdPSshZVt0XX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO3ZhciByLG49dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxvPW4qYSppLHM9MDtyPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG8pOm5ldyBVaW50MzJBcnJheShvKTt2YXIgYyx1LGw9bippLGY9KDE8PHQpLTEsaD0wO2lmKDE9PT10KWZvcih2YXIgZCxwLGcsdj0wO3Y8YTt2Kyspe2ZvcihwPWgrKC04JmwpLGc9aCtsO2g8cDspdT1lW3MrK10scltoXT11Pj43JjEscltoKzFdPXU+PjYmMSxyW2grMl09dT4+NSYxLHJbaCszXT11Pj40JjEscltoKzRdPXU+PjMmMSxyW2grNV09dT4+MiYxLHJbaCs2XT11Pj4xJjEscltoKzddPTEmdSxoKz04O2lmKGg8Zylmb3IodT1lW3MrK10sZD0xMjg7aDxnOylyW2grK109KyEhKHUmZCksZD4+PTF9ZWxzZXt2YXIgeT0wO2Zvcih1PTAsaD0wLGM9bztoPGM7KytoKXtmb3IoaCVsPT0wJiYodT0wLHk9MCk7eTx0Oyl1PXU8PDh8ZVtzKytdLHkrPTg7dmFyIG09eS10LGI9dT4+bTtiPDA/Yj0wOmI+ZiYmKGI9ZikscltoXT1iLHUmPSgxPDxtKS0xLHk9bX19cmV0dXJuIHJ9fSx7a2V5OiJmaWxsT3BhY2l0eSIsdmFsdWU6ZnVuY3Rpb24odCxyLGEsaSxvKXt2YXIgcyxjLHUsbCxmLGgsZD10aGlzLnNtYXNrLHA9dGhpcy5tYXNrO2lmKGQpYz1kLndpZHRoLHU9ZC5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYyp1KSxkLmZpbGxHcmF5QnVmZmVyKHMpLGM9PT1yJiZ1PT09YXx8KHM9dihzLGQuYnBjLGMsdSxyLGEpKTtlbHNlIGlmKHApaWYocCBpbnN0YW5jZW9mIGUpe2ZvcihjPXAud2lkdGgsdT1wLmhlaWdodCxzPW5ldyBVaW50OENsYW1wZWRBcnJheShjKnUpLHAubnVtQ29tcHM9MSxwLmZpbGxHcmF5QnVmZmVyKHMpLGw9MCxmPWMqdTtsPGY7KytsKXNbbF09MjU1LXNbbF07Yz09PXImJnU9PT1hfHwocz12KHMscC5icGMsYyx1LHIsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkocCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7cz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKTt2YXIgZz10aGlzLm51bUNvbXBzO2ZvcihsPTAsZj1yKmE7bDxmOysrbCl7dmFyIHk9MCxtPWwqZztmb3IoaD0wO2g8ZzsrK2gpe3ZhciBiPW9bbStoXSx3PTIqaDtpZihiPHBbd118fGI+cFt3KzFdKXt5PTI1NTticmVha319c1tsXT15fX1pZihzKWZvcihsPTAsaD0zLGY9cippO2w8ZjsrK2wsaCs9NCl0W2hdPXNbbF07ZWxzZSBmb3IobD0wLGg9MyxmPXIqaTtsPGY7KytsLGgrPTQpdFtoXT0yNTV9fSx7a2V5OiJ1bmRvUHJlYmxlbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKG4pZm9yKHZhciBhPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobiwwKSxpPWFbMF0sbz1hWzFdLHM9YVsyXSxjPXQqcio0LHU9MDt1PGM7dSs9NCl7dmFyIGw9ZVt1KzNdO2lmKDAhPT1sKXt2YXIgZj0yNTUvbDtlW3VdPShlW3VdLWkpKmYraSxlW3UrMV09KGVbdSsxXS1vKSpmK28sZVt1KzJdPShlW3UrMl0tcykqZitzfWVsc2UgZVt1XT0yNTUsZVt1KzFdPTI1NSxlW3UrMl09MjU1fX19LHtrZXk6ImNyZWF0ZUltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5kcmF3V2lkdGgscj10aGlzLmRyYXdIZWlnaHQsYT17d2lkdGg6dCxoZWlnaHQ6cixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgscz10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGw9byppKnUrNz4+MztpZighZSl7dmFyIGY7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2Y9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChmPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZiYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1vJiZyPT09cyl7aWYoYS5raW5kPWYsYS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhzKmwse30pLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShmPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgaD1hLmRhdGEsZD0wLHA9aC5sZW5ndGg7ZDxwO2QrKyloW2RdXj0yNTV9cmV0dXJuIGF9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciBnPXMqbDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Zyo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gYS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxhLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGcse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pLGF9fX12YXIgdix5LG09dGhpcy5nZXRJbWFnZUJ5dGVzKHMqbCx7aW50ZXJuYWw6ITB9KSxiPTB8bS5sZW5ndGgvbCpyL3Msdz10aGlzLmdldENvbXBvbmVudHMobSk7cmV0dXJuIGV8fHRoaXMuc21hc2t8fHRoaXMubWFzaz8oYS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqNCksdj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShhLmRhdGEsdCxyLGIsdykpOihhLmtpbmQ9bi5JbWFnZUtpbmQuUkdCXzI0QlBQLGEuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKjMpLHY9MCx5PSExKSx0aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcih3KSx0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihhLmRhdGEsbyxzLHQscixiLHUsdyx2KSx5JiZ0aGlzLnVuZG9QcmVibGVuZChhLmRhdGEsdCxiKSxhfX0se2tleToiZmlsbEdyYXlCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsYz1pKnQqcys3Pj4zLHU9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxsPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtpZigxIT09cyl7dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobCksYT1pKm87dmFyIGY9MjU1LygoMTw8cyktMSk7Zm9yKHI9MDtyPGE7KytyKWVbcl09ZipsW3JdfWVsc2UgaWYoYT1pKm8sdGhpcy5uZWVkc0RlY29kZSlmb3Iocj0wO3I8YTsrK3IpZVtyXT1sW3JdLTEmMjU1O2Vsc2UgZm9yKHI9MDtyPGE7KytyKWVbcl09MjU1Ji1sW3JdfX0se2tleToiZ2V0SW1hZ2VCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRyYXdXaWR0aCxhPXQuZHJhd0hlaWdodCxpPXQuZm9yY2VSR0Isbz12b2lkIDAhPT1pJiZpLGM9dC5pbnRlcm5hbCx1PXZvaWQgMCE9PWMmJmM7dGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXJ8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFvO3ZhciBsPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7cmV0dXJuIHV8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBzLkRlY29kZVN0cmVhbT9sOigoMCxuLmFzc2VydCkobCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpLG5ldyBVaW50OEFycmF5KGwpKX19XSxmPVt7a2V5OiJidWlsZEltYWdlIix2YWx1ZTooeT1oKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgYSxvLHMsYyx1LGwsZixkLHAsZyx2LHk7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1yLnhyZWYsbz1yLnJlcyxzPXIuaW1hZ2UsYz1yLmlzSW5saW5lLHU9dm9pZCAwIT09YyYmYyxsPXIucGRmRnVuY3Rpb25GYWN0b3J5LGY9ci5sb2NhbENvbG9yU3BhY2VDYWNoZSxkPXMscD1udWxsLGc9bnVsbCx2PXMuZGljdC5nZXQoIlNNYXNrIikseT1zLmRpY3QuZ2V0KCJNYXNrIiksdj92IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP3A9djooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOnkmJih5IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHkpP2c9eTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLHQuYWJydXB0KCJyZXR1cm4iLG5ldyBlKHt4cmVmOmEscmVzOm8saW1hZ2U6ZCxpc0lubGluZTp1LHNtYXNrOnAsbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSksbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXkuYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe2QoYSxyLG4saSxvLCJuZXh0IixlKX1mdW5jdGlvbiBvKGUpe2QoYSxyLG4saSxvLCJ0aHJvdyIsZSl9aSh2b2lkIDApfSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY3JlYXRlUmF3TWFzayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PShhKzc+PjMpKmksbD1uLmJ5dGVMZW5ndGg7aWYoIW98fHMmJnUhPT1sP3M/KCh0PW5ldyBVaW50OEFycmF5KHUpKS5zZXQobiksdC5maWxsKDI1NSxsKSk6dD1uZXcgVWludDhBcnJheShuKTp0PW4scylmb3Iocj0wO3I8bDtyKyspdFtyXV49MjU1O3JldHVybntkYXRhOnQsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpjfX19LHtrZXk6ImNyZWF0ZU1hc2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW1nQXJyYXkscj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PWUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsbD12b2lkIDA9PT11fHx1LGY9MT09PXImJjE9PT1pJiZzPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZihmKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOmZ9O2lmKGwmJm4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBoPW5ldyBPZmZzY3JlZW5DYW52YXMocixpKSxkPWguZ2V0Q29udGV4dCgiMmQiKSxwPWQuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7cmV0dXJuKDAsYS5hcHBseU1hc2tJbWFnZURhdGEpKHtzcmM6dCxkZXN0OnAuZGF0YSx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6c30pLGQucHV0SW1hZ2VEYXRhKHAsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6YyxiaXRtYXA6aC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6cyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpvLGludGVycG9sYXRlOmN9KX19XSxyJiZwKHQucHJvdG90eXBlLHIpLGYmJnAodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuUERGSW1hZ2U9eX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFwcGx5TWFza0ltYWdlRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc3JjLGk9ZS5zcmNQb3Msbz12b2lkIDA9PT1pPzA6aSxzPWUuZGVzdCxjPWUuZGVzdFBvcyx1PXZvaWQgMD09PWM/MDpjLGw9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pbnZlcnNlRGVjb2RlLGQ9dm9pZCAwIT09aCYmaCxwPW4uRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsZz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWQ/WzAscF06W3AsMF0pfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLDIpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSwyKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLHY9Z1swXSx5PWdbMV0sbT1sPj4zLGI9NyZsLHc9ci5sZW5ndGg7cz1uZXcgVWludDMyQXJyYXkocy5idWZmZXIpO2Zvcih2YXIgaz0wO2s8ZjtrKyspe2Zvcih2YXIgUz1vK207bzxTO28rKyl7dmFyIHg9bzx3P3Jbb106MjU1O3NbdSsrXT0xMjgmeD95OnYsc1t1KytdPTY0Jng/eTp2LHNbdSsrXT0zMiZ4P3k6dixzW3UrK109MTYmeD95OnYsc1t1KytdPTgmeD95OnYsc1t1KytdPTQmeD95OnYsc1t1KytdPTImeD95OnYsc1t1KytdPTEmeD95OnZ9aWYoMCE9PWIpZm9yKHZhciBPPW88dz9yW28rK106MjU1LEE9MDtBPGI7QSsrKXNbdSsrXT1PJjE8PDctQT95OnZ9cmV0dXJue3NyY1BvczpvLGRlc3RQb3M6dX19O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luYWxEYXRhLHI9ZS54cmVmSW5mbyxzPWUubmV3UmVmcyx1PWUueHJlZixoPXZvaWQgMD09PXU/bnVsbDp1LGc9ZS5oYXNYZmEsdj12b2lkIDAhPT1nJiZnLGI9ZS54ZmFEYXRhc2V0c1JlZix3PXZvaWQgMD09PWI/bnVsbDpiLGs9ZS5oYXNYZmFEYXRhc2V0c0VudHJ5LFM9dm9pZCAwIT09ayYmayx4PWUubmVlZEFwcGVhcmFuY2VzLE89ZS5hY3JvRm9ybVJlZixBPXZvaWQgMD09PU8/bnVsbDpPLEM9ZS5hY3JvRm9ybSxGPXZvaWQgMD09PUM/bnVsbDpDLFA9ZS54ZmFEYXRhLFQ9dm9pZCAwPT09UD9udWxsOlA7KGZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuYWNyb0Zvcm0saT1lLmFjcm9Gb3JtUmVmLG89ZS5oYXNYZmEscz1lLmhhc1hmYURhdGFzZXRzRW50cnksYz1lLnhmYURhdGFzZXRzUmVmLHU9ZS5uZWVkQXBwZWFyYW5jZXMsZj1lLm5ld1JlZnM7aWYoIW98fHN8fGN8fCgwLG4ud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0IiksdXx8byYmYyl7dmFyIGgscD1uZXcgYS5EaWN0KHQpLGc9bChyLmdldEtleXMoKSk7dHJ5e2ZvcihnLnMoKTshKGg9Zy5uKCkpLmRvbmU7KXt2YXIgdj1oLnZhbHVlO3Auc2V0KHYsci5nZXRSYXcodikpfX1jYXRjaChlKXtnLmUoZSl9ZmluYWxseXtnLmYoKX1pZihvJiYhcyl7dmFyIHk9ci5nZXQoIlhGQSIpLnNsaWNlKCk7eS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpLHkuc3BsaWNlKDMsMCxjKSxwLnNldCgiWEZBIix5KX11JiZwLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7dmFyIG09dC5lbmNyeXB0LGI9bnVsbDttJiYoYj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbikpO3ZhciB3PVtdO2QoaSxwLHcsYiksZi5wdXNoKHtyZWY6aSxkYXRhOncuam9pbigiIil9KX19KSh7eHJlZjpoLGFjcm9Gb3JtOkYsYWNyb0Zvcm1SZWY6QSxoYXNYZmE6dixoYXNYZmFEYXRhc2V0c0VudHJ5OlMseGZhRGF0YXNldHNSZWY6dyxuZWVkQXBwZWFyYW5jZXM6eCxuZXdSZWZzOnN9KSx2JiZmdW5jdGlvbihlKXt2YXIgdD1lLnhmYURhdGEscj1lLnhmYURhdGFzZXRzUmVmLGE9ZS5uZXdSZWZzLHM9ZS54cmVmO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe3ZhciByLGE9bmV3IG8uU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpLHM9bCh0KTt0cnl7Zm9yKHMucygpOyEocj1zLm4oKSkuZG9uZTspe3ZhciBjPXIudmFsdWUueGZhO2lmKGMpe3ZhciB1PWMucGF0aCxmPWMudmFsdWU7aWYodSl7dmFyIGg9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZSgoMCxpLnBhcnNlWEZBUGF0aCkodSksMCk7aD9BcnJheS5pc0FycmF5KGYpP2guY2hpbGROb2Rlcz1mLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKX0pKTpoLmNoaWxkTm9kZXM9W25ldyBvLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixmKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHUpKX19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgZD1bXTtyZXR1cm4gYS5kb2N1bWVudEVsZW1lbnQuZHVtcChkKSxkLmpvaW4oIiIpfShzLmZldGNoSWZSZWYocikuZ2V0U3RyaW5nKCksYSkpO3ZhciBjPXMuZW5jcnlwdDtjJiYodD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbikuZW5jcnlwdFN0cmluZyh0KSk7dmFyIHU9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG4iKSsiPDwgL1R5cGUgL0VtYmVkZGVkRmlsZSAvTGVuZ3RoICIuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTp1fSl9KHt4ZmFEYXRhOlQseGZhRGF0YXNldHNSZWY6dyxuZXdSZWZzOnMseHJlZjpofSk7dmFyIEksRSxqPW5ldyBhLkRpY3QobnVsbCksTT1yLm5ld1JlZixfPXQuYXQoLTEpOzEwPT09X3x8MTM9PT1fPyhJPVtdLEU9dC5sZW5ndGgpOihJPVsiXG4iXSxFPXQubGVuZ3RoKzEpLGouc2V0KCJTaXplIixNLm51bSsxKSxqLnNldCgiUHJldiIsci5zdGFydFhSZWYpLGouc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJmouc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJmouc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJmouc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLHMucHVzaCh7cmVmOk0sZGF0YToiIn0pO3ZhciBMLFI9W1swLDEsNjU1MzVdXSxOPVswLDFdLEQ9MCxCPWwocz1zLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVmLm51bS10LnJlZi5udW19KSkpO3RyeXtmb3IoQi5zKCk7IShMPUIubigpKS5kb25lOyl7dmFyIFU9TC52YWx1ZSwkPVUucmVmLFg9VS5kYXRhO0Q9TWF0aC5tYXgoRCxFKSxSLnB1c2goWzEsRSxNYXRoLm1pbigkLmdlbiw2NTUzNSldKSxFKz1YLmxlbmd0aCxOLnB1c2goJC5udW0sMSksSS5wdXNoKFgpfX1jYXRjaChlKXtCLmUoZSl9ZmluYWxseXtCLmYoKX1pZihqLnNldCgiSW5kZXgiLE4pLEFycmF5LmlzQXJyYXkoci5maWxlSWRzKSYmci5maWxlSWRzLmxlbmd0aD4wKXt2YXIgSD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLGk9W3IudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV0sbz1pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLHM9MCx1PU9iamVjdC52YWx1ZXModC5pbmZvKTtzPHUubGVuZ3RoO3MrKyl7dmFyIGw9dVtzXTtpLnB1c2gobCksbys9bC5sZW5ndGh9Zm9yKHZhciBmPW5ldyBVaW50OEFycmF5KG8pLGg9MCxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO20oZyxoLGYpLGgrPWcubGVuZ3RofXJldHVybigwLG4uYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKGYpKX0oRSxyKTtqLnNldCgiSUQiLFtyLmZpbGVJZHNbMF0sSF0pfXZhciBxPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoRCkvOCksMl0sRz0ocVswXStxWzFdK3FbMl0pKlIubGVuZ3RoO2ouc2V0KCJXIixxKSxqLnNldCgiTGVuZ3RoIixHKSxJLnB1c2goIiIuY29uY2F0KE0ubnVtLCIgIikuY29uY2F0KE0uZ2VuLCIgb2JqXG4iKSkscChqLEksbnVsbCksSS5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgej1JLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLFc9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoRSwiXG4lJUVPRlxuIiksVj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCt6K0crVy5sZW5ndGgpO1Yuc2V0KHQpO3ZhciBZLEssSj10Lmxlbmd0aCxaPWwoSSk7dHJ5e2ZvcihaLnMoKTshKFk9Wi5uKCkpLmRvbmU7KXt2YXIgUT1ZLnZhbHVlO20oUSxKLFYpLEorPVEubGVuZ3RofX1jYXRjaChlKXtaLmUoZSl9ZmluYWxseXtaLmYoKX1mb3IodmFyIGVlPTAsdGU9UjtlZTx0ZS5sZW5ndGg7ZWUrKyl7dmFyIHJlPSgzLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KEs9dGVbZWVdKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KEspfHxmKEssMyl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksbmU9cmVbMF0sYWU9cmVbMV0saWU9cmVbMl07Sj15KG5lLHFbMF0sSixWKSxKPXkoYWUscVsxXSxKLFYpLEo9eShpZSxxWzJdLEosVil9cmV0dXJuIG0oVyxKLFYpLFZ9LHQud3JpdGVEaWN0PXAsdC53cml0ZU9iamVjdD1kO3ZhciBuPXIoMiksYT1yKDEzNCksaT1yKDEzNSksbz1yKDE5NSkscz1yKDEzNiksYz1yKDE5Nik7ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdShlKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBoKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gaChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGQoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/cCh0LHIsbik6dCBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmZyh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9ZnVuY3Rpb24gcChlLHQscil7dC5wdXNoKCI8PCIpO3ZhciBuLGE9bChlLmdldEtleXMoKSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO3QucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG8pLCIgIikpLHYoZS5nZXRSYXcobyksdCxyKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIGcoZSx0LHIpe3AoZS5kaWN0LHQsciksdC5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgbj1lLmdldFN0cmluZygpO251bGwhPT1yJiYobj1yLmVuY3J5cHRTdHJpbmcobikpLHQucHVzaChuLCJcbmVuZHN0cmVhbSIpfWZ1bmN0aW9uIHYoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO3ZhciBuLGE9ITAsaT1sKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTthP2E9ITE6dC5wdXNoKCIgIiksdihvLHQscil9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXQucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9wKGUsdCxyKTplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtP2coZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHUoZSksIiwgcGxlYXNlIGZpbGUgYSBidWcuIikpfWZ1bmN0aW9uIHkoZSx0LHIsbil7Zm9yKHZhciBhPXQrci0xO2E+ci0xO2EtLSluW2FdPTI1NSZlLGU+Pj04O3JldHVybiByK3R9ZnVuY3Rpb24gbShlLHQscil7Zm9yKHZhciBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXJbdCtuXT0yNTUmZS5jaGFyQ29kZUF0KG4pfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgbj1yKDEzNSk7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYShlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9YyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBjKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dShlLHQpOnZvaWQgMH19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGwoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1sKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgcD17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTtmdW5jdGlvbiBnKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4iICI9PT1yfHwiXG4iPT09cnx8IlxyIj09PXJ8fCJcdCI9PT1yfXQuWE1MUGFyc2VyRXJyb3JDb2RlPXA7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6Il9yZXNvbHZlRW50aXRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUscil7aWYoIiN4Ij09PXIuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09ci5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj10O2Z1bmN0aW9uIGEoKXtmb3IoO248ZS5sZW5ndGgmJmcoZSxuKTspKytufWZvcig7bjxlLmxlbmd0aCYmIWcoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3ZhciBpPWUuc3Vic3RyaW5nKHQsbik7Zm9yKGEoKTtuPGUubGVuZ3RoJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dJiYiPyIhPT1lW25dOyl7YSgpO2Zvcih2YXIgbyxzPSIiO248ZS5sZW5ndGgmJiFnKGUsbikmJiI9IiE9PWVbbl07KXMrPWVbbl0sKytuO2lmKGEoKSwiPSIhPT1lW25dKXJldHVybiBudWxsOysrbixhKCk7dmFyIGM9ZVtuXTtpZignIichPT1jJiYiJyIhPT1jKXJldHVybiBudWxsO3ZhciB1PWUuaW5kZXhPZihjLCsrbik7aWYodTwwKXJldHVybiBudWxsO289ZS5zdWJzdHJpbmcobix1KSxyLnB1c2goe25hbWU6cyx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMobyl9KSxuPXUrMSxhKCl9cmV0dXJue25hbWU6aSxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19fSx7a2V5OiJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQ7cjxlLmxlbmd0aCYmIWcoZSxyKSYmIj4iIT09ZVtyXSYmIj8iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO3ZhciBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZnKGUscik7KSsrcn0oKTtmb3IodmFyIGE9cjtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX19LHtrZXk6InBhcnNlWG1sIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOyl7dmFyIHI9dDtpZigiPCI9PT1lW3RdKXt2YXIgbj12b2lkIDA7c3dpdGNoKGVbKytyXSl7Y2FzZSIvIjppZigrK3IsKG49ZS5pbmRleE9mKCI+IixyKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhyLG4pKSxyPW4rMTticmVhaztjYXNlIj8iOisrcjt2YXIgYT10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHIpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhyK2EucGFyc2VkLHIrYS5wYXJzZWQrMikpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3RoaXMub25QaShhLm5hbWUsYS52YWx1ZSkscis9YS5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhyKzEsciszKSl7aWYoKG49ZS5pbmRleE9mKCItLVx4M2UiLHIrMykpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkQ29tbWVudCk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRDZGF0KTt0aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcocis4LG4pKSxyPW4rM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciBpPWUuaW5kZXhPZigiWyIscis4KSxvPSExO2lmKChuPWUuaW5kZXhPZigiPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO2lmKGk+MCYmbj5pKXtpZigobj1lLmluZGV4T2YoIl0+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBjPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1jKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciB1PSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhyK2MucGFyc2VkLHIrYy5wYXJzZWQrMikpdT0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKHIrYy5wYXJzZWQscitjLnBhcnNlZCsxKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uQmVnaW5FbGVtZW50KGMubmFtZSxjLmF0dHJpYnV0ZXMsdSkscis9Yy5wYXJzZWQrKHU/MjoxKX19ZWxzZXtmb3IoO3I8ZS5sZW5ndGgmJiI8IiE9PWVbcl07KXIrKzt2YXIgbD1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhsKSl9dD1yfX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9fSx7a2V5OiJvblBpIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6Im9uQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25DZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25Eb2N0eXBlIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvblRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uQmVnaW5FbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7fX0se2tleToib25FbmRFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt9fV0pLGV9KCk7dC5YTUxQYXJzZXJCYXNlPXY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubm9kZU5hbWU9dCx0aGlzLm5vZGVWYWx1ZT1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfXJldHVybiBkKGUsW3trZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX0se2tleToiY2hpbGRyZW4iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfX0se2tleToiaGFzQ2hpbGROb2RlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9fSx7a2V5OiJzZWFyY2hOb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2Zvcih2YXIgcj1lW3RdLG49W10sYT10aGlzOzspe2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpLGM9MCx1PW8ocyhuLnBvcCgpLDEpWzBdLmNoaWxkTm9kZXMpO3RyeXtmb3IodS5zKCk7IShpPXUubigpKS5kb25lOyl7dmFyIGw9aS52YWx1ZTtpZihyLm5hbWU9PT1sLm5vZGVOYW1lKXtpZihjPT09ci5wb3MpcmV0dXJuIGwuc2VhcmNoTm9kZShlLHQrMSk7YysrfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9dmFyIGY9YS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09ZilyZXR1cm4gZn1pZihhLmNoaWxkTm9kZXMmJjAhPT1hLmNoaWxkTm9kZXMubGVuZ3RoKW4ucHVzaChbYSwwXSksYT1hLmNoaWxkTm9kZXNbMF07ZWxzZXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09bi5sZW5ndGg7KXt2YXIgaD1zKG4ucG9wKCksMiksZD1oWzBdLHA9aFsxXSsxO2lmKHA8ZC5jaGlsZE5vZGVzLmxlbmd0aCl7bi5wdXNoKFtkLHBdKSxhPWQuY2hpbGROb2Rlc1twXTticmVha319aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsfX19fSx7a2V5OiJkdW1wIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7aWYoZS5wdXNoKCI8Ii5jb25jYXQodGhpcy5ub2RlTmFtZSkpLHRoaXMuYXR0cmlidXRlcyl7dmFyIHQscj1vKHRoaXMuYXR0cmlidXRlcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlO2UucHVzaCgiICIuY29uY2F0KGEubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykoYS52YWx1ZSksJyInKSl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX1pZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7dmFyIGkscz1vKHRoaXMuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KWkudmFsdWUuZHVtcChlKX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1lLnB1c2goIjwvIi5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaCgiPiIuY29uY2F0KCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSwiPC8iKS5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsbi5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19XSksZX0oKTt0LlNpbXBsZURPTU5vZGU9eTt2YXIgbT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYShlLHQpfShjLGUpO3ZhciB0LHIsbj0odD1jLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1pKHQpO2lmKHIpe3ZhciBhPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoZSl7dmFyIHQscj1lLmhhc0F0dHJpYnV0ZXMsYT12b2lkIDAhPT1yJiZyLGk9ZS5sb3dlckNhc2VOYW1lLG89dm9pZCAwIT09aSYmaTtyZXR1cm4gZih0aGlzLGMpLCh0PW4uY2FsbCh0aGlzKSkuX2N1cnJlbnRGcmFnbWVudD1udWxsLHQuX3N0YWNrPW51bGwsdC5fZXJyb3JDb2RlPXAuTm9FcnJvcix0Ll9oYXNBdHRyaWJ1dGVzPWEsdC5fbG93ZXJDYXNlTmFtZT1vLHR9cmV0dXJuIGQoYyxbe2tleToicGFyc2VGcm9tU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPXAuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PXAuTm9FcnJvcil7dmFyIHQ9cyh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighZyhlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IHkoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgeSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO3ZhciBuPW5ldyB5KGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107dmFyIHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPW8odC5jaGlsZE5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5wYXJlbnROb2RlPXR9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksY30odik7dC5TaW1wbGVYTUxQYXJzZXI9bX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGN1bGF0ZVNIQTI1Nj10LmNhbGN1bGF0ZU1ENT10LlBERjIwPXQuUERGMTc9dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXQuQVJDRm91ckNpcGhlcj10LkFFUzI1NkNpcGhlcj10LkFFUzEyOENpcGhlcj12b2lkIDAsdC5jYWxjdWxhdGVTSEEzODQ9ayx0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTk3KTtmdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnMoZSx0KX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj11KGUpO2lmKHQpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxsKGUpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWwoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1sKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09bChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLmE9MCx0aGlzLmI9MDtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPXQubGVuZ3RoLGE9MDthPDI1NjsrK2EpclthXT1hO2Zvcih2YXIgaT0wLG89MDtpPDI1NjsrK2kpe3ZhciBzPXJbaV07bz1vK3MrdFtpJW5dJjI1NSxyW2ldPXJbb10scltvXT1zfXRoaXMucz1yfXJldHVybiBkKGUsW3trZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYSxyPXRoaXMuYixuPXRoaXMucyxhPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO288YTsrK28pe3ZhciBzPW5bdD10KzEmMjU1XSxjPW5bcj1yK3MmMjU1XTtuW3RdPWMsbltyXT1zLGlbb109ZVtvXV5uW3MrYyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fV0pLGV9KCk7dC5BUkNGb3VyQ2lwaGVyPXA7dmFyIGcsdix5PShnPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx2PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9MTczMjU4NDE5MyxvPS0yNzE3MzM4Nzkscz0tMTczMjU4NDE5NCxjPTI3MTczMzg3OCx1PXIrNzImLTY0LGw9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKG49MDtuPHI7KytuKWxbbl09ZVt0KytdO2xbbisrXT0xMjg7Zm9yKHZhciBmPXUtODtuPGY7KWxbbisrXT0wO2xbbisrXT1yPDwzJjI1NSxsW24rK109cj4+NSYyNTUsbFtuKytdPXI+PjEzJjI1NSxsW24rK109cj4+MjEmMjU1LGxbbisrXT1yPj4+MjkmMjU1LGxbbisrXT0wLGxbbisrXT0wLGxbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWxbbl18bFtuKzFdPDw4fGxbbisyXTw8MTZ8bFtuKzNdPDwyNDt2YXIgZD1pLHA9byx5PXMsbT1jLGI9dm9pZCAwLHc9dm9pZCAwO2ZvcihhPTA7YTw2NDsrK2Epe2E8MTY/KGI9cCZ5fH5wJm0sdz1hKTphPDMyPyhiPW0mcHx+bSZ5LHc9NSphKzEmMTUpOmE8NDg/KGI9cF55Xm0sdz0zKmErNSYxNSk6KGI9eV4ocHx+bSksdz03KmEmMTUpO3ZhciBrPW0sUz1kK2IrdlthXStoW3ddfDAseD1nW2FdO209eSx5PXAscD1wKyhTPDx4fFM+Pj4zMi14KXwwLGQ9a31pPWkrZHwwLG89bytwfDAscz1zK3l8MCxjPWMrbXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX0pO3QuY2FsY3VsYXRlTUQ1PXk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMuaGlnaD0wfHQsdGhpcy5sb3c9MHxyfXJldHVybiBkKGUsW3trZXk6ImFuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoJj1lLmhpZ2gsdGhpcy5sb3cmPWUubG93fX0se2tleToieG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhpZ2hePWUuaGlnaCx0aGlzLmxvd149ZS5sb3d9fSx7a2V5OiJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fX0se2tleToic2hpZnRSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MCx0aGlzLmhpZ2g9MCk6KHRoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWUsdGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MCl9fSx7a2V5OiJzaGlmdExlZnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzIsdGhpcy5sb3c9MCk6KHRoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMubG93PDw9ZSl9fSx7a2V5OiJyb3RhdGVSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjszMiZlPyhyPXRoaXMubG93LHQ9dGhpcy5oaWdoKToodD10aGlzLmxvdyxyPXRoaXMuaGlnaCksZSY9MzEsdGhpcy5sb3c9dD4+PmV8cjw8MzItZSx0aGlzLmhpZ2g9cj4+PmV8dDw8MzItZX19LHtrZXk6Im5vdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApLHI9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihyKz0xKSx0aGlzLmxvdz0wfHQsdGhpcy5oaWdoPTB8cn19LHtrZXk6ImNvcHlUbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NSxlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTUsZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTUsZVt0KzNdPTI1NSZ0aGlzLmhpZ2gsZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1LGVbdCs1XT10aGlzLmxvdz4+MTYmMjU1LGVbdCs2XT10aGlzLmxvdz4+OCYyNTUsZVt0KzddPTI1NSZ0aGlzLmxvd319LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfXZhciBvPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoPTE3NzkwMzM3MDMsZD0zMTQ0MTM0Mjc3LHA9MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxtPTUyODczNDYzNSxiPTE1NDE0NTkyMjUsdz02NCpNYXRoLmNlaWwoKHUrOSkvNjQpLGs9bmV3IFVpbnQ4QXJyYXkodyk7Zm9yKGw9MDtsPHU7KytsKWtbbF09c1tjKytdO2tbbCsrXT0xMjg7Zm9yKHZhciBTPXctODtsPFM7KWtbbCsrXT0wO2tbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT11Pj4+MjkmMjU1LGtbbCsrXT11Pj4yMSYyNTUsa1tsKytdPXU+PjEzJjI1NSxrW2wrK109dT4+NSYyNTUsa1tsKytdPXU8PDMmMjU1O3ZhciB4LE89bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IobD0wO2w8dzspe2ZvcihmPTA7ZjwxNjsrK2YpT1tmXT1rW2xdPDwyNHxrW2wrMV08PDE2fGtbbCsyXTw8OHxrW2wrM10sbCs9NDtmb3IoZj0xNjtmPDY0OysrZilPW2ZdPTB8KGUoeD1PW2YtMl0sMTcpXmUoeCwxOSleeD4+PjEwKStPW2YtN10raShPW2YtMTVdKStPW2YtMTZdO3ZhciBBPWgsQz1kLEY9cCxQPWcsVD12LEk9eSxFPW0saj1iLE09dm9pZCAwLF89dm9pZCAwO2ZvcihmPTA7Zjw2NDsrK2YpTT1qK2EoVCkrdChULEksRSkrb1tmXStPW2ZdLF89bihBKStyKEEsQyxGKSxqPUUsRT1JLEk9VCxUPVArTXwwLFA9RixGPUMsQz1BLEE9TStffDA7aD1oK0F8MCxkPWQrQ3wwLHA9cCtGfDAsZz1nK1B8MCx2PXYrVHwwLHk9eStJfDAsbT1tK0V8MCxiPWIranwwfXJldHVybiBuZXcgVWludDhBcnJheShbaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHA+PjI0JjI1NSxwPj4xNiYyNTUscD4+OCYyNTUsMjU1JnAsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksbT4+MjQmMjU1LG0+PjE2JjI1NSxtPj44JjI1NSwyNTUmbSxiPj4yNCYyNTUsYj4+MTYmMjU1LGI+PjgmMjU1LDI1NSZiXSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyBtKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IG0oMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBtKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IG0oMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgbSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IG0oMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgbSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBtKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IG0oMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgbSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IG0oNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBtKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IG0oMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgbSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IG0oMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBtKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IG0oMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgbSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IG0oMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBtKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgbSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IG0oMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgbSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBtKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IG0oMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgbSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IG0oMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgbSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBtKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IG0oMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgbSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IG0oMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IG0oNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBtKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgbSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBtKDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IG0oMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgbSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBtKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IG0oMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBtKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IG0oMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgbSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBtKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgbSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBtKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IG0oNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgbSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgbSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IG0oNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBtKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgbSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IG0oOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBtKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IG0oMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgbSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBtKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IG0oMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgbSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBtKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgbSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IG0oMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgbSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBtKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IG0oMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgbSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IG0oMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgbSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBtKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgbSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IG0oMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBtKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBtKDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBtKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgbSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IG0oMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgbSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBtKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IG0oMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBtKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoLGQscCxnLHYseSxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Yj8obD1uZXcgbSgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLGY9bmV3IG0oMTY1NDI3MDI1MCw5MTQxNTA2NjMpLGg9bmV3IG0oMjQzODUyOTM3MCw4MTI3MDI5OTkpLGQ9bmV3IG0oMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLHA9bmV3IG0oMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxnPW5ldyBtKDIzOTQxODAyMzEsMTc1MDYwMzAyNSksdj1uZXcgbSgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLHk9bmV3IG0oMTIwMzA2MjgxMywzMjA0MDc1NDI4KSk6KGw9bmV3IG0oMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxmPW5ldyBtKDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksaD1uZXcgbSgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLGQ9bmV3IG0oMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxwPW5ldyBtKDEzNTk4OTMxMTksMjkxNzU2NTEzNyksZz1uZXcgbSgyNjAwODIyOTI0LDcyNTUxMTE5OSksdj1uZXcgbSg1Mjg3MzQ2MzUsNDIxNTM4OTU0NykseT1uZXcgbSgxNTQxNDU5MjI1LDMyNzAzMzIwOSkpO3ZhciB3LGssUz0xMjgqTWF0aC5jZWlsKCh1KzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoUyk7Zm9yKHc9MDt3PHU7Kyt3KXhbd109c1tjKytdO3hbdysrXT0xMjg7Zm9yKHZhciBPPVMtMTY7dzxPOyl4W3crK109MDt4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109dT4+PjI5JjI1NSx4W3crK109dT4+MjEmMjU1LHhbdysrXT11Pj4xMyYyNTUseFt3KytdPXU+PjUmMjU1LHhbdysrXT11PDwzJjI1NTt2YXIgQT1uZXcgQXJyYXkoODApO2Zvcih3PTA7dzw4MDt3KyspQVt3XT1uZXcgbSgwLDApO3ZhciBDLEYsUD1uZXcgbSgwLDApLFQ9bmV3IG0oMCwwKSxJPW5ldyBtKDAsMCksRT1uZXcgbSgwLDApLGo9bmV3IG0oMCwwKSxNPW5ldyBtKDAsMCksXz1uZXcgbSgwLDApLEw9bmV3IG0oMCwwKSxSPW5ldyBtKDAsMCksTj1uZXcgbSgwLDApLEQ9bmV3IG0oMCwwKSxCPW5ldyBtKDAsMCk7Zm9yKHc9MDt3PFM7KXtmb3Ioaz0wO2s8MTY7KytrKUFba10uaGlnaD14W3ddPDwyNHx4W3crMV08PDE2fHhbdysyXTw8OHx4W3crM10sQVtrXS5sb3c9eFt3KzRdPDwyNHx4W3crNV08PDE2fHhbdys2XTw8OHx4W3crN10sdys9ODtmb3Ioaz0xNjtrPDgwOysraylpKEM9QVtrXSxBW2stMl0sQiksQy5hZGQoQVtrLTddKSxhKEQsQVtrLTE1XSxCKSxDLmFkZChEKSxDLmFkZChBW2stMTZdKTtmb3IoUC5hc3NpZ24obCksVC5hc3NpZ24oZiksSS5hc3NpZ24oaCksRS5hc3NpZ24oZCksai5hc3NpZ24ocCksTS5hc3NpZ24oZyksXy5hc3NpZ24odiksTC5hc3NpZ24oeSksaz0wO2s8ODA7KytrKVIuYXNzaWduKEwpLG4oRCxqLEIpLFIuYWRkKEQpLGUoRCxqLE0sXyxCKSxSLmFkZChEKSxSLmFkZChvW2tdKSxSLmFkZChBW2tdKSxyKE4sUCxCKSx0KEQsUCxULEksQiksTi5hZGQoRCksQz1MLEw9XyxfPU0sTT1qLEUuYWRkKFIpLGo9RSxFPUksST1ULFQ9UCxDLmFzc2lnbihSKSxDLmFkZChOKSxQPUM7bC5hZGQoUCksZi5hZGQoVCksaC5hZGQoSSksZC5hZGQoRSkscC5hZGQoaiksZy5hZGQoTSksdi5hZGQoXykseS5hZGQoTCl9cmV0dXJuIGI/KEY9bmV3IFVpbnQ4QXJyYXkoNDgpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSk6KEY9bmV3IFVpbnQ4QXJyYXkoNjQpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSx2LmNvcHlUbyhGLDQ4KSx5LmNvcHlUbyhGLDU2KSksRn19KCk7ZnVuY3Rpb24gayhlLHQscil7cmV0dXJuIHcoZSx0LHIsITApfXQuY2FsY3VsYXRlU0hBNTEyPXc7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSksZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGM9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7Yz49MTstLWMpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHU9MDt1PDE2OysrdSlpW3VdPXRoaXMuX2ludl9zW2lbdV1dO2Zvcih2YXIgbD0wLGY9MTYqYztsPDE2OysrbCwrK2YpaVtsXV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLGc9dGhpcy5fbWl4W2lbaCsyXV0sdj10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjReZz4+PjE2Xmc8PDE2XnY+Pj4yNF52PDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHk9MDt5PDE2OysreSlpW3ldPXRoaXMuX2ludl9zW2lbeV1dLGlbeV1ePXRbeV07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBjPTE7Yzx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247YysrKXtmb3IodmFyIHU9MDt1PDE2OysrdSlvW3VdPWlbb1t1XV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgbD0wO2w8MTY7bCs9NCl7dmFyIGY9b1tsKzBdLGg9b1tsKzFdLGQ9b1tsKzJdLHA9b1tsKzNdO3I9Zl5oXmRecCxvW2wrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1tsKzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bbCsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW2wrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBnPTAsdj0xNipjO2c8MTY7KytnLCsrdilvW2ddXj10W3ZdfWZvcih2YXIgeT0wO3k8MTY7Kyt5KW9beV09aVtvW3ldXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciBtPTAsYj10aGlzLl9rZXlTaXplO208MTY7KyttLCsrYilvW21dXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgYz10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSx1PTA7dTwxNjsrK3UpY1t1XV49b1t1XTtvPW4saS5wdXNoKGMpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aS5hdCgtMSksaD1mWzE1XTtpZihoPD0xNil7Zm9yKHZhciBkPTE1LHA9MTYtaDtkPj1wOy0tZClpZihmW2RdIT09aCl7aD0wO2JyZWFrfWwtPWgsaVtpLmxlbmd0aC0xXT1mLnN1YmFycmF5KDAsMTYtaCl9fWZvcih2YXIgZz1uZXcgVWludDhBcnJheShsKSx2PTAseT0wLG09aS5sZW5ndGg7djxtOysrdix5Kz0xNilnLnNldChpW3ZdLHkpO3JldHVybiBnfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLG49ZS5sZW5ndGgsYT10aGlzLmJ1ZmZlcixpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYocil0aGlzLml2PXI7ZWxzZXtmb3IodmFyIG89MDtpPDE2JiZvPG47KytvLCsraSlhW2ldPWVbb107aWYoaTwxNilyZXR1cm4gdGhpcy5idWZmZXJMZW5ndGg9aSxuZXcgVWludDhBcnJheSgwKTt0aGlzLml2PWEsZT1lLnN1YmFycmF5KDE2KX1yZXR1cm4gdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMix0aGlzLmRlY3J5cHRCbG9jayhlLHQpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyLGE9dGhpcy5idWZmZXJQb3NpdGlvbixpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKHZhciBvPTA7bzxyOysrbylpZihuW2FdPWVbb10sISgrK2E8MTYpKXtmb3IodmFyIHM9MDtzPDE2OysrcyluW3NdXj10W3NdO3ZhciBjPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9YyxpLnB1c2goYyksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHU9MTYqaS5sZW5ndGgsbD1uZXcgVWludDhBcnJheSh1KSxmPTAsaD0wLGQ9aS5sZW5ndGg7ZjxkOysrZixoKz0xNilsLnNldChpW2ZdLGgpO3JldHVybiBsfX1dKSxlfSgpLE89ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCxuLl9rZXlTaXplPTE2MCxuLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksbi5fa2V5PW4uX2V4cGFuZEtleShlKSxufXJldHVybiBkKHIsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj10aGlzLl9yY29uLG49bmV3IFVpbnQ4QXJyYXkoMTc2KTtuLnNldChlKTtmb3IodmFyIGE9MTYsaT0xO2E8MTc2OysraSl7dmFyIG89blthLTNdLHM9blthLTJdLGM9blthLTFdLHU9blthLTRdO289dFtvXSxzPXRbc10sYz10W2NdLHU9dFt1XSxvXj1yW2ldO2Zvcih2YXIgbD0wO2w8NDsrK2wpblthXT1vXj1uW2EtMTZdLG5bKythXT1zXj1uW2EtMTZdLG5bKythXT1jXj1uW2EtMTZdLG5bKythXT11Xj1uW2EtMTZdLGErK31yZXR1cm4gbn19XSkscn0oeCk7dC5BRVMxMjhDaXBoZXI9Tzt2YXIgQT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMpKS5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LG4uX2tleVNpemU9MjI0LG4uX2tleT1uLl9leHBhbmRLZXkoZSksbn1yZXR1cm4gZChyLFt7a2V5OiJfZXhwYW5kS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zLHI9bmV3IFVpbnQ4QXJyYXkoMjQwKTtyLnNldChlKTtmb3IodmFyIG4sYSxpLG8scz0xLGM9MzIsdT0xO2M8MjQwOysrdSl7YyUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSk6YyUzMj09MCYmKG49cltjLTNdLGE9cltjLTJdLGk9cltjLTFdLG89cltjLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSxuXj1zLChzPDw9MSk+PTI1NiYmKHM9MjU1JigyN15zKSkpO2Zvcih2YXIgbD0wO2w8NDsrK2wpcltjXT1uXj1yW2MtMzJdLHJbKytjXT1hXj1yW2MtMzJdLHJbKytjXT1pXj1yW2MtMzJdLHJbKytjXT1vXj1yW2MtMzJdLGMrK31yZXR1cm4gcn19XSkscn0oeCk7dC5BRVMyNTZDaXBoZXI9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKSxpLnNldCh0LGUubGVuZ3RoKSxpLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTt2YXIgbz1iKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJjaGVja1VzZXJQYXNzd29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfX0se2tleToiZ2V0T3duZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpLGEuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO3ZhciBpPWIoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHtrZXk6ImdldFVzZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19XSksZX0oKTt0LlBERjE3PUM7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtmb3IodmFyIG49Yih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGE9WzBdLGk9MDtpPDY0fHxhLmF0KC0xKT5pLTMyOyl7dmFyIG89ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheShvKSxjPTA7cy5zZXQoZSxjKSxjKz1lLmxlbmd0aCxzLnNldChuLGMpLGMrPW4ubGVuZ3RoLHMuc2V0KHIsYyk7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KDY0Km8pLGw9MCxmPTA7bDw2NDtsKyssZis9byl1LnNldChzLGYpO3ZhciBoPShhPW5ldyBPKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQodSxuLnN1YmFycmF5KDE2LDMyKSkpLnNsaWNlKDAsMTYpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCklMzswPT09aD9uPWIoYSwwLGEubGVuZ3RoKToxPT09aD9uPWsoYSwwLGEubGVuZ3RoKToyPT09aCYmKG49dyhhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KX1yZXR1cm4gZCh0LFt7a2V5OiJoYXNoIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodCxyLG4pfX0se2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSxpKXt2YXIgbz1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7by5zZXQodCwwKSxvLnNldChyLHQubGVuZ3RoKSxvLnNldChhLHQubGVuZ3RoK3IubGVuZ3RoKTt2YXIgcz1lKHQsbyxhKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxpKX19LHtrZXk6ImNoZWNrVXNlclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7aS5zZXQodCwwKSxpLnNldChyLHQubGVuZ3RoKTt2YXIgbz1lKHQsaSxbXSk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJnZXRPd25lcktleSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrNTYpO2kuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCk7dmFyIG89ZSh0LGksbik7cmV0dXJuIG5ldyBBKG8pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fSx7a2V5OiJnZXRVc2VyS2V5Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7YS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKTt2YXIgaT1lKHQsYSxbXSk7cmV0dXJuIG5ldyBBKGkpLmRlY3J5cHRCbG9jayhuLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fV0pLHR9KCl9KCk7dC5QREYyMD1GO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2YodGhpcyxlKSx0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPXQsdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj1yfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9fSx7a2V5OiJkZWNyeXB0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcixyPSgwLG4uc3RyaW5nVG9CeXRlcykoZSk7cmV0dXJuIHI9dC5kZWNyeXB0QmxvY2sociwhMCksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19LHtrZXk6ImVuY3J5cHRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTt2YXIgYT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtlbHNlIGZvcih2YXIgaT0wO2k8MTY7aSsrKWFbaV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7dmFyIG89KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtvPXQuZW5jcnlwdChvLGEpO3ZhciBzPW5ldyBVaW50OEFycmF5KDE2K28ubGVuZ3RoKTtyZXR1cm4gcy5zZXQoYSkscy5zZXQobywxNiksKDAsbi5ieXRlc1RvU3RyaW5nKShzKX12YXIgYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiBjPXQuZW5jcnlwdChjKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpfX1dKSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxjKXt2YXIgdSxsLGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IobD1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDxsOysrZCloW2RdPXJbZF07Zm9yKHU9MDtkPDMyOyloW2QrK109ZVt1KytdO2Zvcih1PTAsbD1uLmxlbmd0aDt1PGw7Kyt1KWhbZCsrXT1uW3VdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsdT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTtvPj00JiYhYyYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBnPXkoaCwwLGQpLHY9cz4+MztpZihvPj0zKWZvcih1PTA7dTw1MDsrK3UpZz15KGcsMCx2KTt2YXIgbSxiPWcuc3ViYXJyYXkoMCx2KTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IodT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTttPW5ldyBwKGIpLmVuY3J5cHRCbG9jayh5KGgsMCxkKSksbD1iLmxlbmd0aDt2YXIgdz1uZXcgVWludDhBcnJheShsKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKHZhciBrPTA7azxsOysrayl3W2tdPWJba11edTttPW5ldyBwKHcpLmVuY3J5cHRCbG9jayhtKX1mb3IodT0wLGw9bS5sZW5ndGg7dTxsOysrdSlpZihhW3VdIT09bVt1XSlyZXR1cm4gbnVsbH1lbHNlIGZvcih1PTAsbD0obT1uZXcgcChiKS5lbmNyeXB0QmxvY2soZSkpLmxlbmd0aDt1PGw7Kyt1KWlmKGFbdV0hPT1tW3VdKXJldHVybiBudWxsO3JldHVybiBifXZhciByPWEuTmFtZS5nZXQoIklkZW50aXR5Iik7ZnVuY3Rpb24gaShlLHQscil7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrOSksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24paVtuXT1yW25dO3JldHVybiBpW24rK109MjU1JmUsaVtuKytdPWU+PjgmMjU1LGlbbisrXT1lPj4xNiYyNTUsaVtuKytdPTI1NSZ0LGlbbisrXT10Pj44JjI1NSxhJiYoaVtuKytdPTExNSxpW24rK109NjUsaVtuKytdPTEwOCxpW24rK109ODQpLHkoaSwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oci5sZW5ndGgrNSwxNikpfWZ1bmN0aW9uIG8oZSx0LHIsbyxzKXtpZighKHQgaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO3ZhciBjLHU9ZS5nZXQodC5uYW1lKTtpZihudWxsIT11JiYoYz11LmdldCgiQ0ZNIikpLCFjfHwiTm9uZSI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChpKHIsbyxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPKGkocixvLHMsITApKX07aWYoIkFFU1YzIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEocyl9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoaSxvLGMpe2YodGhpcyxzKTt2YXIgdT1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKSh1LCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXUubmFtZSx0aGlzLmRpY3Q9aTt2YXIgbD1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHwxIT09bCYmMiE9PWwmJjQhPT1sJiY1IT09bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1sO3ZhciBoPWkuZ2V0KCJMZW5ndGgiKTtpZighaClpZihsPD0zKWg9NDA7ZWxzZXt2YXIgZD1pLmdldCgiQ0YiKSxnPWkuZ2V0KCJTdG1GIik7aWYoZCBpbnN0YW5jZW9mIGEuRGljdCYmZyBpbnN0YW5jZW9mIGEuTmFtZSl7ZC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dmFyIHY9ZC5nZXQoZy5uYW1lKTsoaD12JiZ2LmdldCgiTGVuZ3RoIil8fDEyOCk8NDAmJihoPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHxoPDQwfHxoJTghPTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBtPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMCwzMiksYj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSxrPWkuZ2V0KCJSIiksUz0oND09PWx8fDU9PT1sKSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9Uzt2YXIgeCxPLEE9KDAsbi5zdHJpbmdUb0J5dGVzKShvKTtpZihjKXtpZig2PT09ayl0cnl7Yz0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykoYyl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfXg9KDAsbi5zdHJpbmdUb0J5dGVzKShjKX1pZig1IT09bClPPXQoQSx4LG0sYix3LGssaCxTKTtlbHNle3ZhciBQPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMzIsNDApLFQ9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiTyIpKS5zdWJhcnJheSg0MCw0OCksST0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgzMiw0MCksaj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDQwLDQ4KSxNPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk9FIikpLF89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVUUiKSk7KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiUGVybXMiKSksTz1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyx1LGwsZil7aWYodCl7dmFyIGg9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxoKX1lbHNlIHQ9W107dmFyIGQ7cmV0dXJuKGQ9Nj09PWU/bmV3IEY6bmV3IEMpLmNoZWNrVXNlclBhc3N3b3JkKHQscyxvKT9kLmdldFVzZXJLZXkodCxjLGwpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LG4saSxyKT9kLmdldE93bmVyS2V5KHQsYSxpLHUpOm51bGx9KGsseCxtLFAsVCxJLGIsRSxqLE0sXyl9aWYoIU8mJiFjKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsbi5QYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTtpZighTyYmYyl7dmFyIEw9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KDMyKSxvPTAscz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bzxzOysrbylpW29dPXRbb107Zm9yKHZhciBjPTA7bzwzMjspaVtvKytdPWVbYysrXTt2YXIgdSxsPXkoaSwwLG8pLGY9YT4+MztpZihuPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD15KGwsMCxsLmxlbmd0aCk7aWYobj49Myl7dT1yO3ZhciBoPW5ldyBVaW50OEFycmF5KGYpO2ZvcihjPTE5O2M+PTA7Yy0tKXtmb3IodmFyIGQ9MDtkPGY7KytkKWhbZF09bFtkXV5jO3U9bmV3IHAoaCkuZW5jcnlwdEJsb2NrKHUpfX1lbHNlIHU9bmV3IHAobC5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIHV9KHgsbSxrLGgpO089dChBLEwsbSxiLHcsayxoLFMpfWlmKCFPKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLG4uUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTtpZih0aGlzLmVuY3J5cHRpb25LZXk9TyxsPj00KXt2YXIgUj1pLmdldCgiQ0YiKTtSIGluc3RhbmNlb2YgYS5EaWN0JiYoUi5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9Uix0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19cmV0dXJuIGQocyxbe2tleToiY3JlYXRlQ2lwaGVyVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgUChvKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLG8odGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO3ZhciByPWkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksbj1mdW5jdGlvbigpe3JldHVybiBuZXcgcChyKX07cmV0dXJuIG5ldyBQKG4sbil9fV0pLHN9KCk7cmV0dXJuIHN9KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PVR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmRlY3J5cHQ9cixuLm5leHRDaHVuaz1udWxsLG4uaW5pdGlhbGl6ZWQ9ITEsbn1yZXR1cm4gdD1sLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5pbml0aWFsaXplZD9lPXRoaXMubmV4dENodW5rOihlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMiksdGhpcy5pbml0aWFsaXplZD0hMCksZSYmMCE9PWUubGVuZ3RoKXt0aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3ZhciB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7dmFyIHI9dGhpcy5idWZmZXJMZW5ndGgsbj1yK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKG4pLnNldChlLHIpLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5EZWNyeXB0U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRhbG9nPXZvaWQgMDt2YXIgbj1yKDEzNSksYT1yKDIpLGk9cigxMzQpLG89cigxOTkpLHM9cigxMzYpLGM9cigyMDApLHU9cigxNDMpLGw9cigyMDEpLGY9cigxODgpLGg9cigyMDIpLGQ9cigyMDMpO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHAoZSl9ZnVuY3Rpb24gZygpe2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7dihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7dihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PXAoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1wKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09cChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSksQXJyYXkuaXNBcnJheShlKT9lOm51bGx9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnhyZWY9cix0aGlzLl9jYXREaWN0PXIuZ2V0Q2F0YWxvZ09iaigpLCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdCx0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsLHRoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwLHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXAsdGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyBmLkdsb2JhbEltYWdlQ2FjaGUsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0fXZhciB0LHIsdixPLEEsQyxGO3JldHVybiB0PWUscj1be2tleToidmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihuLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsYS53YXJuKSgiSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAiLmNvbmNhdChlLm5hbWUpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9fSx7a2V5OiJsYW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9fSx7a2V5OiJuZWVkc1JlbmRlcmluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX19LHtrZXk6ImNvbGxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e3ZhciB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9fSx7a2V5OiJhY3JvRm9ybSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfX0se2tleToiYWNyb0Zvcm1SZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7dmFyIHQ9bnVsbDt0cnl7dmFyIHI9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxvPXRoaXMueHJlZi5mZXRjaChlLHIpO2lmKG8gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJm8uZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGM9by5kaWN0LmdldCgiVHlwZSIpLHU9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShjLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkodSwiWE1MIikpe3ZhciBsPSgwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShvLmdldFN0cmluZygpKTtsJiYodD1uZXcgaC5NZXRhZGF0YVBhcnNlcihsKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX19LHtrZXk6Im1hcmtJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9fSx7a2V5OiJfcmVhZE1hcmtJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKHZhciByIGluIHQpe3ZhciBuPWUuZ2V0KHIpOyJib29sZWFuIj09dHlwZW9mIG4mJih0W3JdPW4pfXJldHVybiB0fX0se2tleToic3RydWN0VHJlZVJvb3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9fSx7a2V5OiJfcmVhZFN0cnVjdFRyZWVSb290Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IGQuU3RydWN0VHJlZVJvb3QoZSk7cmV0dXJuIHQuaW5pdCgpLHR9fSx7a2V5OiJ0b3BsZXZlbFBhZ2VzRGljdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJfcmVhZERvY3VtZW50T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2lmKCEoKHQ9dC5nZXRSYXcoIkZpcnN0IikpaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuIG51bGw7dmFyIHI9e2l0ZW1zOltdfSxuPVt7b2JqOnQscGFyZW50OnJ9XSxvPW5ldyBpLlJlZlNldDtvLnB1dCh0KTtmb3IodmFyIHM9dGhpcy54cmVmLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO24ubGVuZ3RoPjA7KXt2YXIgbD1uLnNoaWZ0KCksZj1zLmZldGNoSWZSZWYobC5vYmopO2lmKG51bGwhPT1mKXtpZighZi5oYXMoIlRpdGxlIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO3ZhciBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZixyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTt2YXIgZD1mLmdldCgiVGl0bGUiKSxwPWYuZ2V0KCJGIil8fDAsZz1mLmdldEFycmF5KCJDIiksdj1mLmdldCgiQ291bnQiKSx5PWM7IUFycmF5LmlzQXJyYXkoZyl8fDMhPT1nLmxlbmd0aHx8MD09PWdbMF0mJjA9PT1nWzFdJiYwPT09Z1syXXx8KHk9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihnLDApKTt2YXIgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6eSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHYpP3Y6dm9pZCAwLGJvbGQ6ISEoMiZwKSxpdGFsaWM6ISEoMSZwKSxpdGVtczpbXX07bC5wYXJlbnQuaXRlbXMucHVzaChtKSwodD1mLmdldFJhdygiRmlyc3QiKSlpbnN0YW5jZW9mIGkuUmVmJiYhby5oYXModCkmJihuLnB1c2goe29iajp0LHBhcmVudDptfSksby5wdXQodCkpLCh0PWYuZ2V0UmF3KCJOZXh0IikpaW5zdGFuY2VvZiBpLlJlZiYmIW8uaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6bC5wYXJlbnR9KSxvLnB1dCh0KSl9fXJldHVybiByLml0ZW1zLmxlbmd0aD4wP3IuaXRlbXM6bnVsbH19LHtrZXk6InBlcm1pc3Npb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX19LHtrZXk6Il9yZWFkUGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz1NYXRoLnBvdygyLDMyKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gYS5QZXJtaXNzaW9uRmxhZyl7dmFyIG89YS5QZXJtaXNzaW9uRmxhZ1tuXTt0Jm8mJnIucHVzaChvKX1yZXR1cm4gcn19LHtrZXk6Im9wdGlvbmFsQ29udGVudENvbmZpZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO3ZhciByPXQuZ2V0KCJEIik7aWYoIXIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7dmFyIG89dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTt2YXIgcyxjPVtdLHU9W10sbD1iKG8pO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe3UucHVzaChmKTt2YXIgaD10aGlzLnhyZWYuZmV0Y2hJZlJlZihmKTtjLnB1c2goe2lkOmYudG9TdHJpbmcoKSxuYW1lOiJzdHJpbmciPT10eXBlb2YgaC5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiTmFtZSIpKTpudWxsLGludGVudDoic3RyaW5nIj09dHlwZW9mIGguZ2V0KCJJbnRlbnQiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiSW50ZW50IikpOm51bGx9KX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfShlPXRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcocix1KSkuZ3JvdXBzPWN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfX0se2tleToiX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXt2YXIgcj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbixhPWIoZSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28gaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhvKSYmci5wdXNoKG8udG9TdHJpbmcoKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfX1yZXR1cm4gcn1mdW5jdGlvbiBuKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO3ZhciBuLGE9W10scz1iKGUpO3RyeXtmb3Iocy5zKCk7IShuPXMubigpKS5kb25lOyl7dmFyIHU9bi52YWx1ZTtpZih1IGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXModSkpYy5wdXQodSksYS5wdXNoKHUudG9TdHJpbmcoKSk7ZWxzZXt2YXIgbD1vKHUscik7bCYmYS5wdXNoKGwpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYocj4wKXJldHVybiBhO3ZhciBmLGg9W10sZD1iKHQpO3RyeXtmb3IoZC5zKCk7IShmPWQubigpKS5kb25lOyl7dmFyIHA9Zi52YWx1ZTtjLmhhcyhwKXx8aC5wdXNoKHAudG9TdHJpbmcoKSl9fWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfXJldHVybiBoLmxlbmd0aCYmYS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6aH0pLGF9ZnVuY3Rpb24gbyhlLHQpe2lmKCsrdD51KXJldHVybigwLGEud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpLG51bGw7dmFyIHI9cy5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO3ZhciBpPXMuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIG51bGw7dmFyIG89bihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxhLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfXZhciBzPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCx1PTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19fSx7a2V5OiJzZXRBY3R1YWxOdW1QYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfX0se2tleToiaGFzQWN0dWFsTnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9fSx7a2V5OiJfcGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9wYWdlc0NvdW50IixlKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fX0se2tleToiZGVzdGluYXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByLG49YihlLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT14KHNbMV0pO3UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGMpXT11KX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXgocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByPXgodC5nZXQoZSkpO2lmKHIpcmV0dXJuIHI7dmFyIG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIHM9eCh0LmdldChlKSk7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH19LHtrZXk6Il9yZWFkRGVzdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfX0se2tleToicGFnZUxhYmVscyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfX0se2tleToiX3JlYWRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwscz0iIixjPW5ldyBvLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpLHU9IiIsbD0xLGY9MCxoPXRoaXMubnVtUGFnZXM7ZjxoO2YrKyl7dmFyIGQ9Yy5nZXQoZik7aWYodm9pZCAwIT09ZCl7aWYoIShkIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoZC5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShkLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKGQuaGFzKCJTIikpe3ZhciBwPWQuZ2V0KCJTIik7aWYoIShwIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXAubmFtZX1lbHNlIHI9bnVsbDtpZihkLmhhcygiUCIpKXt2YXIgZz1kLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7cz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShnKX1lbHNlIHM9IiI7aWYoZC5oYXMoIlN0Iikpe3ZhciB2PWQuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih2KSYmdj49MSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bD12fWVsc2UgbD0xfXN3aXRjaChyKXtjYXNlIkQiOnU9bDticmVhaztjYXNlIlIiOmNhc2UiciI6dT0oMCxuLnRvUm9tYW5OdW1lcmFscykobCwiciI9PT1yKTticmVhaztjYXNlIkEiOmNhc2UiYSI6dmFyIHk9ImEiPT09cj85Nzo2NSxtPWwtMTt1PVN0cmluZy5mcm9tQ2hhckNvZGUoeSttJTI2KS5yZXBlYXQoTWF0aC5mbG9vcihtLzI2KSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO3U9IiJ9dFtmXT1zK3UsbCsrfXJldHVybiB0fX0se2tleToicGFnZUxheW91dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKSx0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfX0se2tleToicGFnZU1vZGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfX0se2tleToidmlld2VyUHJlZmVyZW5jZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9jYXREaWN0LmdldCgiVmlld2VyUHJlZmVyZW5jZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7dmFyIHIsbj1udWxsLG89Yih0LmdldEtleXMoKSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9dC5nZXQocyksdT12b2lkIDA7c3dpdGNoKHMpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBjJiYodT1jKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihjIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChjLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6dT1jLm5hbWU7YnJlYWs7ZGVmYXVsdDp1PSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJTI9PTAmJmMuZXZlcnkoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmdD4wJiYoMD09PXJ8fHQ+PW5bci0xXSkmJnQ8PWUubnVtUGFnZXN9KSkmJih1PWMpO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPjAmJih1PWMpO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQocywiLiIpKTtjb250aW51ZX12b2lkIDAhPT11PyhufHwobj1PYmplY3QuY3JlYXRlKG51bGwpKSxuW3NdPXUpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChjLCIuIikpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG4pfX0se2tleToib3BlbkFjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpO24uc2V0KCJBIix0KTt2YXIgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0Om4scmVzdWx0T2JqOm99KSxBcnJheS5pc0FycmF5KG8uZGVzdCk/ci5kZXN0PW8uZGVzdDpvLmFjdGlvbiYmKHIuYWN0aW9uPW8uYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyLmRlc3Q9dCk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLGEub2JqZWN0U2l6ZSkocik+MD9yOm51bGwpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpLHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXt2YXIgcixuPWIobmV3IG8uTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdLGY9bmV3IGwuRmlsZVNwZWModSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyldPWYuc2VyaWFsaXphYmxlfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImF0dGFjaG1lbnRzIix0KX19LHtrZXk6InhmYUltYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7dmFyIHIsbj1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdO3R8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyksdSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX19LHtrZXk6Il9jb2xsZWN0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlLHIpe2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QmJigwLGkuaXNOYW1lKShyLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe3ZhciBuPXIuZ2V0KCJKUyIpO2lmKG4gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pbj1uLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybjtudWxsPT09dCYmKHQ9bmV3IE1hcCksbj0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShuKS5yZXBsYWNlKC9cdTAwMDAvZywiIiksdC5zZXQoZSxuKX19aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG4sYz1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJKYXZhU2NyaXB0IiksdGhpcy54cmVmKS5nZXRBbGwoKSk7dHJ5e2ZvcihjLnMoKTshKG49Yy5uKCkpLmRvbmU7KXt2YXIgdT1tKG4udmFsdWUsMiksbD11WzBdLGY9dVsxXTtyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGwpLGYpfX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19dmFyIGg9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gaCYmcigiT3BlbkFjdGlvbiIsaCksdH19LHtrZXk6ImphdmFTY3JpcHQiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsdD9mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBrKGUpfShlPXQudmFsdWVzKCkpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx3KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpOm51bGwpfX0se2tleToianNBY3Rpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpLHQ9KDAsbi5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3QsYS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHIsaT1iKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89bShyLnZhbHVlLDIpLHM9b1swXSxjPW9bMV07cyBpbiB0P3Rbc10ucHVzaChjKTp0W3NdPVtjXX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTooRj15KGcoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG87cmV0dXJuIGcoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgMjpuPWUuc2VudCxhPWIobiksZS5wcmV2PTQsYS5zKCk7Y2FzZSA2OmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTM7YnJlYWt9aWYoKG89aS52YWx1ZSkubG9hZGVkTmFtZSE9PXQpe2UubmV4dD0xMTticmVha31yZXR1cm4gby5mYWxsYmFjayhyKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMTplLm5leHQ9NjticmVhaztjYXNlIDEzOmUubmV4dD0xODticmVhaztjYXNlIDE1OmUucHJldj0xNSxlLnQwPWUuY2F0Y2goNCksYS5lKGUudDApO2Nhc2UgMTg6cmV0dXJuIGUucHJldj0xOCxhLmYoKSxlLmZpbmlzaCgxOCk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzQsMTUsMTgsMjFdXSl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNsZWFudXAiLHZhbHVlOihDPXkoZygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpPWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubGVuZ3RoPjAmJnZvaWQgMCE9PWlbMF0mJmlbMF0sKDAsYy5jbGVhckdsb2JhbENhY2hlcykoKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIodCksdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKSx0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCksdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCksZS5uZXh0PTgsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgODpyPWUuc2VudCxuPWIocik7dHJ5e2ZvcihuLnMoKTshKGE9bi5uKCkpLmRvbmU7KWRlbGV0ZSBhLnZhbHVlLmRpY3QuY2FjaGVLZXl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6KEE9eShnKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8scyxjLHUsbCxmLGgsZCxwLHYseSxtLGIsdztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnI9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLG49bmV3IGkuUmVmU2V0LChvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpKWluc3RhbmNlb2YgaS5SZWYmJm4ucHV0KG8pLHM9dGhpcy54cmVmLGM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsdT10aGlzLnBhZ2VJbmRleENhY2hlLGw9MDtjYXNlIDY6aWYoIXIubGVuZ3RoKXtlLm5leHQ9Njc7YnJlYWt9aWYoISgoZj1yLnBvcCgpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9MzQ7YnJlYWt9aWYoISgoaD1jLmdldChmKSk+PTAmJmwraDw9dCkpe2UubmV4dD0xMzticmVha31yZXR1cm4gbCs9aCxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgMTM6aWYoIW4uaGFzKGYpKXtlLm5leHQ9MTU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2Nhc2UgMTU6cmV0dXJuIG4ucHV0KGYpLGUubmV4dD0xOCxzLmZldGNoQXN5bmMoZik7Y2FzZSAxODppZighKChkPWUuc2VudClpbnN0YW5jZW9mIGkuRGljdCkpe2UubmV4dD0zMjticmVha31pZighKChwPWQuZ2V0UmF3KCJUeXBlIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5uZXh0PTI0LHMuZmV0Y2hBc3luYyhwKTtjYXNlIDI0OnA9ZS5zZW50O2Nhc2UgMjU6aWYoISgwLGkuaXNOYW1lKShwLCJQYWdlIikmJmQuaGFzKCJLaWRzIikpe2UubmV4dD0zMjticmVha31pZihjLmhhcyhmKXx8Yy5wdXQoZiwxKSx1LmhhcyhmKXx8dS5wdXQoZixsKSxsIT09dCl7ZS5uZXh0PTMwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbZCxmXSk7Y2FzZSAzMDpyZXR1cm4gbCsrLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzMjpyZXR1cm4gci5wdXNoKGQpLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzNDppZihmIGluc3RhbmNlb2YgaS5EaWN0KXtlLm5leHQ9MzY7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjYXNlIDM2OmlmKHY9Zi5vYmpJZCwhKCh5PWYuZ2V0UmF3KCJDb3VudCIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUubmV4dD00MSxzLmZldGNoQXN5bmMoeSk7Y2FzZSA0MTp5PWUuc2VudDtjYXNlIDQyOmlmKCEoTnVtYmVyLmlzSW50ZWdlcih5KSYmeT49MCkpe2UubmV4dD00NzticmVha31pZih2JiYhYy5oYXModikmJmMucHV0KHYseSksIShsK3k8PXQpKXtlLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGwrPXksZS5hYnJ1cHQoImNvbnRpbnVlIiw2KTtjYXNlIDQ3OmlmKCEoKG09Zi5nZXRSYXcoIktpZHMiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUyO2JyZWFrfXJldHVybiBlLm5leHQ9NTEscy5mZXRjaEFzeW5jKG0pO2Nhc2UgNTE6bT1lLnNlbnQ7Y2FzZSA1MjppZihBcnJheS5pc0FycmF5KG0pKXtlLm5leHQ9NjQ7YnJlYWt9aWYoISgoYj1mLmdldFJhdygiVHlwZSIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NTg7YnJlYWt9cmV0dXJuIGUubmV4dD01NyxzLmZldGNoQXN5bmMoYik7Y2FzZSA1NzpiPWUuc2VudDtjYXNlIDU4OmlmKCEoMCxpLmlzTmFtZSkoYiwiUGFnZSIpJiZmLmhhcygiS2lkcyIpKXtlLm5leHQ9NjM7YnJlYWt9aWYobCE9PXQpe2UubmV4dD02MTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsW2YsbnVsbF0pO2Nhc2UgNjE6cmV0dXJuIGwrKyxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgNjM6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIik7Y2FzZSA2NDpmb3Iodz1tLmxlbmd0aC0xO3c+PTA7dy0tKXIucHVzaChtW3ddKTtlLm5leHQ9NjticmVhaztjYXNlIDY3OnRocm93IG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdCh0LCIgbm90IGZvdW5kLiIpKTtjYXNlIDY4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFsbFBhZ2VEaWN0cyIsdmFsdWU6KE89eShnKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4PWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnA9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG4uWFJlZkVudHJ5RXhjZXB0aW9uJiYhdCl0aHJvdyBlO3QmJnImJjA9PT1oJiYoKDAsYS53YXJuKSgnZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJy5jb25jYXQoZSwnIi4nKSksZT1pLkRpY3QuZW1wdHkpLHUuc2V0KGgrKyxbZSxudWxsXSl9LGQ9ZnVuY3Rpb24oZSx0KXt0JiYhZi5oYXModCkmJmYucHV0KHQsaCksdS5zZXQoaCsrLFtlLHRdKX0sdD14Lmxlbmd0aD4wJiZ2b2lkIDAhPT14WzBdJiZ4WzBdLHI9dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzLG89W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsKGM9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIikpaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQoYyksdT1uZXcgTWFwLGw9dGhpcy54cmVmLGY9dGhpcy5wYWdlSW5kZXhDYWNoZSxoPTA7Y2FzZSAxMDppZighKG8ubGVuZ3RoPjApKXtlLm5leHQ9NzA7YnJlYWt9aWYodj1vLmF0KC0xKSx5PXYuY3VycmVudE5vZGUsbT12LnBvc0luS2lkcywhKChiPXkuZ2V0UmF3KCJLaWRzIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5wcmV2PTE1LGUubmV4dD0xOCxsLmZldGNoQXN5bmMoYik7Y2FzZSAxODpiPWUuc2VudCxlLm5leHQ9MjU7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gZS5wcmV2PTIxLGUudDA9ZS5jYXRjaCgxNSkscChlLnQwKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDI1OmlmKEFycmF5LmlzQXJyYXkoYikpe2UubmV4dD0yODticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAyODppZighKG0+PWIubGVuZ3RoKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBvLnBvcCgpLGUuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgMzE6aWYodz1iW21dLGs9dm9pZCAwLCEodyBpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUwO2JyZWFrfWlmKCFzLmhhcyh3KSl7ZS5uZXh0PTM3O2JyZWFrfXJldHVybiBwKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAzNzpyZXR1cm4gcy5wdXQodyksZS5wcmV2PTM4LGUubmV4dD00MSxsLmZldGNoQXN5bmModyk7Y2FzZSA0MTprPWUuc2VudCxlLm5leHQ9NDg7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gZS5wcmV2PTQ0LGUudDE9ZS5jYXRjaCgzOCkscChlLnQxKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDQ4OmUubmV4dD01MTticmVhaztjYXNlIDUwOms9dztjYXNlIDUxOmlmKGsgaW5zdGFuY2VvZiBpLkRpY3Qpe2UubmV4dD01NDticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDU0OmlmKCEoKFM9ay5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTY2O2JyZWFrfXJldHVybiBlLnByZXY9NTYsZS5uZXh0PTU5LGwuZmV0Y2hBc3luYyhTKTtjYXNlIDU5OlM9ZS5zZW50LGUubmV4dD02NjticmVhaztjYXNlIDYyOnJldHVybiBlLnByZXY9NjIsZS50Mj1lLmNhdGNoKDU2KSxwKGUudDIpLGUuYWJydXB0KCJicmVhayIsNzApO2Nhc2UgNjY6KDAsaS5pc05hbWUpKFMsIlBhZ2UiKXx8IWsuaGFzKCJLaWRzIik/ZChrLHcgaW5zdGFuY2VvZiBpLlJlZj93Om51bGwpOm8ucHVzaCh7Y3VycmVudE5vZGU6ayxwb3NJbktpZHM6MH0pLHYucG9zSW5LaWRzKyssZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxNSwyMV0sWzM4LDQ0XSxbNTYsNjJdXSl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTt2YXIgbj10aGlzLnhyZWYsbz0wO3JldHVybiBmdW5jdGlvbiByKHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcixvPTA7cmV0dXJuIG4uZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihuKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKG4sIlBhZ2UiKSYmIShuIGluc3RhbmNlb2YgaS5EaWN0JiYhbi5oYXMoIlR5cGUiKSYmbi5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighbilyZXR1cm4gbnVsbDtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiByPW4uZ2V0UmF3KCJQYXJlbnQiKSxuLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcyxjPVtdLHU9ITEsbD1iKGUpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZighKGYgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKGYsdCkpe3U9ITA7YnJlYWt9Yy5wdXNoKG4uZmV0Y2hBc3luYyhmKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9vKz1lLmdldCgiQ291bnQiKTpvKyt9KSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1pZighdSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bbyxyXX0pKX0pKX0ocykudGhlbigoZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIHQucGFnZUluZGV4Q2FjaGUucHV0KGUsbyksbzt2YXIgYT1tKG4sMiksaT1hWzBdLHM9YVsxXTtyZXR1cm4gbys9aSxyKHMpfSkpfShlKX19LHtrZXk6ImJhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt2YXIgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKHIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHIuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX19XSx2PVt7a2V5OiJwYXJzZURlc3REaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlc3REaWN0O2lmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09cChyKSl7dmFyIG8sYyx1PWUuZG9jQmFzZVVybHx8bnVsbCxsPWUuZG9jQXR0YWNobWVudHN8fG51bGwsZj10LmdldCgiQSIpO2lmKGYgaW5zdGFuY2VvZiBpLkRpY3R8fCh0LmhhcygiRGVzdCIpP2Y9dC5nZXQoIkRlc3QiKTooZj10LmdldCgiQUEiKSlpbnN0YW5jZW9mIGkuRGljdCYmKGYuaGFzKCJEIik/Zj1mLmdldCgiRCIpOmYuaGFzKCJVIikmJihmPWYuZ2V0KCJVIikpKSksZiBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB2b2lkKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3ZhciBkPWgubmFtZTtzd2l0Y2goZCl7Y2FzZSJSZXNldEZvcm0iOnZhciBnLHY9Zi5nZXQoIkZsYWdzIikseT0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiB2P3Y6MCkpLG09W10sdz1bXSxrPWIoZi5nZXQoIkZpZWxkcyIpfHxbXSk7dHJ5e2ZvcihrLnMoKTshKGc9ay5uKCkpLmRvbmU7KXt2YXIgUz1nLnZhbHVlO1MgaW5zdGFuY2VvZiBpLlJlZj93LnB1c2goUy50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIFMmJm0ucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShTKSl9fWNhdGNoKGUpe2suZShlKX1maW5hbGx5e2suZigpfXIucmVzZXRGb3JtPXtmaWVsZHM6bSxyZWZzOncsaW5jbHVkZTp5fTticmVhaztjYXNlIlVSSSI6KG89Zi5nZXQoIlVSSSIpKWluc3RhbmNlb2YgaS5OYW1lJiYobz0iLyIrby5uYW1lKTticmVhaztjYXNlIkdvVG8iOmM9Zi5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6dmFyIHg9Zi5nZXQoIkYiKTt4IGluc3RhbmNlb2YgaS5EaWN0P289eC5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIHgmJihvPXgpO3ZhciBPPWYuZ2V0KCJEIik7aWYoTyYmKE8gaW5zdGFuY2VvZiBpLk5hbWUmJihPPU8ubmFtZSksInN0cmluZyI9PXR5cGVvZiBvKSl7dmFyIEE9by5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgTz9vPUErIiMiK086QXJyYXkuaXNBcnJheShPKSYmKG89QSsiIyIrSlNPTi5zdHJpbmdpZnkoTykpfXZhciBDPWYuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBDJiYoci5uZXdXaW5kb3c9Qyk7YnJlYWs7Y2FzZSJHb1RvRSI6dmFyIEYsUD1mLmdldCgiVCIpO2lmKGwmJlAgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBUPVAuZ2V0KCJSIiksST1QLmdldCgiTiIpOygwLGkuaXNOYW1lKShULCJDIikmJiJzdHJpbmciPT10eXBlb2YgSSYmKEY9bFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShJKV0pfUY/ci5hdHRhY2htZW50PUY6KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6dmFyIEU9Zi5nZXQoIk4iKTtFIGluc3RhbmNlb2YgaS5OYW1lJiYoci5hY3Rpb249RS5uYW1lKTticmVhaztjYXNlIlNldE9DR1N0YXRlIjp2YXIgaj1mLmdldCgiU3RhdGUiKSxNPWYuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoail8fDA9PT1qLmxlbmd0aClicmVhazt2YXIgXyxMPVtdLFI9YihqKTt0cnl7Zm9yKFIucygpOyEoXz1SLm4oKSkuZG9uZTspe3ZhciBOPV8udmFsdWU7aWYoTiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goTi5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkwucHVzaChOLm5hbWUpfWVsc2UgTiBpbnN0YW5jZW9mIGkuUmVmJiZMLnB1c2goTi50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9aWYoTC5sZW5ndGghPT1qLmxlbmd0aClicmVhaztyLnNldE9DR1N0YXRlPXtzdGF0ZTpMLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgTXx8TX07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgRCxCPWYuZ2V0KCJKUyIpO0IgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0/RD1CLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQiYmKEQ9Qik7dmFyIFU9RCYmKDAsbi5yZWNvdmVySnNVUkwpKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKEQpKTtpZihVKXtvPVUudXJsLHIubmV3V2luZG93PVUubmV3V2luZG93O2JyZWFrfWRlZmF1bHQ6aWYoIkphdmFTY3JpcHQiPT09ZHx8IlN1Ym1pdEZvcm0iPT09ZClicmVhazsoMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJy5jb25jYXQoZCwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGM9dC5nZXQoIkRlc3QiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgJD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKG8sdSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pOyQmJihyLnVybD0kLmhyZWYpLHIudW5zYWZlVXJsPW99YyYmKGMgaW5zdGFuY2VvZiBpLk5hbWUmJihjPWMubmFtZSksInN0cmluZyI9PXR5cGVvZiBjP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTpBcnJheS5pc0FycmF5KGMpJiYoci5kZXN0PWMpKX1lbHNlKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIil9ZWxzZSgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIil9fV0sciYmUyh0LnByb3RvdHlwZSxyKSx2JiZTKHQsdiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkNhdGFsb2c9T30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7dmFyIG49cigxMzQpLGE9cigyKTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxvKGUsdCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1jKGUpO2lmKHQpe3ZhciBhPWModGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09dSh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09dShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXUobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT11KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2godGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBwKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KXt2YXIgbz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZihvIGluc3RhbmNlb2Ygbi5EaWN0KWlmKG8uaGFzKCJLaWRzIikpe3ZhciBzPW8uZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkocykpY29udGludWU7dmFyIGMsdT1sKHMpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZihyLmhhcyhmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaChmKSxyLnB1dChmKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fWVsc2V7dmFyIGg9by5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IodmFyIGQ9MCxwPWgubGVuZ3RoO2Q8cDtkKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihoW2RdKSx0LmZldGNoSWZSZWYoaFtkKzFdKSl9fXJldHVybiBlfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2Zvcih2YXIgdD10aGlzLnhyZWYscj10LmZldGNoSWZSZWYodGhpcy5yb290KSxuPTA7ci5oYXMoIktpZHMiKTspe2lmKCsrbj4xMClyZXR1cm4oMCxhLndhcm4pKCdTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSksbnVsbDt2YXIgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2Zvcih2YXIgbz0wLHM9aS5sZW5ndGgtMTtvPD1zOyl7dmFyIGM9bytzPj4xLHU9dC5mZXRjaElmUmVmKGlbY10pLGw9dS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGxbMF0pKXM9Yy0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihsWzFdKSkpe3I9dTticmVha31vPWMrMX19aWYobz5zKXJldHVybiBudWxsfXZhciBmPXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKHZhciBoPTAsZD1mLmxlbmd0aC0yO2g8PWQ7KXt2YXIgcD1oK2Q+PjEsZz1wKygxJnApLHY9dC5mZXRjaElmUmVmKGZbZ10pO2lmKGU8dilkPWctMjtlbHNle2lmKCEoZT52KSlyZXR1cm4gdC5mZXRjaElmUmVmKGZbZysxXSk7aD1nKzJ9fXJldHVybiBudWxsfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOYW1lcyIpfXJldHVybiBwKHIpfShnKTt0Lk5hbWVUcmVlPXY7dmFyIHk9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOdW1zIil9cmV0dXJuIHAocil9KGcpO3QuTnVtYmVyVHJlZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24oKXsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpLCgwLGEuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgbj1yKDEzNCksYT1yKDE2OSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTM0KTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHQgaW5zdGFuY2VvZiBpLkRpY3QmJih0aGlzLnhyZWY9cix0aGlzLnJvb3Q9dCx0LmhhcygiRlMiKSYmKHRoaXMuZnM9dC5nZXQoIkZTIikpLHRoaXMuZGVzY3JpcHRpb249dC5oYXMoIkRlc2MiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiRGVzYyIpKToiIix0LmhhcygiUkYiKSYmKDAsbi53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksdGhpcy5jb250ZW50QXZhaWxhYmxlPSEwLHQuaGFzKCJFRiIpfHwodGhpcy5jb250ZW50QXZhaWxhYmxlPSExLCgwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9Yyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1jKHRoaXMucm9vdC5nZXQoIkVGIikpKTt2YXIgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7dmFyIHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgYS5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLG4ud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuRmlsZVNwZWM9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDE5NSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1vKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGkscz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBzKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gcyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT10LHImJnRoaXMuX3BhcnNlKHIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX3JlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj1bXSxhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtvPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpOm4ucHVzaCgiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IituLmpvaW4oIiIpfSkpfX0se2tleToiX2dldFNlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4icmRmOmxpIj09PWUubm9kZU5hbWV9KSl9fSx7a2V5OiJfcGFyc2VBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNDaGlsZE5vZGVzKCkpe3ZhciB0PShuPWUuY2hpbGROb2RlcyxhPTEsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0obixhKXx8byhuLGEpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpWzBdLHI9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudC50cmltKCl9KSkpfXZhciBuLGF9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpZm9yKHQ9dC5maXJzdENoaWxkO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZztpZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSl7dmFyIHIsbj1pKHQuY2hpbGROb2Rlcyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO2lmKCJyZGY6ZGVzY3JpcHRpb24iPT09YS5ub2RlTmFtZSl7dmFyIG8scz1pKGEuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9Yy5ub2RlTmFtZTtzd2l0Y2godSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkoYyk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KHUsYy50ZXh0Q29udGVudC50cmltKCkpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX19fX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1dKSYmYyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuTWV0YWRhdGFQYXJzZXI9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE5OSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGg9IlBBR0VfQ09OVEVOVCIsZD0iU1RSRUFNX0NPTlRFTlQiLHA9Ik9CSkVDVCIsZz0iRUxFTUVOVCIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMuZGljdD10LHRoaXMucm9sZU1hcD1uZXcgTWFwfXJldHVybiBmKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZWFkUm9sZU1hcCgpfX0se2tleToicmVhZFJvbGVNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ciBpbnN0YW5jZW9mIG4uTmFtZSYmZS5yb2xlTWFwLnNldCh0LHIubmFtZSl9KSl9fV0pLGV9KCk7dC5TdHJ1Y3RUcmVlUm9vdD12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnRyZWU9dCx0aGlzLmRpY3Q9cix0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1yZXR1cm4gZihlLFt7a2V5OiJyb2xlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2Ygbi5OYW1lP2UubmFtZToiIixyPXRoaXMudHJlZS5yb290O3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH19LHtrZXk6InBhcnNlS2lkcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7dmFyIHI9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLGk9byhyKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsYz10aGlzLnBhcnNlS2lkKGUscyk7YyYmdGhpcy5raWRzLnB1c2goYyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX1lbHNle3ZhciB1PXRoaXMucGFyc2VLaWQoZSxyKTt1JiZ0aGlzLmtpZHMucHVzaCh1KX19fSx7a2V5OiJwYXJzZUtpZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IG0oe3R5cGU6aCxtY2lkOnQscGFnZU9iaklkOmV9KTt2YXIgcj1udWxsO2lmKHQgaW5zdGFuY2VvZiBuLlJlZj9yPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihyPXQpLCFyKXJldHVybiBudWxsO3ZhciBhPXIuZ2V0UmF3KCJQZyIpO2EgaW5zdGFuY2VvZiBuLlJlZiYmKGU9YS50b1N0cmluZygpKTt2YXIgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpkLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpwLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBtKHt0eXBlOmcsZGljdDpyfSl9fV0pLGV9KCksbT1mKChmdW5jdGlvbiBlKHQpe3ZhciByPXQudHlwZSxuPXQuZGljdCxhPXZvaWQgMD09PW4/bnVsbDpuLGk9dC5tY2lkLG89dm9pZCAwPT09aT9udWxsOmkscz10LnBhZ2VPYmpJZCxjPXZvaWQgMD09PXM/bnVsbDpzLGw9dC5yZWZPYmpJZCxmPXZvaWQgMD09PWw/bnVsbDpsO3UodGhpcyxlKSx0aGlzLnR5cGU9cix0aGlzLmRpY3Q9YSx0aGlzLm1jaWQ9byx0aGlzLnBhZ2VPYmpJZD1jLHRoaXMucmVmT2JqSWQ9Zix0aGlzLnBhcmVudE5vZGU9bnVsbH0pKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnJvb3Q9dCx0aGlzLnJvb3REaWN0PXQ/dC5kaWN0Om51bGwsdGhpcy5wYWdlRGljdD1yLHRoaXMubm9kZXM9W119cmV0dXJuIGYoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0KXt2YXIgZT10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKGUpe3ZhciB0PXRoaXMucGFnZURpY3QuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7dmFyIHI9bmV3IGkuTnVtYmVyVHJlZShlLHRoaXMucm9vdERpY3QueHJlZikuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLHM9bmV3IE1hcCxjPW8ocik7dHJ5e2ZvcihjLnMoKTshKGE9Yy5uKCkpLmRvbmU7KXt2YXIgdT1hLnZhbHVlO3UgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaCh1KSxzKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19fX19LHtrZXk6ImFkZE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3ZhciBpPW5ldyB5KHRoaXMsZSk7dC5zZXQoZSxpKTt2YXIgcz1lLmdldCgiUCIpO2lmKCFzfHwoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSlyZXR1cm4gdGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxpKXx8dC5kZWxldGUoZSksaTt2YXIgYz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIWMpcmV0dXJuIGk7dmFyIHUsbD0hMSxmPW8oYy5raWRzKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC50eXBlPT09ZyYmaC5kaWN0PT09ZSYmKGgucGFyZW50Tm9kZT1pLGw9ITApfX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX1yZXR1cm4gbHx8dC5kZWxldGUoZSksaX19LHtrZXk6ImFkZFRvcExldmVsTm9kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJvb3REaWN0LmdldCgiSyIpO2lmKCFyKXJldHVybiExO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpcmV0dXJuIHIub2JqSWQ9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1swXT10LCEwKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMDtmb3IodmFyIGE9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO28mJm8udG9TdHJpbmcoKT09PWUub2JqSWQmJih0aGlzLm5vZGVzW2ldPXQsYT0hMCl9cmV0dXJuIGF9fSx7a2V5OiJzZXJpYWxpemFibGUiLGdldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihuPjQwKSgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtlbHNle3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTt2YXIgcz10LmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIHMmJihpLmFsdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShzKSk7dmFyIGM9dC5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgYyYmKGkubGFuZz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKSk7dmFyIHUsbD1vKHQua2lkcyk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlLHY9Zi50eXBlPT09Zz9mLnBhcmVudE5vZGU6bnVsbDt2P2UodixpLG4rMSk6Zi50eXBlPT09aHx8Zi50eXBlPT09ZD9pLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOiJwYWdlIi5jb25jYXQoZi5wYWdlT2JqSWQsIl9tY2lkIikuY29uY2F0KGYubWNpZCl9KTpmLnR5cGU9PT1wJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6Zi5yZWZPYmpJZH0pfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX19fXZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO3ZhciByLG49byh0aGlzLm5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aSYmZShpLHQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19XSksZX0oKTt0LlN0cnVjdFRyZWVQYWdlPWJ9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIGE9cigxMzQpLGk9cigxMzYpLG89cigxMzUpLHM9cigyKTtmdW5jdGlvbiBjKCl7Yz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LGE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2woe30sIiIpfWNhdGNoKGUpe2w9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYobnx8W10pO3JldHVybiBhKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gaChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1mO3ZhciBkPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2woeSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixvKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bChlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gaShhLG8scyxjKXt2YXIgdT1oKGVbYV0sZSxvKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgbD11LmFyZyxmPWwudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1uKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2koIm5leHQiLGUscyxjKX0pLChmdW5jdGlvbihlKXtpKCJ0aHJvdyIsZSxzLGMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXtsLnZhbHVlPWUscyhsKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gaSgidGhyb3ciLGUscyxjKX0pKX1jKHUuYXJnKX12YXIgbzthKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7aShlLHIsdCxuKX0pKX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1kKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9aChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1kKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxkO3ZhciBhPWgobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxkO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGQpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LGEodywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLGEodiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9bCh2LHUsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixsKGUsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxsKFMucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGYodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxsKHcsdSwiR2VuZXJhdG9yIiksbCh3LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbCh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGR9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxkfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxkfX0sZX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjt2YXIgcixuLG89aChlKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7KChuPXMpaW5zdGFuY2VvZiBhLlJlZnx8biBpbnN0YW5jZW9mIGEuRGljdHx8biBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShuKSkmJnQucHVzaChzKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kaWN0PXQsdGhpcy5rZXlzPXIsdGhpcy54cmVmPW4sdGhpcy5yZWZTZXQ9bnVsbH12YXIgdCxyLG4sdTtyZXR1cm4gdD1lLHI9W3trZXk6ImxvYWQiLHZhbHVlOih1PWwoYygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saSxvLHMsdTtyZXR1cm4gYygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHZvaWQgMCk7Y2FzZSAyOnQ9dGhpcy5rZXlzLHI9dGhpcy5kaWN0LHRoaXMucmVmU2V0PW5ldyBhLlJlZlNldCxuPVtdLGk9aCh0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspcz1vLnZhbHVlLHZvaWQgMCE9PSh1PXIuZ2V0UmF3KHMpKSYmbi5wdXNoKHUpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl93YWxrKG4pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfd2FsayIsdmFsdWU6KG49bChjKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLHUsbCxmLGQsZyx2LHksbSxiLHc7cmV0dXJuIGMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPVtdLG49W107Y2FzZSAyOmlmKCF0Lmxlbmd0aCl7ZS5uZXh0PTQ4O2JyZWFrfWlmKCEoKHU9dC5wb3AoKSlpbnN0YW5jZW9mIGEuUmVmKSl7ZS5uZXh0PTIxO2JyZWFrfWlmKCF0aGlzLnJlZlNldC5oYXModSkpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDIpO2Nhc2UgNzplLnByZXY9Nyx0aGlzLnJlZlNldC5wdXQodSksdT10aGlzLnhyZWYuZmV0Y2godSksZS5uZXh0PTIxO2JyZWFrO2Nhc2UgMTI6aWYoZS5wcmV2PTEyLGUudDA9ZS5jYXRjaCg3KSxlLnQwIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTE5O2JyZWFrfXJldHVybigwLHMud2FybikoJ09iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICInLmNvbmNhdChlLnQwLCciLicpKSx0aGlzLnJlZlNldD1udWxsLGw9dGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLGUuYWJydXB0KCJyZXR1cm4iLGwucmVxdWVzdEFsbENodW5rcygpKTtjYXNlIDE5OnIucHVzaCh1KSxuLnB1c2goe2JlZ2luOmUudDAuYmVnaW4sZW5kOmUudDAuZW5kfSk7Y2FzZSAyMTppZighKHUgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pKXtlLm5leHQ9NDU7YnJlYWt9aWYoIShmPXUuZ2V0QmFzZVN0cmVhbXMoKSkpe2UubmV4dD00NTticmVha31kPSExLGc9aChmKSxlLnByZXY9MjYsZy5zKCk7Y2FzZSAyODppZigodj1nLm4oKSkuZG9uZSl7ZS5uZXh0PTM2O2JyZWFrfWlmKCEoeT12LnZhbHVlKS5pc0RhdGFMb2FkZWQpe2UubmV4dD0zMjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiwzNCk7Y2FzZSAzMjpkPSEwLG4ucHVzaCh7YmVnaW46eS5zdGFydCxlbmQ6eS5lbmR9KTtjYXNlIDM0OmUubmV4dD0yODticmVhaztjYXNlIDM2OmUubmV4dD00MTticmVhaztjYXNlIDM4OmUucHJldj0zOCxlLnQxPWUuY2F0Y2goMjYpLGcuZShlLnQxKTtjYXNlIDQxOnJldHVybiBlLnByZXY9NDEsZy5mKCksZS5maW5pc2goNDEpO2Nhc2UgNDQ6ZCYmci5wdXNoKHUpO2Nhc2UgNDU6cCh1LHQpLGUubmV4dD0yO2JyZWFrO2Nhc2UgNDg6aWYoIW4ubGVuZ3RoKXtlLm5leHQ9NTQ7YnJlYWt9cmV0dXJuIGUubmV4dD01MSx0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhuKTtjYXNlIDUxOm09aChyKTt0cnl7Zm9yKG0ucygpOyEoYj1tLm4oKSkuZG9uZTspKHc9Yi52YWx1ZSlpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUodyl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3dhbGsocikpO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucmVmU2V0PW51bGwsZS5hYnJ1cHQoInJldHVybiIsdm9pZCAwKTtjYXNlIDU2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbNywxMl0sWzI2LDM4LDQxLDQ0XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJmYodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9iamVjdExvYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTApLGk9cigyMTYpLG89cigyMTQpLHM9cigyMDcpLGM9cigyKSx1PXIoMjE3KSxsPXIoMjI3KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7ZD1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBwKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtwKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtwKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKTt0cnl7dGhpcy5yb290PShuZXcgdS5YRkFQYXJzZXIpLnBhcnNlKGUuX2NyZWF0ZURvY3VtZW50KHQpKTt2YXIgcj1uZXcgYS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09ci5iaW5kKCksdGhpcy5kYXRhSGFuZGxlcj1uZXcgaS5EYXRhSGFuZGxlcih0aGlzLnJvb3Qsci5nZXREYXRhKCkpLHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKSgiWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICIuY29uY2F0KGUpKX19dmFyIHQscixmLHAseSxtO3JldHVybiB0PWUscj1be2tleToiaXNWYWxpZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19fSx7a2V5OiJfY3JlYXRlUGFnZXNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtW24uJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3NldFRpbWVvdXQoKGZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuLDApfWNhdGNoKGUpe3IoZSl9fSksMCl9KSl9fSx7a2V5OiJfY3JlYXRlUGFnZXMiLHZhbHVlOihtPWcoZCgpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gZCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO2Nhc2UgMzp0aGlzLnBhZ2VzPWUuc2VudCx0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy5zdHlsZSxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMCwwLHBhcnNlSW50KHIpLHBhcnNlSW50KG4pXX0pKSxlLm5leHQ9MTA7YnJlYWs7Y2FzZSA3OmUucHJldj03LGUudDA9ZS5jYXRjaCgwKSwoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAiLmNvbmNhdChlLnQwKSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzAsN11dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZ2V0Qm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpbXNbZV19fSx7a2V5OiJnZXROdW1QYWdlcyIsdmFsdWU6KHk9ZyhkKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBkKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5wYWdlcyl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHRoaXMuX2NyZWF0ZVBhZ2VzKCk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLmRpbXMubGVuZ3RoKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJzZXRJbWFnZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX19LHtrZXk6InNldEZvbnRzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgby5Gb250RmluZGVyKGUpO3ZhciB0LHI9W10sYT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fSh0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2k9KDAscy5zdHJpcFF1b3RlcykoaSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChpKXx8ci5wdXNoKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4gci5sZW5ndGg+MD9yOm51bGx9fSx7a2V5OiJhcHBlbmRGb250cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5hZGQoZSx0KX19LHtrZXk6ImdldFBhZ2VzIix2YWx1ZToocD1nKGQoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGQoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0aGlzLnBhZ2VzKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5uZXh0PTMsdGhpcy5fY3JlYXRlUGFnZXMoKTtjYXNlIDM6cmV0dXJuIHQ9dGhpcy5wYWdlcyx0aGlzLnBhZ2VzPW51bGwsZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfX1dLGY9W3trZXk6Il9jcmVhdGVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19fSx7a2V5OiJnZXRSaWNoVGV4dEFzSHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHQ9bmV3IHUuWEZBUGFyc2VyKGwuWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbbi4kbm9kZU5hbWVdKSl7dmFyIHI9bC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtyW24uJGFwcGVuZENoaWxkXSh0KSx0PXJ9dmFyIGE9dFtuLiR0b0hUTUxdKCk7aWYoIWEuc3VjY2VzcylyZXR1cm4gbnVsbDt2YXIgaT1hLmh0bWwsbz1pLmF0dHJpYnV0ZXM7cmV0dXJuIG8mJihvLmNsYXNzJiYoby5jbGFzcz1vLmNsYXNzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc3RhcnRzV2l0aCgieGZhIil9KSkpLG8uZGlyPSJhdXRvIikse2h0bWw6aSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19XSxyJiZ2KHQucHJvdG90eXBlLHIpLGYmJnYodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWEZBRmFjdG9yeT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7dmFyIG49cigyMDcpLGE9cigyKSxpPXIoMTM1KSxvPXIoMjA4KSxzPXIoMjA5KTtmdW5jdGlvbiBjKCl7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1wKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZChlKX0odGhpcyxyKX19ZnVuY3Rpb24gZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoKXt2PWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGY9e307ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz1wLnByb3RvdHlwZT1oLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PWcoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGY7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGQucHJvdG90eXBlPXAsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLCJjb25zdHJ1Y3RvciIse3ZhbHVlOmQsY29uZmlndXJhYmxlOiEwfSksZC5kaXNwbGF5TmFtZT1jKHAscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHApOihlLl9fcHJvdG9fXz1wLGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGYpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGZ9fSxlfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPW0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG0oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGIoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9iKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBiKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWcobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1nKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBTKGUsdCxyKXtyZXR1cm4gdCYmayhlLnByb3RvdHlwZSx0KSxyJiZrKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgeD1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXg7dmFyIE89U3ltYm9sKCk7dC4kYWRkSFRNTD1PO3ZhciBBPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPUE7dmFyIEM9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9Qzt2YXIgRj1TeW1ib2woKTt0LiRjbGVhbj1GO3ZhciBQPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1QO3ZhciBUPVN5bWJvbCgpO3QuJGNsZWFudXA9VDt2YXIgST1TeW1ib2woKTt0LiRjbG9uZT1JO3ZhciBFPVN5bWJvbCgpO3QuJGNvbnN1bWVkPUU7dmFyIGo9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD1qO3ZhciBNPVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9TTt2YXIgXz1TeW1ib2woKTt0LiRkdW1wPV87dmFyIEw9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPUw7dmFyIFI9U3ltYm9sKCk7dC4kZmluYWxpemU9Ujt2YXIgTj1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Tjt2YXIgRD1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1EO3ZhciBCPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9Qjt2YXIgVT1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1VO3ZhciAkPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz0kO3ZhciBYPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVg7dmFyIEg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1IO3ZhciBxPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1xO3ZhciBHPVN5bWJvbCgpO3QuJGdldEV4dHJhPUc7dmFyIHo9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9ejt2YXIgVz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1XO3ZhciBWPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPVY7dmFyIFk9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9WTt2YXIgSz1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PUs7dmFyIEo9U3ltYm9sKCk7dC4kZ2V0UGFyZW50PUo7dmFyIFo9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVo7dmFyIFE9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1RO3ZhciBlZT1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPWVlO3ZhciB0ZT1TeW1ib2woKTt0LiRpZHM9dGU7dmFyIHJlPVN5bWJvbCgpO3QuJGluZGV4T2Y9cmU7dmFyIG5lPVN5bWJvbCgpO3QuJGluc2VydEF0PW5lO3ZhciBhZT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPWFlO3ZhciBpZT1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPWllO3ZhciBvZT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1vZTt2YXIgc2U9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXNlO3ZhciBjZT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Y2U7dmFyIHVlPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT11ZTt2YXIgbGU9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1sZTt2YXIgZmU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1mZTt2YXIgaGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9aGU7dmFyIGRlPVN5bWJvbCgpLHBlPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1wZTt2YXIgZ2U9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPWdlO3ZhciB2ZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9dmU7dmFyIHllPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9eWU7dmFyIG1lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1tZTt2YXIgYmU9U3ltYm9sKCk7dC4kb25UZXh0PWJlO3ZhciB3ZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPXdlO3ZhciBrZT1TeW1ib2woKTt0LiRwb3BQYXJhPWtlO3ZhciBTZT1TeW1ib2woKTt0LiRwdXNoUGFyYT1TZTt2YXIgeGU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9eGU7dmFyIE9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9T2U7dmFyIEFlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPUFlO3ZhciBDZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPUNlO3ZhciBGZT1TeW1ib2woKTt0LiRzZXRJZD1GZTt2YXIgUGU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1QZTt2YXIgVGU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9VGU7dmFyIEllPVN5bWJvbCgpO3QuJHRhYkluZGV4PUllO3ZhciBFZT1TeW1ib2woKTt0LiR0ZXh0PUVlO3ZhciBqZT1TeW1ib2woKTt0LiR0b1BhZ2VzPWplO3ZhciBNZT1TeW1ib2woKTt0LiR0b0hUTUw9TWU7dmFyIF9lPVN5bWJvbCgpO3QuJHRvU3RyaW5nPV9lO3ZhciBMZT1TeW1ib2woKTt0LiR0b1N0eWxlPUxlO3ZhciBSZT1TeW1ib2woInVpZCIpO3QuJHVpZD1SZTt2YXIgTmU9U3ltYm9sKCksRGU9U3ltYm9sKCksQmU9U3ltYm9sKCksVWU9U3ltYm9sKCJfY2hpbGRyZW4iKSwkZT1TeW1ib2woKSxYZT1TeW1ib2woKSxIZT1TeW1ib2woKSxxZT1TeW1ib2woKSxHZT1TeW1ib2woKSx6ZT1TeW1ib2woKSxXZT1TeW1ib2woKSxWZT1TeW1ib2woKSxZZT1TeW1ib2woKSxLZT1TeW1ib2woInBhcmVudCIpLEplPVN5bWJvbCgpLFplPVN5bWJvbCgpLFFlPVN5bWJvbCgpLGV0PTAsdHQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt3KHRoaXMsZSksdGhpc1twZV09dCx0aGlzW2dlXT1yLHRoaXNbV2VdPW4sdGhpc1tLZV09bnVsbCx0aGlzW1VlXT1bXSx0aGlzW1JlXT0iIi5jb25jYXQocikuY29uY2F0KGV0KyspLHRoaXNbUV09bnVsbH1yZXR1cm4gUyhlLFt7a2V5OnllLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzW1dlXXx8IXRoaXNbbWVdKGUpKXJldHVybiExO3ZhciB0PWVbZ2VdLHI9dGhpc1t0XTtpZighKHIgaW5zdGFuY2VvZiBudCkpcmV0dXJuIG51bGwhPT1yJiZ0aGlzW3hlXShyKSx0aGlzW3RdPWUsdGhpc1tBXShlKSwhMDtpZihyLnB1c2goZSkpcmV0dXJuIHRoaXNbQV0oZSksITA7dmFyIG49IiI7cmV0dXJuIHRoaXMuaWQ/bj0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKG49IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW2dlXSwnIicpLmNvbmNhdChuLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9fSx7a2V5Om1lLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGVbZ2VdKSYmZVtwZV09PT10aGlzW3BlXX19LHtrZXk6Y2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6eCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTppZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTprZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGFyYSYmdGhpc1taXSgpW0xdLnBhcmFTdGFjay5wb3AoKX19LHtrZXk6U2UsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW1pdKClbTF0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX19LHtrZXk6RmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pZCYmdGhpc1twZV09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW1FdLnRlbXBsYXRlfX0se2tleTp1ZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpBLHZhbHVlOmZ1bmN0aW9uKGUpe2VbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaChlKSwhZVtRXSYmdGhpc1tRXSYmKGVbUV09dGhpc1tRXSl9fSx7a2V5OnhlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbVWVdLmluZGV4T2YoZSk7dGhpc1tVZV0uc3BsaWNlKHQsMSl9fSx7a2V5OmVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleTpGLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzW1dlXSx0aGlzW1RdJiYoZS5jbGVhbih0aGlzW1RdKSxkZWxldGUgdGhpc1tUXSl9fSx7a2V5OnJlLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1VlXS5pbmRleE9mKGUpfX0se2tleTpuZSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RbS2VdPXRoaXMsdGhpc1tVZV0uc3BsaWNlKGUsMCx0KSwhdFtRXSYmdGhpc1tRXSYmKHRbUV09dGhpc1tRXSl9fSx7a2V5OmZlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubmFtZX19LHtrZXk6ZGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXNbVWVdLmxlbmd0aD90aGlzW2pdOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbRWVdKCl9KSkuam9pbigiIil9fSx7a2V5OkJlLGdldDpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighdC5fYXR0cmlidXRlcyl7dmFyIHIsbj10Ll9hdHRyaWJ1dGVzPW5ldyBTZXQsaT15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobnVsbD09PXRoaXNbb118fHRoaXNbb11pbnN0YW5jZW9mIGV8fHRoaXNbb11pbnN0YW5jZW9mIG50KWJyZWFrO24uYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsQmUsdC5fYXR0cmlidXRlcyl9fSx7a2V5OnNlLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbSl0oKX1yZXR1cm4hMX19LHtrZXk6Six2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0tlXX19LHtrZXk6Syx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0pdKCl9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbVWVdfX0se2tleTpfLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW2pdJiYodC4kY29udGVudD10aGlzW2pdKTt2YXIgcixuPXkoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZSxpPXRoaXNbYV07bnVsbCE9PWkmJihpIGluc3RhbmNlb2YgZT90W2FdPWlbX10oKTppIGluc3RhbmNlb2YgbnQ/aS5pc0VtcHR5KCl8fCh0W2FdPWkuZHVtcCgpKTp0W2FdPWkpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19LHtrZXk6TGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHtrZXk6TWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfX0se2tleTpWLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6dD15KHRoaXNbV10oKSksZS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtlLm5leHQ9OTticmVha31yZXR1cm4gbj1yLnZhbHVlLGUubmV4dD03LG47Y2FzZSA3OmUubmV4dD0zO2JyZWFrO2Nhc2UgOTplLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHQuZShlLnQwKTtjYXNlIDE0OnJldHVybiBlLnByZXY9MTQsdC5mKCksZS5maW5pc2goMTQpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxLDExLDE0LDE3XV0pfSkpfSx7a2V5OnFlLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOm49eSh0aGlzW1ZdKCkpLGUucHJldj0xLG4ucygpO2Nhc2UgMzppZigoYT1uLm4oKSkuZG9uZSl7ZS5uZXh0PTEzO2JyZWFrfWlmKGk9YS52YWx1ZSx0JiZyIT09dC5oYXMoaVtnZV0pKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG89dGhpc1tVXSgpLChzPWlbTWVdKG8pKS5zdWNjZXNzfHwodGhpc1tMXS5mYWlsaW5nTm9kZT1pKSxlLm5leHQ9MTEscztjYXNlIDExOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTM6ZS5uZXh0PTE4O2JyZWFrO2Nhc2UgMTU6ZS5wcmV2PTE1LGUudDA9ZS5jYXRjaCgxKSxuLmUoZS50MCk7Y2FzZSAxODpyZXR1cm4gZS5wcmV2PTE4LG4uZigpLGUuZmluaXNoKDE4KTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNSwxOCwyMV1dKX0pKX0se2tleTpOLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSx7a2V5Ok8sdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzW0xdLmNoaWxkcmVuLnB1c2goZSl9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OkMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj12b2lkIDA9PT10P251bGw6dCxhPWUuaW5jbHVkZSxpPXZvaWQgMD09PWF8fGE7aWYodGhpc1tMXS5nZW5lcmF0b3Ipe3ZhciBvPXRoaXNbVV0oKSxzPXRoaXNbTF0uZmFpbGluZ05vZGVbTWVdKG8pO2lmKCFzLnN1Y2Nlc3MpcmV0dXJuIHM7cy5odG1sJiZ0aGlzW09dKHMuaHRtbCxzLmJib3gpLGRlbGV0ZSB0aGlzW0xdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tMXS5nZW5lcmF0b3I9dGhpc1txZV0ocixpKTtmb3IoOzspe3ZhciBjPXRoaXNbTF0uZ2VuZXJhdG9yLm5leHQoKTtpZihjLmRvbmUpYnJlYWs7dmFyIHU9Yy52YWx1ZTtpZighdS5zdWNjZXNzKXJldHVybiB1O3UuaHRtbCYmdGhpc1tPXSh1Lmh0bWwsdS5iYm94KX1yZXR1cm4gdGhpc1tMXS5nZW5lcmF0b3I9bnVsbCxuLkhUTUxSZXN1bHQuRU1QVFl9fSx7a2V5OlBlLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXNbWmVdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfX0se2tleTp6ZSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbQmVdLG49dGhpc1taZV07cmV0dXJuKHQ9ZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBiKGUpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8bSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5oYXMoZSkmJiFuLmhhcyhlKX0pKX19LHtrZXk6QWUsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFNldCxuPXkodGhpc1tVZV0pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlW0plXShlLHIpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19LHtrZXk6SmUsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzW0dlXShlLHQpO3I/dGhpc1tOZV0ocixlLHQpOnRoaXNbQWVdKGUsdCl9fSx7a2V5OkdlLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy51c2Usbj10aGlzLnVzZWhyZWY7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPW51bGwsbz1udWxsLGM9bnVsbCx1PXI7aWYobj8odT1uLG4uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LG4ubGVuZ3RoLTEpOm4uc3RhcnRzV2l0aCgiLiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNixuLmxlbmd0aC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9jPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoYz1uLnNsaWNlKDIpKSk6ci5zdGFydHNXaXRoKCIjIik/Yz1yLnNsaWNlKDEpOm89cix0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiIsYz9pPWUuZ2V0KGMpOihpPSgwLHMuc2VhcmNoTm9kZSkoZS5nZXQoT2UpLHRoaXMsbywhMCwhMSkpJiYoaT1pWzBdKSwhaSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICIuY29uY2F0KHUsIi4iKSksbnVsbDtpZihpW2dlXSE9PXRoaXNbZ2VdKXJldHVybigwLGEud2FybikoIlhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICIuY29uY2F0KGlbZ2VdLCIgIT09ICIpLmNvbmNhdCh0aGlzW2dlXSwiLiIpKSxudWxsO2lmKHQuaGFzKGkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpLG51bGw7dC5hZGQoaSk7dmFyIGw9aVtHZV0oZSx0KTtyZXR1cm4gbCYmaVtOZV0obCxlLHQpLGlbQWVdKGUsdCksdC5kZWxldGUoaSksaX19LHtrZXk6TmUsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIuaGFzKGUpKSgwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO2Vsc2V7IXRoaXNbal0mJmVbal0mJih0aGlzW2pdPWVbal0pLG5ldyBTZXQocikuYWRkKGUpO3ZhciBuLGk9eSh0aGlzW3plXShlW1plXSkpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTt0aGlzW29dPWVbb10sdGhpc1taZV0mJnRoaXNbWmVdLmFkZChvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIHMsYz15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7aWYoIXRoaXNbQmVdLmhhcyh1KSl7dmFyIGw9dGhpc1t1XSxmPWVbdV07aWYobCBpbnN0YW5jZW9mIG50KXt2YXIgaCxkPXkobFtVZV0pO3RyeXtmb3IoZC5zKCk7IShoPWQubigpKS5kb25lOyloLnZhbHVlW0plXSh0LHIpfWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfWZvcih2YXIgcD1sW1VlXS5sZW5ndGgsZz1mW1VlXS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9ZVtVZV1bcF1bSV0oKTtpZighbC5wdXNoKHYpKWJyZWFrO3ZbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaCh2KSx2W0plXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1sKXtpZihudWxsIT09Zil7dmFyIG09ZltJXSgpO21bS2VdPXRoaXMsdGhpc1t1XT1tLHRoaXNbVWVdLnB1c2gobSksbVtKZV0odCxyKX19ZWxzZSBsW0FlXSh0LHIpLGYmJmxbTmVdKGYsdCxyKX19fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfX19fSx7a2V5OkksdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSxuPXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO3RyeXtyW2ldPXRoaXNbaV19Y2F0Y2goZSl7KDAsYS5zaGFkb3cpKHIsaSx0aGlzW2ldKX19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJbUmVdPSIiLmNvbmNhdChyW2dlXSkuY29uY2F0KGV0KyspLHJbVWVdPVtdO3ZhciBvLHM9eShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlO2lmKHRoaXNbQmVdLmhhcyhjKSlyW2NdPWVbJGVdKHRoaXNbY10pO2Vsc2V7dmFyIHU9dGhpc1tjXTtyW2NdPXUgaW5zdGFuY2VvZiBudD9uZXcgbnQodVtWZV0pOm51bGx9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgbCxmPXkodGhpc1tVZV0pO3RyeXtmb3IoZi5zKCk7IShsPWYubigpKS5kb25lOyl7dmFyIGg9bC52YWx1ZSxkPWhbZ2VdLHA9aFtJXSgpO3JbVWVdLnB1c2gocCkscFtLZV09cixudWxsPT09cltkXT9yW2RdPXA6cltkXVtVZV0ucHVzaChwKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9cmV0dXJuIHJ9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW1VlXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2dlXT09PWV9KSk6dGhpc1tVZV19fSx7a2V5OiQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19fSx7a2V5OlgsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbSF0oZSx0LHIpKX19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiB2KCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOmlmKCJwYXJlbnQiIT09ZSl7YS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGEubmV4dD0zLHJbS2VdO2Nhc2UgMzpyZXR1cm4gYS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDppPXkocltVZV0pLGEucHJldj01LGkucygpO2Nhc2UgNzppZigobz1pLm4oKSkuZG9uZSl7YS5uZXh0PTE5O2JyZWFrfWlmKChzPW8udmFsdWUpW2dlXSE9PWUpe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHM7Y2FzZSAxMjppZihzLm5hbWUhPT1lKXthLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGEubmV4dD0xNSxzO2Nhc2UgMTU6aWYoIXQmJiFzW2ZlXSgpKXthLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGEuZGVsZWdhdGVZaWVsZChzW0hdKGUsdCwhMSksInQwIiwxNyk7Y2FzZSAxNzphLm5leHQ9NzticmVhaztjYXNlIDE5OmEubmV4dD0yNDticmVhaztjYXNlIDIxOmEucHJldj0yMSxhLnQxPWEuY2F0Y2goNSksaS5lKGEudDEpO2Nhc2UgMjQ6cmV0dXJuIGEucHJldj0yNCxpLmYoKSxhLmZpbmlzaCgyNCk7Y2FzZSAyNzppZighbnx8IXJbQmVdLmhhcyhlKSl7YS5uZXh0PTMwO2JyZWFrfXJldHVybiBhLm5leHQ9MzAsbmV3IGF0KHIsZSxyW2VdKTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSxudWxsLFtbNSwyMSwyNCwyN11dKX0pKSgpfX1dLFt7a2V5OiRlLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVskZV0odCl9KSk6Im9iamVjdCI9PT1nKHQpJiZudWxsIT09dD9PYmplY3QuYXNzaWduKHt9LHQpOnR9fV0pLGV9KCk7dC5YRkFPYmplY3Q9cnQ7dmFyIG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dyh0aGlzLGUpLHRoaXNbVmVdPXQsdGhpc1tVZV09W119cmV0dXJuIFMoZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbVWVdLmxlbmd0aDw9dGhpc1tWZV0/KHRoaXNbVWVdLnB1c2goZSksITApOigoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdChlW2dlXSwnIiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAnKS5jb25jYXQodGhpc1tWZV0sIiBjaGlsZHJlbiIpKSwhMSl9fSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpc1tVZV0ubGVuZ3RofX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXNbVWVdLmxlbmd0aD90aGlzW1VlXVswXVtfXSgpOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbX10oKX0pKX19LHtrZXk6SSx2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXNbVmVdKTtyZXR1cm4gdFtVZV09dGhpc1tVZV0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtJXSgpfSkpLHR9fSx7a2V5OiJjaGlsZHJlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVWVdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tVZV0ubGVuZ3RoPTB9fV0pLGV9KCk7dC5YRkFPYmplY3RBcnJheT1udDt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt3KHRoaXMsZSksdGhpc1tLZV09dCx0aGlzW2dlXT1yLHRoaXNbal09bix0aGlzW0VdPSExLHRoaXNbUmVdPSJhdHRyaWJ1dGUiLmNvbmNhdChldCsrKX1yZXR1cm4gUyhlLFt7a2V5OkosdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLZV19fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXX19LHtrZXk6c2UsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbS2VdPT09ZXx8dGhpc1tLZV1bc2VdKGUpfX1dKSxlfSgpO3QuWEZBQXR0cmlidXRlPWF0O3ZhciBpdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGEsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYodyh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsbikpW2pdPSIiLGFbWGVdPW51bGwsIiN0ZXh0IiE9PW4pe3ZhciBvPW5ldyBNYXA7YVtEZV09bztmb3IodmFyIHM9MCxjPU9iamVjdC5lbnRyaWVzKGkpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD11KGNbc10sMiksZj1sWzBdLGg9bFsxXTtvLnNldChmLG5ldyBhdChkKGEpLGYsaCkpfWlmKGkuaGFzT3duUHJvcGVydHkodmUpKXt2YXIgcD1pW3ZlXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09cCYmKCJkYXRhR3JvdXAiPT09cD9hW1hlXT0hMToiZGF0YVZhbHVlIj09PXAmJihhW1hlXT0hMCkpfX1yZXR1cm4gYVtFXT0hMSxhfXJldHVybiBTKHIsW3trZXk6X2UsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tnZV07aWYoIiN0ZXh0IiE9PXQpe3ZhciByPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbcGVdPT09dHQ/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KG4pLmNvbmNhdChyKSk7dmFyIG8scz15KHRoaXNbRGVdLmVudHJpZXMoKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz11KG8udmFsdWUsMiksbD1jWzBdLGY9Y1sxXSxoPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKShsKTtlLnB1c2goIiAiLmNvbmNhdChoLCc9IicpLmNvbmNhdCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShmW2pdKSwnIicpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYobnVsbCE9PXRoaXNbWGVdJiYodGhpc1tYZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpLHRoaXNbal18fDAhPT10aGlzW1VlXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbal0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2pdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2pdKSk6dGhpc1tqXVtfZV0oZSk7ZWxzZXt2YXIgZCxwPXkodGhpc1tVZV0pO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOylkLnZhbHVlW19lXShlKX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX19ZS5wdXNoKCI8LyIuY29uY2F0KG4pLmNvbmNhdChyLCI+IikpfWVsc2UgZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLGkuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbal0pKX19LHtrZXk6eWUsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpc1tqXSl7dmFyIHQ9bmV3IHIodGhpc1twZV0sIiN0ZXh0Iik7dGhpc1tBXSh0KSx0W2pdPXRoaXNbal0sdGhpc1tqXT0iIn1yZXR1cm4gdGhpc1tBXShlKSwhMH19LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbal0mJnRoaXNbVWVdLmxlbmd0aD4wKXt2YXIgZT1uZXcgcih0aGlzW3BlXSwiI3RleHQiKTt0aGlzW0FdKGUpLGVbal09dGhpc1tqXSxkZWxldGUgdGhpc1tqXX19fSx7a2V5Ok1lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbZ2VdP24uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqXX0pOm4uSFRNTFJlc3VsdC5FTVBUWX19LHtrZXk6Vyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbVWVdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ2VdPT09ZX0pKTp0aGlzW1VlXX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0RlXX19LHtrZXk6JCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzW0RlXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1ddKGUpfX0se2tleTpILHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXNbRGVdLmdldChlKSkpe28ubmV4dD00O2JyZWFrfXJldHVybiBvLm5leHQ9NCxyO2Nhc2UgNDpuPXkodGhpc1tVZV0pLG8ucHJldj01LG4ucygpO2Nhc2UgNzppZigoYT1uLm4oKSkuZG9uZSl7by5uZXh0PTE2O2JyZWFrfWlmKChpPWEudmFsdWUpW2dlXSE9PWUpe28ubmV4dD0xMjticmVha31yZXR1cm4gby5uZXh0PTEyLGk7Y2FzZSAxMjppZighdCl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmRlbGVnYXRlWWllbGQoaVtIXShlLHQpLCJ0MCIsMTQpO2Nhc2UgMTQ6by5uZXh0PTc7YnJlYWs7Y2FzZSAxNjpvLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpvLnByZXY9MTgsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsbi5mKCksby5maW5pc2goMjEpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE4LDIxLDI0XV0pfSkpfSx7a2V5OkQsdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7cmV0dXJuIHYoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZighKHI9dGhpc1tEZV0uZ2V0KGUpKXx8dCYmcltFXSl7by5uZXh0PTQ7YnJlYWt9cmV0dXJuIG8ubmV4dD00LHI7Y2FzZSA0Om49eSh0aGlzW1VlXSksby5wcmV2PTUsbi5zKCk7Y2FzZSA3OmlmKChhPW4ubigpKS5kb25lKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGk9YS52YWx1ZSxvLmRlbGVnYXRlWWllbGQoaVtEXShlLHQpLCJ0MCIsMTApO2Nhc2UgMTA6by5uZXh0PTc7YnJlYWs7Y2FzZSAxMjpvLm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDpvLnByZXY9MTQsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDE3OnJldHVybiBvLnByZXY9MTcsbi5mKCksby5maW5pc2goMTcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE0LDE3LDIwXV0pfSkpfSx7a2V5OnosdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGksbztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmE9eSh0aGlzW1VlXSksZS5wcmV2PTEsYS5zKCk7Y2FzZSAzOmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTI7YnJlYWt9aWYoKG89aS52YWx1ZSlbZ2VdIT09dHx8biYmb1tFXSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD04LG87Y2FzZSA4OmlmKCFyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChvW3pdKHQscixuKSwidDAiLDEwKTtjYXNlIDEwOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTI6ZS5uZXh0PTE3O2JyZWFrO2Nhc2UgMTQ6ZS5wcmV2PTE0LGUudDE9ZS5jYXRjaCgxKSxhLmUoZS50MSk7Y2FzZSAxNzpyZXR1cm4gZS5wcmV2PTE3LGEuZigpLGUuZmluaXNoKDE3KTtjYXNlIDIwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNCwxNywyMF1dKX0pKX0se2tleTpvZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpc1tYZV0/MD09PXRoaXNbVWVdLmxlbmd0aHx8dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tYZV19fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXNbWGVdPzA9PT10aGlzW1VlXS5sZW5ndGg/dGhpc1tqXS50cmltKCk6dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tVZV1bMF1bRWVdKCkudHJpbSgpOm51bGw6dGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6Xyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3BlXSksdGhpc1tqXSYmKHQuJGNvbnRlbnQ9dGhpc1tqXSksdC4kbmFtZT10aGlzW2dlXSx0LmNoaWxkcmVuPVtdO3ZhciByLG49eSh0aGlzW1VlXSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO3QuY2hpbGRyZW4ucHVzaChhW19dKGUpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dC5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGksbz15KHRoaXNbRGVdKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPXUoaS52YWx1ZSwyKSxjPXNbMF0sbD1zWzFdO3QuYXR0cmlidXRlc1tjXT1sW2pdfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdH19XSkscn0ocnQpO3QuWG1sT2JqZWN0PWl0O3ZhciBvdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHcodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLG4pKVtqXT0iIixhfXJldHVybiBTKHIsW3trZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe319XSkscn0ocnQpO3QuQ29udGVudE9iamVjdD1vdDt2YXIgc3Q9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHcodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlLG4pKVtZZV09YSxpfXJldHVybiBTKHIsW3trZXk6Uix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpc1tqXT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbWWVdWzBdLHZhbGlkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlW1llXS5pbmNsdWRlcyh0KX19KX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihlKXtjKHAoci5wcm90b3R5cGUpLEYsdGhpcykuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzW1llXX19XSkscn0ob3QpO3QuT3B0aW9uT2JqZWN0PXN0O3ZhciBjdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHcodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUyhyLFt7a2V5OlIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2pdPXRoaXNbal0udHJpbSgpfX1dKSxyfShvdCk7dC5TdHJpbmdPYmplY3Q9Y3Q7dmFyIHV0PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSl7dmFyIG87cmV0dXJuIHcodGhpcyxyKSwobz10LmNhbGwodGhpcyxlLG4pKVtIZV09YSxvW1FlXT1pLG99cmV0dXJuIFMocixbe2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tqXT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbSGVdLHZhbGlkYXRlOnRoaXNbUWVdfSl9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oZSl7YyhwKHIucHJvdG90eXBlKSxGLHRoaXMpLmNhbGwodGhpcyxlKSxkZWxldGUgdGhpc1tIZV0sZGVsZXRlIHRoaXNbUWVdfX1dKSxyfShvdCk7dC5JbnRlZ2VyT2JqZWN0PXV0O3ZhciBsdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHcodGhpcyxyKSx0LmNhbGwodGhpcyxlLG4sMCwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfSkpfXJldHVybiBTKHIpfSh1dCk7dC5PcHRpb24wMT1sdDt2YXIgZnQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiB3KHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLDEsKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0pKX1yZXR1cm4gUyhyKX0odXQpO3QuT3B0aW9uMTA9ZnR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkhUTUxSZXN1bHQ9dm9pZCAwLHQuZ2V0QkJveD1mdW5jdGlvbihlKXt2YXIgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwiLTEiKX0pKTtpZihyLmxlbmd0aDw0fHxyWzJdPDB8fHJbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgbj1vKHIsNCk7cmV0dXJue3g6blswXSx5Om5bMV0sd2lkdGg6blsyXSxoZWlnaHQ6blszXX19LHQuZ2V0Q29sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSwzKSxyPXRbMF0sbj10WzFdLGE9dFsyXTtpZighZSlyZXR1cm57cixnOm4sYjphfTt2YXIgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6ZX0pKTtpZihpLmxlbmd0aDwzKXJldHVybntyLGc6bixiOmF9O3ZhciBzPW8oaSwzKTtyZXR1cm57cjpyPXNbMF0sZzpuPXNbMV0sYjphPXNbMl19fSx0LmdldEZsb2F0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlSW50KHQsMTApO3JldHVybiFpc05hTihhKSYmbihhKT9hOnJ9LHQuZ2V0S2V5d29yZD1sLHQuZ2V0TWVhc3VyZW1lbnQ9Zix0LmdldFJhdGlvPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07dmFyIHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KGUpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKGUpfSkpO2lmKDE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpLDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O3ZhciByPW8odCwyKTtyZXR1cm57bnVtOnJbMF0sZGVuOnJbMV19fSx0LmdldFJlbGV2YW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfX0pKTpbXX0sdC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLGUubGVuZ3RoLTEpOmV9O3ZhciBhPXIoMik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgYz17cHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNtOmZ1bmN0aW9uKGUpe3JldHVybiBlLzIuNTQqNzJ9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiBlLzI1LjQqNzJ9LGluOmZ1bmN0aW9uKGUpe3JldHVybiA3MiplfSxweDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHU9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtyZXR1cm4gdCYmbih0PXQudHJpbSgpKT90OnJ9ZnVuY3Rpb24gZihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO2lmKHQ9dHx8IjAiLCFlKXJldHVybiBmKHQpO3ZhciByPWUudHJpbSgpLm1hdGNoKHUpO2lmKCFyKXJldHVybiBmKHQpO3ZhciBuPW8ociwzKSxhPW5bMV0saT1uWzJdLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZih0KTtpZigwPT09cylyZXR1cm4gMDt2YXIgbD1jW2ldO3JldHVybiBsP2wocyk6c312YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdWNjZXNzPXQsdGhpcy5odG1sPXIsdGhpcy5iYm94PW4sdGhpcy5icmVha05vZGU9YX12YXIgdCxyLG47cmV0dXJuIHQ9ZSxuPVt7a2V5OiJGQUlMVVJFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGUoITEsbnVsbCxudWxsLG51bGwpKX19LHtrZXk6IkVNUFRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBlKCEwLG51bGwsbnVsbCxudWxsKSl9fSx7a2V5OiJicmVha05vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSghMSxudWxsLG51bGwsdCl9fSx7a2V5OiJzdWNjZXNzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUoITAsdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19XSwocj1be2tleToiaXNCcmVhayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxuJiZpKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkhUTUxSZXN1bHQ9aH0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO3ZhciByPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PXIsdC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX19LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9fSxkYXRhc2V0czp7aWQ6MixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfX0sZm9ybTp7aWQ6MyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9fSxwZGY6e2lkOjUsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX19LHNpZ25hdHVyZTp7aWQ6NixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9fSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX19LHRlbXBsYXRlOntpZDo5LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfX0seGRjOntpZDoxMCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX19LHhkcDp7aWQ6MTEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfX0seGZkZjp7aWQ6MTIsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX19LHhodG1sOntpZDoxMyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT15KHIpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1kLmRvdERvdH0pKSlyZXR1cm4gbnVsbDt2YXIgbz1wLmdldChhWzBdLm5hbWUpLHM9MDtvPyhlPW8oZSx0KSxzPTEpOmU9dHx8ZTtmb3IodmFyIGM9YS5sZW5ndGg7czxjO3MrKyl7dmFyIHU9YVtzXSxsPXUubmFtZSxmPXUub3BlcmF0b3IsaD11LmluZGV4O2lmKCFpc0Zpbml0ZShoKSlyZXR1cm4gYVtzXS5pbmRleD0wLG0oZSxhLnNsaWNlKHMpKTt2YXIgZz12b2lkIDA7c3dpdGNoKGYpe2Nhc2UgZC5kb3Q6Zz1lW24uJGdldENoaWxkcmVuQnlOYW1lXShsLCExKTticmVhaztjYXNlIGQuZG90RG90Omc9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0obCwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6Zz0oZz1lW24uJGdldENoaWxkcmVuQnlDbGFzc10obCkpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P2cuY2hpbGRyZW46W2ddfWlmKDA9PT1nLmxlbmd0aClyZXR1cm4gbShlLGEuc2xpY2UocykpO2lmKCEoaDxnLmxlbmd0aCkpcmV0dXJuIGFbc10uaW5kZXg9aC1nLmxlbmd0aCxtKGUsYS5zbGljZShzKSk7dmFyIHY9Z1toXTtpZighKHYgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIiksbnVsbDtlPXZ9cmV0dXJuIG51bGx9LHQuc2VhcmNoTm9kZT1mdW5jdGlvbihlLHQscil7dmFyIGE9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPXkociwhKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYyx1PXAuZ2V0KGlbMF0ubmFtZSksbD0wO3U/KGM9ITAsZT1bdShlLHQpXSxsPTEpOihjPW51bGw9PT10LGU9W3R8fGVdKTtmb3IodmFyIGY9ZnVuY3Rpb24ocil7dmFyIHMsdT1pW2xdLGY9dS5uYW1lLGg9dS5jYWNoZU5hbWUscD11Lm9wZXJhdG9yLHY9dS5pbmRleCx5PVtdLG09byhlKTt0cnl7Zm9yKG0ucygpOyEocz1tLm4oKSkuZG9uZTspe3ZhciBiPXMudmFsdWU7aWYoYiBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXt2YXIgdz12b2lkIDAsaz12b2lkIDA7aWYoYSYmKChrPWcuZ2V0KGIpKXx8KGs9bmV3IE1hcCxnLnNldChiLGspKSx3PWsuZ2V0KGgpKSwhdyl7c3dpdGNoKHApe2Nhc2UgZC5kb3Q6dz1iW24uJGdldENoaWxkcmVuQnlOYW1lXShmLCExKTticmVhaztjYXNlIGQuZG90RG90Onc9YltuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZiwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6dz0odz1iW24uJGdldENoaWxkcmVuQnlDbGFzc10oZikpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P3cuY2hpbGRyZW46W3ddfWEmJmsuc2V0KGgsdyl9dy5sZW5ndGg+MCYmeS5wdXNoKHcpfX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9aWYoMD09PXkubGVuZ3RoJiYhYyYmMD09PWwpe3ZhciBTPXRbbi4kZ2V0UGFyZW50XSgpO3JldHVybih0PVMpPyhsPS0xLGU9W3RdLCJjb250aW51ZSIpOnt2Om51bGx9fWU9aXNGaW5pdGUodik/eS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2PGUubGVuZ3RofSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdl19KSk6eS5mbGF0KCl9LGg9aS5sZW5ndGg7bDxoO2wrKyl7dmFyIHY9ZigpO2lmKCJjb250aW51ZSIhPT12JiYib2JqZWN0Ij09PXModikpcmV0dXJuIHYudn1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX07dmFyIG49cigyMDYpLGE9cigyMDgpLGk9cigyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2woZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGwoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgZj0vXlteLltdKy8saD0vXlteXF1dKy8sZD17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxwPW5ldyBNYXAoW1siJGRhdGEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmV9XSxbIiRyZWNvcmQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdfV0sWyIkdGVtcGxhdGUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGVtcGxhdGV9XSxbIiRjb25uZWN0aW9uU2V0IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbm5lY3Rpb25TZXR9XSxbIiRmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZvcm19XSxbIiRsYXlvdXQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGF5b3V0fV0sWyIkaG9zdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0fV0sWyIkZGF0YVdpbmRvdyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kYXRhV2luZG93fV0sWyIkZXZlbnQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlbnR9XSxbIiEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHN9XSxbIiR4ZmEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9XSxbInhmYSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX1dLFsiJCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH1dXSksZz1uZXcgV2Vha01hcCx2PWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIHkoZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChmKTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIGEsbz1jKG4sMSlbMF0scz1be25hbWU6byxjYWNoZU5hbWU6Ii4iK28saW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6ZC5kb3R9XSx1PW8ubGVuZ3RoO3U8ZS5sZW5ndGg7KXt2YXIgbD11O2lmKCJbIiE9PWUuY2hhckF0KHUrKykpe3ZhciBwPXZvaWQgMDtzd2l0Y2goZS5jaGFyQXQodSkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7dSsrLHA9ZC5kb3REb3Q7YnJlYWs7Y2FzZSIjIjp1KysscD1kLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtwPWQuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7cD1kLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6cD1kLmRvdH1pZighKG49ZS5zbGljZSh1KS5tYXRjaChmKSkpYnJlYWs7dSs9KG89YyhuLDEpWzBdKS5sZW5ndGgscy5wdXNoKHtuYW1lOm8sY2FjaGVOYW1lOmUuc2xpY2UobCx1KSxvcGVyYXRvcjpwLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9ZWxzZXtpZighKG49ZS5zbGljZSh1KS5tYXRjaChoKSkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7cy5hdCgtMSkuaW5kZXg9IioiPT09KGE9KGE9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQoYSwxMCl8fDAsdSs9blswXS5sZW5ndGgrMX19cmV0dXJuIHN9ZnVuY3Rpb24gbShlLHQpe3ZhciByLGE9bnVsbCxpPW8odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXtmb3IodmFyIHM9ci52YWx1ZSxjPXMubmFtZSx1PXMuaW5kZXgsbD0wLGY9aXNGaW5pdGUodSk/dTowO2w8PWY7bCsrKXt2YXIgaD1lW24uJG5hbWVzcGFjZUlkXT09PXY/LTE6ZVtuLiRuYW1lc3BhY2VJZF07YT1uZXcgbi5YbWxPYmplY3QoaCxjKSxlW24uJGFwcGVuZENoaWxkXShhKX1lPWF9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmRlcj12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTEpLGk9cigyMDkpLG89cigyMDgpLHM9cigyKTtmdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZihlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZihlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gaChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHA9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gZyhlKXt2YXIgdD1uZXcgYS5UZXh0KHt9KTtyZXR1cm4gdFtuLiRjb250ZW50XT1lLHR9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucm9vdD10LHRoaXMuZGF0YXNldHM9dC5kYXRhc2V0cyx0LmRhdGFzZXRzJiZ0LmRhdGFzZXRzLmRhdGE/dGhpcy5kYXRhPXQuZGF0YXNldHMuZGF0YTp0aGlzLmRhdGE9bmV3IG4uWG1sT2JqZWN0KG8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCJkYXRhIiksdGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoLHRoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT10LnRlbXBsYXRlW24uJGNsb25lXSgpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX2lzQ29uc3VtZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfX0se2tleToiX2lzTWF0Y2hUZW1wbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfX0se2tleToiYmluZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSksdGhpcy5mb3JtfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0se2tleToiX2JpbmRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKGVbbi4kZGF0YV09dCxlW24uJGhhc1NldHRhYmxlVmFsdWVdKCkpaWYodFtuLiRpc0RhdGFWYWx1ZV0oKSl7dmFyIGk9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oZyhpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmZS51aSYmZS51aS5jaG9pY2VMaXN0JiYibXVsdGlTZWxlY3QiPT09ZS51aS5jaG9pY2VMaXN0Lm9wZW4pe3ZhciBvPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRjb250ZW50XS50cmltKCl9KSkuam9pbigiXG4iKTtlW24uJHNldFZhbHVlXShnKG8pKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAscy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtuLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxzLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9fSx7a2V5OiJfZmluZERhdGFCeU5hbWVUb0NvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLGM9MDtjPDM7YysrKXtmb3IoaT1yW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtzPWkubmV4dCgpLnZhbHVlOylpZih0PT09c1tuLiRpc0RhdGFWYWx1ZV0oKSlyZXR1cm4gcztpZihyW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1yW24uJG5vZGVOYW1lXSlicmVhaztyPXJbbi4kZ2V0UGFyZW50XSgpfXJldHVybiBhJiYoKHM9KGk9dGhpcy5kYXRhW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCEwLCExKSkubmV4dCgpLnZhbHVlKXx8KHM9KGk9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSkubmV4dCgpLnZhbHVlKSYmc1tuLiRpc0RhdGFWYWx1ZV0oKSk/czpudWxsfX0se2tleToiX3NldFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSl7dmFyIHIsbz1sKGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7dmFyIGM9ci52YWx1ZSxmPWMucmVmLGg9Yy50YXJnZXQ7aWYoIWMuY29ubmVjdGlvbiYmZil7dmFyIGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxmLCExLCExKTtpZihkKXt2YXIgcD11KGQsMSlbMF07aWYocFtuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpe3ZhciBnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsaCwhMSwhMSk7aWYoZyl7dmFyIHY9dShnLDEpWzBdO2lmKHZbbi4kaXNEZXNjZW5kZW50XShlKSl7dmFyIHk9dltuLiRnZXRQYXJlbnRdKCk7aWYodiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fHkgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7ZWxzZSBpZih2IGluc3RhbmNlb2YgYS5CaW5kSXRlbXN8fHkgaW5zdGFuY2VvZiBhLkJpbmRJdGVtcykoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtlbHNle3ZhciBtPXBbbi4kdGV4dF0oKSxiPXZbbi4kbm9kZU5hbWVdO2lmKHYgaW5zdGFuY2VvZiBuLlhGQUF0dHJpYnV0ZSl7dmFyIHc9T2JqZWN0LmNyZWF0ZShudWxsKTt3W2JdPW07dmFyIGs9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKHkpLmNvbnN0cnVjdG9yLFt3XSk7eVtiXT1rW2JdfWVsc2Ugdi5oYXNPd25Qcm9wZXJ0eShuLiRjb250ZW50KT8odltuLiRkYXRhXT1wLHZbbi4kY29udGVudF09bSx2W24uJGZpbmFsaXplXSgpKTooMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogIi5jb25jYXQoaCwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoZiwiLiIpKX19fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfX19fSx7a2V5OiJfYmluZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoIml0ZW1zIikmJmUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpJiYhZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXt2YXIgcixvPWwoZS5pdGVtcy5jaGlsZHJlbik7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlO2Vbbi4kcmVtb3ZlQ2hpbGRdKGMpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1lLml0ZW1zLmNsZWFyKCk7dmFyIGY9bmV3IGEuSXRlbXMoe30pLGg9bmV3IGEuSXRlbXMoe30pO2Vbbi4kYXBwZW5kQ2hpbGRdKGYpLGUuaXRlbXMucHVzaChmKSxlW24uJGFwcGVuZENoaWxkXShoKSxlLml0ZW1zLnB1c2goaCk7dmFyIGQscD1sKGUuYmluZEl0ZW1zLmNoaWxkcmVuKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LnJlZixtPXYubGFiZWxSZWYsYj12LnZhbHVlUmVmO2lmKCF2LmNvbm5lY3Rpb24mJnkpe3ZhciB3PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQseSwhMSwhMSk7aWYodyl7dmFyIGssUz1sKHcpO3RyeXtmb3IoUy5zKCk7IShrPVMubigpKS5kb25lOyl7dmFyIHg9ay52YWx1ZTtpZih4W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpe3ZhciBPPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHgsbSwhMCwhMSk7aWYoTyl7dmFyIEE9dShPLDEpWzBdO2lmKEFbbi4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7dmFyIEM9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QseCxiLCEwLCExKTtpZihDKXt2YXIgRj11KEMsMSlbMF07aWYoRltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXt2YXIgUD1nKEFbbi4kdGV4dF0oKSksVD1nKEZbbi4kdGV4dF0oKSk7ZltuLiRhcHBlbmRDaGlsZF0oUCksZi50ZXh0LnB1c2goUCksaFtuLiRhcHBlbmRDaGlsZF0oVCksaC50ZXh0LnB1c2goVCl9ZWxzZSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogIi5jb25jYXQoYiwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiAiLmNvbmNhdChtLCIuIikpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZiAoIi5jb25jYXQoeSwiKTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpKX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoeSwiLiIpKX19fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfX19fSx7a2V5OiJfYmluZE9jY3VycmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE7aWYodC5sZW5ndGg+MSYmKChhPWVbbi4kY2xvbmVdKCkpW24uJHJlbW92ZUNoaWxkXShhLm9jY3VyKSxhLm9jY3VyPW51bGwpLHRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sciksdGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pLHRoaXMuX2JpbmRJdGVtcyhlLHRbMF0pLDEhPT10Lmxlbmd0aClmb3IodmFyIGk9ZVtuLiRnZXRQYXJlbnRdKCksbz1lW24uJG5vZGVOYW1lXSxzPWlbbi4kaW5kZXhPZl0oZSksYz0xLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGw9dFtjXSxmPWFbbi4kY2xvbmVdKCk7aVtvXS5wdXNoKGYpLGlbbi4kaW5zZXJ0QXRdKHMrYyxmKSx0aGlzLl9iaW5kVmFsdWUoZixsLHIpLHRoaXMuX3NldFByb3BlcnRpZXMoZixsKSx0aGlzLl9iaW5kSXRlbXMoZixsKX19fSx7a2V5OiJfY3JlYXRlT2NjdXJyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW1wdHlNZXJnZSl7dmFyIHQ9ZS5vY2N1cjtpZih0JiYhKHQuaW5pdGlhbDw9MSkpe3ZhciByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoclthXWluc3RhbmNlb2Ygbi5YRkFPYmplY3RBcnJheSl7dmFyIGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lLm5hbWV9KSkubGVuZ3RoOnJbYV0uY2hpbGRyZW4ubGVuZ3RoO3ZhciBvPXJbbi4kaW5kZXhPZl0oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe3ZhciBjPWVbbi4kY2xvbmVdKCk7Y1tuLiRyZW1vdmVDaGlsZF0oYy5vY2N1ciksYy5vY2N1cj1udWxsLHJbYV0ucHVzaChjKSxyW24uJGluc2VydEF0XShvLGMpO2Zvcih2YXIgdT0xO3U8czt1Kyspe3ZhciBsPWNbbi4kY2xvbmVdKCk7clthXS5wdXNoKGwpLHJbbi4kaW5zZXJ0QXRdKG8rdSxsKX19fX19fX0se2tleToiX2dldE9jY3VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5vY2N1cjtpZighcnx8IXQpcmV0dXJuWzEsMV07dmFyIG49LTE9PT1yLm1heD8xLzA6ci5tYXg7cmV0dXJuW3IubWluLG5dfX0se2tleToiX3NldEFuZEJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpLHRoaXMuX2JpbmRJdGVtcyhlLHQpLHRoaXMuX2JpbmRFbGVtZW50KGUsdCl9fSx7a2V5OiJfYmluZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7dmFyIGEsbz1sKGVbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioby5zKCk7IShhPW8ubigpKS5kb25lOyl7dmFyIGM9YS52YWx1ZTtpZighY1tuLiRkYXRhXSlpZih2b2lkIDAhPT10aGlzLl9tZXJnZU1vZGV8fCJzdWJmb3JtIiE9PWNbbi4kbm9kZU5hbWVdKXtpZihjW24uJGlzQmluZGFibGVdKCkpe3ZhciBmPSExLGg9bnVsbCxkPW51bGwsZz1udWxsO2lmKGMuYmluZCl7c3dpdGNoKGMuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGMsdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmY9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighYy5iaW5kLnJlZil7KDAscy53YXJuKSgiWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgIi5jb25jYXQoY1tuLiRub2RlTmFtZV0sIi4iKSksdGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWQ9Yy5iaW5kLnJlZn1jLmJpbmQucGljdHVyZSYmKGg9Yy5iaW5kLnBpY3R1cmVbbi4kY29udGVudF0pfXZhciB2PXUodGhpcy5fZ2V0T2NjdXJJbmZvKGMpLDIpLHk9dlswXSxtPXZbMV07aWYoZCl7aWYobnVsbD09PShnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsZCwhMCwhMSkpKXtpZighKGc9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsZCkpKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGdbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGMsZyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoZz1nLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbbi4kY29uc3VtZWRdfSkpKSxnLmxlbmd0aD5tP2c9Zy5zbGljZSgwLG0pOjA9PT1nLmxlbmd0aCYmKGc9bnVsbCksZyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZnLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWMubmFtZSl7dGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Zm9yKHZhciBiPVtdO2IubGVuZ3RoPG07KXt2YXIgdz10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjLm5hbWUsY1tuLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZik7aWYoIXcpYnJlYWs7d1tuLiRjb25zdW1lZF09ITAsYi5wdXNoKHcpfWc9Yi5sZW5ndGg+MD9iOm51bGx9ZWxzZXtpZighKGc9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYy5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlKSl7aWYoMD09PXkpe3IucHVzaChjKTtjb250aW51ZX12YXIgaz10W24uJG5hbWVzcGFjZUlkXT09PXA/LTE6dFtuLiRuYW1lc3BhY2VJZF07Zz1jW24uJGRhdGFdPW5ldyBuLlhtbE9iamVjdChrLGMubmFtZSksdGhpcy5lbXB0eU1lcmdlJiYoZ1tuLiRjb25zdW1lZF09ITApLHRbbi4kYXBwZW5kQ2hpbGRdKGcpLHRoaXMuX3NldEFuZEJpbmQoYyxnKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihnW24uJGNvbnN1bWVkXT0hMCksZz1bZ119fWc/dGhpcy5fYmluZE9jY3VycmVuY2VzKGMsZyxoKTp5PjA/dGhpcy5fc2V0QW5kQmluZChjLHQpOnIucHVzaChjKX19ZWxzZXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWMubWVyZ2VNb2RlO3ZhciBTPXRbbi4kZ2V0Q2hpbGRyZW5dKCk7aWYoUy5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYyxbU1swXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe3ZhciB4PXRbbi4kbmFtZXNwYWNlSWRdPT09cD8tMTp0W24uJG5hbWVzcGFjZUlkXSxPPWNbbi4kZGF0YV09bmV3IG4uWG1sT2JqZWN0KHgsYy5uYW1lfHwicm9vdCIpO3Rbbi4kYXBwZW5kQ2hpbGRdKE8pLHRoaXMuX2JpbmRFbGVtZW50KGMsTyl9fX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRnZXRQYXJlbnRdKClbbi4kcmVtb3ZlQ2hpbGRdKGUpfSkpfX1dKSYmZCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQmluZGVyPXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDt2YXIgbj1yKDIwNiksYT1yKDIwOCksaT1yKDIxMiksbz1yKDIxMykscz1yKDIwNyksYz1yKDIpLHU9cigyMTQpLGw9cigxMzUpLGY9cigyMDkpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGgoZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBkPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ayhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8QShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1oKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWgoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmIoZSx0KX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxiKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1rKGUpO2lmKHQpe3ZhciBhPWsodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gaz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sayhlKX1mdW5jdGlvbiBTKCl7Uz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBmPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fXZhciB2PXt9O2ModixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShQKFtdKSkpO20mJm0hPT10JiZyLmNhbGwobSxpKSYmKHY9bSk7dmFyIGI9Zy5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiB3KGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBrKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1oKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1mKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1mKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxmO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1nLG4oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLHAuZGlzcGxheU5hbWU9YyhnLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGsucHJvdG90eXBlKSxjKGsucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWssZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBrKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhiKSxjKGIscywiR2VuZXJhdG9yIiksYyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyhiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX0sZX12YXIgeD1TKCkubWFyayhMKTtmdW5jdGlvbiBPKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1BKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBBKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBDKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBGPWEuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLFA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUPS9eSChcZCspJC8sST1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLEU9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGooZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07dmFyIHQ9ZS5ib3JkZXJbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF8oZSx0KXtpZighZS52YWx1ZSl7dmFyIHI9bmV3IFZ0KHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLnZhbHVlPXJ9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24gTChlKXt2YXIgdCxyLGE7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDp0PU8oZVtuLiRnZXRDaGlsZHJlbl0oKSksaS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtpLm5leHQ9MTI7YnJlYWt9aWYoISgoYT1yLnZhbHVlKWluc3RhbmNlb2YgX3QpKXtpLm5leHQ9ODticmVha31yZXR1cm4gaS5kZWxlZ2F0ZVlpZWxkKGFbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCksInQwIiw3KTtjYXNlIDc6cmV0dXJuIGkuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgODpyZXR1cm4gaS5uZXh0PTEwLGE7Y2FzZSAxMDppLm5leHQ9MzticmVhaztjYXNlIDEyOmkubmV4dD0xNzticmVhaztjYXNlIDE0OmkucHJldj0xNCxpLnQxPWkuY2F0Y2goMSksdC5lKGkudDEpO2Nhc2UgMTc6cmV0dXJuIGkucHJldj0xNyx0LmYoKSxpLmZpbmlzaCgxNyk7Y2FzZSAyMDpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLHgsbnVsbCxbWzEsMTQsMTcsMjBdXSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS52YWxpZGF0ZSYmImVycm9yIj09PWUudmFsaWRhdGUubnVsbFRlc3R9ZnVuY3Rpb24gTihlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47dmFyIHQscj1udWxsLGE9TyhlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2lmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXtyPWk7YnJlYWt9fX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1pZighcnx8IXIucmVmKXJldHVybiB2b2lkKGVbbi4kdGFiSW5kZXhdPWVbbi4kZ2V0UGFyZW50XSgpW24uJHRhYkluZGV4XSk7dmFyIG89ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtuLiR0YWJJbmRleF09KytvW24uJHRhYkluZGV4XTt2YXIgcz1vW24uJHNlYXJjaE5vZGVdKHIucmVmLGUpO2lmKCFzKXJldHVybjtlPXNbMF19fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmFzc2lzdDtpZihyKXt2YXIgYT1yW24uJHRvSFRNTF0oKTthJiYodC50aXRsZT1hKTt2YXIgaT1yLnJvbGUubWF0Y2goVCk7aWYoaSl7dmFyIG89aVsxXTt0LnJvbGU9ImhlYWRpbmciLHRbImFyaWEtbGV2ZWwiXT1vfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBzPWVbbi4kZ2V0UGFyZW50XSgpOyJyb3ciPT09cy5sYXlvdXQmJihzLmFzc2lzdCYmIlRIIj09PXMuYXNzaXN0LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBCKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDt2YXIgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gJChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTtudWxsPT09dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUmJih0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lLHRbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCl9ZnVuY3Rpb24gWChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTt0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIEgoZSl7aWYoZVtuLiRleHRyYV0pcmV0dXJuITE7aWYoZVtuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSwiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7dmFyIHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj1udWxsO2lmKGUudGFyZ2V0KXtpZighKHI9dFtuLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW24uJGdldFBhcmVudF0oKSkpKXJldHVybiExO3I9clswXX12YXIgYT10W24uJGV4dHJhXSxpPWEuY3VycmVudFBhZ2VBcmVhLG89YS5jdXJyZW50Q29udGVudEFyZWE7aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4gciBpbnN0YW5jZW9mIGR0fHwocj1udWxsKSxlLnN0YXJ0TmV3PyhlW24uJGV4dHJhXS50YXJnZXQ9cnx8aSwhMCk6ISghcnx8cj09PWl8fChlW24uJGV4dHJhXS50YXJnZXQ9ciwwKSk7ciBpbnN0YW5jZW9mIHBlfHwocj1udWxsKTt2YXIgcyxjPXImJnJbbi4kZ2V0UGFyZW50XSgpLHU9YztpZihlLnN0YXJ0TmV3KWlmKHIpe3ZhciBsPWMuY29udGVudEFyZWEuY2hpbGRyZW4sZj1sLmluZGV4T2YobyksaD1sLmluZGV4T2Yocik7LTEhPT1mJiZmPGgmJih1PW51bGwpLHM9aC0xfWVsc2Ugcz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobyk7ZWxzZXtpZighcnx8cj09PW8pcmV0dXJuITE7cz1jLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSx1PWM9PT1pP251bGw6Y31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PXUsZVtuLiRleHRyYV0uaW5kZXg9cywhMH1mdW5jdGlvbiBxKGUsdCxyKXt2YXIgYT1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxpPWFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxvPXRbbi4kZ2V0U3ViZm9ybVBhcmVudF07dFtuLiRnZXRTdWJmb3JtUGFyZW50XT1mdW5jdGlvbigpe3JldHVybiBlfSxhW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dmFyIHM9dFtuLiR0b0hUTUxdKHIpO2Vbbi4kYWRkSFRNTF0ocy5odG1sLHMuYmJveCksYVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWksdFtuLiRnZXRTdWJmb3JtUGFyZW50XT1vfXZhciBHPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJhcHBlYXJhbmNlRmlsdGVyIikpLmlkPWUuaWR8fCIiLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImFyYyIsITApKS5jaXJjdWxhcj0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaGFuZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4uc3RhcnRBbmdsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksbi5zd2VlcEFuZ2xlPSgwLHMuZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVkZ2U9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkZ2V8fG5ldyBBZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZmlsbCYmInZpc2libGUiPT09dGhpcy5maWxsLnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO3ZhciBpPXt4bWxuczpQLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpZT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6UCxjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXt2YXIgYz10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdT10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAsbD10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxmPTUwKigxK01hdGguY29zKGMpKSxoPTUwKigxLU1hdGguc2luKGMpKSxkPTUwKigxK01hdGguY29zKGMrdSkpLHA9NTAqKDEtTWF0aC5zaW4oYyt1KSk7ZT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6UCxkOiJNICIuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIEEgNTAgNTAgMCAiKS5jb25jYXQobCwiIDAgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCksdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fSxPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciBnPXtuYW1lOiJzdmciLGNoaWxkcmVuOltlXSxhdHRyaWJ1dGVzOml9O3JldHVybiBNKHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbZ119KTooZy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZykpfX1dKSxyfShuLlhGQU9iamVjdCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiYXJlYSIsITApKS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cCh0LDQpLGE9clswXSxpPXJbMV0sbz1yWzJdLHM9clszXTt0aGlzW24uJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCxhK28pLHRoaXNbbi4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQsaStzKSx0aGlzW24uJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxyPXtzdHlsZTp0LGlkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAsby5pc1ByaW50T25seSkodGhpcykmJnIuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5IiksdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSk7dmFyIGE9W107dGhpc1tuLiRleHRyYV09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTt2YXIgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO3ZhciBjPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjphfSx1PVt0aGlzLngsdGhpcy55LHRoaXNbbi4kZXh0cmFdLndpZHRoLHRoaXNbbi4kZXh0cmFdLmhlaWdodF07cmV0dXJuIGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjLHUpfX1dKSxyfShuLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYXNzaXN0IiwhMCkpLmlkPWUuaWR8fCIiLG4ucm9sZT1lLnJvbGV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNwZWFrPW51bGwsbi50b29sVGlwPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtuLiRjb250ZW50XT90aGlzLnRvb2xUaXBbbi4kY29udGVudF06bnVsbH19XSkscn0obi5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJhcmNvZGUiLCEwKSkuY2hhckVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxuLmNoZWNrc3VtPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pLG4uZGF0YUNvbHVtbkNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZGF0YUxlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5kYXRhUHJlcD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pLG4uZGF0YVJvd0NvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZW5kQ2hhcj1lLmVuZENoYXJ8fCIiLG4uZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9OH19KSxuLmlkPWUuaWR8fCIiLG4ubW9kdWxlSGVpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSxuLm1vZHVsZVdpZHRoPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLG4ucHJpbnRDaGVja0RpZ2l0PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4ucm93Q29sdW1uUmF0aW89KDAscy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyksbi5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiLG4udGV4dExvY2F0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSksbi50cnVuY2F0ZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pLG4udXBzTW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53aWRlTmFycm93UmF0aW89KDAscy5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pLG4uZW5jcnlwdD1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJpbmQiLCEwKSkubWF0Y2g9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSksbi5yZWY9ZS5yZWZ8fCIiLG4ucGljdHVyZT1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJiaW5kSXRlbXMiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuQmluZEl0ZW1zPUo7dmFyIFo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJvb2tlbmQiKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksUT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYm9vbGVhbiIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSgxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19XSkscn0obi5PcHRpb24wMSksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImJvcmRlciIsITApKS5icmVhaz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKSxhLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY29ybmVyPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZWRnZT1uZXcgbi5YRkFPYmplY3RBcnJheSg0KSxhLmV4dHJhcz1udWxsLGEuZmlsbD1udWxsLGEubWFyZ2luPW51bGwsYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KWZvcih2YXIgdD1lLmF0KC0xKXx8bmV3IEFlKHt9KSxyPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGlja25lc3N9KSksaT1bMCwwLDAsMF07dGhpcy5tYXJnaW4mJihpWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0LGlbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldCxpWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0LGlbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0KSx0aGlzW24uJGV4dHJhXT17d2lkdGhzOmEsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbbi4kZXh0cmFdfX0se2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRFeHRyYV0oKS5lZGdlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kdG9TdHlsZV0oKTtyZXR1cm4gdC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCIsdH0pKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24odCx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSx0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbih0LHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKSx0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUucmFkaXVzfSkpKXt2YXIgcj10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlW24uJHRvU3R5bGVdKCl9KSk7aWYoMj09PXIubGVuZ3RofHwzPT09ci5sZW5ndGgpZm9yKHZhciBhPXIuYXQoLTEpLGk9ci5sZW5ndGg7aTw0O2krKylyLnB1c2goYSk7dC5ib3JkZXJSYWRpdXM9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhZGl1c30pKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6dC5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjp0LmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OnQuYm9yZGVyU3R5bGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlfSkpLmpvaW4oIiAiKX1yZXR1cm4gdC5ib3JkZXJXaWR0aD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh9KSkuam9pbigiICIpLHQuYm9yZGVyQ29sb3I9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkpLmpvaW4oIiAiKSx0fX1dKSxyfShuLlhGQU9iamVjdCksdGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJyZWFrIiwhMCkpLmFmdGVyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSksbi5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIixuLmJlZm9yZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSxuLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiIsbi5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiIsbi5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIixuLmlkPWUuaWR8fCIiLG4ub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiIsbi5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIixuLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxyZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtBZnRlciIsITApKS5pZD1lLmlkfHwiIixuLmxlYWRlcj1lLmxlYWRlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRhcmdldFR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxuZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtCZWZvcmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4uc3RhcnROZXc9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi50YXJnZXRUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKSxuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW24uJGV4dHJhXT17fSxzLkhUTUxSZXN1bHQuRkFJTFVSRX19XSkscn0obi5YRkFPYmplY3QpLGFlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJidXR0b24iLCEwKSkuaGlnaGxpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0saT1PKHIuZXZlbnQuY2hpbGRyZW4pO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZTtpZigiY2xpY2siPT09Yy5hY3Rpdml0eSYmYy5zY3JpcHQpe3ZhciB1PSgwLGwucmVjb3ZlckpzVVJMKShjLnNjcmlwdFtuLiRjb250ZW50XSk7aWYodSl7dmFyIGY9KDAsby5maXhVUkwpKHUudXJsKTtmJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW24uJHVpZF0saHJlZjpmLG5ld1dpbmRvdzp1Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX19fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxpZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FsY3VsYXRlIiwhMCkpLmlkPWUuaWR8fCIiLG4ub3ZlcnJpZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLm1lc3NhZ2U9bnVsbCxuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxvZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FwdGlvbiIsITApKS5pZD1lLmlkfHwiIixuLnBsYWNlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJlc2VydmU9TWF0aC5jZWlsKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4uZm9udD1udWxsLG4ubWFyZ2luPW51bGwsbi5wYXJhPW51bGwsbi52YWx1ZT1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kZ2V0RXh0cmEsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQ7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnI9dGhpcy5yZXNlcnZlPD0wP3I6dGhpcy5yZXNlcnZlfXRoaXNbbi4kZXh0cmFdPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6cn0pfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTt2YXIgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oZSkuaHRtbDtpZighdClyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgcj10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXt2YXIgYT10aGlzW24uJGdldEV4dHJhXShlKSxpPWEudyxjPWEuaDtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT1pO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWN9fXZhciB1PVtdOyJzdHJpbmciPT10eXBlb2YgdD91LnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6dS5wdXNoKHQpO3ZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihsLndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfXJldHVybigwLG8uc2V0UGFyYSkodGhpcyxudWxsLHQpLHRoaXNbbi4kcG9wUGFyYV0oKSx0aGlzLnJlc2VydmU9cixzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpsLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjp1fSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxjZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGVzIiwhMCkpLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi5pZD1lLmlkfHwiIixuLnVybD1lLnVybHx8IiIsbi51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVuY3J5cHRpb249bnVsbCxuLmlzc3VlcnM9bnVsbCxuLmtleVVzYWdlPW51bGwsbi5vaWRzPW51bGwsbi5zaWduaW5nPW51bGwsbi5zdWJqZWN0RE5zPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjaGVja0J1dHRvbiIsITApKS5pZD1lLmlkfHwiIixuLm1hcms9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSksbi5zaGFwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pLG4uc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT0oMCxvLnRvU3R5bGUpKCJtYXJnaW4iKSxjPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO2kud2lkdGg9aS5oZWlnaHQ9Yzt2YXIgdSxsPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxmPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW24uJHRvSFRNTF0oKS5odG1sfHxbXSxoPXtvbjoodm9pZCAwIT09ZlswXT9mWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1mWzFdP2ZbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbbi4kdGV4dF0oKXx8Im9mZiIpPT09aC5vbnx8dm9pZCAwLHA9bFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtuLiR1aWRdO3AgaW5zdGFuY2VvZiBSZT8oYT1wW24uJHVpZF0sdD0icmFkaW8iLHI9InhmYVJhZGlvIix1PXBbbi4kZGF0YV0mJnBbbi4kZGF0YV1bbi4kdWlkXXx8cFtuLiR1aWRdKToodD0iY2hlY2tib3giLHI9InhmYUNoZWNrYm94Iix1PWxbbi4kZGF0YV0mJmxbbi4kZGF0YV1bbi4kdWlkXXx8bFtuLiR1aWRdKTt2YXIgdj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTppLGZpZWxkSWQ6ZyxkYXRhSWQ6dSx0eXBlOnQsY2hlY2tlZDpkLHhmYU9uOmgub24seGZhT2ZmOmgub2ZmLCJhcmlhLWxhYmVsIjpCKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBhJiYodi5hdHRyaWJ1dGVzLm5hbWU9YSksUihsKSYmKHYuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHYuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt2XX0pfX1dKSxyfShuLlhGQU9iamVjdCksbGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNob2ljZUxpc3QiLCEwKSkuY29tbWl0T249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5vcGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSxuLnRleHRFbnRyeT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxvLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9ci5mb250JiZyLmZvbnQuc2l6ZXx8MTAsaT17Zm9udFNpemU6ImNhbGMoIi5jb25jYXQoYSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpfSxjPVtdO2lmKHIuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciB1PXIuaXRlbXMsbD0wLGY9MDsyPT09dS5jaGlsZHJlbi5sZW5ndGgmJihmPTEtKGw9dS5jaGlsZHJlblswXS5zYXZlKSk7Zm9yKHZhciBoPXUuY2hpbGRyZW5bbF1bbi4kdG9IVE1MXSgpLmh0bWwsZD11LmNoaWxkcmVuW2ZdW24uJHRvSFRNTF0oKS5odG1sLHA9ITEsZz1yLnZhbHVlJiZyLnZhbHVlW24uJHRleHRdKCl8fCIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kyspe3ZhciBtPXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmRbdl18fGhbdl0sc3R5bGU6aX0sdmFsdWU6aFt2XX07ZFt2XT09PWcmJihtLmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9cD0hMCksYy5wdXNoKG0pfXB8fGMuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfXZhciBiPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX07cmV0dXJuIFIocikmJihiWyJhcmlhLXJlcXVpcmVkIl09ITAsYi5yZXF1aXJlZD0hMCksIm11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKGIubXVsdGlwbGU9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46YyxhdHRyaWJ1dGVzOmJ9XX0pfX1dKSxyfShuLlhGQU9iamVjdCksZmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbG9yIiwhMCkpLmNTcGFjZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4udmFsdWU9ZS52YWx1ZT8oMCxzLmdldENvbG9yKShlLnZhbHVlKToiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1dKSxyfShuLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbWIiKSkuaWQ9ZS5pZHx8IiIsbi5udW1iZXJPZkNlbGxzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksZGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbm5lY3QiLCEwKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uaWQ9ZS5pZHx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udXNhZ2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5waWN0dXJlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb250ZW50QXJlYSIsITApKS5oPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KSxuLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxuLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxuLmRlc2M9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2xlZnQ6KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0scj1bInhmYUNvbnRlbnRhcmVhIl07cmV0dXJuKDAsby5pc1ByaW50T25seSkodGhpcykmJnIucHVzaCgieGZhUHJpbnRPbmx5Iikscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczpyLGlkOnRoaXNbbi4kdWlkXX19KX19XSkscn0obi5YRkFPYmplY3QpLGdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb3JuZXIiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5pbnZlcnRlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uam9pbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJhZGl1cz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyksbi5zdHJva2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSxuLnRoaWNrbmVzcz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtyZXR1cm4gZS5yYWRpdXM9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZSIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSh0aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCkseWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRhdGVUaW1lIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTt0aGlzW24uJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxtZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZVRpbWVFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGlja2VyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOnJbbi4kdWlkXSxkYXRhSWQ6cltuLiRkYXRhXSYmcltuLiRkYXRhXVtuLiR1aWRdfHxyW24uJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBSKHIpJiYoYS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsYS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxiZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGVjaW1hbCIpKS5mcmFjRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4uaWQ9ZS5pZHx8IiIsbi5sZWFkRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLHdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJkZWZhdWx0VWkiLCEwKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLGtlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkZXNjIiwhMCkpLmlkPWUuaWR8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksU2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5PcHRpb25PYmplY3QpLHhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkaWdlc3RNZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5kaWdlc3RNZXRob2Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLE9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkcmF3IiwhMCkpLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubG9jYWxlPWUubG9jYWxlfHwiIixhLm1heEg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSxhLm1heFc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSxhLm1pbkg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSxhLm1pblc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSxhLm5hbWU9ZS5uYW1lfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS5yb3RhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSU5MD09MH19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5ib3JkZXI9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5wYXJhPW51bGwsYS50cmF2ZXJzYWw9bnVsbCxhLnVpPW51bGwsYS52YWx1ZT1udWxsLGEuc2V0UHJvcGVydHk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe18odGhpcyxlKX0pKX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7KDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciB0PXRoaXMudyxyPXRoaXMuaCxhPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyxlKSxjPWEudyx1PWEuaCxsPWEuaXNCcm9rZW47aWYoYyYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7dGhpcy53PWN9aWYodSYmIiI9PT10aGlzLmgmJih0aGlzLmg9dSksJCh0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtYKHRoaXMpO3ZhciBmPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLG8uc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxmKSxmLm1hcmdpbiYmKGYucGFkZGluZz1mLm1hcmdpbixkZWxldGUgZi5tYXJnaW4pO3ZhciBoPVsieGZhRHJhdyJdO3RoaXMuZm9udCYmaC5wdXNoKCJ4ZmFGb250IiksKDAsby5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7dmFyIGQ9e3N0eWxlOmYsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOmh9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07RCh0aGlzLGQpO3ZhciBnPSgwLG8uY29tcHV0ZUJib3gpKHRoaXMscCxlKSx2PXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXY/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxvLmNyZWF0ZVdyYXBwZXIpKHRoaXMscCksZykpOihwLmNoaWxkcmVuLnB1c2godiksKDAsby5zZXRQYXJhKSh0aGlzLGYsdiksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxwKSxnKSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxBZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZWRnZSIsITApKS5jYXA9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnN0cm9rZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pLG4udGhpY2tuZXNzPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2lmKE9iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pLCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1dKSxyfShuLlhGQU9iamVjdCksQ2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksRmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY29kaW5ncyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0IiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNlcnRpZmljYXRlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFRlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0RGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZmlsdGVyPW51bGwsbi5tYW5pZmVzdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxJZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZW5jcnlwdGlvbiIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksamU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY3J5cHRpb25NZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5lbmNyeXB0aW9uTWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxNZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZXZlbnQiLCEwKSkuYWN0aXZpdHk9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKSxuLmlkPWUuaWR8fCIiLG4ubGlzdGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5lbmNyeXB0RGF0YT1udWxsLG4uZXhlY3V0ZT1udWxsLG4uc2NyaXB0PW51bGwsbi5zaWduRGF0YT1udWxsLG4uc3VibWl0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLF9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJleERhdGEiKSkuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiIsbi5ocmVmPWUuaHJlZnx8IiIsbi5pZD1lLmlkfHwiIixuLm1heExlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTF9fSksbi5uYW1lPWUubmFtZXx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRpc0NEQVRBWG1sLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfX0se2tleTpuLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWR8fCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKSYmKHRoaXNbbi4kY29udGVudF09ZSwhMCl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XVtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5Db250ZW50T2JqZWN0KSxMZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXhPYmplY3QiLCEwKSkuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiLGEuY2xhc3NJZD1lLmNsYXNzSWR8fCIiLGEuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiIsYS5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIixhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJleGNsR3JvdXAiLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIixhLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubGF5b3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSksYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLnc9ZS53PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsYS54PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksYS55PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksYS5hc3Npc3Q9bnVsbCxhLmJpbmQ9bnVsbCxhLmJvcmRlcj1udWxsLGEuY2FsY3VsYXRlPW51bGwsYS5jYXB0aW9uPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS52YWxpZGF0ZT1udWxsLGEuY29ubmVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV2ZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmllbGQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0LHI9Tyh0aGlzLmZpZWxkLmNoaWxkcmVuKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7aWYoIWEudmFsdWUpe3ZhciBpPW5ldyBWdCh7fSk7YVtuLiRhcHBlbmRDaGlsZF0oaSksYS52YWx1ZT1pfWEudmFsdWVbbi4kc2V0VmFsdWVdKGUpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSl9LHtrZXk6bi4kaXNUaGVyZU1vcmVXaWR0aCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEoZS5sYXlvdXQmJmUubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbbi4kZXh0cmFdLm51bWJlckluTGluZXx8KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITAsMCkpKX19LHtrZXk6bi4kZmx1c2hIVE1MLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9fSx7a2V5Om4uJGdldEF2YWlsYWJsZVNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtpZihOKHRoaXMpLCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTsoMCxvLmZpeERpbWVuc2lvbnMpKHRoaXMpO3ZhciB0PVtdLHI9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAsby5zZXRBY2Nlc3MpKHRoaXMsci5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6cixhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO3ZhciBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fCQodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBzLkhUTUxSZXN1bHQuRkFJTFVSRTt2YXIgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgdT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9dSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfXZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYUV4Y2xncm91cCJdLGg9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aCYmZi5wdXNoKGgpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWYsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQscD1kPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PHA7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgZz10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmMsaW5jbHVkZTohMH0pO2lmKGcuc3VjY2VzcylicmVhaztpZihnLmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGc7aWYoZCYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PXA7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSxhfHxYKHRoaXMpLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1wKXJldHVybiBhfHxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIHY9MCx5PTA7dGhpcy5tYXJnaW4mJih2PXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0LHk9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBtPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLndpZHRoK3YsdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCksdz1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykobSkpLCIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKGIpKTt2YXIgaz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIEQodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLGspLHcpfX1dKSxyfShuLlhGQU9iamVjdCksTmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImV4ZWN1dGUiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uZXhlY3V0ZVR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pLG4uaWQ9ZS5pZHx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXh0cmFzIiwhMCkpLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXh0cmFzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksQmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImZpZWxkIiwhMCkpLmFjY2Vzcz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSxhLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5oPWUuaD8oMCxzLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLGEuaEFsaWduPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEucm90YXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUlOTA9PTB9fSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEudz1lLnc/KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KToiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmFzc2lzdD1udWxsLGEuYmluZD1udWxsLGEuYm9yZGVyPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEuZm9ybWF0PW51bGwsYS5pdGVtcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKSxhLmtlZXA9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS51aT1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhbHVlPW51bGwsYS5iaW5kSXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb25uZWN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKE4odGhpcyksIXRoaXMudWkpe3ZhciB0O3N3aXRjaCh0aGlzLnVpPW5ldyB6dCh7fSksdGhpcy51aVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpLHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6dD1uZXcgVXQoe30pLHRoaXMudWkudGV4dEVkaXQ9dDticmVhaztjYXNlIDE6dD1uZXcgdWUoe30pLHRoaXMudWkuY2hlY2tCdXR0b249dDticmVhaztjYXNlIDI6dD1uZXcgbGUoe30pLHRoaXMudWkuY2hvaWNlTGlzdD10fXRoaXMudWlbbi4kYXBwZW5kQ2hpbGRdKHQpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW24uJGV4dHJhXSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciByPXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bbi4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsYz10aGlzLmgsbD0wLGY9MDt0aGlzLm1hcmdpbiYmKGw9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsZj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIGg9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe3ZhciBkPW51bGwsZz1udWxsLHY9MCx5PTA7aWYodGhpcy51aS5jaGVja0J1dHRvbil2PXk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7dmFyIG09KDAsby5sYXlvdXROb2RlKSh0aGlzLGUpLGI9bS53LHc9bS5oO251bGwhPT1iPyh2PWIseT13KTp5PSgwLHUuZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9aWYodis9KGg9aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKSkudyx5Kz1oLmgsdGhpcy5jYXB0aW9uKXt2YXIgaz10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLFM9ay53LHg9ay5oO2lmKGsuaXNCcm9rZW4mJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7c3dpdGNoKGQ9UyxnPXgsdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6ZCs9djticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmcrPXl9fWVsc2UgZD12LGc9eTtkJiYiIj09PXRoaXMudyYmKGQrPWwsdGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPGQ/ZDp0aGlzLm1pblcpKSxnJiYiIj09PXRoaXMuaCYmKGcrPWYsdGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGc/Zzp0aGlzLm1pbkgpKX1pZih0aGlzW24uJHBvcFBhcmFdKCksKDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PWEsdGhpcy5oPWMsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5GQUlMVVJFO1godGhpcyk7dmFyIE89KDAsby50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAsby5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLE8pO3ZhciBBPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJkEucHVzaCgieGZhRm9udCIpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZBLnB1c2goInhmYVByaW50T25seSIpO3ZhciBDPXtzdHlsZTpPLGlkOnRoaXNbbi4kdWlkXSxjbGFzczpBfTtPLm1hcmdpbiYmKE8ucGFkZGluZz1PLm1hcmdpbixkZWxldGUgTy5tYXJnaW4pLCgwLG8uc2V0QWNjZXNzKSh0aGlzLEEpLHRoaXMubmFtZSYmKEMueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBGPVtdLFA9e25hbWU6ImRpdiIsYXR0cmlidXRlczpDLGNoaWxkcmVuOkZ9O0QodGhpcyxDKTt2YXIgVD10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltuLiR0b1N0eWxlXSgpOm51bGwsST0oMCxvLmNvbXB1dGVCYm94KSh0aGlzLFAsZSksRT10aGlzLnVpW24uJHRvSFRNTF0oKS5odG1sO2lmKCFFKXJldHVybiBPYmplY3QuYXNzaWduKE8sVCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO3RoaXNbbi4kdGFiSW5kZXhdJiYoRS5jaGlsZHJlbiYmRS5jaGlsZHJlblswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tuLiR0YWJJbmRleF06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdKSxFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIE09bnVsbDtpZih0aGlzLnVpLmJ1dHRvbj8oMT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoTT1wKEUuY2hpbGRyZW4uc3BsaWNlKDAsMSksMSlbMF0pLE9iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLFQpKTpPYmplY3QuYXNzaWduKE8sVCksRi5wdXNoKEUpLHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpRS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbbi4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXt2YXIgXz0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSlfPXRoaXMudmFsdWUuZXhEYXRhW24uJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpXz10aGlzLnZhbHVlLnRleHRbbi4kZ2V0RXh0cmFdKCk7ZWxzZXt2YXIgTD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT1MJiYoXz1MLmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQmJnRoaXMudmFsdWUudGV4dC5tYXhDaGFycyYmKEUuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSxfJiYodGhpcy51aS5udW1lcmljRWRpdCYmKF89cGFyc2VGbG9hdChfKSxfPWlzTmFOKF8pPyIiOl8udG9TdHJpbmcoKSksInRleHRhcmVhIj09PUUuY2hpbGRyZW5bMF0ubmFtZT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9XzpFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9Xyl9aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZFLmNoaWxkcmVuJiZFLmNoaWxkcmVuWzBdJiZ0aGlzLmgpe2g9aHx8aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKTt2YXIgUj0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7KFI9dGhpcy5jYXB0aW9uLnJlc2VydmUpPD0wJiYoUj10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLmgpO3ZhciBCPXRoaXMuaC1SLWYtaC5oO0UuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKEIpfWVsc2UgRS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoTSYmRS5jaGlsZHJlbi5wdXNoKE0pLCFyKXJldHVybiBFLmF0dHJpYnV0ZXMuY2xhc3MmJkUuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PWEsdGhpcy5oPWMscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBPLnBhZGRpbmcmJmRlbGV0ZSBPLnBhZGRpbmcsImRpdiI9PT1yLm5hbWUmJihyLm5hbWU9InNwYW4iKSxFLmNoaWxkcmVuLnB1c2gocikscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoUCxJKTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKHIuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksRS5hdHRyaWJ1dGVzLmNsYXNzfHwoRS5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxFLmNoaWxkcmVuLnNwbGljZSgwLDAsciksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1hLHRoaXMuaD1jLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxQKSxJKX19XSkscn0obi5YRkFPYmplY3QpO3QuRmllbGQ9QmU7dmFyIFVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmaWxsIiwhMCkpLmlkPWUuaWR8fCIiLG4ucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG4ubGluZWFyPW51bGwsbi5wYXR0ZXJuPW51bGwsbi5yYWRpYWw9bnVsbCxuLnNvbGlkPW51bGwsbi5zdGlwcGxlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PWVbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT0iY29sb3IiLGk9YTtlIGluc3RhbmNlb2YgZWUmJihhPSJiYWNrZ3JvdW5kLWNvbG9yIixpPSJiYWNrZ3JvdW5kIix0IGluc3RhbmNlb2YgenQmJihyLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKGUgaW5zdGFuY2VvZiB4dHx8ZSBpbnN0YW5jZW9mIHopJiYoYT1pPSJmaWxsIixyLmZpbGw9IndoaXRlIik7dmFyIG8scz1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBjPW8udmFsdWU7aWYoImV4dHJhcyIhPT1jJiYiY29sb3IiIT09Yyl7dmFyIHU9dGhpc1tjXTtpZih1IGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBsPXVbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIGwmJihyW2wuc3RhcnRzV2l0aCgiIyIpP2E6aV09bCkscn19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZj10aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk7cltmLnN0YXJ0c1dpdGgoIiMiKT9hOmldPWZ9cmV0dXJuIHJ9fV0pLHJ9KG4uWEZBT2JqZWN0KSwkZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZmlsdGVyIiwhMCkpLmFkZFJldm9jYXRpb25JbmZvPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52ZXJzaW9uPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6bi52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD01fX0pLG4uYXBwZWFyYW5jZUZpbHRlcj1udWxsLG4uY2VydGlmaWNhdGVzPW51bGwsbi5kaWdlc3RNZXRob2RzPW51bGwsbi5lbmNvZGluZ3M9bnVsbCxuLmVuY3J5cHRpb25NZXRob2RzPW51bGwsbi5oYW5kbGVyPW51bGwsbi5sb2NrRG9jdW1lbnQ9bnVsbCxuLm1kcD1udWxsLG4ucmVhc29ucz1udWxsLG4udGltZVN0YW1wPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmbG9hdCIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmb250IiwhMCkpLmJhc2VsaW5lU2hpZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KSxuLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAscy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5mb250VmVydGljYWxTY2FsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5pZD1lLmlkfHwiIixuLmtlcm5pbmdNb2RlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksbi5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLG4ubGluZVRocm91Z2g9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZXx8Mj09PWV9fSksbi5saW5lVGhyb3VnaFBlcmlvZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSksbi5vdmVybGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfHwyPT09ZX19KSxuLm92ZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKSxuLnBvc3R1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKSxuLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iiksbi50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciIsbi51bmRlcmxpbmU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDI9PT1lfX0pLG4udW5kZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4ud2VpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksbi5leHRyYXM9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kY2xlYW4sdmFsdWU6ZnVuY3Rpb24oZSl7ZChrKHIucHJvdG90eXBlKSxuLiRjbGVhbix0aGlzKS5jYWxsKHRoaXMsZSksdGhpc1tuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX19LHtrZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtyZXR1cm4gdCYmKCIjMDAwMDAwIj09PXQ/ZGVsZXRlIGUuY29sb3I6dC5zdGFydHNXaXRoKCIjIil8fChlLmJhY2tncm91bmQ9dCxlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IixlLmNvbG9yPSJ0cmFuc3BhcmVudCIpKSx0aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpLGUuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCIsZS5sZXR0ZXJTcGFjaW5nPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpLDAhPT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIiwyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLDAhPT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiLDI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlLGUuZm9udFNpemU9KDAsby5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpLCgwLG8uc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKSwwIT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLDI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLGUuZm9udFdlaWdodD10aGlzLndlaWdodCxlfX1dKSxyfShuLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImZvcm1hdCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLnBpY3R1cmU9bnVsbCxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksR2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImhhbmRsZXIiKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCksemU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImh5cGhlbmF0aW9uIikpLmV4Y2x1ZGVBbGxDYXBzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5leGNsdWRlSW5pdGlhbENhcD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaHlwaGVuYXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53b3JkQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksV2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImltYWdlIikpLmFzcGVjdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIixuLmhyZWY9ZS5ocmVmfHwiIixuLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhSS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO3ZhciBlPXRoaXNbbi4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbbi4kY29udGVudF0pKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGMuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW24uJGNvbnRlbnRdKSkpLCFlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcih2YXIgdD0wLHI9RTt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9cChyW3RdLDIpLGk9YVswXSxvPWFbMV07aWYoZS5sZW5ndGg+aS5sZW5ndGgmJmkuZXZlcnkoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT1lW3JdfSkpKXt0aGlzLmNvbnRlbnRUeXBlPW87YnJlYWt9fWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFl9dmFyIHUsbD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6dT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOnU9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOnU9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX12YXIgZj10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOnUsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwobCksYWx0OmY/QihmW24uJGdldFBhcmVudF0oKSk6bnVsbH19KX19XSkscn0obi5TdHJpbmdPYmplY3QpLFZlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJpbWFnZUVkaXQiLCEwKSkuZGF0YT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9zLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShuLlhGQU9iamVjdCksWWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImludGVnZXIiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KHRoaXNbbi4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW24uJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksS2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImlzc3VlcnMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmNlcnRpZmljYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiaXRlbXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlZj1lLnJlZnx8IiIsYS5zYXZlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5ib29sZWFuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGVjaW1hbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1PKHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTt0LnB1c2goYVtuLiR0ZXh0XSgpKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfX1dKSxyfShuLlhGQU9iamVjdCk7dC5JdGVtcz1KZTt2YXIgWmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjt5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwia2VlcCIsITApKS5pZD1lLmlkfHwiIjt2YXIgYT1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07cmV0dXJuIG4uaW50YWN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCxhKSxuLm5leHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCxhKSxuLnByZXZpb3VzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLGEpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxRZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3kodGhpcyxyKTt2YXIgYT1bIiIsInllcyIsIm5vIl07cmV0dXJuKG49dC5jYWxsKHRoaXMsRiwia2V5VXNhZ2UiKSkuY3JsU2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLGEpLG4uZGF0YUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LGEpLG4uZGVjaXBoZXJPbmx5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSxhKSxuLmRpZ2l0YWxTaWduYXR1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSxhKSxuLmVuY2lwaGVyT25seT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksYSksbi5pZD1lLmlkfHwiIixuLmtleUFncmVlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsYSksbi5rZXlDZXJ0U2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbixhKSxuLmtleUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsYSksbi5ub25SZXB1ZGlhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbixhKSxuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxldD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibGluZSIsITApKS5oYW5kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5zbG9wZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5lZGdlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGM9dGhpcy5lZGdlfHxuZXcgQWUoe30pLHU9Y1tuLiR0b1N0eWxlXSgpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxmPSJ2aXNpYmxlIj09PWMucHJlc2VuY2U/Yy50aGlja25lc3M6MDtsLnN0cm9rZVdpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShmKSxsLnN0cm9rZT11LmNvbG9yO3ZhciBoPSIxMDAlIixkPSIxMDAlIjtpLnc8PWY/KGU9IjUwJSIsdD0wLHI9IjUwJSIsYT0iMTAwJSIsaD1sLnN0cm9rZVdpZHRoKTppLmg8PWY/KGU9MCx0PSI1MCUiLHI9IjEwMCUiLGE9IjUwJSIsZD1sLnN0cm9rZVdpZHRoKToiXFwiPT09dGhpcy5zbG9wZT8oZT0wLHQ9MCxyPSIxMDAlIixhPSIxMDAlIik6KGU9MCx0PSIxMDAlIixyPSIxMDAlIixhPTApO3ZhciBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6UCx4MTplLHkxOnQseDI6cix5MjphLHN0eWxlOmx9fV0sYXR0cmlidXRlczp7eG1sbnM6UCx3aWR0aDpoLGhlaWdodDpkLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07cmV0dXJuIE0oaSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KToocC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCkpfX1dKSxyfShuLlhGQU9iamVjdCksdHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxpbmVhciIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpLHI9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodCwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQociwiKSIpfX1dKSxyfShuLlhGQU9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxvY2tEb2N1bWVudCIpKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09KDAscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbbi4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksbnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsIm1hbmlmZXN0IiwhMCkpLmFjdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKSxhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEucmVmPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxhdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibWFyZ2luIiwhMCkpLmJvdHRvbUluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKSxuLmlkPWUuaWR8fCIiLG4ubGVmdEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIiksbi5yaWdodEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpLG4udG9wSW5zZXQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1dKSxyfShuLlhGQU9iamVjdCksaXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1kcCIpKS5pZD1lLmlkfHwiIixuLnBlcm1pc3Npb25zPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDM9PT1lfX0pLG4uc2lnbmF0dXJlVHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1lZGl1bSIpKS5pZD1lLmlkfHwiIixuLmltYWdpbmdCQm94PSgwLHMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksbi5sb25nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksbi5vcmllbnRhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLG4uc2hvcnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksbi5zdG9jaz1lLnN0b2NrfHwiIixuLnRyYXlJbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksbi50cmF5T3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxzdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwibWVzc2FnZSIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxjdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibnVtZXJpY0VkaXQiLCEwKSkuaFNjcm9sbFBvbGljeT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5jb21iPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIikscj10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCksYT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOkIociksImFyaWEtcmVxdWlyZWQiOiExfX07cmV0dXJuIFIocikmJihhLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMCxhLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19XSkscn0obi5YRkFPYmplY3QpLHV0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvY2N1ciIsITApKS5pZD1lLmlkfHwiIixuLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pOiIiLG4ubWF4PSIiIT09ZS5tYXg/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KToiIixuLm1pbj0iIiE9PWUubWluPygwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSk6IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGNsZWFuLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIGR0fHxlIGluc3RhbmNlb2YgcHQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBkdHx8ZSBpbnN0YW5jZW9mIHB0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBEdD8xOnRoaXMubWluKX19XSkscn0obi5YRkFPYmplY3QpLGx0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvaWQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxmdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwib2lkcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEub2lkPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxodD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwib3ZlcmZsb3ciKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpLHI9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxhPXRbbi4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W24uJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW24uJGV4dHJhXT17dGFyZ2V0OnImJnJbMF18fG51bGwsbGVhZGVyOmEmJmFbMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19fV0pLHJ9KG4uWEZBT2JqZWN0KSxkdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicGFnZUFyZWEiLCEwKSkuYmxhbmtPck5vdEJsYW5rPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksYS5pZD1lLmlkfHwiIixhLmluaXRpYWxOdW1iZXI9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5uYW1lPWUubmFtZXx8IiIsYS5udW1iZXJlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5vZGRPckV2ZW49KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKSxhLnBhZ2VQb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEubWVkaXVtPW51bGwsYS5vY2N1cj1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbnRlbnRBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZHJhdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNVc2FibGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0/IXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4Oih0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0sITApfX0se2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19fSx7a2V5Om4uJGdldE5leHRQYWdlLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7dmFyIGU9W107dGhpc1tuLiRleHRyYV0uY2hpbGRyZW49ZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe3ZhciByPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1yLHRoaXNbbi4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pLHRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbbi4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1dKSxyfShuLlhGQU9iamVjdCkscHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInBhZ2VTZXQiLCEwKSkuZHVwbGV4SW1wb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZXh0cmFzPW51bGwsYS5vY2N1cj1udWxsLGEucGFnZUFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYWdlU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PU8odGhpcy5wYWdlQXJlYS5jaGlsZHJlbik7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWVbbi4kY2xlYW5QYWdlXSgpfWNhdGNoKGUpe3QuZShlKX1maW5hbGx5e3QuZigpfXZhciByLGE9Tyh0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOylyLnZhbHVlW24uJGNsZWFuUGFnZV0oKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX19fSx7a2V5Om4uJGlzVXNhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fX0se2tleTpuLiRnZXROZXh0UGFnZSx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pLCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4Kz0xLHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTEsdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bbi4kZ2V0TmV4dFBhZ2VdKCk7aWYodGhpc1tuLiRpc1VzYWJsZV0oKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTEsdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4PS0xLHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMSx0aGlzW24uJGdldE5leHRQYWdlXSgpO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2Ygcj9lW24uJGdldE5leHRQYWdlXSgpOih0aGlzW24uJGNsZWFuUGFnZV0oKSx0aGlzW24uJGdldE5leHRQYWdlXSgpKX12YXIgdD10aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFnZU51bWJlcixhPXQlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09dD8iZmlyc3QiOiJyZXN0IixvPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2RkT3JFdmVuPT09YSYmZS5wYWdlUG9zaXRpb249PT1pfSkpO3JldHVybiBvfHwoKG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWl9KSkpP286KG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9ufSkpKXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxndD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFyYSIsITApKS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4ubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIixuLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsbi5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLG4ub3JwaGFucz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnByZXNlcnZlPWUucHJlc2VydmV8fCIiLG4ucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIixuLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiIsbi5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxzLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiLG4udGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAscy5nZXRNZWFzdXJlbWVudCkobi50YWJEZWZhdWx0KToiIixuLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMj09MT8oMCxzLmdldE1lYXN1cmVtZW50KShlKTplfSkpLG4udGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52QWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG4ud2lkb3dzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5oeXBoZW5hdGlvbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAsby50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTtyZXR1cm4iIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpLCIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKSwiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSksIiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpLCIiIT09dGhpcy50ZXh0SW5kZW50JiYoZS50ZXh0SW5kZW50PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpLCgwLG8uZml4VGV4dEluZGVudCkoZSkpLHRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKSwiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSksdGhpcy50YWJTdG9wcy5sZW5ndGgsdGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW24uJHRvU3R5bGVdKCkpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFzc3dvcmRFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx5dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGF0dGVybiIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7dmFyIHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHI9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9IiIuY29uY2F0KGUsIiwiKS5jb25jYXQoZSwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCgxMCwicHgiKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpICIpLmNvbmNhdChyLCIodG8gcmlnaHQsIikuY29uY2F0KGEsIikiKTtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybiIiLmNvbmNhdChyLCIoNDVkZWcsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuIiIuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImhvcml6b250YWwiOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpfXJldHVybiIifX1dKSxyfShuLlhGQU9iamVjdCksbXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInBpY3R1cmUiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxidD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicHJvdG8iLCEwKSkuYXBwZWFyYW5jZUZpbHRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyYz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5hc3Npc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5iYXJjb2RlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYmluZEl0ZW1zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYm9va2VuZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5ib3JkZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVhaz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJ1dHRvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhbGN1bGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhcHRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jZXJ0aWZpY2F0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNlcnRpZmljYXRlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNoZWNrQnV0dG9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY2hvaWNlTGlzdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbG9yPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY29tYj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb250ZW50QXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvcm5lcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWZhdWx0VWk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZXNjPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNvZGluZ3M9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdGlvbk1ldGhvZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmVuY3J5cHRpb25NZXRob2RzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4ZWN1dGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leHRyYXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWVsZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpbGw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWx0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZvbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mb3JtYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5oYW5kbGVyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaHlwaGVuYXRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pc3N1ZXJzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5rZWVwPW5ldyBuLlhGQU9iamVjdEFycmF5LGEua2V5VXNhZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5saW5lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubGluZWFyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubG9ja0RvY3VtZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEubWFuaWZlc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tYXJnaW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZHA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZWRpdW09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubnVtZXJpY0VkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vY2N1cj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZHM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vdmVyZmxvdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhZ2VBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGFnZVNldD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXNzd29yZEVkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGljdHVyZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJhZGlhbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbnM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWN0YW5nbGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWY9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zY3JpcHQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmF0dXJlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmluZz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNvbGlkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3BlYWs9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdGlwcGxlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE5zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3VibWl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRleHRFZGl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWVTdGFtcD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRvb2xUaXA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnVpPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudmFsaWRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS52YWx1ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnZhcmlhYmxlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksd3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInJhZGlhbCIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0idG9FZGdlIj09PXRoaXMudHlwZT8iIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0KToiIi5jb25jYXQodCwiLCIpLmNvbmNhdChlKTtyZXR1cm4icmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICIuY29uY2F0KHIsIikiKX19XSkscn0obi5YRkFPYmplY3QpLGt0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWFzb24iKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxTdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVhc29ucyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEucmVhc29uPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx4dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVjdGFuZ2xlIiwhMCkpLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5jb3JuZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZmlsbD1udWxsLGF9cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgQWUoe30pLHQ9ZVtuLiR0b1N0eWxlXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKHIsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpOnIuZmlsbD0idHJhbnNwYXJlbnQiLHIuc3Ryb2tlV2lkdGg9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCksci5zdHJva2U9dC5jb2xvcjt2YXIgYT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBnZSh7fSkpW24uJHRvU3R5bGVdKCksaT17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDphLnJhZGl1cyxyeTphLnJhZGl1cyxzdHlsZTpyfX1dLGF0dHJpYnV0ZXM6e3htbG5zOlAsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gTSh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP3MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk6KGkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpKX19XSkscn0obi5YRkFPYmplY3QpLE90PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWYiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxBdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2NyaXB0IikpLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIixuLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxDdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2V0UHJvcGVydHkiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ucmVmPWUucmVmfHwiIixuLnRhcmdldD1lLnRhcmdldHx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuU2V0UHJvcGVydHk9Q3Q7dmFyIEZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduRGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksbi5yZWY9ZS5yZWZ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5maWx0ZXI9bnVsbCxuLm1hbmlmZXN0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFB0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduYXR1cmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLmZpbHRlcj1udWxsLG4ubWFuaWZlc3Q9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxUdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic2lnbmluZyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzb2xpZCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1dKSxyfShuLlhGQU9iamVjdCksRXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInNwZWFrIikpLmRpc2FibGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmlvcml0eT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSxuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxqdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3RpcHBsZSIsITApKS5pZD1lLmlkfHwiIixuLnJhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1dKSxyfShuLlhGQU9iamVjdCksTXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInN1YmZvcm0iLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWxsb3dNYWNybz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiItMSI9PT1lPy0xOigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpfSkpLGEuaD1lLmg/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIixhLmhBbGlnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLGEuaWQ9ZS5pZHx8IiIsYS5sYXlvdXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSxhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5tZXJnZU1vZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pLGEubWluSD0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLGEubWluVz0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLGEubmFtZT1lLm5hbWV8fCIiLGEucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksYS5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxhLnJlc3RvcmVTdGF0ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pLGEuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5iaW5kPW51bGwsYS5ib29rZW5kPW51bGwsYS5ib3JkZXI9bnVsbCxhLmJyZWFrPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5vY2N1cj1udWxsLGEub3ZlcmZsb3c9bnVsbCxhLnBhZ2VTZXQ9bnVsbCxhLnBhcmE9bnVsbCxhLnRyYXZlcnNhbD1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhcmlhYmxlcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kcmF3PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucHJvdG89bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJmb3JtU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRnZXRTdWJmb3JtUGFyZW50LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBfdD9lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRpc1RoZXJlTW9yZVdpZHRoLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW24uJGdldFBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpfX0se2tleTpuLiRnZXRDb250YWluZWRDaGlsZHJlbix2YWx1ZTpTKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChMKHRoaXMpLCJ0MCIsMSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKX0se2tleTpuLiRmbHVzaEhUTUwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9fSx7a2V5Om4uJGFkZEhUTUwsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX19LHtrZXk6bi4kZ2V0QXZhaWxhYmxlU3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iil8fHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdD8odGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMSwhMSk6IShlLmxheW91dCYmZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSx0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe3ZhciB0PW5ldyByZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO3Rbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0KSx0aGlzLmJyZWFrQWZ0ZXIucHVzaCh0KX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7dmFyIHI9bmV3IG5lKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtyW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0ociksdGhpcy5icmVha0JlZm9yZS5wdXNoKHIpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7dmFyIGE9bmV3IGh0KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7YVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGEpLHRoaXMub3ZlcmZsb3cucHVzaChhKX10aGlzW24uJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKSx0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2lmKCh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgdT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKEgodSkpcmV0dXJuIHMuSFRNTFJlc3VsdC5icmVha05vZGUodSl9aWYodGhpc1tuLiRleHRyYV0mJnRoaXNbbi4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZOygwLG8uZml4RGltZW5zaW9ucykodGhpcyk7dmFyIGw9W10sZj17aWQ6dGhpc1tuLiR1aWRdLGNsYXNzOltdfTsoMCxvLnNldEFjY2VzcykodGhpcyxmLmNsYXNzKSx0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpLE9iamVjdC5hc3NpZ24odGhpc1tuLiRleHRyYV0se2NoaWxkcmVuOmwsbGluZTpudWxsLGF0dHJpYnV0ZXM6ZixhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7dmFyIGg9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksZD1oW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscD10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZihwfHwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIGc9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciB2PXRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7QXJyYXkuaXNBcnJheSh2KSYmdi5sZW5ndGg+MCYmKHRoaXNbbi4kZXh0cmFdLmNvbHVtbldpZHRocz12LHRoaXNbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MCl9dmFyIHk9KDAsby50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxtPVsieGZhU3ViZm9ybSJdLGI9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aWYoYiYmbS5wdXNoKGIpLGYuc3R5bGU9eSxmLmNsYXNzPW0sdGhpcy5uYW1lJiYoZi54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7dmFyIHc9dGhpcy5vdmVyZmxvd1tuLiRnZXRFeHRyYV0oKTt3LmFkZExlYWRlciYmKHcuYWRkTGVhZGVyPSExLHEodGhpcyx3LmxlYWRlcixlKSl9dGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGs9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsUz1rPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PFM7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtrJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgeD10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmcsaW5jbHVkZTohMH0pO2lmKHguc3VjY2VzcylicmVhaztpZih4LmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHg7aWYoayYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFoW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9UzticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLHB8fFgodGhpcyksaFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWQsdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PVMpcmV0dXJuIHRoaXMub3ZlcmZsb3cmJih0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpLHB8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtpZih0aGlzLm92ZXJmbG93KXt2YXIgTz10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO08uYWRkVHJhaWxlciYmKE8uYWRkVHJhaWxlcj0hMSxxKHRoaXMsTy50cmFpbGVyLGUpKX12YXIgQT0wLEM9MDt0aGlzLm1hcmdpbiYmKEE9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsQz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIEY9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgrQSx0aGlzLnd8fDApLFA9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0K0MsdGhpcy5ofHwwKSxUPVt0aGlzLngsdGhpcy55LEYsUF07aWYoIiI9PT10aGlzLncmJih5LndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShGKSksIiI9PT10aGlzLmgmJih5LmhlaWdodD0oMCxvLm1lYXN1cmVUb1N0cmluZykoUCkpLCgiMHB4Ij09PXkud2lkdGh8fCIwcHgiPT09eS5oZWlnaHQpJiYwPT09bC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgST17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmYsY2hpbGRyZW46bH07RCh0aGlzLGYpO3ZhciBFPXMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxJKSxUKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgaj10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoSChqKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPUUscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShqKX1yZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLEV9fV0pLHJ9KG4uWEZBT2JqZWN0KSxfdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViZm9ybVNldCIsITApKS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2tlbmQ9bnVsbCxhLmJyZWFrPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm9jY3VyPW51bGwsYS5vdmVyZmxvdz1udWxsLGEuYnJlYWtBZnRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQmVmb3JlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGdldFN1YmZvcm1QYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7IShlIGluc3RhbmNlb2YgTXQpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfX0se2tleTpuLiRpc0JpbmRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLHJ9KG4uWEZBT2JqZWN0KSxMdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3ViamVjdEROIikpLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09bmV3IE1hcCh0aGlzW24uJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKSxlfSkpKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxSdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViamVjdEROcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuc3ViamVjdEROPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxOdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3VibWl0IiwhMCkpLmVtYmVkUERGPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pLGEuaWQ9ZS5pZHx8IiIsYS50YXJnZXQ9ZS50YXJnZXR8fCIiLGEudGV4dEVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiIsYS5lbmNyeXB0PW51bGwsYS5lbmNyeXB0RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwidGVtcGxhdGUiLCEwKSkuYmFzZVByb2ZpbGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSxhLmV4dHJhcz1udWxsLGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKSx0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXNbbi4kdGFiSW5kZXhdPTVlM319LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNlYXJjaE5vZGUsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGYuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfX0se2tleTpuLiR0b1BhZ2VzLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixhLGksbyx1LGwsZixkLHAsZyx2LHksbSxiLHcsaz10aGlzO3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSkpO2Nhc2UgMjp0aGlzW24uJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119LCh0PXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXSkucGFnZVNldFtuLiRjbGVhblBhZ2VdKCkscj10LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX0saT1udWxsLG89bnVsbCx1PW51bGwsdC5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89dC5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZ0LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LmJyZWFrJiZ0LmJyZWFrLmJlZm9yZVRhcmdldD8obz10LmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpOnQuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJnQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCYmKG89dC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpLG8mJihsPXRoaXNbbi4kc2VhcmNoTm9kZV0odSxvW24uJGdldFBhcmVudF0oKSkpaW5zdGFuY2VvZiBkdCYmKGk9bCxvW24uJGV4dHJhXT17fSksaXx8KGk9clswXSksaVtuLiRleHRyYV09e251bWJlck9mVXNlOjF9LChmPWlbbi4kZ2V0UGFyZW50XSgpKVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmYucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH0scD1udWxsLGc9bnVsbCx2PSEwLHk9MCxtPTAsYj1TKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciByLG8scyx1LGwsZixoLGIsdyx4LE8sQSxDLEYsUDtyZXR1cm4gUygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHYpe2UubmV4dD03O2JyZWFrfWlmKGEuY2hpbGRyZW4ucG9wKCksMyE9Kyt5KXtlLm5leHQ9NTticmVha31yZXR1cm4oMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIiksZS5hYnJ1cHQoInJldHVybiIse3Y6YX0pO2Nhc2UgNTplLm5leHQ9ODticmVhaztjYXNlIDc6eT0wO2Nhc2UgODpkPW51bGwsa1tuLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPWkscj1pW24uJHRvSFRNTF0oKS5odG1sLGEuY2hpbGRyZW4ucHVzaChyKSxwJiYoa1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLHIuY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oaVtuLiRleHRyYV0uc3BhY2UpLmh0bWwpLHA9bnVsbCksZyYmKGtbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCxyLmNoaWxkcmVuLnB1c2goZ1tuLiR0b0hUTUxdKGlbbi4kZXh0cmFdLnNwYWNlKS5odG1sKSxnPW51bGwpLG89aS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXIuY2hpbGRyZW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpfSkpLHY9ITEsa1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCxrW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEsdT1mdW5jdGlvbihlKXt2YXIgcj10W24uJGZsdXNoSFRNTF0oKTtyJiYodj12fHxyLmNoaWxkcmVuJiYwIT09ci5jaGlsZHJlbi5sZW5ndGgsc1tlXS5jaGlsZHJlbi5wdXNoKHIpKX0sbD1tLGY9by5sZW5ndGg7Y2FzZSAyMTppZighKGw8Zikpe2UubmV4dD01NjticmVha31pZihoPWtbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1vW2xdLGI9e3dpZHRoOmgudyxoZWlnaHQ6aC5ofSxtPTAscCYmKHNbbF0uY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oYikuaHRtbCkscD1udWxsKSxnJiYoc1tsXS5jaGlsZHJlbi5wdXNoKGdbbi4kdG9IVE1MXShiKS5odG1sKSxnPW51bGwpLCEodz10W24uJHRvSFRNTF0oYikpLnN1Y2Nlc3Mpe2UubmV4dD0zMTticmVha31yZXR1cm4gdy5odG1sPyh2PXZ8fHcuaHRtbC5jaGlsZHJlbiYmMCE9PXcuaHRtbC5jaGlsZHJlbi5sZW5ndGgsc1tsXS5jaGlsZHJlbi5wdXNoKHcuaHRtbCkpOiF2JiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2OmF9KTtjYXNlIDMxOmlmKCF3LmlzQnJlYWsoKSl7ZS5uZXh0PTQwO2JyZWFrfWlmKHg9dy5icmVha05vZGUsdShsKSwiYXV0byIhPT14LnRhcmdldFR5cGUpe2UubmV4dD0zNjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw1Myk7Y2FzZSAzNjpyZXR1cm4geC5sZWFkZXImJihwPShwPWtbbi4kc2VhcmNoTm9kZV0oeC5sZWFkZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9wWzBdOm51bGwpLHgudHJhaWxlciYmKGc9KGc9a1tuLiRzZWFyY2hOb2RlXSh4LnRyYWlsZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT14LnRhcmdldFR5cGU/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LGw9MS8wKTp4W24uJGV4dHJhXS50YXJnZXQ/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LG09eFtuLiRleHRyYV0uaW5kZXgrMSxsPTEvMCk6bD14W24uJGV4dHJhXS5pbmRleCxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDQwOmlmKCFrW24uJGV4dHJhXS5vdmVyZmxvd05vZGUpe2UubmV4dD01MjticmVha31yZXR1cm4gTz1rW24uJGV4dHJhXS5vdmVyZmxvd05vZGUsa1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGwsQT1PW24uJGdldEV4dHJhXSgpLEM9QS50YXJnZXQsQS5hZGRMZWFkZXI9bnVsbCE9PUEubGVhZGVyLEEuYWRkVHJhaWxlcj1udWxsIT09QS50cmFpbGVyLHUobCksRj1sLGw9MS8wLEMgaW5zdGFuY2VvZiBkdD9kPUM6QyBpbnN0YW5jZW9mIHBlJiYoLTEhPT0oUD1vLmluZGV4T2YoQykpP1A+Rj9sPVAtMTptPVA6KGQ9Q1tuLiRnZXRQYXJlbnRdKCksbT1kLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoQykpKSxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDUyOnUobCk7Y2FzZSA1MzpsKyssZS5uZXh0PTIxO2JyZWFrO2Nhc2UgNTY6cmV0dXJuIGtbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxpPWR8fGlbbi4kZ2V0TmV4dFBhZ2VdKCksZS5uZXh0PTYxLG51bGw7Y2FzZSA2MTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpO2Nhc2UgMjI6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChiKCksInQwIiwyNCk7Y2FzZSAyNDppZigib2JqZWN0IiE9PWgodz1lLnQwKSl7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix3LnYpO2Nhc2UgMjc6ZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMjk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfV0pLHJ9KG4uWEZBT2JqZWN0KTt0LlRlbXBsYXRlPUR0O3ZhciBCdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dCIpKS5pZD1lLmlkfHwiIixuLm1heENoYXJzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRhY2NlcHRXaGl0ZXNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/KHRoaXNbbi4kY29udGVudF09ZSwhMCk6KCgwLGMud2FybikoIlhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAiLmNvbmNhdChlW24uJG5vZGVOYW1lXSwiLiIpKSwhMSl9fSx7a2V5Om4uJG9uVGV4dCx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzW24uJGNvbnRlbnRdaW5zdGFuY2VvZiBuLlhGQU9iamVjdHx8ZChrKHIucHJvdG90eXBlKSxuLiRvblRleHQsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS5yZXBsYWNlKC9cclxuL2csIlxuIikpfX0se2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0JiZlLnB1c2godCksZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSl7dmFyIHQ9VSh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8odC5uYW1lPSJkaXYiLHQuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSksZX0pLFtdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOmV9KX0pKSk6L1tcdTIwMjhcbl0vLnRlc3QodGhpc1tuLiRjb250ZW50XSkmJih0Lm5hbWU9ImRpdiIsdC5jaGlsZHJlbj1bXSx0aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTplfSx7bmFtZToiYnIifSl9KSkpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfXJldHVybiB0aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCk7dC5UZXh0PUJ0O3ZhciBVdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dEVkaXQiLCEwKSkuYWxsb3dSaWNoVGV4dD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5oU2Nyb2xsUG9saWN5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSksbi5pZD1lLmlkfHwiIixuLm11bHRpTGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnZTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBPZT8xOjApLHQ9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbbi4kZGF0YV0mJmFbbi4kZGF0YV1bbi4kdWlkXXx8YVtuLiR1aWRdLGZpZWxkSWQ6YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QihhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDphW24uJGRhdGFdJiZhW24uJGRhdGFdW24uJHVpZF18fGFbbi4kdWlkXSxmaWVsZElkOmFbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnIsImFyaWEtbGFiZWwiOkIoYSksImFyaWEtcmVxdWlyZWQiOiExfX0sUihhKSYmKHQuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHQuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt0XX0pfX1dKSxyfShuLlhGQU9iamVjdCksJHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFUodGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLlN0cmluZ09iamVjdCksWHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWVTdGFtcCIpKS5pZD1lLmlkfHwiIixuLnNlcnZlcj1lLnNlcnZlcnx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksSHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRvb2xUaXAiKSkuaWQ9ZS5pZHx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCkscXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInRyYXZlcnNhbCIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5leHRyYXM9bnVsbCxhLnRyYXZlcnNlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxHdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidHJhdmVyc2UiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5vcGVyYXRpb249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKSxuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZXJhdGlvbn19LHtrZXk6bi4kaXNUcmFuc3BhcmVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX1dKSxyfShuLlhGQU9iamVjdCksenQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInVpIiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ucGljdHVyZT1udWxsLG4uYmFyY29kZT1udWxsLG4uYnV0dG9uPW51bGwsbi5jaGVja0J1dHRvbj1udWxsLG4uY2hvaWNlTGlzdD1udWxsLG4uZGF0ZVRpbWVFZGl0PW51bGwsbi5kZWZhdWx0VWk9bnVsbCxuLmltYWdlRWRpdD1udWxsLG4ubnVtZXJpY0VkaXQ9bnVsbCxuLnBhc3N3b3JkRWRpdD1udWxsLG4uc2lnbmF0dXJlPW51bGwsbi50ZXh0RWRpdD1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXNbbi4kZXh0cmFdKXt2YXIgZSx0PU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3IodC5zKCk7IShlPXQubigpKS5kb25lOyl7dmFyIHI9ZS52YWx1ZTtpZigiZXh0cmFzIiE9PXImJiJwaWN0dXJlIiE9PXIpe3ZhciBhPXRoaXNbcl07aWYoYSBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXJldHVybiB0aGlzW24uJGV4dHJhXT1hLGF9fX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX10aGlzW24uJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpLFd0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWxpZGF0ZSIsITApKS5mb3JtYXRUZXN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSxuLmlkPWUuaWR8fCIiLG4ubnVsbFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSxuLnNjcmlwdFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ubWVzc2FnZT1udWxsLG4ucGljdHVyZT1udWxsLG4uc2NyaXB0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWx1ZSIsITApKS5pZD1lLmlkfHwiIixuLm92ZXJyaWRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5hcmM9bnVsbCxuLmJvb2xlYW49bnVsbCxuLmRhdGU9bnVsbCxuLmRhdGVUaW1lPW51bGwsbi5kZWNpbWFsPW51bGwsbi5leERhdGE9bnVsbCxuLmZsb2F0PW51bGwsbi5pbWFnZT1udWxsLG4uaW50ZWdlcj1udWxsLG4ubGluZT1udWxsLG4ucmVjdGFuZ2xlPW51bGwsbi50ZXh0PW51bGwsbi50aW1lPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBCZSYmdC51aSYmdC51aS5pbWFnZUVkaXQpcmV0dXJuIHRoaXMuaW1hZ2V8fCh0aGlzLmltYWdlPW5ldyBXZSh7fSksdGhpc1tuLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSkpLHZvaWQodGhpcy5pbWFnZVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdKTt2YXIgcj1lW24uJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1tyXSl7dmFyIGEsaT1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBvPWEudmFsdWUscz10aGlzW29dO3MgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCYmKHRoaXNbb109bnVsbCx0aGlzW24uJHJlbW92ZUNoaWxkXShzKSl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXNbZVtuLiRub2RlTmFtZV1dPWUsdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW3JdW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF19KSl9LHtrZXk6bi4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO3ZhciBlLHQ9TyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KXt2YXIgcj1lLnZhbHVlO2lmKCJpbWFnZSIhPT1yKXt2YXIgYT10aGlzW3JdO2lmKGEgaW5zdGFuY2VvZiBuLlhGQU9iamVjdClyZXR1cm4oYVtuLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfX19Y2F0Y2goZSl7dC5lKGUpfWZpbmFsbHl7dC5mKCl9cmV0dXJuIG51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIGE9dGhpc1t0LnZhbHVlXTtpZihhIGluc3RhbmNlb2Ygbi5YRkFPYmplY3QpcmV0dXJuIGFbbi4kdG9IVE1MXShlKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpO3QuVmFsdWU9VnQ7dmFyIFl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJ2YXJpYWJsZXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW50ZWdlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm1hbmlmZXN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2NyaXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XSkscn0obi5YRkFPYmplY3QpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3kodGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1lW3RdKHIpO3JldHVybiBhW24uJHNldFNldEF0dHJpYnV0ZXNdKHIpLGF9fX0se2tleToiYXBwZWFyYW5jZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHKGUpfX0se2tleToiYXJjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFcoZSl9fSx7a2V5OiJhc3Npc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImJhcmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWShlKX19LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImJpbmRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKKGUpfX0se2tleToiYm9va2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiYm9vbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRKGUpfX0se2tleToiYm9yZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiYnJlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJicmVha0FmdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiYnJlYWtCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSl9fSx7a2V5OiJidXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYWUoZSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJjYXB0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG9lKGUpfX0se2tleToiY2VydGlmaWNhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc2UoZSl9fSx7a2V5OiJjZXJ0aWZpY2F0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJjaGVja0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1ZShlKX19LHtrZXk6ImNob2ljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJjb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImNvbWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRlKGUpfX0se2tleToiY29udGVudEFyZWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJjb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ2UoZSl9fSx7a2V5OiJkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZlKGUpfX0se2tleToiZGF0ZVRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJkYXRlVGltZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbWUoZSl9fSx7a2V5OiJkZWNpbWFsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfX0se2tleToiZGVmYXVsdFVpIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdlKGUpfX0se2tleToiZGVzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeGUoZSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9lKGUpfX0se2tleToiZWRnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IENlKGUpfX0se2tleToiZW5jb2RpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZlKGUpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQZShlKX19LHtrZXk6ImVuY3J5cHREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJZShlKX19LHtrZXk6ImVuY3J5cHRpb25NZXRob2QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRWUoZSl9fSx7a2V5OiJlbmNyeXB0aW9uTWV0aG9kcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6ImV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToiZXhEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF9lKGUpfX0se2tleToiZXhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9fSx7a2V5OiJleGNsR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJleGVjdXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToiZXh0cmFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToiZmllbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUoZSl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToiZmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWGUoZSl9fSx7a2V5OiJmb250Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKGUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHFlKGUpfX0se2tleToiaGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHZShlKX19LHtrZXk6Imh5cGhlbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToiaW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2UoZSl9fSx7a2V5OiJpbWFnZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVmUoZSl9fSx7a2V5OiJpbnRlZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFllKGUpfX0se2tleToiaXNzdWVycyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBLZShlKX19LHtrZXk6Iml0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEplKGUpfX0se2tleToia2VlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaZShlKX19LHtrZXk6ImtleVVzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFFlKGUpfX0se2tleToibGluZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBldChlKX19LHtrZXk6ImxpbmVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0dChlKX19LHtrZXk6ImxvY2tEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBydChlKX19LHtrZXk6Im1hbmlmZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG50KGUpfX0se2tleToibWFyZ2luIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToibWRwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToibWVkaXVtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG90KGUpfX0se2tleToibWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6Im51bWVyaWNFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToib2NjdXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJvaWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJvaWRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZ0KGUpfX0se2tleToib3ZlcmZsb3ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaHQoZSl9fSx7a2V5OiJwYWdlQXJlYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InBhZ2VTZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJwYXJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfX0se2tleToicGFzc3dvcmRFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZ0KGUpfX0se2tleToicGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5dChlKX19LHtrZXk6InBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJwcm90byIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBidChlKX19LHtrZXk6InJhZGlhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3dChlKX19LHtrZXk6InJlYXNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdChlKX19LHtrZXk6InJlYXNvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJyZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJyZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT3QoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXQoZSl9fSx7a2V5OiJzZXRQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdChlKX19LHtrZXk6InNpZ25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUpfX0se2tleToic2lnbmF0dXJlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToic2lnbmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUdChlKX19LHtrZXk6InNvbGlkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToic3BlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRXQoZSl9fSx7a2V5OiJzdGlwcGxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGp0KGUpfX0se2tleToic3ViZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdChlKX19LHtrZXk6InN1YmZvcm1TZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJzdWJqZWN0RE4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTHQoZSl9fSx7a2V5OiJzdWJqZWN0RE5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE50KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ0ZXh0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJ0KGUpfX0se2tleToidGV4dEVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVXQoZSl9fSx7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToidGltZVN0YW1wIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFh0KGUpfX0se2tleToidG9vbFRpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InRyYXZlcnNhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InRyYXZlcnNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEd0KGUpfX0se2tleToidWkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgenQoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFZ0KGUpfX0se2tleToidmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFl0KGUpfX1dKSxlfSgpO3QuVGVtcGxhdGVOYW1lc3BhY2U9S3R9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRIVE1MPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW24uJGV4dHJhXSx1PXMuYXZhaWxhYmxlU3BhY2UsbD1pKHIsNCksZj1sWzBdLGg9bFsxXSxkPWxbMl0scD1sWzNdO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6cy53aWR0aD1NYXRoLm1heChzLndpZHRoLGYrZCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQsaCtwKSxzLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cy5saW5lJiYxIT09cy5hdHRlbXB0fHwocy5saW5lPWMoZSxbXSkscy5jaGlsZHJlbi5wdXNoKHMubGluZSkscy5udW1iZXJJbkxpbmU9MCkscy5udW1iZXJJbkxpbmUrPTEscy5saW5lLmNoaWxkcmVuLnB1c2godCksMD09PXMuYXR0ZW1wdD8ocy5jdXJyZW50V2lkdGgrPWQscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQscy5wcmV2SGVpZ2h0K3ApKToocy5jdXJyZW50V2lkdGg9ZCxzLnByZXZIZWlnaHQ9cy5oZWlnaHQscy5oZWlnaHQrPXAscy5hdHRlbXB0PTApLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aCxzLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9ZCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxwKTt2YXIgZyx2PSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCkseT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9byhlKSkpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19KHMuY2hpbGRyZW4pO3RyeXtmb3IoeS5zKCk7IShnPXkubigpKS5kb25lOylnLnZhbHVlLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PXZ9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9YnJlYWs7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbih1LndpZHRoLE1hdGgubWF4KHMud2lkdGgsZCkpLHMuaGVpZ2h0Kz1wLHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO3ZhciByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKSxhPXJbbi4kZXh0cmFdJiZyW24uJGV4dHJhXS5hdHRlbXB0fHwwLG89aShmdW5jdGlvbihlKXt2YXIgdCxyLG49IiI9PT1lLnc/TmFOOmUudyxhPSIiPT09ZS5oP05hTjplLmgsaT0wLG89MDtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOmk9bi8yLG89YTticmVhaztjYXNlImJvdHRvbUxlZnQiOmk9MCxvPWE7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6aT1uLG89YTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6aT1uLzIsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjppPTAsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6aT1uLG89YS8yO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjppPW4vMixvPTA7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6aT1uLG89MH1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDp0PS1pLHI9LW87YnJlYWs7Y2FzZSA5MDp0PS1vLHI9aTt2YXIgcz1bYSwtbl07bj1zWzBdLGE9c1sxXTticmVhaztjYXNlIDE4MDp0PWkscj1vO3ZhciBjPVstbiwtYV07bj1jWzBdLGE9Y1sxXTticmVhaztjYXNlIDI3MDp0PW8scj0taTt2YXIgdT1bLWEsbl07bj11WzBdLGE9dVsxXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxuKSxlLnkrcitNYXRoLm1pbigwLGEpLE1hdGguYWJzKG4pLE1hdGguYWJzKGEpXX0oZSksNCkscz1vWzFdLGM9b1syXSx1PW9bM107c3dpdGNoKHIubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fDA9PT1yW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIj09PWUud3x8TWF0aC5yb3VuZChjLXQud2lkdGgpPD0yfHwhcltuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtuLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fCFyW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQodS10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodStzLXQuaGVpZ2h0KTw9Mnx8dStzPmVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodS10LmhlaWdodCk8PTI7ZGVmYXVsdDpyZXR1cm4hMH19LHQuZmx1c2hIVE1MPWZ1bmN0aW9uKGUpe2lmKCFlW24uJGV4dHJhXSlyZXR1cm4gbnVsbDt2YXIgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbbi4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtuLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbbi4kZXh0cmFdLmZhaWxpbmdOb2RlKXt2YXIgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goYyhlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuLiRleHRyYV0uYXZhaWxhYmxlU3BhY2Uscj1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtuLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbbi4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtci1lW24uJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtuLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciBuPXIoMjA2KSxhPXIoMjEzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fG8oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZUJib3g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7dmFyIG89ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PW8ubGF5b3V0JiYiIiE9PW8udz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLHIud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD11KGkpfXZhciBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe3ZhciBjPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT1jLmxheW91dCYmIiIhPT1jLmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD11KHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5hdHRyaWJ1dGVzLGE9ci5zdHlsZSxpPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTtpZihyLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKSxlLmJvcmRlcil7dmFyIG8scyxjPWUuYm9yZGVyW24uJGV4dHJhXSx1PWMud2lkdGhzLGw9Yy5pbnNldHMsZj1sWzBdLGQ9bFszXSxwPWxbMF0rbFsyXSxnPWxbMV0rbFszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpmLT11WzBdLzIsZC09dVszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KCh1WzFdK3VbM10pLzItZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHVbMF0rdVsyXSkvMi1wLCJweCkiKTticmVhaztjYXNlImxlZnQiOmYtPXVbMF0sZC09dVszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdCh1WzFdK3VbM10tZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQodVswXSt1WzJdLXAsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zz8iY2FsYygxMDAlIC0gIi5jb25jYXQoZywicHgpIik6IjEwMCUiLHM9cD8iY2FsYygxMDAlIC0gIi5jb25jYXQocCwicHgpIik6IjEwMCUifXZhciB2PVsieGZhQm9yZGVyIl07aChlLmJvcmRlcikmJnYucHVzaCgieGZhUHJpbnRPbmx5Iik7Zm9yKHZhciB5PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOnYsc3R5bGU6e3RvcDoiIi5jb25jYXQoZiwicHgiKSxsZWZ0OiIiLmNvbmNhdChkLCJweCIpLHdpZHRoOm8saGVpZ2h0OnN9fSxjaGlsZHJlbjpbXX0sbT0wLGI9WyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXTttPGIubGVuZ3RoO20rKyl7dmFyIHc9YlttXTt2b2lkIDAhPT1hW3ddJiYoeS5hdHRyaWJ1dGVzLnN0eWxlW3ddPWFbd10sZGVsZXRlIGFbd10pfWkuY2hpbGRyZW4ucHVzaCh5LHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcih2YXIgaz0wLFM9WyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdO2s8Uy5sZW5ndGg7aysrKXt2YXIgeD1TW2tdO3ZvaWQgMCE9PWFbeF0mJihpLmF0dHJpYnV0ZXMuc3R5bGVbeF09YVt4XSxkZWxldGUgYVt4XSl9cmV0dXJuImFic29sdXRlIj09PWEucG9zaXRpb24/aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZGVsZXRlIGEucG9zaXRpb24sYS5hbGlnblNlbGYmJihpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmLGRlbGV0ZSBhLmFsaWduU2VsZiksaX0sdC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dCYmdC5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgcixhPXRbbi4kZXh0cmFdLGk9ZS5jb2xTcGFuO3I9LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksaXNOYU4ocil8fChlLnc9cil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCksInRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSl9LHQuZml4VGV4dEluZGVudD1mdW5jdGlvbihlKXt2YXIgdD0oMCxpLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBweCIpO2lmKCEodD49MCkpe3ZhciByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPSIiLmNvbmNhdChuLXQsInB4Iil9fSx0LmZpeFVSTD1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfSx0LmlzUHJpbnRPbmx5PWgsdC5sYXlvdXRDbGFzcz1mdW5jdGlvbihlKXtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmRlZmF1bHQ6cmV0dXJuInhmYVBvc2l0aW9uIjtjYXNlImxyLXRiIjpyZXR1cm4ieGZhTHJUYiI7Y2FzZSJybC1yb3ciOnJldHVybiJ4ZmFSbFJvdyI7Y2FzZSJybC10YiI6cmV0dXJuInhmYVJsVGIiO2Nhc2Uicm93IjpyZXR1cm4ieGZhUm93IjtjYXNlInRhYmxlIjpyZXR1cm4ieGZhVGFibGUiO2Nhc2UidGIiOnJldHVybiJ4ZmFUYiJ9fSx0LmxheW91dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsLGE9bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7dmFyIG89MCxzPTA7ZS5tYXJnaW4mJihvPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0LHM9ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBjPW51bGwsdT1udWxsO2UucGFyYSYmKHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodCx1LnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmUsdS5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93LHUubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQsdS5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodCk7dmFyIGw9ZS5mb250O2lmKCFsKWZvcih2YXIgaD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxkPWVbbi4kZ2V0UGFyZW50XSgpO2QmJmQhPT1oOyl7aWYoZC5mb250KXtsPWQuZm9udDticmVha31kPWRbbi4kZ2V0UGFyZW50XSgpfXZhciBwPShlLnd8fHQud2lkdGgpLW8sZz1lW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7aWYoZS52YWx1ZS5leERhdGEmJmUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdJiYidGV4dC9odG1sIj09PWUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlKXt2YXIgdj1mKGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGwsdSxjLGcscCk7YT12LndpZHRoLHI9di5oZWlnaHQsaT12LmlzQnJva2VufWVsc2V7dmFyIHk9ZS52YWx1ZVtuLiR0ZXh0XSgpO2lmKHkpe3ZhciBtPWYoeSxsLHUsYyxnLHApO2E9bS53aWR0aCxyPW0uaGVpZ2h0LGk9bS5pc0Jyb2tlbn19bnVsbD09PWF8fGUud3x8KGErPW8pLG51bGw9PT1yfHxlLmh8fChyKz1zKX1yZXR1cm57dzphLGg6cixpc0Jyb2tlbjppfX0sdC5tZWFzdXJlVG9TdHJpbmc9dSx0LnNldEFjY2Vzcz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLmFjY2Vzcyl7Y2FzZSJub25JbnRlcmFjdGl2ZSI6dC5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpO2JyZWFrO2Nhc2UicmVhZE9ubHkiOnQucHVzaCgieGZhUmVhZE9ubHkiKTticmVhaztjYXNlInByb3RlY3RlZCI6dC5wdXNoKCJ4ZmFEaXNhYmxlZCIpfX0sdC5zZXRGb250RmFtaWx5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIpe3ZhciBhPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO24uZm9udEZhbWlseT0nIicuY29uY2F0KGEsJyInKTt2YXIgcz1yLmZpbmQoYSk7aWYocyl7dmFyIGM9cy5yZWd1bGFyLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7YyE9PWEmJihuLmZvbnRGYW1pbHk9JyInLmNvbmNhdChjLCciJykpO3ZhciB1PWQodCk7aWYodSYmIiIhPT11LmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47dmFyIGw9KDAsby5zZWxlY3RGb250KShlLHMpO2wmJihuLmxpbmVIZWlnaHQ9TWF0aC5tYXgoMS4yLGwubGluZUhlaWdodCkpfX1lbHNlIGRlbGV0ZSBuLmZvbnRGYW1pbHl9LHQuc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbihlLHQpeyJwb3NpdGlvbiI9PT1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0JiYoZS5taW5XPjAmJih0Lm1pbldpZHRoPXUoZS5taW5XKSksZS5tYXhXPjAmJih0Lm1heFdpZHRoPXUoZS5tYXhXKSksZS5taW5IPjAmJih0Lm1pbkhlaWdodD11KGUubWluSCkpLGUubWF4SD4wJiYodC5tYXhIZWlnaHQ9dShlLm1heEgpKSl9LHQuc2V0UGFyYT1mdW5jdGlvbihlLHQscil7aWYoci5hdHRyaWJ1dGVzLmNsYXNzJiZyLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7dCYmKCIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKSwiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKSk7dmFyIGE9ZChlKTtpZihhKXt2YXIgaT1yLmF0dHJpYnV0ZXMuc3R5bGU7c3dpdGNoKGkuZGlzcGxheT0iZmxleCIsaS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGEudkFsaWduKXtjYXNlInRvcCI6aS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjppLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjppLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWZvcih2YXIgbz1hW24uJHRvU3R5bGVdKCkscz0wLHU9T2JqZWN0LmVudHJpZXMobyk7czx1Lmxlbmd0aDtzKyspe3ZhciBsPSgyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHA9dVtzXSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7Zm9yKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShwKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsMik6dm9pZCAwfX0ocCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksZj1sWzBdLGg9bFsxXTtmIGluIGl8fChpW2ZdPWgpfX19dmFyIHB9LHQudG9TdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKylpW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgcz0wLGM9aTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXSxmPWVbdV07aWYobnVsbCE9PWYpaWYobC5oYXNPd25Qcm9wZXJ0eSh1KSlsW3VdKGUsdCk7ZWxzZSBpZihmIGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBoPWZbbi4kdG9TdHlsZV0oKTtoP09iamVjdC5hc3NpZ24odCxoKTooMCxhLndhcm4pKCIoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICIuY29uY2F0KHUsIiBub3QgaW1wbGVtZW50ZWQgeWV0IikpfX1yZXR1cm4gdH07dmFyIG49cigyMDYpLGE9cigyKSxpPXIoMjA3KSxvPXIoMjE0KSxzPXIoMjE1KTtmdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfXZhciBsPXthbmNob3JUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKHImJighci5sYXlvdXR8fCJwb3NpdGlvbiI9PT1yLmxheW91dCkpc3dpdGNoKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSxlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fSxkaW1lbnNpb25zOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGE9ZS53LGk9ZS5oO2lmKHIubGF5b3V0JiZyLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciBvLHM9cltuLiRleHRyYV0sYz1lLmNvbFNwYW47LTE9PT1jPyhvPXMuY29sdW1uV2lkdGhzLnNsaWNlKHMuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxzLmN1cnJlbnRDb2x1bW49MCk6KG89cy5jb2x1bW5XaWR0aHMuc2xpY2Uocy5jdXJyZW50Q29sdW1uLHMuY3VycmVudENvbHVtbitjKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLHMuY3VycmVudENvbHVtbj0ocy5jdXJyZW50Q29sdW1uK2UuY29sU3Bhbiklcy5jb2x1bW5XaWR0aHMubGVuZ3RoKSxpc05hTihvKXx8KGE9ZS53PW8pfXQud2lkdGg9IiIhPT1hP3UoYSk6ImF1dG8iLHQuaGVpZ2h0PSIiIT09aT91KGkpOiJhdXRvIn0scG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7ciYmci5sYXlvdXQmJiJwb3NpdGlvbiIhPT1yLmxheW91dHx8KHQucG9zaXRpb249ImFic29sdXRlIix0LmxlZnQ9dShlLngpLHQudG9wPXUoZS55KSl9LHJvdGF0ZTpmdW5jdGlvbihlLHQpe2Uucm90YXRlJiYoInRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpLHQudHJhbnNmb3JtKz0icm90YXRlKC0iLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSIpLHQudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCIpfSxwcmVzZW5jZTpmdW5jdGlvbihlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduOmZ1bmN0aW9uKGUsdCl7aWYoInBhcmEiPT09ZVtuLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW46ZnVuY3Rpb24oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW24uJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGYoZSx0LHIsYSxpLG8pe3ZhciBjPW5ldyBzLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShvKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXt2YXIgaT0oMCxhLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxvPWVbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGkpO3I9ZChlLG8pfWlmKCFyKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O3ZhciBzPWUuc2l6ZXx8MTAsYz1yLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixyLmxpbmVIZWlnaHQpOjEuMix1PXZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6YypzLGxpbmVHYXA6dSpzLGxpbmVOb0dhcDpNYXRoLm1heCgxLGMtdSkqc319LHQuc2VsZWN0Rm9udD1kO3ZhciBuPXIoMjA2KSxhPXIoMjA3KSxpPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXUoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1vKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09byhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PW8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmZvbnRzPW5ldyBNYXAsdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMud2FybmVkPW5ldyBTZXQsdGhpcy5kZWZhdWx0Rm9udD1udWxsLHRoaXMuYWRkKHQpfXZhciB0LHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1jKGUpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZTt0aGlzLmFkZFBkZkZvbnQoYSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBpLG89Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7cy5yZWd1bGFyfHwocy5yZWd1bGFyPXMuaXRhbGljfHxzLmJvbGR8fHMuYm9sZGl0YWxpYyl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHImJjAhPT1yLnNpemUpe3ZhciB1LGw9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpLGY9YyhyKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7dGhpcy5mb250cy5zZXQoaCxsKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fX19LHtrZXk6ImFkZFBkZkZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3NzRm9udEluZm8scj10LmZvbnRGYW1pbHksbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO3ZhciBhPSIiLGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2E9aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihhPSJib2xkIiksYXx8KChlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWUmJmUucHNOYW1lLmluY2x1ZGVzKCJCb2xkIikpJiYoYT0iYm9sZCIpLChlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lJiYoZS5wc05hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLnBzTmFtZS5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX19LHtrZXk6ImdldERlZmF1bHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9fSx7a2V5OiJmaW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7dmFyIG49Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpLGE9ZS5yZXBsYWNlKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkpcmV0dXJuIHRoaXMuY2FjaGUuc2V0KGUscikscjthPWEudG9Mb3dlckNhc2UoKTt2YXIgbyx1PVtdLGw9Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgZj1zKG8udmFsdWUsMiksaD1mWzBdLGQ9ZlsxXTtoLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goZCl9fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfWlmKDA9PT11Lmxlbmd0aCl7dmFyIHAsZz1jKHRoaXMuZm9udHMuZW50cmllcygpKTt0cnl7Zm9yKGcucygpOyEocD1nLm4oKSkuZG9uZTspe3ZhciB2PXMocC52YWx1ZSwyKVsxXTt2LnJlZ3VsYXIubmFtZSYmdi5yZWd1bGFyLm5hbWUucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkmJnUucHVzaCh2KX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9fWlmKDA9PT11Lmxlbmd0aCl7YT1hLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO3ZhciB5LG09Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj1zKHkudmFsdWUsMiksdz1iWzBdLGs9YlsxXTt3LnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goayl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfX1pZigwPT09dS5sZW5ndGgpe3ZhciBTLHg9Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7Ty5yZWd1bGFyLm5hbWUmJk8ucmVndWxhci5uYW1lLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goTyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfX1yZXR1cm4gdS5sZW5ndGg+PTE/KDEhPT11Lmxlbmd0aCYmdCYmKDAsaS53YXJuKSgiWEZBIC0gVG9vIG1hbnkgY2hvaWNlcyB0byBndWVzcyB0aGUgY29ycmVjdCBmb250OiAiLmNvbmNhdChlKSksdGhpcy5jYWNoZS5zZXQoZSx1WzBdKSx1WzBdKToodCYmIXRoaXMud2FybmVkLmhhcyhlKSYmKHRoaXMud2FybmVkLmFkZChlKSwoMCxpLndhcm4pKCJYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogIi5jb25jYXQoZSkpKSxudWxsKX19XSxyJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfXQuRm9udEZpbmRlcj1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciBuPXIoMjE0KTtmdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8cyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsYSxpKXtpZih1KHRoaXMsZSksdGhpcy5saW5lSGVpZ2h0PWEsdGhpcy5wYXJhTWFyZ2luPXJ8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH0sIXQpe3ZhciBzPW8odGhpcy5kZWZhdWx0Rm9udChpKSwyKTtyZXR1cm4gdGhpcy5wZGZGb250PXNbMF0sdm9pZCh0aGlzLnhmYUZvbnQ9c1sxXSl9dGhpcy54ZmFGb250PXt0eXBlZmFjZTp0LnR5cGVmYWNlLHBvc3R1cmU6dC5wb3N0dXJlLHdlaWdodDp0LndlaWdodCxzaXplOnQuc2l6ZSxsZXR0ZXJTcGFjaW5nOnQubGV0dGVyU3BhY2luZ307dmFyIGM9aS5maW5kKHQudHlwZWZhY2UpO2lmKCFjKXt2YXIgbD1vKHRoaXMuZGVmYXVsdEZvbnQoaSksMik7cmV0dXJuIHRoaXMucGRmRm9udD1sWzBdLHZvaWQodGhpcy54ZmFGb250PWxbMV0pfWlmKHRoaXMucGRmRm9udD0oMCxuLnNlbGVjdEZvbnQpKHQsYyksIXRoaXMucGRmRm9udCl7dmFyIGY9byh0aGlzLmRlZmF1bHRGb250KGkpLDIpO3RoaXMucGRmRm9udD1mWzBdLHRoaXMueGZhRm9udD1mWzFdfX1yZXR1cm4gZihlLFt7a2V5OiJkZWZhdWx0Rm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXt2YXIgcj10LnJlZ3VsYXI7cmV0dXJuW3Ise3R5cGVmYWNlOnIuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19XSksZX0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixhKXt1KHRoaXMsZSksdGhpcy5mb250RmluZGVyPWEsdGhpcy5zdGFjaz1bbmV3IGgodCxyLG4sYSldfXJldHVybiBmKGUsW3trZXk6InB1c2hEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMuc3RhY2suYXQoLTEpLGE9MCxpPVsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXTthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dfHwoZVtvXT1uLnhmYUZvbnRbb10pfWZvcih2YXIgcz0wLGM9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXTtpc05hTih0W3VdKSYmKHRbdV09bi5wYXJhTWFyZ2luW3VdKX12YXIgbD1uZXcgaChlLHQscnx8bi5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bC5wZGZGb250fHwobC5wZGZGb250PW4ucGRmRm9udCksdGhpcy5zdGFjay5wdXNoKGwpfX0se2tleToicG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpfX0se2tleToidG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fV0pLGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7dSh0aGlzLGUpLHRoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBkKHQscixuLGEpLHRoaXMuZXh0cmFIZWlnaHQ9MH1yZXR1cm4gZihlLFt7a2V5OiJwdXNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxyKX19LHtrZXk6InBvcEZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9fSx7a2V5OiJhZGRQYXJhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219fSx7a2V5OiJhZGRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxyPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7dmFyIG4saT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxvPXQucGRmRm9udCxzPW8ubGluZUhlaWdodHx8MS4yLGM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqcix1PXMtKHZvaWQgMD09PW8ubGluZUdhcD8uMjpvLmxpbmVHYXApLGw9TWF0aC5tYXgoMSx1KSpyLGY9ci8xZTMsaD1vLmRlZmF1bHRXaWR0aHx8by5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGgsZD1hKGUuc3BsaXQoL1tcdTIwMjlcbl0vKSk7dHJ5e2ZvcihkLnMoKTshKG49ZC5uKCkpLmRvbmU7KXt2YXIgcCxnPW4udmFsdWUsdj1vLmVuY29kZVN0cmluZyhnKS5qb2luKCIiKSx5PWEoby5jaGFyc1RvR2x5cGhzKHYpKTt0cnl7Zm9yKHkucygpOyEocD15Lm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWUsYj1tLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW2IqZitpLGMsbCxtLnVuaWNvZGUsITFdKX19Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtkLmUoZSl9ZmluYWxseXtkLmYoKX10aGlzLmdseXBocy5wb3AoKX1lbHNle3ZhciB3LGs9YShlLnNwbGl0KC9bXHUyMDI5XG5dLykpO3RyeXtmb3Ioay5zKCk7ISh3PWsubigpKS5kb25lOyl7dmFyIFMseD1hKHcudmFsdWUuc3BsaXQoIiIpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7dGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLE8sITFdKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtrLmUoZSl9ZmluYWxseXtrLmYoKX10aGlzLmdseXBocy5wb3AoKX19fX0se2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLHI9MCxuPTAsYT0wLGk9MCxzPTAsYz0hMSx1PSEwLGw9MCxmPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGY7bCsrKXt2YXIgaD1vKHRoaXMuZ2x5cGhzW2xdLDUpLGQ9aFswXSxwPWhbMV0sZz1oWzJdLHY9IiAiPT09aFszXSx5PXU/ZzpwO2hbNF0/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPXksdD0tMSxyPTAsdT0hMSk6dj9pK2Q+ZT8obj1NYXRoLm1heChuLGkpLGk9MCxhKz1zLHM9eSx0PS0xLHI9MCxjPSEwLHU9ITEpOihzPU1hdGgubWF4KHkscykscj1pLGkrPWQsdD1sKTppK2Q+ZT8oYSs9cyxzPXksLTEhPT10PyhsPXQsbj1NYXRoLm1heChuLHIpLGk9MCx0PS0xLHI9MCk6KG49TWF0aC5tYXgobixpKSxpPWQpLGM9ITAsdT0hMSk6KGkrPWQscz1NYXRoLm1heCh5LHMpKX1yZXR1cm57d2lkdGg6MS4wMioobj1NYXRoLm1heChuLGkpKSxoZWlnaHQ6YSs9cyt0aGlzLmV4dHJhSGVpZ2h0LGlzQnJva2VuOmN9fX1dKSxlfSgpO3QuVGV4dE1lYXN1cmU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgbj1yKDIwNik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT1yLHRoaXMuZGF0YXNldD10LmRhdGFzZXRzfHxudWxsfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W1stMSx0aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCldXTt0Lmxlbmd0aD4wOyl7dmFyIHI9dC5hdCgtMSksYT1vKHIsMikscz1hWzBdLGM9YVsxXTtpZihzKzEhPT1jLmxlbmd0aCl7dmFyIHU9Y1srK3JbMF1dLGw9ZS5nZXQodVtuLiR1aWRdKTtpZihsKXVbbi4kc2V0VmFsdWVdKGwpO2Vsc2V7dmFyIGYsaD1pKHVbbi4kZ2V0QXR0cmlidXRlc10oKS52YWx1ZXMoKSk7dHJ5e2ZvcihoLnMoKTshKGY9aC5uKCkpLmRvbmU7KXt2YXIgZD1mLnZhbHVlLHA9ZS5nZXQoZFtuLiR1aWRdKTtpZihwKXtkW24uJHNldFZhbHVlXShwKTticmVha319fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX12YXIgZz11W24uJGdldENoaWxkcmVuXSgpO2cubGVuZ3RoPjAmJnQucHVzaChbLTEsZ10pfWVsc2UgdC5wb3AoKX12YXIgdj1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldCl7dmFyIHksbT1pKHRoaXMuZGF0YXNldFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj15LnZhbHVlOyJkYXRhIiE9PWJbbi4kbm9kZU5hbWVdJiZiW24uJHRvU3RyaW5nXSh2KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fXJldHVybiB0aGlzLmRhdGFbbi4kdG9TdHJpbmddKHYpLHYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iiksdi5qb2luKCIiKX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkRhdGFIYW5kbGVyPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigxOTUpLG89cigyMTgpLHM9cigyKTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZoKGUsdCl9KHYsZSk7dmFyIHQscixsLHAsZz0obD12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1kKGwpO2lmKHApe3ZhciByPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwoZT1nLmNhbGwodGhpcykpLl9idWlsZGVyPW5ldyBvLkJ1aWxkZXIodCksZS5fc3RhY2s9W10sZS5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fSxlLl9pZHM9bmV3IE1hcCxlLl9jdXJyZW50PWUuX2J1aWxkZXIuYnVpbGRSb290KGUuX2lkcyksZS5fZXJyb3JDb2RlPWkuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IsZS5fd2hpdGVSZWdleD0vXlxzKyQvLGUuX25ic3BzPS9ceGEwKy9nLGUuX3JpY2hUZXh0PXIsZX1yZXR1cm4gdD12LChyPVt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wYXJzZVhtbChlKSx0aGlzLl9lcnJvckNvZGU9PT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXJldHVybiB0aGlzLl9jdXJyZW50W2EuJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnQuZWxlbWVudH19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKDEpKyIgIn0pKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFthLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLnRyaW0oKSl9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50W2EuJG9uVGV4dF0oZSl9fSx7a2V5OiJfbWtBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49bnVsbCxpPW51bGwsbz1PYmplY3QuY3JlYXRlKHt9KSxjPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXt2YXIgbD1yLnZhbHVlLGY9bC5uYW1lLGg9bC52YWx1ZTtpZigieG1sbnMiPT09ZiluPygwLHMud2FybikoIlhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwiLmNvbmNhdCh0LCI+IikpOm49aDtlbHNlIGlmKGYuc3RhcnRzV2l0aCgieG1sbnM6Iikpe3ZhciBkPWYuc3Vic3RyaW5nKDYpO2l8fChpPVtdKSxpLnB1c2goe3ByZWZpeDpkLHZhbHVlOmh9KX1lbHNle3ZhciBwPWYuaW5kZXhPZigiOiIpO2lmKC0xPT09cClvW2ZdPWg7ZWxzZXt2YXIgZz1vW2EuJG5zQXR0cmlidXRlc107Z3x8KGc9b1thLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO3ZhciB2PVtmLnNsaWNlKDAscCksZi5zbGljZShwKzEpXSx5PXZbMF0sbT12WzFdLGI9Z1t5XTtifHwoYj1nW3ldPU9iamVjdC5jcmVhdGUobnVsbCkpLGJbbV09aH19fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm5bbixpLG9dfX0se2tleToiX2dldE5hbWVBbmRQcmVmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19fSx7a2V5OiJvbkJlZ2luRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWModGhpcy5fbWtBdHRyaWJ1dGVzKHQsZSksMyksaT1uWzBdLG89blsxXSxzPW5bMl0sdT1jKHRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSwyKSxsPXVbMF0sZj11WzFdLGg9dGhpcy5fYnVpbGRlci5idWlsZCh7bnNQcmVmaXg6ZixuYW1lOmwsYXR0cmlidXRlczpzLG5hbWVzcGFjZTppLHByZWZpeGVzOm99KTtpZihoW2EuJGdsb2JhbERhdGFdPXRoaXMuX2dsb2JhbERhdGEscilyZXR1cm4gaFthLiRmaW5hbGl6ZV0oKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKGgpJiZoW2EuJHNldElkXSh0aGlzLl9pZHMpLHZvaWQgaFthLiRjbGVhbl0odGhpcy5fYnVpbGRlcik7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KSx0aGlzLl9jdXJyZW50PWh9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnQ7aWYodFthLiRpc0NEQVRBWG1sXSgpJiYic3RyaW5nIj09dHlwZW9mIHRbYS4kY29udGVudF0pe3ZhciByPW5ldyB2O3IuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTt2YXIgbj1yLnBhcnNlKHRbYS4kY29udGVudF0pO3RbYS4kY29udGVudF09bnVsbCx0W2EuJG9uQ2hpbGRdKG4pfXRbYS4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKHQpJiZ0W2EuJHNldElkXSh0aGlzLl9pZHMpLHRbYS4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfX0se2tleToib25FcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZXJyb3JDb2RlPWV9fV0pJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHZ9KGkuWE1MUGFyc2VyQmFzZSk7dC5YRkFQYXJzZXI9cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnVpbGRlcj12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpLG89cigyMTkpLHM9cigyMTEpLGM9cigyMjgpLHU9cigyKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGYoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmcChlLnByb3RvdHlwZSx0KSxyJiZwKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KCl7cmV0dXJuIHY9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT13KGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZtKGUsdCl9ZnVuY3Rpb24gbShlLHQpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbShlLHQpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9dyhlKTtpZih0KXt2YXIgaT13KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHcoZSl9dmFyIGs9ZnVuY3Rpb24oZSl7eShyLGUpO3ZhciB0PWIocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKSkuZWxlbWVudD1udWxsLG5baS4kaWRzXT1lLG59cmV0dXJuIGcocixbe2tleTppLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH19LHtrZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2KHcoci5wcm90b3R5cGUpLGkuJGZpbmFsaXplLHRoaXMpLmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbaS4kaWRzXS5zZXQoaS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtpLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tpLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kaWRzXT10aGlzW2kuJGlkc10pfX1dKSxyfShpLlhGQU9iamVjdCksUz1mdW5jdGlvbihlKXt5KHIsZSk7dmFyIHQ9YihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGQodGhpcyxyKSx0LmNhbGwodGhpcywtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZyhyLFt7a2V5OmkuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fV0pLHJ9KGkuWEZBT2JqZWN0KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7ZCh0aGlzLGUpLHRoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4LmFwcGx5KE1hdGgsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaChlKX0odD1PYmplY3QudmFsdWVzKGEuTmFtZXNwYWNlSWRzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8Zih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdGhpcy5fY3VycmVudE5hbWVzcGFjZT1yfHxuZXcgYy5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfXJldHVybiBnKGUsW3trZXk6ImJ1aWxkUm9vdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubnNQcmVmaXgscj1lLm5hbWUsbj1lLmF0dHJpYnV0ZXMscz1lLm5hbWVzcGFjZSxjPWUucHJlZml4ZXMsdT1udWxsIT09cztpZih1JiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLG4uaGFzT3duUHJvcGVydHkoaS4kbnNBdHRyaWJ1dGVzKSl7Zm9yKHZhciBmPW8uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsaD1uW2kuJG5zQXR0cmlidXRlc10sZD1udWxsLHA9MCxnPU9iamVjdC5lbnRyaWVzKGgpO3A8Zy5sZW5ndGg7cCsrKXt2YXIgdj1sKGdbcF0sMikseT12WzBdLG09dlsxXTtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh5KT09PWYpe2Q9e3hmYTptfTticmVha319ZD9uW2kuJG5zQXR0cmlidXRlc109ZDpkZWxldGUgbltpLiRuc0F0dHJpYnV0ZXNdfXZhciBiPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKHQpLHc9YiYmYlthLiRidWlsZFhGQU9iamVjdF0ocixuKXx8bmV3IFM7cmV0dXJuIHdbaS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywodXx8Y3x8d1tpLiRpc05zQWdub3N0aWNdKCkpJiYod1tpLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOnUscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOndbaS4kaXNOc0Fnbm9zdGljXSgpfSksd319LHtrZXk6ImlzTnNBZ25vc3RpYyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9fSx7a2V5OiJfc2VhcmNoTmFtZXNwYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXMoYS5OYW1lc3BhY2VJZHMpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1sKG5bcl0sMikscz1pWzBdO2lmKCgwLGlbMV0uY2hlY2spKGUpKXtpZih0PW8uTmFtZXNwYWNlU2V0VXBbc10pcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha319cmV0dXJuIHQ9bmV3IGMuVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKSx0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpLHR9fSx7a2V5OiJfYWRkTmFtZXNwYWNlUHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlLGE9bi5wcmVmaXgsaT1uLnZhbHVlLG89dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGkpLHM9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGEpO3N8fChzPVtdLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChhLHMpKSxzLnB1c2gobyl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19LHtrZXk6Il9nZXROYW1lc3BhY2VUb1VzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7dmFyIHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO3JldHVybiB0JiZ0Lmxlbmd0aD4wP3QuYXQoLTEpOigoMCx1Lndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9fSx7a2V5OiJjbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFzTmFtZXNwYWNlLG49ZS5wcmVmaXhlcyxhPWUubnNBZ25vc3RpYztyJiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSksbiYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLnByZWZpeDt0Ll9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocikucG9wKCl9KSksYSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fV0pLGV9KCk7dC5CdWlsZGVyPXh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIG49cigyMjApLGE9cigyMjEpLGk9cigyMjIpLG89cigyMjMpLHM9cigyMjQpLGM9cigyMjUpLHU9cigyMTEpLGw9cigyMjYpLGY9cigyMjcpLGg9e2NvbmZpZzpuLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOmEuQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpvLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6cy5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6dS5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6bC5YZHBOYW1lc3BhY2UseGh0bWw6Zi5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1ofSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9YS5OYW1lc3BhY2VJZHMuY29uZmlnLmlkLHk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFjcm9iYXQiLCEwKSkuYWNyb2JhdDc9bnVsbCxuLmF1dG9TYXZlPW51bGwsbi5jb21tb249bnVsbCxuLnZhbGlkYXRlPW51bGwsbi52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsLG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhY3JvYmF0NyIsITApKS5keW5hbWljUmVuZGVyPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLGI9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRTaWxlbnRQcmludCIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxTPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx4PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGp1c3REYXRhIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMTApLE89ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD04fSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFnZW50IiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFsd2F5c0VtYmVkIil9cmV0dXJuIGwocil9KGkuQ29udGVudE9iamVjdCksRj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiYW1kIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhcmVhIikpLmxldmVsPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MSYmZTw9M319KSxuLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxFPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiYXNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJiYXRjaE91dHB1dCIpKS5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiZWhhdmlvck92ZXJyaWRlIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygiOiIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIjoiLDIpfSkpKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjYWNoZSIsITApKS50ZW1wbGF0ZUNhY2hlPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNoYW5nZSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxSPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21tb24iLCEwKSkuZGF0YT1udWxsLG4ubG9jYWxlPW51bGwsbi5sb2NhbGVTZXQ9bnVsbCxuLm1lc3NhZ2luZz1udWxsLG4uc3VwcHJlc3NCYW5uZXI9bnVsbCxuLnRlbXBsYXRlPW51bGwsbi52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGwsbi52ZXJzaW9uQ29udHJvbD1udWxsLG4ubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxOPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21wcmVzcyIpKS5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxEPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29tcHJlc3NPYmplY3RTdHJlYW0iKX1yZXR1cm4gbChyKX0oaS5PcHRpb24xMCksVT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29tcHJlc3Npb24iLCEwKSkuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsbi5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLG4ubGV2ZWw9bnVsbCxuLnR5cGU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29uZmlnIiwhMCkpLmFjcm9iYXQ9bnVsbCxuLnByZXNlbnQ9bnVsbCxuLnRyYWNlPW51bGwsbi5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxIPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb250ZW50Q29weSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxxPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb3BpZXMiLDEsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNyZWF0b3IiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImN1cnJlbnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxXPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJkYXRhIiwhMCkpLmFkanVzdERhdGE9bnVsbCxuLmF0dHJpYnV0ZXM9bnVsbCxuLmluY3JlbWVudGFsTG9hZD1udWxsLG4ub3V0cHV0WFNMPW51bGwsbi5yYW5nZT1udWxsLG4ucmVjb3JkPW51bGwsbi5zdGFydE5vZGU9bnVsbCxuLnVyaT1udWxsLG4ud2luZG93PW51bGwsbi54c2w9bnVsbCxuLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZGVidWciLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImRlZmF1bHRUeXBlZmFjZSIpKS53cml0aW5nU2NyaXB0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSksbn1yZXR1cm4gbChyKX0oaS5Db250ZW50T2JqZWN0KSxLPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImRvY3VtZW50QXNzZW1ibHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksWj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZHJpdmVyIiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5mb250SW5mbz1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksdGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVtYmVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLHJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmNyeXB0Iil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLG5lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJlbmNyeXB0aW9uIiwhMCkpLmVuY3J5cHQ9bnVsbCxuLmVuY3J5cHRpb25MZXZlbD1udWxsLG4ucGVybWlzc2lvbnM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmZvcmNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxvZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZXF1YXRlIikpLmZvcmNlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9fSksbi5mcm9tPWUuZnJvbXx8IiIsbi50bz1lLnRvfHwiIixufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksc2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImVxdWF0ZVJhbmdlIikpLmZyb209ZS5mcm9tfHwiIixuLnRvPWUudG98fCIiLG4uX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiIsbn1yZXR1cm4gbChyLFt7a2V5OiJ1bmljb2RlUmFuZ2UiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj0vVVwrKFswLTlhLWZBLUZdKykvLG49ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0odGhpcy5fdW5pY29kZVJhbmdlLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTsxPT09KGE9YS5zcGxpdCgiLSIsMikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHIpO3JldHVybiB0P3BhcnNlSW50KHRbMV0sMTYpOjB9KSkpLmxlbmd0aCYmYS5wdXNoKGFbMF0pLHQucHVzaChhKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsdCl9fV0pLHJ9KGkuWEZBT2JqZWN0KSxjZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSx1ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZU5TIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxsZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxmZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZm9udEluZm8iLCEwKSkuZW1iZWQ9bnVsbCxuLm1hcD1udWxsLG4uc3Vic2V0QmVsb3c9bnVsbCxuLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImZvcm1GaWVsZEZpbGxpbmciKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksZGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImdyb3VwUGFyZW50Iil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxwZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxnZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaW5jbHVkZVhEUENvbnRlbnQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkseWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImluY3JlbWVudGFsTWVyZ2UiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksbWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImludGVyYWN0aXZlIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLGJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsYWJlbFByaW50ZXIiLCEwKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSxuLmJhdGNoT3V0cHV0PW51bGwsbi5mbGlwTGFiZWw9bnVsbCxuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksa2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksU2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxldmVsIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLHhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsaW5lYXJpemVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE9lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEFlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGVTZXQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLENlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsb2ciLCEwKSkubW9kZT1udWxsLG4udGhyZXNob2xkPW51bGwsbi50bz1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtYXAiLCEwKSkuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtZWRpdW1JbmZvIiwhMCkpLm1hcD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwibWVzc2FnZSIsITApKS5tc2dJZD1udWxsLG4uc2V2ZXJpdHk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm1lc3NhZ2luZyIsITApKS5tZXNzYWdlPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxFZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxqZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kaWZ5QW5ub3RzIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE1lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJtc2dJZCIsMSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksX2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIm5hbWVBdHRyIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxMZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibmV2ZXJFbWJlZCIpfXJldHVybiBsKHIpfShpLkNvbnRlbnRPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTImJmU8PTV9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksTmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm9wZW5BY3Rpb24iLCEwKSkuZGVzdGluYXRpb249bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksRGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm91dHB1dCIsITApKS50bz1udWxsLG4udHlwZT1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdXRwdXRCaW4iKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLFVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJvdXRwdXRYU0wiLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCRlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxYZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFja2V0cyIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpfSkpKX19XSkscn0oaS5TdHJpbmdPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwYWdlT2Zmc2V0IikpLng9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLnk9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBhZ2VSYW5nZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpLHQ9W10scj0wLG49ZS5sZW5ndGg7cjxuO3IrPTIpdC5wdXNoKGUuc2xpY2UocixyKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fV0pLHJ9KGkuU3RyaW5nT2JqZWN0KSxHZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx6ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLFdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwYXJ0IiwxLChmdW5jdGlvbihlKXtyZXR1cm4hMX0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxWZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwicGNsIiwhMCkpLm5hbWU9ZS5uYW1lfHwiIixuLmJhdGNoT3V0cHV0PW51bGwsbi5mb250SW5mbz1udWxsLG4uam9nPW51bGwsbi5tZWRpdW1JbmZvPW51bGwsbi5vdXRwdXRCaW49bnVsbCxuLnBhZ2VPZmZzZXQ9bnVsbCxuLnN0YXBsZT1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwZGYiLCEwKSkubmFtZT1lLm5hbWV8fCIiLG4uYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmNvbXByZXNzaW9uPW51bGwsbi5jcmVhdG9yPW51bGwsbi5lbmNyeXB0aW9uPW51bGwsbi5mb250SW5mbz1udWxsLG4uaW50ZXJhY3RpdmU9bnVsbCxuLmxpbmVhcml6ZWQ9bnVsbCxuLm9wZW5BY3Rpb249bnVsbCxuLnBkZmE9bnVsbCxuLnByb2R1Y2VyPW51bGwsbi5yZW5kZXJQb2xpY3k9bnVsbCxuLnNjcmlwdE1vZGVsPW51bGwsbi5zaWxlbnRQcmludD1udWxsLG4uc3VibWl0Rm9ybWF0PW51bGwsbi50YWdnZWQ9bnVsbCxuLnZlcnNpb249bnVsbCxuLnZpZXdlclByZWZlcmVuY2VzPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksS2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBkZmEiLCEwKSkuYW1kPW51bGwsbi5jb25mb3JtYW5jZT1udWxsLG4uaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCxuLnBhcnQ9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBlcm1pc3Npb25zIiwhMCkpLmFjY2Vzc2libGVDb250ZW50PW51bGwsbi5jaGFuZ2U9bnVsbCxuLmNvbnRlbnRDb3B5PW51bGwsbi5kb2N1bWVudEFzc2VtYmx5PW51bGwsbi5mb3JtRmllbGRGaWxsaW5nPW51bGwsbi5tb2RpZnlBbm5vdHM9bnVsbCxuLnBsYWludGV4dE1ldGFkYXRhPW51bGwsbi5wcmludD1udWxsLG4ucHJpbnRIaWdoUXVhbGl0eT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxaZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGlja1RyYXlCeVBERlNpemUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksUWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBpY3R1cmUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwbGFpbnRleHRNZXRhZGF0YSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx0dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInByZXNlbnQiLCEwKSkuYmVoYXZpb3JPdmVycmlkZT1udWxsLG4uY2FjaGU9bnVsbCxuLmNvbW1vbj1udWxsLG4uY29waWVzPW51bGwsbi5kZXN0aW5hdGlvbj1udWxsLG4uaW5jcmVtZW50YWxNZXJnZT1udWxsLG4ubGF5b3V0PW51bGwsbi5vdXRwdXQ9bnVsbCxuLm92ZXJwcmludD1udWxsLG4ucGFnaW5hdGlvbj1udWxsLG4ucGFnaW5hdGlvbk92ZXJyaWRlPW51bGwsbi5zY3JpcHQ9bnVsbCxuLnZhbGlkYXRlPW51bGwsbi54ZHA9bnVsbCxuLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5LG4uenBsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxudD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJpbnQiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksYXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50SGlnaFF1YWxpdHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksaXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50ZXJOYW1lIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxzdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJvZHVjZXIiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGN0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwcyIsITApKS5uYW1lPWUubmFtZXx8IiIsbi5iYXRjaE91dHB1dD1udWxsLG4uZm9udEluZm89bnVsbCxuLmpvZz1udWxsLG4ubWVkaXVtSW5mbz1udWxsLG4ub3V0cHV0QmluPW51bGwsbi5zdGFwbGU9bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx1dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmFuZ2UiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUudHJpbSgpLDEwKX0pKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSksZX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxsdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVjb3JkIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7dmFyIGU9cGFyc2VJbnQodGhpc1tpLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tpLiRjb250ZW50XT1lKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxmdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVsZXZhbnQiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksaHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmFtZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLCh0aGlzW2kuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbaS4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksZHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxwdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzY3JpcHQiLCEwKSkuY3VycmVudFBhZ2U9bnVsbCxuLmV4Y2x1ZGU9bnVsbCxuLnJ1blNjcmlwdHM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksdnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx5dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLG10PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzaWxlbnRQcmludCIsITApKS5hZGRTaWxlbnRQcmludD1udWxsLG4ucHJpbnRlck5hbWU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInN0YXBsZSIpKS5tb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx3dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnROb2RlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxrdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4hMH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxTdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJtaXRVcmwiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLE90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJzZXRCZWxvdyIsMTAwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEF0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdXBwcmVzc0Jhbm5lciIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxDdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGFnZ2VkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLEZ0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZSIsITApKS5iYXNlPW51bGwsbi5yZWxldmFudD1udWxsLG4uc3RhcnRQYWdlPW51bGwsbi51cmk9bnVsbCxuLnhzbD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxQdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxUdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEl0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZUNhY2hlIikpLm1heEVudHJpZXM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0cmFjZSIsITApKS5hcmVhPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxqdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwidHJhbnNmb3JtIiwhMCkpLmdyb3VwUGFyZW50PW51bGwsbi5pZkVtcHR5PW51bGwsbi5uYW1lQXR0cj1udWxsLG4ucGljdHVyZT1udWxsLG4ucHJlc2VuY2U9bnVsbCxuLnJlbmFtZT1udWxsLG4ud2hpdGVzcGFjZT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLF90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ1cmkiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEx0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksUnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuWyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSl9KSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksTnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxEdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxCdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiVmVyc2lvbkNvbnRyb2wiKSkub3V0cHV0QmVsb3c9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSksbi5zb3VyY2VBYm92ZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKSxuLnNvdXJjZUJlbG93PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApKS5BREJFX0pTQ29uc29sZT1udWxsLG4uQURCRV9KU0RlYnVnZ2VyPW51bGwsbi5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsLG4uZHVwbGV4T3B0aW9uPW51bGwsbi5lbmZvcmNlPW51bGwsbi5udW1iZXJPZkNvcGllcz1udWxsLG4ucGFnZVJhbmdlPW51bGwsbi5waWNrVHJheUJ5UERGU2l6ZT1udWxsLG4ucHJpbnRTY2FsaW5nPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCR0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ3ZWJDbGllbnQiLCEwKSkubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIixuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ3aW5kb3ciKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpO2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpP3RoaXNbaS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbaS4kY29udGVudF09ZSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCkscXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInhkYyIsITApKS51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksbi54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ4ZHAiLCEwKSkucGFja2V0cz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx6dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwieHNsIiwhMCkpLmRlYnVnPW51bGwsbi51cmk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksV3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInpwbCIsITApKS5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmZsaXBMYWJlbD1udWxsLG4uZm9udEluZm89bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGwoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImFjcm9iYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeShlKX19LHtrZXk6ImFjcm9iYXQ3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9fSx7a2V5OiJBREJFX0pTQ29uc29sZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiQURCRV9KU0RlYnVnZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJhZGRTaWxlbnRQcmludCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYWRkVmlld2VyUHJlZmVyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6ImFkanVzdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX19LHtrZXk6ImFnZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fSx7a2V5OiJhbHdheXNFbWJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToiYW1kIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEYoZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFAoZSl9fSx7a2V5OiJhdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJhdXRvU2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKGUpfX0se2tleToiYmFzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfX0se2tleToiYmF0Y2hPdXRwdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaihlKX19LHtrZXk6ImJlaGF2aW9yT3ZlcnJpZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTShlKX19LHtrZXk6ImNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJjaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTChlKX19LHtrZXk6ImNvbW1vbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSKGUpfX0se2tleToiY29tcHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTihlKX19LHtrZXk6ImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKGUpfX0se2tleToiY29tcHJlc3NPYmplY3RTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihlKX19LHtrZXk6ImNvbXByZXNzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFUoZSl9fSx7a2V5OiJjb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgJChlKX19LHtrZXk6ImNvbmZvcm1hbmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFgoZSl9fSx7a2V5OiJjb250ZW50Q29weSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIKGUpfX0se2tleToiY29waWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHEoZSl9fSx7a2V5OiJjcmVhdG9yIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEcoZSl9fSx7a2V5OiJjdXJyZW50UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6KGUpfX0se2tleToiZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXKGUpfX0se2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImRlZmF1bHRUeXBlZmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZKGUpfX0se2tleToiZGVzdGluYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImRvY3VtZW50QXNzZW1ibHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSihlKX19LHtrZXk6ImRyaXZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiZHVwbGV4T3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFEoZSl9fSx7a2V5OiJkeW5hbWljUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiZW1iZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZShlKX19LHtrZXk6ImVuY3J5cHRpb25MZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhZShlKX19LHtrZXk6ImVuZm9yY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJlcXVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb2UoZSl9fSx7a2V5OiJlcXVhdGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzZShlKX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJleGNsdWRlTlMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdWUoZSl9fSx7a2V5OiJmbGlwTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJmb250SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImZvcm1GaWVsZEZpbGxpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJncm91cFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZShlKX19LHtrZXk6ImlmRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJpbmNsdWRlWERQQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnZShlKX19LHtrZXk6ImluY3JlbWVudGFsTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2ZShlKX19LHtrZXk6ImluY3JlbWVudGFsTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJpbnRlcmFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtZShlKX19LHtrZXk6ImpvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiZShlKX19LHtrZXk6ImxhYmVsUHJpbnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3ZShlKX19LHtrZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImxldmVsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFNlKGUpfX0se2tleToibGluZWFyaXplZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4ZShlKX19LHtrZXk6ImxvY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPZShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDZShlKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBGZShlKX19LHtrZXk6Im1lZGl1bUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUGUoZSl9fSx7a2V5OiJtZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToibWVzc2FnaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEllKGUpfX0se2tleToibW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZShlKX19LHtrZXk6Im1vZGlmeUFubm90cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6Im1zZ0lkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToibmFtZUF0dHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX2UoZSl9fSx7a2V5OiJuZXZlckVtYmVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IExlKGUpfX0se2tleToibnVtYmVyT2ZDb3BpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJvcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToib3V0cHV0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToib3V0cHV0QmluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJlKGUpfX0se2tleToib3V0cHV0WFNMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToib3ZlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToicGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYZShlKX19LHtrZXk6InBhZ2VPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSGUoZSl9fSx7a2V5OiJwYWdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcWUoZSl9fSx7a2V5OiJwYWdpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEdlKGUpfX0se2tleToicGFnaW5hdGlvbk92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToicGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShlKX19LHtrZXk6InBjbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBWZShlKX19LHtrZXk6InBkZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZZShlKX19LHtrZXk6InBkZmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgS2UoZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKZShlKX19LHtrZXk6InBpY2tUcmF5QnlQREZTaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKGUpfX0se2tleToicGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRZShlKX19LHtrZXk6InBsYWludGV4dE1ldGFkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGV0KGUpfX0se2tleToicHJlc2VuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdHQoZSl9fSx7a2V5OiJwcmVzZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJ0KGUpfX0se2tleToicHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSl9fSx7a2V5OiJwcmludEhpZ2hRdWFsaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToicHJpbnRTY2FsaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToicHJpbnRlck5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3QoZSl9fSx7a2V5OiJwcm9kdWNlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6InBzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToicmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJyZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJyZWxldmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmdChlKX19LHtrZXk6InJlbmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodChlKX19LHtrZXk6InJlbmRlclBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InJ1blNjcmlwdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ3QoZSl9fSx7a2V5OiJzY3JpcHRNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2dChlKX19LHtrZXk6InNldmVyaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHl0KGUpfX0se2tleToic2lsZW50UHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJzdGFwbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYnQoZSl9fSx7a2V5OiJzdGFydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3QoZSl9fSx7a2V5OiJzdGFydFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3QoZSl9fSx7a2V5OiJzdWJtaXRGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJzdWJtaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJzdWJzZXRCZWxvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPdChlKX19LHtrZXk6InN1cHByZXNzQmFubmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF0KGUpfX0se2tleToidGFnZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRnQoZSl9fSx7a2V5OiJ0ZW1wbGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToidGhyZXNob2xkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToidG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVHQoZSl9fSx7a2V5OiJ0cmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFdChlKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqdChlKX19LHtrZXk6InR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTXQoZSl9fSx7a2V5OiJ1cmkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdChlKX19LHtrZXk6InZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToidmFsaWRhdGlvbk1lc3NhZ2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOdChlKX19LHtrZXk6InZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ2ZXJzaW9uQ29udHJvbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBCdChlKX19LHtrZXk6InZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUpfX0se2tleToid2ViQ2xpZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToid2hpdGVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYdChlKX19LHtrZXk6IndpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InhkYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InhkcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHdChlKX19LHtrZXk6InhzbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dChlKX19LHtrZXk6InpwbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19XSksZX0oKTt0LkNvbmZpZ05hbWVzcGFjZT1WdH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxyJiZvKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbChlLHQpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9aChlKTtpZih0KXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9dmFyIGQ9YS5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJjb25uZWN0aW9uU2V0IiwhMCkpLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gcyhyKX0oaS5YRkFPYmplY3QpLGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsImVmZmVjdGl2ZUlucHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksdj1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZWZmZWN0aXZlT3V0cHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCkseT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwib3BlcmF0aW9uIikpLmlkPWUuaWR8fCIiLG4uaW5wdXQ9ZS5pbnB1dHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5vdXRwdXQ9ZS5vdXRwdXR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksbT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwicm9vdEVsZW1lbnQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxiPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJzb2FwQWN0aW9uIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksdz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwic29hcEFkZHJlc3MiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ1cmkiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ3c2RsQWRkcmVzcyIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gcyhyKX0oaS5TdHJpbmdPYmplY3QpLHg9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsIndzZGxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsLG4uZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGwsbi5vcGVyYXRpb249bnVsbCxuLnNvYXBBY3Rpb249bnVsbCxuLnNvYXBBZGRyZXNzPW51bGwsbi53c2RsQWRkcmVzcz1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ4bWxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51cmk9bnVsbCxufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksQT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwieHNkQ29ubmVjdGlvbiIsITApKS5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4ucm9vdEVsZW1lbnQ9bnVsbCxuLnVyaT1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2ModGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBlW3RdKHIpfX0se2tleToiY29ubmVjdGlvblNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfX0se2tleToiZWZmZWN0aXZlSW5wdXRQb2xpY3kiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZyhlKX19LHtrZXk6ImVmZmVjdGl2ZU91dHB1dFBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2KGUpfX0se2tleToib3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSl9fSx7a2V5OiJyb290RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtKGUpfX0se2tleToic29hcEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToic29hcEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdyhlKX19LHtrZXk6InVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToid3NkbEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6IndzZGxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHgoZSl9fSx7a2V5OiJ4bWxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJ4c2RDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fV0pLGV9KCk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwNiksaT1yKDIwOCk7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1pLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxyKSx0LmNhbGwodGhpcyxkLCJkYXRhIixlKX1yZXR1cm4gYyhyLFt7a2V5OmEuJGlzTnNBZ25vc3RpYyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX1dKSxyfShhLlhtbE9iamVjdCksZz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZGF0YXNldHMiLCEwKSkuZGF0YT1udWxsLG4uU2lnbmF0dXJlPW51bGwsbn1yZXR1cm4gYyhyLFt7a2V5OmEuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVthLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbYS4kbmFtZXNwYWNlSWRdPT09ZHx8IlNpZ25hdHVyZSI9PT10JiZlW2EuJG5hbWVzcGFjZUlkXT09PWkuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpLHRoaXNbYS4kYXBwZW5kQ2hpbGRdKGUpfX1dKSxyfShhLlhGQU9iamVjdCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmkuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImRhdGFzZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGcoZSl9fSx7a2V5OiJkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHAoZSl9fV0pLGV9KCk7dC5EYXRhc2V0c05hbWVzcGFjZT12fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGVTZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWQoZSk7aWYodCl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWEuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZCxnPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjYWxlbmRhclN5bWJvbHMiLCEwKSkubmFtZT0iZ3JlZ29yaWFuIixuLmRheU5hbWVzPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG4uZXJhTmFtZXM9bnVsbCxuLm1lcmlkaWVtTmFtZXM9bnVsbCxuLm1vbnRoTmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLHY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImN1cnJlbmN5U3ltYm9sIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSx5PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSkuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLG09ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLGI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJucyIsITApKS5kYXRlUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF0ZVRpbWVTeW1ib2xzIil9cmV0dXJuIGMocil9KGkuQ29udGVudE9iamVjdCksaz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF5Iil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJkYXlOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCkseD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZXJhIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJlcmFOYW1lcyIsITApKS5lcmE9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEE9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZSIsITApKS5kZXNjPWUuZGVzY3x8IiIsbi5uYW1lPSJpc29uYW1lIixuLmNhbGVuZGFyU3ltYm9scz1udWxsLG4uY3VycmVuY3lTeW1ib2xzPW51bGwsbi5kYXRlUGF0dGVybnM9bnVsbCxuLmRhdGVUaW1lU3ltYm9scz1udWxsLG4ubnVtYmVyUGF0dGVybnM9bnVsbCxuLm51bWJlclN5bWJvbHM9bnVsbCxuLnRpbWVQYXR0ZXJucz1udWxsLG4udHlwZUZhY2VzPW51bGwsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZVNldCIsITApKS5sb2NhbGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLHAsIm1lcmlkaWVtIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJtZXJpZGllbU5hbWVzIiwhMCkpLm1lcmlkaWVtPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxwLCJtb250aCIpfXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksST1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibW9udGhOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLm1vbnRoPW5ldyBpLlhGQU9iamVjdEFycmF5KDEyKSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksRT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyUGF0dGVybiIpKS5uYW1lPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJQYXR0ZXJucyIsITApKS5udW1iZXJQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJTeW1ib2wiKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKSxufXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksXz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyU3ltYm9scyIsITApKS5udW1iZXJTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoNSksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLFI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJucyIsITApKS50aW1lUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksTj1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwidHlwZUZhY2UiLCEwKSkubmFtZT0iInxlLm5hbWUsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInR5cGVGYWNlcyIsITApKS50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1KHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImNhbGVuZGFyU3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKGUpfX0se2tleToiY3VycmVuY3lTeW1ib2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdihlKX19LHtrZXk6ImN1cnJlbmN5U3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUpfX0se2tleToiZGF0ZVBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX19LHtrZXk6ImRhdGVQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiZGF0ZVRpbWVTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJkYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX19LHtrZXk6ImRheU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9fSx7a2V5OiJlcmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImVyYU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJsb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToibWVyaWRpZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRihlKX19LHtrZXk6Im1lcmlkaWVtTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUChlKX19LHtrZXk6Im1vbnRoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJtb250aE5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfX0se2tleToibnVtYmVyU3ltYm9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE0oZSl9fSx7a2V5OiJudW1iZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJ0aW1lUGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToidGltZVBhdHRlcm5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFIoZSl9fSx7a2V5OiJ0eXBlRmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOKGUpfX0se2tleToidHlwZUZhY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fV0pLGV9KCk7dC5Mb2NhbGVTZXROYW1lc3BhY2U9Qn0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGModGhpcyxpKSxhLmNhbGwodGhpcyxmLCJzaWduYXR1cmUiLCEwKX1yZXR1cm4gcyhpKX0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJzaWduYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlNpZ25hdHVyZU5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkLGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9bCh0KTtpZihyKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBjKHRoaXMsaSksYS5jYWxsKHRoaXMsZiwic3R5bGVzaGVldCIsITApfXJldHVybiBzKGkpfShpLlhGQU9iamVjdCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIHMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6InN0eWxlc2hlZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9ZH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy54ZHAuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShoLGUpO3ZhciB0LHIscz0odD1oLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuIG8odGhpcyxoKSwodD1zLmNhbGwodGhpcyxmLCJ4ZHAiLCEwKSkudXVpZD1lLnV1aWR8fCIiLHQudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0LmNvbmZpZz1udWxsLHQuY29ubmVjdGlvblNldD1udWxsLHQuZGF0YXNldHM9bnVsbCx0LmxvY2FsZVNldD1udWxsLHQuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0LnRlbXBsYXRlPW51bGwsdH1yZXR1cm4gYyhoLFt7a2V5OmkuJG9uQ2hpbGRDaGVjayx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19XSksaH0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBjKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJ4ZHAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlhkcE5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigyMDgpLG89cigyMTMpLHM9cigyMDcpO2Z1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIHQmJnUoZS5wcm90b3R5cGUsdCksciYmdShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gZigpe3JldHVybiBmPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ZyhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGQoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWcoZSk7aWYodCl7dmFyIGk9Zyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8bShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9bShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgdz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxrPVN5bWJvbCgpLFM9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSx4PW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJ9XSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGZ1bmN0aW9uKGUpe3JldHVybiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIil9XSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixmdW5jdGlvbihlKXtyZXR1cm4ic2NhbGVZKCIuY29uY2F0KE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKSwiKSIpfV0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLG8ubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJsaW5lLWhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tYm90dG9tIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luLXJpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tdG9wIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJ0ZXh0LWluZGVudCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsiZm9udC1mYW1pbHkiLGZ1bmN0aW9uKGUpe3JldHVybiBlfV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dXSksTz0vXHMrL2csQT0vW1xyXG5dKy9nLEM9L1xyXG4/L2c7ZnVuY3Rpb24gRihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgaSxjPU9iamVjdC5jcmVhdGUobnVsbCksdT15KGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2Zvcih1LnMoKTshKGk9dS5uKCkpLmRvbmU7KXt2YXIgbD12KGkudmFsdWUsMiksZj1sWzBdLGg9bFsxXSxkPXguZ2V0KGYpO2lmKCIiIT09ZCl7dmFyIHA9aDtkJiYocD0ic3RyaW5nIj09dHlwZW9mIGQ/ZDpkKGgsYykpLGYuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09IiIuY29uY2F0KG5bZl0sIiAiKS5jb25jYXQocCk6bi50cmFuc2Zvcm09cDpuW2YucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpXT1wfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9aWYobi5mb250RmFtaWx5JiYoMCxvLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTpuLmZvbnRGYW1pbHksd2VpZ2h0Om4uZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTpuLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpjLmZvbnRTaXplfHwwfSx0LHRbYS4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixuKSxyJiZuLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09bi52ZXJ0aWNhbEFsaWduJiZuLmZvbnRTaXplKXt2YXIgZz0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSguNTgzKmcpLG4udmVydGljYWxBbGlnbj0oMCxvLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmcqLjMzMyl9cmV0dXJuIHImJm4uZm9udFNpemUmJihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KG4uZm9udFNpemUsIiAqIHZhcigtLXNjYWxlLWZhY3RvcikpIikpLCgwLG8uZml4VGV4dEluZGVudCkobiksbn12YXIgUD1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSksVD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIGModGhpcyxyKSwoYT10LmNhbGwodGhpcyx3LG4pKVtrXT0hMSxhLnN0eWxlPWUuc3R5bGV8fCIiLGF9cmV0dXJuIGwocixbe2tleTphLiRjbGVhbix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtmKGcoci5wcm90b3R5cGUpLGEuJGNsZWFuLHRoaXMpLmNhbGwodGhpcyxlKSx0aGlzLnN0eWxlPSh0PXRoaXMpLnN0eWxlP3Quc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHMqOlxzKi8sMil9KSkuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj12KGUsMiksbj1yWzBdLGk9clsxXTtyZXR1cm4iZm9udC1mYW1pbHkiPT09biYmdFthLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChpKSxTLmhhcyhuKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIjoiKX0pKS5qb2luKCI7Iik6IiJ9fSx7a2V5OmEuJGFjY2VwdFdoaXRlc3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hUC5oYXModGhpc1thLiRub2RlTmFtZV0pfX0se2tleTphLiRvblRleHQsdmFsdWU6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT90aGlzW2tdPSEwOihlPWUucmVwbGFjZShBLCIiKSx0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZShPLCIgIikpKSxlJiYodGhpc1thLiRjb250ZW50XSs9ZSl9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfSxvPW51bGwsYz15KHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2ZvcihjLnMoKTshKHQ9Yy5uKCkpLmRvbmU7KXt2YXIgdT12KHQudmFsdWUsMiksbD11WzBdLGY9dVsxXTtzd2l0Y2gobCl7Y2FzZSJmb250LWZhbWlseSI6bi50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKShmKTticmVhaztjYXNlImZvbnQtc2l6ZSI6bi5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOm4ud2VpZ2h0PWY7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjpuLnBvc3R1cmU9ZjticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjpuLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4iOnZhciBoPWYuc3BsaXQoLyBcdC8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5nZXRNZWFzdXJlbWVudCkoZSl9KSk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9aFswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209aFswXSxpLmxlZnQ9aS5yaWdodD1oWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1oWzBdLGkuYm90dG9tPWhbMl0saS5sZWZ0PWkucmlnaHQ9aFsxXTticmVhaztjYXNlIDQ6aS50b3A9aFswXSxpLmxlZnQ9aFsxXSxpLmJvdHRvbT1oWzJdLGkucmlnaHQ9aFszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm89KDAscy5nZXRNZWFzdXJlbWVudCkoZil9fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1pZihlLnB1c2hEYXRhKG4saSxvKSx0aGlzW2EuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbYS4kY29udGVudF0pO2Vsc2V7dmFyIGQscD15KHRoaXNbYS4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTsiI3RleHQiIT09Z1thLiRub2RlTmFtZV0/Z1thLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyhnW2EuJGNvbnRlbnRdKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fXImJmUucG9wRm9udCgpfX0se2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1bXTtyZXR1cm4gdGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnJ9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwIT09ci5sZW5ndGh8fHRoaXNbYS4kY29udGVudF0/KHQ9dGhpc1trXT90aGlzW2EuJGNvbnRlbnRdP3RoaXNbYS4kY29udGVudF0ucmVwbGFjZShDLCJcbiIpOnZvaWQgMDp0aGlzW2EuJGNvbnRlbnRdfHx2b2lkIDAscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1thLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6Rih0aGlzLnN0eWxlLHRoaXMsdGhpc1trXSl9LGNoaWxkcmVuOnIsdmFsdWU6dH0pKTpzLkhUTUxSZXN1bHQuRU1QVFl9fV0pLHJ9KGEuWG1sT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxlLCJhIikpLmhyZWY9KDAsby5maXhVUkwpKGUuaHJlZil8fCIiLG59cmV0dXJuIGwocil9KFQpLEU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImIiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLGYoZyhyLnByb3RvdHlwZSksYS4kcHVzaEdseXBocyx0aGlzKS5jYWxsKHRoaXMsZSksZS5wb3BGb250KCl9fV0pLHJ9KFQpLGo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImJvZHkiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mKGcoci5wcm90b3R5cGUpLGEuJHRvSFRNTCx0aGlzKS5jYWxsKHRoaXMsZSksbj10Lmh0bWw7cmV0dXJuIG4/KG4ubmFtZT0iZGl2IixuLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShUKSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJiciIpfXJldHVybiBsKHIsW3trZXk6YS4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJcbiJ9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5hZGRTdHJpbmcoIlxuIil9fSx7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1dKSxyfShUKSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJodG1sIil9cmV0dXJuIGwocixbe2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnR9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2EuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIHI9dFswXTtpZihyLmF0dHJpYnV0ZXMmJnIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19XSkscn0oVCksTD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiaSIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksZihnKHIucHJvdG90eXBlKSxhLiRwdXNoR2x5cGhzLHRoaXMpLmNhbGwodGhpcyxlKSxlLnBvcEZvbnQoKX19XSkscn0oVCksUj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwibGkiKX1yZXR1cm4gbChyKX0oVCksTj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwib2wiKX1yZXR1cm4gbChyKX0oVCksRD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwicCIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtmKGcoci5wcm90b3R5cGUpLGEuJHB1c2hHbHlwaHMsdGhpcykuY2FsbCh0aGlzLGUsITEpLGUuYWRkU3RyaW5nKCJcbiIpLGUuYWRkUGFyYSgpLGUucG9wRm9udCgpfX0se2tleTphLiR0ZXh0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYS4kZ2V0UGFyZW50XSgpW2EuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcyk6ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcykrIlxuIn19XSkscn0oVCksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3BhbiIpfXJldHVybiBsKHIpfShUKSxVPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJzdWIiKX1yZXR1cm4gbChyKX0oVCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3VwIil9cmV0dXJuIGwocil9KFQpLFg9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsInVsIil9cmV0dXJuIGwocil9KFQpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBsKGUsbnVsbCxbe2tleTppLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJiIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJib2R5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGooZSl9fSx7a2V5OiJiciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNKGUpfX0se2tleToiaHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfKGUpfX0se2tleToiaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToibGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUihlKX19LHtrZXk6Im9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSl9fSx7a2V5OiJwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fSx7a2V5OiJzcGFuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEIoZSl9fSx7a2V5OiJzdWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVShlKX19LHtrZXk6InN1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyAkKGUpfX0se2tleToidWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWChlKX19XSksZX0oKTt0LlhodG1sTmFtZXNwYWNlPUh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIwOCksYT1yKDIwNik7ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saShlKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWkoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1pKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aShhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMubmFtZXNwYWNlSWQ9dH12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6bi4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LlVua25vd25OYW1lc3BhY2U9c30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTk1KTtmdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPWgoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9lOnIpOmEudmFsdWV9fSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX1mdW5jdGlvbiBkKGUpe3RyeXtyZXR1cm4oMCxhLnN0cmluZ1RvVVRGOFN0cmluZykoZSl9Y2F0Y2godCl7cmV0dXJuKDAsYS53YXJuKSgnVVRGLTggZGVjb2RpbmcgZmFpbGVkOiAiJy5jb25jYXQodCwnIi4nKSksZX19dmFyIHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9aCh0KTtpZihyKXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3ZhciB0O3JldHVybiBzKHRoaXMsaSksKHQ9YS5jYWxsKHRoaXMsZSkpLm5vZGU9bnVsbCx0fXJldHVybiB1KGksW3trZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bChoKGkucHJvdG90eXBlKSwib25FbmRFbGVtZW50Iix0aGlzKS5jYWxsKHRoaXMsZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXRocm93IHRoaXMubm9kZT10LG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19XSksaX0oby5TaW1wbGVYTUxQYXJzZXIpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKHModGhpcyxlKSx0LmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgby5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcodC5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7dmFyIHI9bmV3IHAoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7ci5wYXJzZUZyb21TdHJpbmcodFsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXIubm9kZX19cmV0dXJuIHUoZSxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO3ZhciB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGkucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjt2YXIgcj10LmZpcnN0Q2hpbGQ7cmV0dXJuIHImJiJ2YWx1ZSI9PT1yLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZChlLnRleHRDb250ZW50KX0pKTpkKHQudGV4dENvbnRlbnQpfX1dKSxlfSgpO3QuRGF0YXNldFJlYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTQ2KSxzPXIoMTM2KSxjPXIoMTk2KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoKXtsPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciBsPWMuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXUoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2YoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2YoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBwKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cChlLHQpOnZvaWQgMH19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jYWNoZU1hcD1uZXcgTWFwLHRoaXMuX3BlbmRpbmdSZWZzPW5ldyBhLlJlZlNldCx0aGlzLnN0YXRzPW5ldyBpLkRvY1N0YXRzKHIubXNnSGFuZGxlciksdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsLHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfXZhciB0LHIsdSxmO3JldHVybiB0PWUscj1be2tleToiZ2V0TmV3UGVyc2lzdGVudFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3ZhciB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksYS5SZWYuZ2V0KHQsMCl9fSx7a2V5OiJnZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksYS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfX0se2tleToicmVzZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9fSx7a2V5OiJzZXRTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtvPygoMCxuLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBhLkRpY3Qpe3ZhciBzPWUuZ2V0KCJJRCIpLHU9cyYmcy5sZW5ndGg/c1swXToiIjt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCx0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSh0LHUsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj1lLmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHIgaW5zdGFuY2VvZiBhLkRpY3QpdHJ5e2lmKHIuZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBhLkRpY3QpcmV0dXJuIHZvaWQodGhpcy5yb290PXIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighbyl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX19LHtrZXk6InByb2Nlc3NYUmVmVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsYS5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGEuRGljdHx8IXIuZGljdHx8KHI9ci5kaWN0KSwhKHIgaW5zdGFuY2VvZiBhLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtyZXR1cm4gZGVsZXRlIHRoaXMudGFibGVTdGF0ZSxyfX0se2tleToicmVhZFhSZWZUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9aS5zdHJlYW1Qb3MsZS5idWYxPWkucGFyc2VyQnVmMSxlLmJ1ZjI9aS5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gaSl8fCEoImVudHJ5Q291bnQiaW4gaSkpe2lmKCgwLGEuaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2kuZmlyc3RFbnRyeU51bT10LGkuZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBvPWkuZmlyc3RFbnRyeU51bSxzPWkuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGM9aS5lbnRyeU51bTtjPHM7YysrKXtpLnN0cmVhbVBvcz1yLnBvcyxpLmVudHJ5TnVtPWMsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciB1PXt9O3Uub2Zmc2V0PWUuZ2V0T2JqKCksdS5nZW49ZS5nZXRPYmooKTt2YXIgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6dS5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6dS51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIodS5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcih1Lmdlbil8fCF1LmZyZWUmJiF1LnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICIuY29uY2F0KG8sIiwgIikuY29uY2F0KHMpKTswPT09YyYmdS5mcmVlJiYxPT09byYmKG89MCksdGhpcy5lbnRyaWVzW2Mrb118fCh0aGlzLmVudHJpZXNbYytvXT11KX1pLmVudHJ5TnVtPTAsaS5zdHJlYW1Qb3M9ci5wb3MsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyLGRlbGV0ZSBpLmZpcnN0RW50cnlOdW0sZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiB0fX0se2tleToicHJvY2Vzc1hSZWZTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXt2YXIgdD1lLmRpY3Qscj10LmdldCgiVyIpLG49dC5nZXQoIkluZGV4Iik7bnx8KG49WzAsdC5nZXQoIlNpemUiKV0pLHRoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOm4sYnl0ZVdpZHRoczpyLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX1yZXR1cm4gdGhpcy5yZWFkWFJlZlN0cmVhbShlKSxkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZSxlLmRpY3R9fSx7a2V5OiJyZWFkWFJlZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztmb3IodmFyIHI9ZCh0LmJ5dGVXaWR0aHMsMyksYT1yWzBdLGk9clsxXSxvPXJbMl0scz10LmVudHJ5UmFuZ2VzO3MubGVuZ3RoPjA7KXt2YXIgYz1kKHMsMiksdT1jWzBdLGw9Y1sxXTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICIuY29uY2F0KHUsIiwgIikuY29uY2F0KGwpKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogIi5jb25jYXQodSwiLCAiKS5jb25jYXQobCkpO2Zvcih2YXIgZj10LmVudHJ5TnVtO2Y8bDsrK2Ype3QuZW50cnlOdW09Zix0LnN0cmVhbVBvcz1lLnBvcztmb3IodmFyIGg9MCxwPTAsZz0wLHY9MDt2PGE7Kyt2KXt2YXIgeT1lLmdldEJ5dGUoKTtpZigtMT09PXkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtoPWg8PDh8eX0wPT09YSYmKGg9MSk7Zm9yKHZhciBtPTA7bTxpOysrbSl7dmFyIGI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1iKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtwPXA8PDh8Yn1mb3IodmFyIHc9MDt3PG87Kyt3KXt2YXIgaz1lLmdldEJ5dGUoKTtpZigtMT09PWspdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtnPWc8PDh8a312YXIgUz17fTtzd2l0Y2goUy5vZmZzZXQ9cCxTLmdlbj1nLGgpe2Nhc2UgMDpTLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOlMudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K2ZdfHwodGhpcy5lbnRyaWVzW3UrZl09Uyl9dC5lbnRyeU51bT0wLHQuc3RyZWFtUG9zPWUucG9zLHMuc3BsaWNlKDAsMil9fX0se2tleToiaW5kZXhPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9IiIsbj1lW3RdOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgbj1yLmxlbmd0aCxhPWUubGVuZ3RoLGk9MDt0PGE7KXtmb3IodmFyIG89MDtvPG4mJmVbdCtvXT09PXJbb107KSsrbztpZihvPj1uKWJyZWFrO3QrKyxpKyt9cmV0dXJuIGl9dmFyIHI9L1xiKGVuZG9ianxcZCtccytcZCtccytvYmp8eHJlZnx0cmFpbGVyKVxiL2cscz0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHU9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksbD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLGY9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTt2YXIgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2Zvcih2YXIgZCxwLGc9aC5nZXRCeXRlcygpLHY9KDAsbi5ieXRlc1RvU3RyaW5nKShnKSx5PWcubGVuZ3RoLG09aC5zdGFydCxiPVtdLHc9W107bTx5Oyl7dmFyIGs9Z1ttXTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTPWUoZyxtKSx4PXZvaWQgMDtpZihTLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbNF0pKSltKz10KGcsbSx1KSxiLnB1c2gobSksbSs9dChnLG0sbCk7ZWxzZSBpZih4PWMuZXhlYyhTKSl7dmFyIE89MHx4WzFdLEE9MHx4WzJdLEM9bStTLmxlbmd0aCxGPXZvaWQgMCxQPSExO2lmKHRoaXMuZW50cmllc1tPXSl7aWYodGhpcy5lbnRyaWVzW09dLmdlbj09PUEpdHJ5e25ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKEMpKX0pLmdldE9iaigpLFA9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIGkuUGFyc2VyRU9GRXhjZXB0aW9uPygwLG4ud2FybikoImluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCIuY29uY2F0KFMsJyk6ICInKS5jb25jYXQoZSwnIi4nKSk6UD0hMH19ZWxzZSBQPSEwO1AmJih0aGlzLmVudHJpZXNbT109e29mZnNldDptLWguc3RhcnQsZ2VuOkEsdW5jb21wcmVzc2VkOiEwfSksci5sYXN0SW5kZXg9Qzt2YXIgVD1yLmV4ZWModik7VD8oRj1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1UWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoVFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgJykrJ2NhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpLEYtPVRbMV0ubGVuZ3RoKzEpKTpGPXktbTt2YXIgST1nLnN1YmFycmF5KG0sbStGKSxFPXQoSSwwLGYpO0U8RiYmSVtFKzVdPDY0JiYody5wdXNoKG0taC5zdGFydCksdGhpcy54cmVmc3Rtc1ttLWguc3RhcnRdPTEpLG0rPUZ9ZWxzZSBpZihTLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbN10pKSl7Yi5wdXNoKG0pO3ZhciBqPW0rUy5sZW5ndGgsTT12b2lkIDA7cy5sYXN0SW5kZXg9ajt2YXIgXz1zLmV4ZWModik7Xz8oTT1zLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1fWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoX1sxXSwnIiBhZnRlciAidHJhaWxlciIsICcpKydjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxNLT1fWzFdLmxlbmd0aCsxKSk6TT15LW0sbSs9TX1lbHNlIG0rPVMubGVuZ3RoKzF9ZWxzZSBkb3tpZigrK20+PXkpYnJlYWs7az1nW21dfXdoaWxlKDEwIT09ayYmMTMhPT1rKTtlbHNlKyttfWZvcih2YXIgTD0wLFI9dztMPFIubGVuZ3RoO0wrKyl7dmFyIE49UltMXTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goTiksdGhpcy5yZWFkWFJlZighMCl9Zm9yKHZhciBEPTAsQj1bXS5jb25jYXQoYixbImdlbmVyYXRpb25GYWxsYmFjayJdLGIpO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgVT1CW0RdO2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siIT09VSl7aC5wb3M9VTt2YXIgJD1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksWD0kLmdldE9iaigpO2lmKCgwLGEuaXNDbWQpKFgsInRyYWlsZXIiKSl7dmFyIEg9JC5nZXRPYmooKTtpZihIIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcT0hMTt0cnl7dmFyIEc9SC5nZXQoIlJvb3QiKTtpZighKEcgaW5zdGFuY2VvZiBhLkRpY3QpKWNvbnRpbnVlO3ZhciB6PUcuZ2V0KCJQYWdlcyIpO2lmKCEoeiBpbnN0YW5jZW9mIGEuRGljdCkpY29udGludWU7dmFyIFc9ei5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihXKSYmKHE9ITApfWNhdGNoKGUpe3A9ZTtjb250aW51ZX1pZihxJiZILmhhcygiSUQiKSlyZXR1cm4gSDtkPUh9fX1lbHNle2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMH19aWYoZClyZXR1cm4gZDtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgbi5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9fSx7a2V5OiJyZWFkWFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuc3RyZWFtLHI9bmV3IFNldDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXt2YXIgYz10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGMpKXsoMCxuLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChjKSx0LnBvcz1jK3Quc3RhcnQ7dmFyIHU9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksbD11LmdldE9iaigpLGY9dm9pZCAwO2lmKCgwLGEuaXNDbWQpKGwsInhyZWYiKSl7aWYoZj10aGlzLnByb2Nlc3NYUmVmVGFibGUodSksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWYpLGw9Zi5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGwpKXt2YXIgaD1sO2ggaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbaF09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goaCkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih1LmdldE9iaigpKSYmKDAsYS5pc0NtZCkodS5nZXRPYmooKSwib2JqIikmJihsPXUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoZj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1mKSwhZil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWYuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19LHtrZXk6ImdldEVudHJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH19LHtrZXk6ImZldGNoSWZSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGUgaW5zdGFuY2VvZiBhLlJlZj90aGlzLmZldGNoKGUsdCk6ZX19LHtrZXk6ImZldGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCEoZSBpbnN0YW5jZW9mIGEuUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09aSlyZXR1cm4gaSBpbnN0YW5jZW9mIGEuRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSksaTt2YXIgbz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1vKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixvKSxvO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLG4ud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxhLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e289by51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLG8sdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxvLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gbyBpbnN0YW5jZW9mIGEuRGljdD9vLm9iaklkPWUudG9TdHJpbmcoKTpvIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoby5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksb319LHtrZXk6ImZldGNoVW5jb21wcmVzc2VkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz1lLmdlbix1PWUubnVtO2lmKHQuZ2VuIT09Yyl7dmFyIGw9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48YylyZXR1cm4oMCxuLndhcm4pKGwpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoYS5SZWYuZ2V0KHUsdC5nZW4pLHQscik7dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKGwpfXZhciBmPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGg9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcihmKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD1oLmdldE9iaigpLHA9aC5nZXRPYmooKSxnPWguZ2V0T2JqKCk7aWYoZCE9PXV8fHAhPT1jfHwhKGcgaW5zdGFuY2VvZiBhLkNtZCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYodT1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4odSkpKXJldHVybiB1O3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4odD10aGlzLmVuY3J5cHQmJiFyP2guZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odSxjKSk6aC5nZXRPYmooKSlpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHUsdCksdH19LHtrZXk6ImZldGNoQ29tcHJlc3NlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9mZnNldCxjPXRoaXMuZmV0Y2goYS5SZWYuZ2V0KHIsMCkpO2lmKCEoYyBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7dmFyIHU9Yy5kaWN0LmdldCgiRmlyc3QiKSxsPWMuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2Zvcih2YXIgZj1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxoPW5ldyBBcnJheShsKSxkPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCl7dmFyIGc9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihnKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChnKSk7dmFyIHY9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh2KSk7aFtwXT1nLGRbcF09dn1mb3IodmFyIHk9KGMuc3RhcnR8fDApK3UsbT1uZXcgQXJyYXkobCksYj0wO2I8bDsrK2Ipe3ZhciB3PWI8bC0xP2RbYisxXS1kW2JdOnZvaWQgMDtpZih3PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO3ZhciBrPShmPW5ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoYy5tYWtlU3ViU3RyZWFtKHkrZFtiXSx3LGMuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSkuZ2V0T2JqKCk7aWYobVtiXT1rLCEoayBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpe3ZhciBTPWhbYl0seD10aGlzLmVudHJpZXNbU107eCYmeC5vZmZzZXQ9PT1yJiZ4Lmdlbj09PWImJnRoaXMuX2NhY2hlTWFwLnNldChTLGspfX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH19LHtrZXk6ImZldGNoSWZSZWZBc3luYyIsdmFsdWU6KGY9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0IGluc3RhbmNlb2YgYS5SZWYpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5mZXRjaEFzeW5jKHQscikpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hBc3luYyIsdmFsdWU6KHU9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYXRhbG9nT2JqIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9fV0sciYmZyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWFJlZj12fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixjPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8sYyl7dmFyIHU9aChlW25dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8sYyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLG8obCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8sYyl9KSl9Yyh1LmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LHUsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gaShlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1zKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSl7c3dpdGNoKGUgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKGUpJiZudWxsIT09ZXx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPXRoaXM7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zb3VyY2VOYW1lPXQsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PWEuc291cmNlTmFtZSlpZih0LnN0cmVhbSlhLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuY2FsbGJhY2spe3ZhciByPXQuY2FsbGJhY2tJZCxpPWEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PXQuY2FsbGJhY2spaS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZigyIT09dC5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2kucmVqZWN0KGModC5yZWFzb24pKX19ZWxzZXt2YXIgbz1hLmFjdGlvbkhhbmRsZXJbdC5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7aWYodC5jYWxsYmFja0lkKXt2YXIgcz1hLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobyh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpjKGUpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP2EuX2NyZWF0ZVN0cmVhbVNpbmsodCk6byh0LmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIHQscixzLHU7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5jYWxsYmFja0lkKyssaT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LHIpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBjPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6YyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxhKSxjLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gaS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGwucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciB0PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD10LGkuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpjKGUpfSksdC5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjMsc3RyZWFtSWQ6dH0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW3RdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsaS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NSxzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmMoZSl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo3LHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjcsc3RyZWFtSWQ6dCxyZWFzb246YyhlKX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihjKGUucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLHQpO2JyZWFrO2Nhc2UgMjplLnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGMoZS5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KHMub25DYW5jZWwmJnMub25DYW5jZWwoYyhlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjIsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06MixzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoYyhlLnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9YSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW3Quc3RhcnRDYWxsJiZ0LnN0YXJ0Q2FsbC5wcm9taXNlLHQucHVsbENhbGwmJnQucHVsbENhbGwucHJvbWlzZSx0LmNhbmNlbENhbGwmJnQuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXMuYXBwbHkoZSx0KTtmdW5jdGlvbiBvKGUpe2koYSxyLG4sbyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2koYSxyLG4sbyxjLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NZXNzYWdlSGFuZGxlcj11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSwiIil9Y2F0Y2goZSl7bD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307bCh5LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLG8pJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLGMpe3ZhciB1PWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXMoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLGMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8sYyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLGMpfSkpfWModS5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1sKHYsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGwoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGwoUy5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGwodyx1LCJHZW5lcmF0b3IiKSxsKHcsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGkoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2kobyxuLGEscyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2kobyxuLGEscyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgZCh0aGlzLl9tc2dIYW5kbGVyKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBwKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKTt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl0LnZhbHVlLmNhbmNlbChlKX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fV0pLGV9KCk7dC5QREZXb3JrZXJTdHJlYW09aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dGhpczt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpLHRoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZnVuY3Rpb24oZSl7ci5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCxyLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCxyLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOih0PW8oYSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSAyOmlmKHQ9ZS5zZW50LHI9dC52YWx1ZSwhdC5kb25lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6ci5idWZmZXIsZG9uZTohMX0pO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19XSksZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dSh0aGlzLGUpLHRoaXMuX21zZ0hhbmRsZXI9bix0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgYT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOnQsZW5kOnJ9KTt0aGlzLl9yZWFkZXI9YS5nZXRSZWFkZXIoKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJyZWFkIix2YWx1ZToodD1vKGEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgMjppZih0PWUuc2VudCxyPXQudmFsdWUsIXQuZG9uZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIuYnVmZmVyLGRvbmU6ITF9KTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fV0pLGV9KCl9XSx0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGE9dFtuXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbbl0oaSxpLmV4cG9ydHMsciksaS5leHBvcnRzfXIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxyLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9O3JldHVybigoKT0+e3ZhciBlPW47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9cigxKX0pKCksbn0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKTs=",T="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgcGRmLmpzLkxJQ0VOU0UudHh0ICovCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LHJvb3QsZmFjdG9yeTtyb290PWdsb2JhbFRoaXMsZmFjdG9yeT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189WywodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGkodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxvKHQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1vKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxyJiZzKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiB1KHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZoKHQsZSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZCh0KTtpZihlKXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW8oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGQodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQkFTRUxJTkVfRkFDVE9SPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwLGUuYXJyYXlCeXRlTGVuZ3RoPVQsZS5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2Zvcih2YXIgcj0wLG49MDtuPGU7bisrKXIrPVQodFtuXSk7Zm9yKHZhciBpPTAsYT1uZXcgVWludDhBcnJheShyKSxvPTA7bzxlO28rKyl7dmFyIHM9dFtvXTtzIGluc3RhbmNlb2YgVWludDhBcnJheXx8KHM9InN0cmluZyI9PXR5cGVvZiBzP1Aocyk6bmV3IFVpbnQ4QXJyYXkocykpO3ZhciBsPXMuYnl0ZUxlbmd0aDthLnNldChzLGkpLGkrPWx9cmV0dXJuIGF9LGUuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7dHx8bShlKX0sZS5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uKHQpeyJvYmplY3QiPT09byh0KSYmbnVsbCE9PXQmJnZvaWQgMCE9PXQubGVuZ3RofHxtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIGU9dC5sZW5ndGgscj04MTkyO2lmKGU8cilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krPXIpe3ZhciBhPU1hdGgubWluKGkrcixlKSxzPXQuc3ViYXJyYXkoaSxhKTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gbi5qb2luKCIiKX0sZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dC5yZXNvbHZlPWZ1bmN0aW9uKHQpe2U9ITAscih0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7ZT0hMCxuKHQpfX0pKSx0fSxlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighdClyZXR1cm4gbnVsbDt0cnl7aWYociYmInN0cmluZyI9PXR5cGVvZiB0KXtpZihyLmFkZERlZmF1bHRQcm90b2NvbCYmdC5zdGFydHNXaXRoKCJ3d3cuIikpe3ZhciBuPXQubWF0Y2goL1wuL2cpO24mJm4ubGVuZ3RoPj0yJiYodD0iaHR0cDovLyIuY29uY2F0KHQpKX1pZihyLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7dD1SKHQpfWNhdGNoKHQpe319dmFyIGk9ZT9uZXcgVVJMKHQsZSk6bmV3IFVSTCh0KTtpZihmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtzd2l0Y2godC5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShpKSlyZXR1cm4gaX1jYXRjaCh0KXt9cmV0dXJuIG51bGx9LGUuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRGF0ZTtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKHQuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfSxlLmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGUuaW5mbz1mdW5jdGlvbih0KXt2Pj1wLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIi5jb25jYXQodCkpfSxlLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT1vKHQpJiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofSxlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfSxlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24odCl7dmFyIGUscixuPU9iamVjdC5jcmVhdGUobnVsbCksYT1mdW5jdGlvbih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9aSh0KSkpe3ImJih0PXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsbD0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHM9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7bD0hMCxvPXR9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KHQpO3RyeXtmb3IoYS5zKCk7IShlPWEubigpKS5kb25lOyl7dmFyIG89KHI9ZS52YWx1ZSwyLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHIpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2ZvcihhPShyPXIuY2FsbCh0KSkubmV4dCwwOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0ocil8fGkociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSxzPW9bMF0sbD1vWzFdO25bc109bH19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIG59LGUub2JqZWN0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RofSxlLnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJih2PXQpfSxlLnNoYWRvdz1nLGUuc3RyaW5nMzI9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9LGUuc3RyaW5nVG9CeXRlcz1QLGUuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU7aWYodFswXT49IsOvIiYmKCLDviI9PT10WzBdJiYiw78iPT09dFsxXT9lPSJ1dGYtMTZiZSI6IsO/Ij09PXRbMF0mJiLDviI9PT10WzFdP2U9InV0Zi0xNmxlIjoiw68iPT09dFswXSYmIsK7Ij09PXRbMV0mJiLCvyI9PT10WzJdJiYoZT0idXRmLTgiKSxlKSl0cnl7dmFyIHI9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksbj1QKHQpO3JldHVybiByLmRlY29kZShuKX1jYXRjaCh0KXt5KCdzdHJpbmdUb1BERlN0cmluZzogIicuY29uY2F0KHQsJyIuJykpfWZvcih2YXIgaT1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1NW3QuY2hhckNvZGVBdChhKV07aS5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTp0LmNoYXJBdChhKSl9cmV0dXJuIGkuam9pbigiIil9LGUuc3RyaW5nVG9VVEY4U3RyaW5nPVIsZS51bnJlYWNoYWJsZT1tLGUudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfSxlLndhcm49eSxnbG9iYWxUaGlzLl9wZGZqc0NvbXBhdGliaWxpdHlDaGVja2VkfHwoZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMCxyKDIpKSxlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLGUuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSxlLkxJTkVfRkFDVE9SPTEuMzUsZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNSxlLkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQsZS5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9LGUuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfSxlLkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGUuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fSxlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9LGUuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sZS5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fSxlLkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9LGUuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxlLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In0sZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifSxlLkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9LGUuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9LGUuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LGUuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSxlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LGUuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LGUuU3RyZWFtVHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsRkxBVEU6IkZMQVRFIixMWlc6IkxaVyIsRENUOiJEQ1QiLEpQWDoiSlBYIixKQklHOiJKQklHIixBODU6IkE4NSIsQUhYOiJBSFgiLENDRjoiQ0NGIixSTFg6IlJMWCJ9LGUuRm9udFR5cGU9e1VOS05PV046IlVOS05PV04iLFRZUEUxOiJUWVBFMSIsVFlQRTFTVEFOREFSRDoiVFlQRTFTVEFOREFSRCIsVFlQRTFDOiJUWVBFMUMiLENJREZPTlRUWVBFMDoiQ0lERk9OVFRZUEUwIixDSURGT05UVFlQRTBDOiJDSURGT05UVFlQRTBDIixUUlVFVFlQRToiVFJVRVRZUEUiLENJREZPTlRUWVBFMjoiQ0lERk9OVFRZUEUyIixUWVBFMzoiVFlQRTMiLE9QRU5UWVBFOiJPUEVOVFlQRSIsVFlQRTA6IlRZUEUwIixNTVRZUEUxOiJNTVRZUEUxIn07dmFyIHA9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1wLGUuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfSxlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSxlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn0sZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgdj1wLldBUk5JTkdTO2Z1bmN0aW9uIHkodCl7dj49cC5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIuY29uY2F0KHQpKX1mdW5jdGlvbiBtKHQpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6IW4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSkscn12YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt0aGlzLmNvbnN0cnVjdG9yPT09dCYmbSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9cn1yZXR1cm4gdC5wcm90b3R5cGU9bmV3IEVycm9yLHQuY29uc3RydWN0b3I9dCx0fSgpO2UuQmFzZUV4Y2VwdGlvbj1iO3ZhciBfPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlBhc3N3b3JkRXhjZXB0aW9uIikpLmNvZGU9bixpfXJldHVybiBsKHIpfShiKTtlLlBhc3N3b3JkRXhjZXB0aW9uPV87dmFyIHc9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0LG4pe3ZhciBpO3JldHVybiB1KHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIikpLmRldGFpbHM9bixpfXJldHVybiBsKHIpfShiKTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj13O3ZhciBBPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJJbnZhbGlkUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuSW52YWxpZFBERkV4Y2VwdGlvbj1BO3ZhciBrPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJNaXNzaW5nUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuTWlzc2luZ1BERkV4Y2VwdGlvbj1rO3ZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpKS5zdGF0dXM9bixpfXJldHVybiBsKHIpfShiKTtlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1TO3ZhciB4PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJGb3JtYXRFcnJvciIpfXJldHVybiBsKHIpfShiKTtlLkZvcm1hdEVycm9yPXg7dmFyIEU9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0aGlzLHIpLGUuY2FsbCh0aGlzLHQsIkFib3J0RXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2Z1bmN0aW9uIFAodCl7InN0cmluZyIhPXR5cGVvZiB0JiZtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTsrK24pcltuXT0yNTUmdC5jaGFyQ29kZUF0KG4pO3JldHVybiByfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHZvaWQgMCE9PXQubGVuZ3RoP3QubGVuZ3RoOnZvaWQgMCE9PXQuYnl0ZUxlbmd0aD90LmJ5dGVMZW5ndGg6dm9pZCBtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBhcnJheUJ5dGVMZW5ndGgiKX1lLkFib3J0RXhjZXB0aW9uPUU7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToiaXNMaXR0bGVFbmRpYW4iLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzTGl0dGxlRW5kaWFuIiwoKHQ9bmV3IFVpbnQ4QXJyYXkoNCkpWzBdPTEsMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdKSk7dmFyIHR9fSx7a2V5OiJpc0V2YWxTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbigiIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpKX19LHtrZXk6ImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX0se2tleToicGxhdGZvcm0iLGdldDpmdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmcodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19XSksdH0oKTtlLkZlYXR1cmVUZXN0PUM7dmFyIE89bihBcnJheSgyNTYpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToibWFrZUhleENvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIiMiLmNvbmNhdChPW3RdKS5jb25jYXQoT1tlXSkuY29uY2F0KE9bcl0pfX0se2tleToic2NhbGVNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7dFswXT8odFswXTwwJiYocj1lWzBdLGVbMF09ZVsxXSxlWzFdPXIpLGVbMF0qPXRbMF0sZVsxXSo9dFswXSx0WzNdPDAmJihyPWVbMl0sZVsyXT1lWzNdLGVbM109ciksZVsyXSo9dFszXSxlWzNdKj10WzNdKToocj1lWzBdLGVbMF09ZVsyXSxlWzJdPXIscj1lWzFdLGVbMV09ZVszXSxlWzNdPXIsdFsxXTwwJiYocj1lWzJdLGVbMl09ZVszXSxlWzNdPXIpLGVbMl0qPXRbMV0sZVszXSo9dFsxXSx0WzJdPDAmJihyPWVbMF0sZVswXT1lWzFdLGVbMV09ciksZVswXSo9dFsyXSxlWzFdKj10WzJdKSxlWzBdKz10WzRdLGVbMV0rPXRbNF0sZVsyXSs9dFs1XSxlWzNdKz10WzVdfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfX0se2tleToiYXBwbHlUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0qZVswXSt0WzFdKmVbMl0rZVs0XSx0WzBdKmVbMV0rdFsxXSplWzNdK2VbNV1dfX0se2tleToiYXBwbHlJbnZlcnNlVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuWyh0WzBdKmVbM10tdFsxXSplWzJdK2VbMl0qZVs1XS1lWzRdKmVbM10pL3IsKC10WzBdKmVbMV0rdFsxXSplWzBdK2VbNF0qZVsxXS1lWzVdKmVbMF0pL3JdfX0se2tleToiZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49dC5hcHBseVRyYW5zZm9ybShlLHIpLGk9dC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksciksYT10LmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHIpLG89dC5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSxyKTtyZXR1cm5bTWF0aC5taW4oblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5taW4oblsxXSxpWzFdLGFbMV0sb1sxXSksTWF0aC5tYXgoblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5tYXgoblsxXSxpWzFdLGFbMV0sb1sxXSldfX0se2tleToiaW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bdFszXS9lLC10WzFdL2UsLXRbMl0vZSx0WzBdL2UsKHRbMl0qdFs1XS10WzRdKnRbM10pL2UsKHRbNF0qdFsxXS10WzVdKnRbMF0pL2VdfX0se2tleToic2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0WzBdLHRbMl0sdFsxXSx0WzNdXSxyPXRbMF0qZVswXSt0WzFdKmVbMl0sbj10WzBdKmVbMV0rdFsxXSplWzNdLGk9dFsyXSplWzBdK3RbM10qZVsyXSxhPXRbMl0qZVsxXSt0WzNdKmVbM10sbz0ocithKS8yLHM9TWF0aC5zcXJ0KE1hdGgucG93KHIrYSwyKS00KihyKmEtaSpuKSkvMixsPW8rc3x8MSx1PW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydCh1KV19fSx7a2V5OiJub3JtYWxpemVSZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDApO3JldHVybiB0WzBdPnRbMl0mJihlWzBdPXRbMl0sZVsyXT10WzBdKSx0WzFdPnRbM10mJihlWzFdPXRbM10sZVszXT10WzFdKSxlfX0se2tleToiaW50ZXJzZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgubWF4KE1hdGgubWluKHRbMF0sdFsyXSksTWF0aC5taW4oZVswXSxlWzJdKSksbj1NYXRoLm1pbihNYXRoLm1heCh0WzBdLHRbMl0pLE1hdGgubWF4KGVbMF0sZVsyXSkpO2lmKHI+bilyZXR1cm4gbnVsbDt2YXIgaT1NYXRoLm1heChNYXRoLm1pbih0WzFdLHRbM10pLE1hdGgubWluKGVbMV0sZVszXSkpLGE9TWF0aC5taW4oTWF0aC5tYXgodFsxXSx0WzNdKSxNYXRoLm1heChlWzFdLGVbM10pKTtyZXR1cm4gaT5hP251bGw6W3IsaSxuLGFdfX0se2tleToiYmV6aWVyQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCl7Zm9yKHZhciB1LGMsaCxmLGQscCx2LHksbT1bXSxnPVtbXSxbXV0sYj0wO2I8MjsrK2IpaWYoMD09PWI/KGM9Nip0LTEyKnIrNiphLHU9LTMqdCs5KnItOSphKzMqcyxoPTMqci0zKnQpOihjPTYqZS0xMippKzYqbyx1PS0zKmUrOSppLTkqbyszKmwsaD0zKmktMyplKSxNYXRoLmFicyh1KTwxZS0xMil7aWYoTWF0aC5hYnMoYyk8MWUtMTIpY29udGludWU7MDwoZj0taC9jKSYmZjwxJiZtLnB1c2goZil9ZWxzZSB2PWMqYy00KmgqdSx5PU1hdGguc3FydCh2KSx2PDB8fCgwPChkPSgtYyt5KS8oMip1KSkmJmQ8MSYmbS5wdXNoKGQpLDA8KHA9KC1jLXkpLygyKnUpKSYmcDwxJiZtLnB1c2gocCkpO2Zvcih2YXIgXyx3PW0ubGVuZ3RoLEE9dzt3LS07KV89MS0oZj1tW3ddKSxnWzBdW3ddPV8qXypfKnQrMypfKl8qZipyKzMqXypmKmYqYStmKmYqZipzLGdbMV1bd109XypfKl8qZSszKl8qXypmKmkrMypfKmYqZipvK2YqZipmKmw7cmV0dXJuIGdbMF1bQV09dCxnWzFdW0FdPWUsZ1swXVtBKzFdPXMsZ1sxXVtBKzFdPWwsZ1swXS5sZW5ndGg9Z1sxXS5sZW5ndGg9QSsyLFtNYXRoLm1pbi5hcHBseShNYXRoLG4oZ1swXSkpLE1hdGgubWluLmFwcGx5KE1hdGgsbihnWzFdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKGdbMF0pKSxNYXRoLm1heC5hcHBseShNYXRoLG4oZ1sxXSkpXX19XSksdH0oKTtlLlV0aWw9Rjt2YXIgTT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gUih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9fSwodCxlLHIpPT57dmFyIG49cigzKTshZ2xvYmFsVGhpcy5idG9hJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5idG9hPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9KSwhZ2xvYmFsVGhpcy5hdG9iJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5hdG9iPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9KSwhZ2xvYmFsVGhpcy5ET01NYXRyaXgmJm4uaXNOb2RlSlMmJihnbG9iYWxUaGlzLkRPTU1hdHJpeD1yZXF1aXJlKCJjYW52YXMiKS5ET01NYXRyaXgpLCFnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbT1yZXF1aXJlKCJ3ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmpzIikuUmVhZGFibGVTdHJlYW0pLEFycmF5LnByb3RvdHlwZS5hdHx8cig0KSxVaW50OEFycmF5LnByb3RvdHlwZS5hdHx8cig3OCksZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmV8fHIoODgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuaXNOb2RlSlM9dm9pZCAwO3ZhciBuPSEoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBwcm9jZXNzPyJ1bmRlZmluZWQiOnIocHJvY2VzcykpfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTtlLmlzTm9kZUpTPW59LCh0LGUscik9PntyKDUpO3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1uKCJBcnJheSIsImF0Iil9LCh0LGUscik9Pnt2YXIgbj1yKDYpLGk9cig0MyksYT1yKDY3KSxvPXIoNjUpLHM9cig3Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9YShlKSxuPW8odCkscz1uPj0wP246cituO3JldHVybiBzPDB8fHM+PXI/dm9pZCAwOmVbc119fSkscygiYXQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDgpLmYsYT1yKDQ3KSxvPXIoNTEpLHM9cig0MSksbD1yKDU5KSx1PXIoNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaCxmLGQscD10LnRhcmdldCx2PXQuZ2xvYmFsLHk9dC5zdGF0O2lmKHI9dj9uOnk/bltwXXx8cyhwLHt9KToobltwXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBlKXtpZihmPWVbY10saD10LmRvbnRDYWxsR2V0U2V0PyhkPWkocixjKSkmJmQudmFsdWU6cltjXSwhdSh2P2M6cCsoeT8iLiI6IiMiKStjLHQuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIGY9PXR5cGVvZiBoKWNvbnRpbnVlO2woZixoKX0odC5zaGFtfHxoJiZoLnNoYW0pJiZhKGYsInNoYW0iLCEwKSxvKHIsYyxmLHQpfX19LHQ9Pnt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9ZSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxlKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxlKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cigxMSksYT1yKDEzKSxvPXIoMTQpLHM9cigxNSksbD1yKDIxKSx1PXIoNDIpLGM9cig0NSksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uP2g6ZnVuY3Rpb24odCxlKXtpZih0PXModCksZT1sKGUpLGMpdHJ5e3JldHVybiBoKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gbyghaShhLmYsdCxlKSx0W2VdKX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKHQsZSk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1uJiYhci5jYWxsKHsxOjJ9LDEpO2UuZj1pP2Z1bmN0aW9uKHQpe3ZhciBlPW4odGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06cn0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LCh0LGUscik9Pnt2YXIgbj1yKDE2KSxpPXIoMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMTApLGE9cigxOCksbz1PYmplY3Qscz1uKCIiLnNwbGl0KTt0LmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hbygieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1hKHQpP3ModCwiIik6byh0KX06b30sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS5jYWxsLG89biYmaS5iaW5kLmJpbmQoYSxhKTt0LmV4cG9ydHM9bj9vOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX19fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1uKHt9LnRvU3RyaW5nKSxhPW4oIiIuc2xpY2UpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpLDgsLTEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjApLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXRocm93IGkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSx0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjIpLGk9cigyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwic3RyaW5nIik7cmV0dXJuIGkoZSk/ZTplKyIifX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigyMyksYT1yKDI2KSxvPXIoMzMpLHM9cigzNiksbD1yKDM3KSx1PVR5cGVFcnJvcixjPWwoInRvUHJpbWl0aXZlIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCl8fGEodCkpcmV0dXJuIHQ7dmFyIHIsbD1vKHQsYyk7aWYobCl7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPW4obCx0LGUpLCFpKHIpfHxhKHIpKXJldHVybiByO3Rocm93IHUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIikscyh0LGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjQpLGk9cigyNSksYT1pLmFsbDt0LmV4cG9ydHM9aS5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDpuKHQpfHx0PT09YX06ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10Om4odCl9fSwodCxlLHIpPT57dmFyIG49cigyNSksaT1uLmFsbDt0LmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHx0PT09aX06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9fSx0PT57dmFyIGU9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09ZSYmdm9pZCAwIT09ZTt0LmV4cG9ydHM9e2FsbDplLElTX0hUTUxEREE6cn19LCh0LGUscik9Pnt2YXIgbj1yKDI3KSxpPXIoMjQpLGE9cigyOCksbz1yKDI5KSxzPU9iamVjdDt0LmV4cG9ydHM9bz9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPW4oIlN5bWJvbCIpO3JldHVybiBpKGUpJiZhKGUucHJvdG90eXBlLHModCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bdF0saShyKT9yOnZvaWQgMCk6blt0XSYmblt0XVtlXTt2YXIgcn19LCh0LGUscik9Pnt2YXIgbj1yKDE3KTt0LmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKHQsZSxyKT0+e3ZhciBuPXIoMzApO3QuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwodCxlLHIpPT57dmFyIG49cigzMSksaT1yKDEwKTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaSgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwodCxlLHIpPT57dmFyIG4saSxhPXIoNyksbz1yKDMyKSxzPWEucHJvY2VzcyxsPWEuRGVubyx1PXMmJnMudmVyc2lvbnN8fGwmJmwudmVyc2lvbixjPXUmJnUudjg7YyYmKGk9KG49Yy5zcGxpdCgiLiIpKVswXT4wJiZuWzBdPDQ/MTorKG5bMF0rblsxXSkpLCFpJiZvJiYoIShuPW8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihpPStuWzFdKSx0LmV4cG9ydHM9aX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpO3QuZXhwb3J0cz1uKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LCh0LGUscik9Pnt2YXIgbj1yKDM0KSxpPXIoMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbZV07cmV0dXJuIGkocik/dm9pZCAwOm4ocil9fSwodCxlLHIpPT57dmFyIG49cigyNCksaT1yKDM1KSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4gdDt0aHJvdyBhKGkodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sdD0+e3ZhciBlPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKHQpe3JldHVybiJPYmplY3QifX19LCh0LGUscik9Pnt2YXIgbj1yKDExKSxpPXIoMjQpLGE9cigyMyksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscztpZigic3RyaW5nIj09PWUmJmkocj10LnRvU3RyaW5nKSYmIWEocz1uKHIsdCkpKXJldHVybiBzO2lmKGkocj10LnZhbHVlT2YpJiYhYShzPW4ocix0KSkpcmV0dXJuIHM7aWYoInN0cmluZyIhPT1lJiZpKHI9dC50b1N0cmluZykmJiFhKHM9bihyLHQpKSlyZXR1cm4gczt0aHJvdyBvKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigzOCksYT1yKDQyKSxvPXIoNDQpLHM9cigzMCksbD1yKDI5KSx1PWkoIndrcyIpLGM9bi5TeW1ib2wsaD1jJiZjLmZvcixmPWw/YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHUsdCl8fCFzJiYic3RyaW5nIiE9dHlwZW9mIHVbdF0pe3ZhciBlPSJTeW1ib2wuIit0O3MmJmEoYyx0KT91W3RdPWNbdF06dVt0XT1sJiZoP2goZSk6ZihlKX1yZXR1cm4gdVt0XX19LCh0LGUscik9Pnt2YXIgbj1yKDM5KSxpPXIoNDApOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XXx8KGlbdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjYuMSIsbW9kZTpuPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4yNi4xL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LHQ9Pnt0LmV4cG9ydHM9ITF9LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cig0MSksYT0iX19jb3JlLWpzX3NoYXJlZF9fIixvPW5bYV18fGkoYSx7fSk7dC5leHBvcnRzPW99LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpKG4sdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtuW3RdPWV9cmV0dXJuIGV9fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDQzKSxhPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSwodCxlLHIpPT57dmFyIG49cigxOSksaT1PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9MCxhPU1hdGgucmFuZG9tKCksbz1uKDEuLnRvU3RyaW5nKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbygrK2krYSwzNil9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApLGE9cig0Nik7dC5leHBvcnRzPSFuJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGEoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDIzKSxhPW4uZG9jdW1lbnQsbz1pKGEpJiZpKGEuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2EuY3JlYXRlRWxlbWVudCh0KTp7fX19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9bj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGkuZih0LGUsYSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0NSksYT1yKDQ5KSxvPXIoNTApLHM9cigyMSksbD1UeXBlRXJyb3IsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLGY9ImNvbmZpZ3VyYWJsZSIsZD0id3JpdGFibGUiO2UuZj1uP2E/ZnVuY3Rpb24odCxlLHIpe2lmKG8odCksZT1zKGUpLG8ociksImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJwcm90b3R5cGUiPT09ZSYmInZhbHVlImluIHImJmQgaW4gciYmIXJbZF0pe3ZhciBuPWModCxlKTtuJiZuW2RdJiYodFtlXT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpmIGluIHI/cltmXTpuW2ZdLGVudW1lcmFibGU6aCBpbiByP3JbaF06bltoXSx3cml0YWJsZTohMX0pfXJldHVybiB1KHQsZSxyKX06dTpmdW5jdGlvbih0LGUscil7aWYobyh0KSxlPXMoZSksbyhyKSxpKXRyeXtyZXR1cm4gdSh0LGUscil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGwoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJih0W2VdPXIudmFsdWUpLHR9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApO3QuZXhwb3J0cz1uJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMjMpLGk9U3RyaW5nLGE9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiB0O3Rocm93IGEoaSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoNDgpLGE9cig1Miksbz1yKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3x8KHM9e30pO3ZhciBsPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6ZTtpZihuKHIpJiZhKHIsdSxzKSxzLmdsb2JhbClsP3RbZV09cjpvKGUscik7ZWxzZXt0cnl7cy51bnNhZmU/dFtlXSYmKGw9ITApOmRlbGV0ZSB0W2VdfWNhdGNoKHQpe31sP3RbZV09cjppLmYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApLGk9cigyNCksYT1yKDQyKSxvPXIoOSkscz1yKDUzKS5DT05GSUdVUkFCTEUsbD1yKDU0KSx1PXIoNTUpLGM9dS5lbmZvcmNlLGg9dS5nZXQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksZD1vJiYhbigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PWYoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSkscD1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksdj10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJTeW1ib2woIj09PVN0cmluZyhlKS5zbGljZSgwLDcpJiYoZT0iWyIrU3RyaW5nKGUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSxyJiZyLmdldHRlciYmKGU9ImdldCAiK2UpLHImJnIuc2V0dGVyJiYoZT0ic2V0ICIrZSksKCFhKHQsIm5hbWUiKXx8cyYmdC5uYW1lIT09ZSkmJihvP2YodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSk6dC5uYW1lPWUpLGQmJnImJmEociwiYXJpdHkiKSYmdC5sZW5ndGghPT1yLmFyaXR5JiZmKHQsImxlbmd0aCIse3ZhbHVlOnIuYXJpdHl9KTt0cnl7ciYmYShyLCJjb25zdHJ1Y3RvciIpJiZyLmNvbnN0cnVjdG9yP28mJmYodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0LnByb3RvdHlwZSYmKHQucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2godCl7fXZhciBuPWModCk7cmV0dXJuIGEobiwic291cmNlIil8fChuLnNvdXJjZT1wLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0fTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9digoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKSYmaCh0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSwidG9TdHJpbmciKX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1pKGEsIm5hbWUiKSxsPXMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsdT1zJiYoIW58fG4mJm8oYSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6cyxQUk9QRVI6bCxDT05GSUdVUkFCTEU6dX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMjQpLGE9cig0MCksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKGEuaW5zcGVjdFNvdXJjZSl8fChhLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9KSx0LmV4cG9ydHM9YS5pbnNwZWN0U291cmNlfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig1Nikscz1yKDcpLGw9cigyMyksdT1yKDQ3KSxjPXIoNDIpLGg9cig0MCksZj1yKDU3KSxkPXIoNTgpLHA9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix2PXMuVHlwZUVycm9yLHk9cy5XZWFrTWFwO2lmKG98fGguc3RhdGUpe3ZhciBtPWguc3RhdGV8fChoLnN0YXRlPW5ldyB5KTttLmdldD1tLmdldCxtLmhhcz1tLmhhcyxtLnNldD1tLnNldCxuPWZ1bmN0aW9uKHQsZSl7aWYobS5oYXModCkpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCxtLnNldCh0LGUpLGV9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIG0uZ2V0KHQpfHx7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gbS5oYXModCl9fWVsc2V7dmFyIGc9Zigic3RhdGUiKTtkW2ddPSEwLG49ZnVuY3Rpb24odCxlKXtpZihjKHQsZykpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCx1KHQsZyxlKSxlfSxpPWZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZyk/dFtnXTp7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gYyh0LGcpfX10LmV4cG9ydHM9e3NldDpuLGdldDppLGhhczphLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/aSh0KTpuKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFsKGUpfHwocj1pKGUpKS50eXBlIT09dCl0aHJvdyB2KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigyNCksYT1uLldlYWtNYXA7dC5leHBvcnRzPWkoYSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoYSkpfSwodCxlLHIpPT57dmFyIG49cigzOCksaT1yKDQ0KSxhPW4oImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbdF18fChhW3RdPWkodCkpfX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cig2MCksYT1yKDgpLG89cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIHM9aShlKSxsPW8uZix1PWEuZixjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107bih0LGgpfHxyJiZuKHIsaCl8fGwodCxoLHUoZSxoKSl9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cigxNyksYT1yKDYxKSxvPXIoNzApLHM9cig1MCksbD1pKFtdLmNvbmNhdCk7dC5leHBvcnRzPW4oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPWEuZihzKHQpKSxyPW8uZjtyZXR1cm4gcj9sKGUscih0KSk6ZX19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9cig0MiksYT1yKDE1KSxvPXIoNjMpLmluZGV4T2Yscz1yKDU4KSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1hKHQpLHU9MCxjPVtdO2ZvcihyIGluIG4pIWkocyxyKSYmaShuLHIpJiZsKGMscik7Zm9yKDtlLmxlbmd0aD51OylpKG4scj1lW3UrK10pJiYofm8oYyxyKXx8bChjLHIpKTtyZXR1cm4gY319LCh0LGUscik9Pnt2YXIgbj1yKDE1KSxpPXIoNjQpLGE9cig2Nyksbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG8pe3ZhciBzLGw9bihlKSx1PWEobCksYz1pKG8sdSk7aWYodCYmciE9cil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKHR8fGMgaW4gbCkmJmxbY109PT1yKXJldHVybiB0fHxjfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6byghMCksaW5kZXhPZjpvKCExKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWF4LGE9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KTtyZXR1cm4gcjwwP2kocitlLDApOmEocixlKX19LCh0LGUscik9Pnt2YXIgbj1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6bihlKX19LHQ9Pnt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgbj0rdDtyZXR1cm4obj4wP3I6ZSkobil9fSwodCxlLHIpPT57dmFyIG49cig2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQubGVuZ3RoKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sdD0+e3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwodCxlKT0+e2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDI0KSxhPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24odCxlKXt2YXIgcj1sW3ModCldO3JldHVybiByPT1jfHxyIT11JiYoaShlKT9uKGUpOiEhZSl9LHM9by5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGEsIi4iKS50b0xvd2VyQ2FzZSgpfSxsPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1vfSwodCxlLHIpPT57dmFyIG49cigzNyksaT1yKDczKSxhPXIoNDgpLmYsbz1uKCJ1bnNjb3BhYmxlcyIpLHM9QXJyYXkucHJvdG90eXBlO251bGw9PXNbb10mJmEocyxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtzW29dW3RdPSEwfX0sKHQsZSxyKT0+e3ZhciBuLGk9cig1MCksYT1yKDc0KSxvPXIoNjkpLHM9cig1OCksbD1yKDc2KSx1PXIoNDYpLGM9cig1NyksaD0icHJvdG90eXBlIixmPSJzY3JpcHQiLGQ9YygiSUVfUFJPVE8iKSxwPWZ1bmN0aW9uKCl7fSx2PWZ1bmN0aW9uKHQpe3JldHVybiI8IitmKyI+Iit0KyI8LyIrZisiPiJ9LHk9ZnVuY3Rpb24odCl7dC53cml0ZSh2KCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaCh0KXt9dmFyIHQsZSxyO209InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJm4/eShuKTooZT11KCJpZnJhbWUiKSxyPSJqYXZhIitmKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGwuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUodigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6eShuKTtmb3IodmFyIGk9by5sZW5ndGg7aS0tOylkZWxldGUgbVtoXVtvW2ldXTtyZXR1cm4gbSgpfTtzW2RdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8ocFtoXT1pKHQpLHI9bmV3IHAscFtoXT1udWxsLHJbZF09dCk6cj1tKCksdm9pZCAwPT09ZT9yOmEuZihyLGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQ5KSxhPXIoNDgpLG89cig1MCkscz1yKDE1KSxsPXIoNzUpO2UuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe28odCk7Zm9yKHZhciByLG49cyhlKSxpPWwoZSksdT1pLmxlbmd0aCxjPTA7dT5jOylhLmYodCxyPWlbYysrXSxuW3JdKTtyZXR1cm4gdH19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LCh0LGUscik9Pnt2YXIgbj1yKDI3KTt0LmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuW3RdLnByb3RvdHlwZVtlXSl9fSwodCxlLHIpPT57cig3OSl9LCh0LGUscik9Pnt2YXIgbj1yKDgwKSxpPXIoNjcpLGE9cig2NSksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzKSxyPWkoZSksbj1hKHQpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDplW3NdfSkpfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig4MSkscz1yKDkpLGw9cig3KSx1PXIoMjQpLGM9cigyMyksaD1yKDQyKSxmPXIoODIpLGQ9cigzNSkscD1yKDQ3KSx2PXIoNTEpLHk9cig0OCkuZixtPXIoMjgpLGc9cig4NCksYj1yKDg2KSxfPXIoMzcpLHc9cig0NCksQT1yKDU1KSxrPUEuZW5mb3JjZSxTPUEuZ2V0LHg9bC5JbnQ4QXJyYXksRT14JiZ4LnByb3RvdHlwZSxQPWwuVWludDhDbGFtcGVkQXJyYXksVD1QJiZQLnByb3RvdHlwZSxDPXgmJmcoeCksTz1FJiZnKEUpLEY9T2JqZWN0LnByb3RvdHlwZSxNPWwuVHlwZUVycm9yLFI9XygidG9TdHJpbmdUYWciKSxJPXcoIlRZUEVEX0FSUkFZX1RBRyIpLGo9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsTD1vJiYhIWImJiJPcGVyYSIhPT1mKGwub3BlcmEpLEQ9ITEsTj17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFU9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxXPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7aWYoYyhlKSl7dmFyIHI9UyhlKTtyZXR1cm4gciYmaChyLGopP3Jbal06VyhlKX19LEc9ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4gaChOLGUpfHxoKFUsZSl9O2ZvcihuIGluIE4pKGE9KGk9bFtuXSkmJmkucHJvdG90eXBlKT9rKGEpW2pdPWk6TD0hMTtmb3IobiBpbiBVKShhPShpPWxbbl0pJiZpLnByb3RvdHlwZSkmJihrKGEpW2pdPWkpO2lmKCghTHx8IXUoQyl8fEM9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoQz1mdW5jdGlvbigpe3Rocm93IE0oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEwpKWZvcihuIGluIE4pbFtuXSYmYihsW25dLEMpO2lmKCghTHx8IU98fE89PT1GKSYmKE89Qy5wcm90b3R5cGUsTCkpZm9yKG4gaW4gTilsW25dJiZiKGxbbl0ucHJvdG90eXBlLE8pO2lmKEwmJmcoVCkhPT1PJiZiKFQsTykscyYmIWgoTyxSKSlmb3IobiBpbiBEPSEwLHkoTyxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKT90aGlzW0ldOnZvaWQgMH19KSxOKWxbbl0mJnAobFtuXSxJLG4pO3QuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpMLFRZUEVEX0FSUkFZX1RBRzpEJiZJLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKEcodCkpcmV0dXJuIHQ7dGhyb3cgTSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYodSh0KSYmKCFifHxtKEMsdCkpKXJldHVybiB0O3Rocm93IE0oZCh0KSsiIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLHIsbil7aWYocyl7aWYocilmb3IodmFyIGkgaW4gTil7dmFyIGE9bFtpXTtpZihhJiZoKGEucHJvdG90eXBlLHQpKXRyeXtkZWxldGUgYS5wcm90b3R5cGVbdF19Y2F0Y2gocil7dHJ5e2EucHJvdG90eXBlW3RdPWV9Y2F0Y2godCl7fX19T1t0XSYmIXJ8fHYoTyx0LHI/ZTpMJiZFW3RdfHxlLG4pfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihzKXtpZihiKXtpZihyKWZvcihuIGluIE4paWYoKGk9bFtuXSkmJmgoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2godCl7fWlmKENbdF0mJiFyKXJldHVybjt0cnl7cmV0dXJuIHYoQyx0LHI/ZTpMJiZDW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihuIGluIE4pIShpPWxbbl0pfHxpW3RdJiYhcnx8dihpLHQsZSl9fSxnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6Vyxpc1ZpZXc6ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8aChOLGUpfHxoKFUsZSl9LGlzVHlwZWRBcnJheTpHLFR5cGVkQXJyYXk6QyxUeXBlZEFycmF5UHJvdG90eXBlOk99fSx0PT57dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LCh0LGUscik9Pnt2YXIgbj1yKDgzKSxpPXIoMjQpLGE9cigxOCksbz1yKDM3KSgidG9TdHJpbmdUYWciKSxzPU9iamVjdCxsPSJBcmd1bWVudHMiPT1hKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPW4/YTpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPXModCksbykpP3I6bD9hKGUpOiJPYmplY3QiPT0obj1hKGUpKSYmaShlLmNhbGxlZSk/IkFyZ3VtZW50cyI6bn19LCh0LGUscik9Pnt2YXIgbj17fTtuW3IoMzcpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cigyNCksYT1yKDQzKSxvPXIoNTcpLHM9cig4NSksbD1vKCJJRV9QUk9UTyIpLHU9T2JqZWN0LGM9dS5wcm90b3R5cGU7dC5leHBvcnRzPXM/dS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXt2YXIgZT1hKHQpO2lmKG4oZSxsKSlyZXR1cm4gZVtsXTt2YXIgcj1lLmNvbnN0cnVjdG9yO3JldHVybiBpKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgdT9jOm51bGx9fSwodCxlLHIpPT57dmFyIG49cigxMCk7dC5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDUwKSxhPXIoODcpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLHI9e307dHJ5eyh0PW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpKShyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkociksYShuKSxlP3QocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPVN0cmluZyxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0fHxuKHQpKXJldHVybiB0O3Rocm93IGEoIkNhbid0IHNldCAiK2kodCkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKHQsZSxyKT0+e3IoODkpLHIoOTYpLHIoOTgpLHIoMTIxKSxyKDEyMyk7dmFyIG49cigxMzIpO3QuZXhwb3J0cz1uLnN0cnVjdHVyZWRDbG9uZX0sKHQsZSxyKT0+e3ZhciBuPXIoMTUpLGk9cig3MiksYT1yKDkwKSxvPXIoNTUpLHM9cig0OCkuZixsPXIoOTEpLHU9cig5NSksYz1yKDM5KSxoPXIoOSksZj0iQXJyYXkgSXRlcmF0b3IiLGQ9by5zZXQscD1vLmdldHRlckZvcihmKTt0LmV4cG9ydHM9bChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe2QodGhpcyx7dHlwZTpmLHRhcmdldDpuKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAsdSh2b2lkIDAsITApKTp1KCJrZXlzIj09cj9uOiJ2YWx1ZXMiPT1yP2Vbbl06W24sZVtuXV0sITEpfSksInZhbHVlcyIpO3ZhciB2PWEuQXJndW1lbnRzPWEuQXJyYXk7aWYoaSgia2V5cyIpLGkoInZhbHVlcyIpLGkoImVudHJpZXMiKSwhYyYmaCYmInZhbHVlcyIhPT12Lm5hbWUpdHJ5e3ModiwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2godCl7fX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDExKSxhPXIoMzkpLG89cig1Mykscz1yKDI0KSxsPXIoOTIpLHU9cig4NCksYz1yKDg2KSxoPXIoOTQpLGY9cig0NyksZD1yKDUxKSxwPXIoMzcpLHY9cig5MCkseT1yKDkzKSxtPW8uUFJPUEVSLGc9by5DT05GSUdVUkFCTEUsYj15Lkl0ZXJhdG9yUHJvdG90eXBlLF89eS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHc9cCgiaXRlcmF0b3IiKSxBPSJrZXlzIixrPSJ2YWx1ZXMiLFM9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scCx5LEUpe2wocixlLG8pO3ZhciBQLFQsQyxPPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZqKXJldHVybiBqO2lmKCFfJiZ0IGluIFIpcmV0dXJuIFJbdF07c3dpdGNoKHQpe2Nhc2UgQTpjYXNlIGs6Y2FzZSBTOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxGPWUrIiBJdGVyYXRvciIsTT0hMSxSPXQucHJvdG90eXBlLEk9Ult3XXx8UlsiQEBpdGVyYXRvciJdfHxwJiZSW3BdLGo9IV8mJkl8fE8ocCksTD0iQXJyYXkiPT1lJiZSLmVudHJpZXN8fEk7aWYoTCYmKFA9dShMLmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZQLm5leHQmJihhfHx1KFApPT09Ynx8KGM/YyhQLGIpOnMoUFt3XSl8fGQoUCx3LHgpKSxoKFAsRiwhMCwhMCksYSYmKHZbRl09eCkpLG0mJnA9PWsmJkkmJkkubmFtZSE9PWsmJighYSYmZz9mKFIsIm5hbWUiLGspOihNPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gaShJLHRoaXMpfSkpLHApaWYoVD17dmFsdWVzOk8oayksa2V5czp5P2o6TyhBKSxlbnRyaWVzOk8oUyl9LEUpZm9yKEMgaW4gVCkoX3x8TXx8IShDIGluIFIpKSYmZChSLEMsVFtDXSk7ZWxzZSBuKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6X3x8TX0sVCk7cmV0dXJuIGEmJiFFfHxSW3ddPT09anx8ZChSLHcsaix7bmFtZTpwfSksdltlXT1qLFR9fSwodCxlLHIpPT57dmFyIG49cig5MykuSXRlcmF0b3JQcm90b3R5cGUsaT1yKDczKSxhPXIoMTQpLG89cig5NCkscz1yKDkwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgYz1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1pKG4se25leHQ6YSgrIXUscil9KSxvKHQsYywhMSwhMCksc1tjXT1sLHR9fSwodCxlLHIpPT57dmFyIG4saSxhLG89cigxMCkscz1yKDI0KSxsPXIoMjMpLHU9cig3MyksYz1yKDg0KSxoPXIoNTEpLGY9cigzNyksZD1yKDM5KSxwPWYoIml0ZXJhdG9yIiksdj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oYT1bXS5rZXlzKCkpPyhpPWMoYyhhKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG49aSk6dj0hMCksIWwobil8fG8oKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIG5bcF0uY2FsbCh0KSE9PXR9KSk/bj17fTpkJiYobj11KG4pKSxzKG5bcF0pfHxoKG4scCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOm4sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp2fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDQyKSxhPXIoMzcpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIXImJih0PXQucHJvdG90eXBlKSx0JiYhaSh0LGEpJiZuKHQsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LHQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxkb25lOmV9fX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig1MSksYT1yKDk3KTtufHxpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixhLHt1bnNhZmU6ITB9KX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig4Mik7dC5leHBvcnRzPW4/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sKHQsZSxyKT0+e3IoOTkpfSwodCxlLHIpPT57cigxMDApKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDcpLGE9cigxNyksbz1yKDcxKSxzPXIoNTEpLGw9cigxMDEpLHU9cigxMDgpLGM9cigxMTUpLGg9cigyNCksZj1yKDIwKSxkPXIoMjMpLHA9cigxMCksdj1yKDExNikseT1yKDk0KSxtPXIoMTE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBnPS0xIT09dC5pbmRleE9mKCJNYXAiKSxiPS0xIT09dC5pbmRleE9mKCJXZWFrIiksXz1nPyJzZXQiOiJhZGQiLHc9aVt0XSxBPXcmJncucHJvdG90eXBlLGs9dyxTPXt9LHg9ZnVuY3Rpb24odCl7dmFyIGU9YShBW3RdKTtzKEEsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShiJiYhZCh0KSkmJmUodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gYiYmIWQodCk/dm9pZCAwOmUodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGImJiFkKHQpKSYmZSh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihvKHQsIWgodyl8fCEoYnx8QS5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IHcpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlrPXIuZ2V0Q29uc3RydWN0b3IoZSx0LGcsXyksbC5lbmFibGUoKTtlbHNlIGlmKG8odCwhMCkpe3ZhciBFPW5ldyBrLFA9RVtfXShiP3t9Oi0wLDEpIT1FLFQ9cCgoZnVuY3Rpb24oKXtFLmhhcygxKX0pKSxDPXYoKGZ1bmN0aW9uKHQpe25ldyB3KHQpfSkpLE89IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB3LGU9NTtlLS07KXRbX10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO0N8fCgoaz1lKChmdW5jdGlvbih0LGUpe2ModCxBKTt2YXIgcj1tKG5ldyB3LHQsayk7cmV0dXJuIGYoZSl8fHUoZSxyW19dLHt0aGF0OnIsQVNfRU5UUklFUzpnfSkscn0pKSkucHJvdG90eXBlPUEsQS5jb25zdHJ1Y3Rvcj1rKSwoVHx8TykmJih4KCJkZWxldGUiKSx4KCJoYXMiKSxnJiZ4KCJnZXQiKSksKE98fFApJiZ4KF8pLGImJkEuY2xlYXImJmRlbGV0ZSBBLmNsZWFyfXJldHVybiBTW3RdPWssbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprIT13fSxTKSx5KGssdCksYnx8ci5zZXRTdHJvbmcoayx0LGcpLGt9fSwodCxlLHIpPT57dmFyIG49cig2KSxpPXIoMTcpLGE9cig1OCksbz1yKDIzKSxzPXIoNDIpLGw9cig0OCkuZix1PXIoNjEpLGM9cigxMDIpLGg9cigxMDUpLGY9cig0NCksZD1yKDEwNykscD0hMSx2PWYoIm1ldGEiKSx5PTAsbT1mdW5jdGlvbih0KXtsKHQsdix7dmFsdWU6e29iamVjdElEOiJPIit5Kyssd2Vha0RhdGE6e319fSl9LGc9dC5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXtnLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgdD11LmYsZT1pKFtdLnNwbGljZSkscj17fTtyW3ZdPTEsdChyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksaT0wLGE9bi5sZW5ndGg7aTxhO2krKylpZihuW2ldPT09dil7ZShuLGksMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6Yy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFzKHQsdikpe2lmKCFoKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7bSh0KX1yZXR1cm4gdFt2XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighcyh0LHYpKXtpZighaCh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTttKHQpfXJldHVybiB0W3ZdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gZCYmcCYmaCh0KSYmIXModCx2KSYmbSh0KSx0fX07YVt2XT0hMH0sKHQsZSxyKT0+e3ZhciBuPXIoMTgpLGk9cigxNSksYT1yKDYxKS5mLG89cigxMDMpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gcyYmIldpbmRvdyI9PW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhKHQpfWNhdGNoKHQpe3JldHVybiBvKHMpfX0odCk6YShpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDY0KSxpPXIoNjcpLGE9cigxMDQpLG89QXJyYXkscz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbD1pKHQpLHU9bihlLGwpLGM9bih2b2lkIDA9PT1yP2w6cixsKSxoPW8ocyhjLXUsMCkpLGY9MDt1PGM7dSsrLGYrKylhKGgsZix0W3VdKTtyZXR1cm4gaC5sZW5ndGg9ZixofX0sKHQsZSxyKT0+e3ZhciBuPXIoMjEpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPW4oZSk7byBpbiB0P2kuZih0LG8sYSgwLHIpKTp0W29dPXJ9fSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDIzKSxhPXIoMTgpLG89cigxMDYpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTt0LmV4cG9ydHM9bHx8bz9mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighb3x8IkFycmF5QnVmZmVyIiE9YSh0KSkmJighc3x8cyh0KSl9OnN9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYSIse3ZhbHVlOjh9KX19KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwOSksaT1yKDExKSxhPXIoNTApLG89cigzNSkscz1yKDExMSksbD1yKDY3KSx1PXIoMjgpLGM9cigxMTIpLGg9cigxMTMpLGY9cigxMTQpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSx2PXAucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksbSxnLGIsXyx3LEEsaz1yJiZyLnRoYXQsUz0hKCFyfHwhci5BU19FTlRSSUVTKSx4PSEoIXJ8fCFyLklTX1JFQ09SRCksRT0hKCFyfHwhci5JU19JVEVSQVRPUiksUD0hKCFyfHwhci5JTlRFUlJVUFRFRCksVD1uKGUsayksQz1mdW5jdGlvbih0KXtyZXR1cm4geSYmZih5LCJub3JtYWwiLHQpLG5ldyBwKCEwLHQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiBTPyhhKHQpLFA/VCh0WzBdLHRbMV0sQyk6VCh0WzBdLHRbMV0pKTpQP1QodCxDKTpUKHQpfTtpZih4KXk9dC5pdGVyYXRvcjtlbHNlIGlmKEUpeT10O2Vsc2V7aWYoIShtPWgodCkpKXRocm93IGQobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMobSkpe2ZvcihnPTAsYj1sKHQpO2I+ZztnKyspaWYoKF89Tyh0W2ddKSkmJnUodixfKSlyZXR1cm4gXztyZXR1cm4gbmV3IHAoITEpfXk9Yyh0LG0pfWZvcih3PXg/dC5uZXh0OnkubmV4dDshKEE9aSh3LHkpKS5kb25lOyl7dHJ5e189TyhBLnZhbHVlKX1jYXRjaCh0KXtmKHksInRocm93Iix0KX1pZigib2JqZWN0Ij09dHlwZW9mIF8mJl8mJnUodixfKSlyZXR1cm4gX31yZXR1cm4gbmV3IHAoITEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEwKSxpPXIoMzQpLGE9cigxMiksbz1uKG4uYmluZCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCksdm9pZCAwPT09ZT90OmE/byh0LGUpOmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LCh0LGUscik9Pnt2YXIgbj1yKDE4KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiRnVuY3Rpb24iPT09bih0KSlyZXR1cm4gaSh0KX19LCh0LGUscik9Pnt2YXIgbj1yKDM3KSxpPXIoOTApLGE9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihpLkFycmF5PT09dHx8b1thXT09PXQpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigzNCksYT1yKDUwKSxvPXIoMzUpLHM9cigxMTMpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKHQpOmU7aWYoaShyKSlyZXR1cm4gYShuKHIsdCkpO3Rocm93IGwobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKHQsZSxyKT0+e3ZhciBuPXIoODIpLGk9cigzMyksYT1yKDIwKSxvPXIoOTApLHM9cigzNykoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiBpKHQscyl8fGkodCwiQEBpdGVyYXRvciIpfHxvW24odCldfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig1MCksYT1yKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM7aSh0KTt0cnl7aWYoIShvPWEodCwicmV0dXJuIikpKXtpZigidGhyb3ciPT09ZSl0aHJvdyByO3JldHVybiByfW89bihvLHQpfWNhdGNoKHQpe3M9ITAsbz10fWlmKCJ0aHJvdyI9PT1lKXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBpKG8pLHJ9fSwodCxlLHIpPT57dmFyIG49cigyOCksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlLHQpKXJldHVybiB0O3Rocm93IGkoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwodCxlLHIpPT57dmFyIG49cigzNykoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIGE9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFhKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgYT17fTthW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSx0KGEpfWNhdGNoKHQpe31yZXR1cm4gcn19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoMjMpLGE9cig4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzO3JldHVybiBhJiZuKG89ZS5jb25zdHJ1Y3RvcikmJm8hPT1yJiZpKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmEodCxzKSx0fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDczKSxhPXIoMTE5KSxvPXIoMTA5KSxzPXIoMTE1KSxsPXIoMjApLHU9cigxMDgpLGM9cig5MSksaD1yKDk1KSxmPXIoMTIwKSxkPXIoOSkscD1yKDEwMSkuZmFzdEtleSx2PXIoNTUpLHk9di5zZXQsbT12LmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciBoPXQoKGZ1bmN0aW9uKHQsbil7cyh0LGYpLHkodCx7dHlwZTplLGluZGV4OmkobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGR8fCh0LnNpemU9MCksbChuKXx8dShuLHRbY10se3RoYXQ6dCxBU19FTlRSSUVTOnJ9KX0pKSxmPWgucHJvdG90eXBlLHY9bShlKSxnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dih0KSxvPWIodCxlKTtyZXR1cm4gbz9vLnZhbHVlPXI6KGEubGFzdD1vPXtpbmRleDppPXAoZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWEubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxhLmZpcnN0fHwoYS5maXJzdD1vKSxuJiYobi5uZXh0PW8pLGQ/YS5zaXplKys6dC5zaXplKyssIkYiIT09aSYmKGEuaW5kZXhbaV09bykpLHR9LGI9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXYodCksaT1wKGUpO2lmKCJGIiE9PWkpcmV0dXJuIG4uaW5kZXhbaV07Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT1lKXJldHVybiByfTtyZXR1cm4gYShmLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMpLGU9dC5pbmRleCxyPXQuZmlyc3Q7cjspci5yZW1vdmVkPSEwLHIucHJldmlvdXMmJihyLnByZXZpb3VzPXIucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW3IuaW5kZXhdLHI9ci5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxkP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSksbj1iKGUsdCk7aWYobil7dmFyIGk9bi5uZXh0LGE9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsYSYmKGEubmV4dD1pKSxpJiYoaS5wcmV2aW91cz1hKSxyLmZpcnN0PT1uJiYoci5maXJzdD1pKSxyLmxhc3Q9PW4mJihyLmxhc3Q9YSksZD9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dih0aGlzKSxuPW8odCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7ZT1lP2UubmV4dDpyLmZpcnN0Oylmb3IobihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9fSksYShmLHI/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGQmJm4oZiwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMpLnNpemV9fSksaH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiLGk9bShlKSxhPW0obik7Yyh0LGUsKGZ1bmN0aW9uKHQsZSl7eSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6aSh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1hKHRoaXMpLGU9dC5raW5kLHI9dC5sYXN0O3ImJnIucmVtb3ZlZDspcj1yLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1yPXI/ci5uZXh0OnQuc3RhdGUuZmlyc3QpP2goImtleXMiPT1lP3Iua2V5OiJ2YWx1ZXMiPT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdLCExKToodC50YXJnZXQ9dm9pZCAwLGgodm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksZihlKX19fSwodCxlLHIpPT57dmFyIG49cig1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cig0OCksYT1yKDM3KSxvPXIoOSkscz1hKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7byYmZSYmIWVbc10mJnIoZSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwodCxlLHIpPT57cigxMjIpfSwodCxlLHIpPT57cigxMDApKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuLGk9cigzOSksYT1yKDYpLG89cig3KSxzPXIoMjcpLGw9cigxNyksdT1yKDEwKSxjPXIoNDQpLGg9cigyNCksZj1yKDEyNCksZD1yKDIwKSxwPXIoMjMpLHY9cigyNikseT1yKDEwOCksbT1yKDUwKSxnPXIoODIpLGI9cig0MiksXz1yKDEwNCksdz1yKDQ3KSxBPXIoNjcpLGs9cigxMjUpLFM9cigxMjYpLHg9cigxMjgpLEU9cigzMSksUD1yKDEyOSksVD1yKDEzMCksQz1yKDEzMSksTz1vLk9iamVjdCxGPW8uRGF0ZSxNPW8uRXJyb3IsUj1vLkV2YWxFcnJvcixJPW8uUmFuZ2VFcnJvcixqPW8uUmVmZXJlbmNlRXJyb3IsTD1vLlN5bnRheEVycm9yLEQ9by5UeXBlRXJyb3IsTj1vLlVSSUVycm9yLFU9by5QZXJmb3JtYW5jZU1hcmssVz1vLldlYkFzc2VtYmx5LEc9VyYmVy5Db21waWxlRXJyb3J8fE0sQj1XJiZXLkxpbmtFcnJvcnx8TSxxPVcmJlcuUnVudGltZUVycm9yfHxNLEg9cygiRE9NRXhjZXB0aW9uIiksej1zKCJTZXQiKSxWPXMoIk1hcCIpLFg9Vi5wcm90b3R5cGUsWT1sKFguaGFzKSxLPWwoWC5nZXQpLEo9bChYLnNldCksUT1sKHoucHJvdG90eXBlLmFkZCksJD1zKCJPYmplY3QiLCJrZXlzIiksWj1sKFtdLnB1c2gpLHR0PWwoKCEwKS52YWx1ZU9mKSxldD1sKDEuLnZhbHVlT2YpLHJ0PWwoIiIudmFsdWVPZiksbnQ9bChGLnByb3RvdHlwZS5nZXRUaW1lKSxpdD1jKCJzdHJ1Y3R1cmVkQ2xvbmUiKSxhdD0iRGF0YUNsb25lRXJyb3IiLG90PSJUcmFuc2ZlcnJpbmciLHN0PWZ1bmN0aW9uKHQpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciBlPW5ldyBvLlNldChbN10pLHI9dChlKSxuPXQoTyg3KSk7cmV0dXJuIHI9PWV8fCFyLmhhcyg3KXx8Im9iamVjdCIhPXR5cGVvZiBufHw3IT1ufSkpJiZ0fSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciByPW5ldyBlLG49dCh7YTpyLGI6cn0pO3JldHVybiEobiYmbi5hPT09bi5iJiZuLmEgaW5zdGFuY2VvZiBlJiZuLmEuc3RhY2s9PT1yLnN0YWNrKX0pKX0sdXQ9by5zdHJ1Y3R1cmVkQ2xvbmUsY3Q9aXx8IWx0KHV0LE0pfHwhbHQodXQsSCl8fChuPXV0LCEhdSgoZnVuY3Rpb24oKXt2YXIgdD1uKG5ldyBvLkFnZ3JlZ2F0ZUVycm9yKFsxXSxpdCx7Y2F1c2U6M30pKTtyZXR1cm4iQWdncmVnYXRlRXJyb3IiIT10Lm5hbWV8fDEhPXQuZXJyb3JzWzBdfHx0Lm1lc3NhZ2UhPWl0fHwzIT10LmNhdXNlfSkpKSxodD0hdXQmJnN0KChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUoaXQse2RldGFpbDp0fSkuZGV0YWlsfSkpLGZ0PXN0KHV0KXx8aHQsZHQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEgoIlVuY2xvbmVhYmxlIHR5cGU6ICIrdCxhdCl9LHB0PWZ1bmN0aW9uKHQsZSl7dGhyb3cgbmV3IEgoKGV8fCJDbG9uaW5nIikrIiBvZiAiK3QrIiBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZSIsYXQpfSx2dD1mdW5jdGlvbih0LGUpe2lmKHYodCkmJmR0KCJTeW1ib2wiKSwhcCh0KSlyZXR1cm4gdDtpZihlKXtpZihZKGUsdCkpcmV0dXJuIEsoZSx0KX1lbHNlIGU9bmV3IFY7dmFyIHIsbixpLGEsbCx1LGMsZixkLHksbT1nKHQpLGs9ITE7c3dpdGNoKG0pe2Nhc2UiQXJyYXkiOmk9W10saz0hMDticmVhaztjYXNlIk9iamVjdCI6aT17fSxrPSEwO2JyZWFrO2Nhc2UiTWFwIjppPW5ldyBWLGs9ITA7YnJlYWs7Y2FzZSJTZXQiOmk9bmV3IHosaz0hMDticmVhaztjYXNlIlJlZ0V4cCI6aT1uZXcgUmVnRXhwKHQuc291cmNlLFModCkpO2JyZWFrO2Nhc2UiRXJyb3IiOnN3aXRjaChuPXQubmFtZSl7Y2FzZSJBZ2dyZWdhdGVFcnJvciI6aT1zKCJBZ2dyZWdhdGVFcnJvciIpKFtdKTticmVhaztjYXNlIkV2YWxFcnJvciI6aT1SKCk7YnJlYWs7Y2FzZSJSYW5nZUVycm9yIjppPUkoKTticmVhaztjYXNlIlJlZmVyZW5jZUVycm9yIjppPWooKTticmVhaztjYXNlIlN5bnRheEVycm9yIjppPUwoKTticmVhaztjYXNlIlR5cGVFcnJvciI6aT1EKCk7YnJlYWs7Y2FzZSJVUklFcnJvciI6aT1OKCk7YnJlYWs7Y2FzZSJDb21waWxlRXJyb3IiOmk9RygpO2JyZWFrO2Nhc2UiTGlua0Vycm9yIjppPUIoKTticmVhaztjYXNlIlJ1bnRpbWVFcnJvciI6aT1xKCk7YnJlYWs7ZGVmYXVsdDppPU0oKX1rPSEwO2JyZWFrO2Nhc2UiRE9NRXhjZXB0aW9uIjppPW5ldyBIKHQubWVzc2FnZSx0Lm5hbWUpLGs9ITA7YnJlYWs7Y2FzZSJEYXRhVmlldyI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJCaWdJbnQ2NEFycmF5IjpjYXNlIkJpZ1VpbnQ2NEFycmF5IjpyPW9bbV0scChyKXx8cHQobSksaT1uZXcgcih2dCh0LmJ1ZmZlcixlKSx0LmJ5dGVPZmZzZXQsIkRhdGFWaWV3Ij09PW0/dC5ieXRlTGVuZ3RoOnQubGVuZ3RoKTticmVhaztjYXNlIkRPTVF1YWQiOnRyeXtpPW5ldyBET01RdWFkKHZ0KHQucDEsZSksdnQodC5wMixlKSx2dCh0LnAzLGUpLHZ0KHQucDQsZSkpfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7Y2FzZSJGaWxlTGlzdCI6aWYoYT1mdW5jdGlvbigpe3ZhciB0O3RyeXt0PW5ldyBvLkRhdGFUcmFuc2Zlcn1jYXRjaChlKXt0cnl7dD1uZXcgby5DbGlwYm9hcmRFdmVudCgiIikuY2xpcGJvYXJkRGF0YX1jYXRjaCh0KXt9fXJldHVybiB0JiZ0Lml0ZW1zJiZ0LmZpbGVzP3Q6bnVsbH0oKSl7Zm9yKGw9MCx1PUEodCk7bDx1O2wrKylhLml0ZW1zLmFkZCh2dCh0W2xdLGUpKTtpPWEuZmlsZXN9ZWxzZSBmdD9pPWZ0KHQpOnB0KG0pO2JyZWFrO2Nhc2UiSW1hZ2VEYXRhIjp0cnl7aT1uZXcgSW1hZ2VEYXRhKHZ0KHQuZGF0YSxlKSx0LndpZHRoLHQuaGVpZ2h0LHtjb2xvclNwYWNlOnQuY29sb3JTcGFjZX0pfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7ZGVmYXVsdDppZihmdClpPWZ0KHQpO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UiQmlnSW50IjppPU8odC52YWx1ZU9mKCkpO2JyZWFrO2Nhc2UiQm9vbGVhbiI6aT1PKHR0KHQpKTticmVhaztjYXNlIk51bWJlciI6aT1PKGV0KHQpKTticmVhaztjYXNlIlN0cmluZyI6aT1PKHJ0KHQpKTticmVhaztjYXNlIkRhdGUiOmk9bmV3IEYobnQodCkpO2JyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOihyPW8uRGF0YVZpZXcpfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZXx8cHQobSk7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlKWk9dC5zbGljZSgwKTtlbHNlIGZvcih1PXQuYnl0ZUxlbmd0aCxpPW5ldyBBcnJheUJ1ZmZlcih1KSxkPW5ldyByKHQpLHk9bmV3IHIoaSksbD0wO2w8dTtsKyspeS5zZXRVaW50OChsLGQuZ2V0VWludDgobCkpfWNhdGNoKHQpe3Rocm93IG5ldyBIKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIsYXQpfWJyZWFrO2Nhc2UiU2hhcmVkQXJyYXlCdWZmZXIiOmk9dDticmVhaztjYXNlIkJsb2IiOnRyeXtpPXQuc2xpY2UoMCx0LnNpemUsdC50eXBlKX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTVBvaW50IjpjYXNlIkRPTVBvaW50UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21Qb2ludD9yLmZyb21Qb2ludCh0KTpuZXcgcih0LngsdC55LHQueix0LncpfWNhdGNoKHQpe3B0KG0pfWJyZWFrO2Nhc2UiRE9NUmVjdCI6Y2FzZSJET01SZWN0UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21SZWN0P3IuZnJvbVJlY3QodCk6bmV3IHIodC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTU1hdHJpeCI6Y2FzZSJET01NYXRyaXhSZWFkT25seSI6cj1vW21dO3RyeXtpPXIuZnJvbU1hdHJpeD9yLmZyb21NYXRyaXgodCk6bmV3IHIodCl9Y2F0Y2godCl7cHQobSl9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6aCh0LmNsb25lKXx8cHQobSk7dHJ5e2k9dC5jbG9uZSgpfWNhdGNoKHQpe2R0KG0pfWJyZWFrO2Nhc2UiRmlsZSI6dHJ5e2k9bmV3IEZpbGUoW3RdLHQubmFtZSx0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkNyb3BUYXJnZXQiOmNhc2UiQ3J5cHRvS2V5IjpjYXNlIkZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUZpbGVIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUhhbmRsZSI6Y2FzZSJHUFVDb21waWxhdGlvbkluZm8iOmNhc2UiR1BVQ29tcGlsYXRpb25NZXNzYWdlIjpjYXNlIkltYWdlQml0bWFwIjpjYXNlIlJUQ0NlcnRpZmljYXRlIjpjYXNlIldlYkFzc2VtYmx5Lk1vZHVsZSI6cHQobSk7ZGVmYXVsdDpkdChtKX19aWYoSihlLHQsaSksaylzd2l0Y2gobSl7Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmZvcihjPSQodCksbD0wLHU9QShjKTtsPHU7bCsrKWY9Y1tsXSxfKGksZix2dCh0W2ZdLGUpKTticmVhaztjYXNlIk1hcCI6dC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe0ooaSx2dChyLGUpLHZ0KHQsZSkpfSkpO2JyZWFrO2Nhc2UiU2V0Ijp0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1EoaSx2dCh0LGUpKX0pKTticmVhaztjYXNlIkVycm9yIjp3KGksIm1lc3NhZ2UiLHZ0KHQubWVzc2FnZSxlKSksYih0LCJjYXVzZSIpJiZ3KGksImNhdXNlIix2dCh0LmNhdXNlLGUpKSwiQWdncmVnYXRlRXJyb3IiPT1uJiYoaS5lcnJvcnM9dnQodC5lcnJvcnMsZSkpO2Nhc2UiRE9NRXhjZXB0aW9uIjp4JiZ3KGksInN0YWNrIix2dCh0LnN0YWNrLGUpKX1yZXR1cm4gaX0seXQ9dXQmJiF1KChmdW5jdGlvbigpe2lmKFQmJkU+OTJ8fEMmJkU+OTR8fFAmJkU+OTcpcmV0dXJuITE7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDgpLGU9dXQodCx7dHJhbnNmZXI6W3RdfSk7cmV0dXJuIDAhPXQuYnl0ZUxlbmd0aHx8OCE9ZS5ieXRlTGVuZ3RofSkpO2Eoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLHNoYW06IXl0LGZvcmNlZDpjdH0se3N0cnVjdHVyZWRDbG9uZTpmdW5jdGlvbih0KXt2YXIgZSxyPWsoYXJndW1lbnRzLmxlbmd0aCwxKT4xJiYhZChhcmd1bWVudHNbMV0pP20oYXJndW1lbnRzWzFdKTp2b2lkIDAsbj1yP3IudHJhbnNmZXI6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1uJiZmdW5jdGlvbih0LGUpe2lmKCFwKHQpKXRocm93IEQoIlRyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UiKTt2YXIgcj1bXTt5KHQsKGZ1bmN0aW9uKHQpe1oocixtKHQpKX0pKTt2YXIgbixpLGEscyxsLHUsYz0wLGQ9QShyKTtpZih5dClmb3Iocz11dChyLHt0cmFuc2ZlcjpyfSk7YzxkOylKKGUscltjXSxzW2MrK10pO2Vsc2UgZm9yKDtjPGQ7KXtpZihuPXJbYysrXSxZKGUsbikpdGhyb3cgbmV3IEgoIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGUiLGF0KTtzd2l0Y2goaT1nKG4pKXtjYXNlIkltYWdlQml0bWFwIjphPW8uT2Zmc2NyZWVuQ2FudmFzLGYoYSl8fHB0KGksb3QpO3RyeXsodT1uZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuZ2V0Q29udGV4dCgiYml0bWFwcmVuZGVyZXIiKS50cmFuc2ZlckZyb21JbWFnZUJpdG1hcChuKSxsPXUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXVkaW9EYXRhIjpjYXNlIlZpZGVvRnJhbWUiOmgobi5jbG9uZSkmJmgobi5jbG9zZSl8fHB0KGksb3QpO3RyeXtsPW4uY2xvbmUoKSxuLmNsb3NlKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOmNhc2UiTWVkaWFTb3VyY2VIYW5kbGUiOmNhc2UiTWVzc2FnZVBvcnQiOmNhc2UiT2Zmc2NyZWVuQ2FudmFzIjpjYXNlIlJlYWRhYmxlU3RyZWFtIjpjYXNlIlRyYW5zZm9ybVN0cmVhbSI6Y2FzZSJXcml0YWJsZVN0cmVhbSI6cHQoaSxvdCl9aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgSCgiVGhpcyBvYmplY3QgY2Fubm90IGJlIHRyYW5zZmVycmVkOiAiK2ksYXQpO0ooZSxuLGwpfX0obixlPW5ldyBWKSx2dCh0LGUpfX0pfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDEwKSxhPXIoMjQpLG89cig4Mikscz1yKDI3KSxsPXIoNTQpLHU9ZnVuY3Rpb24oKXt9LGM9W10saD1zKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZj0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxkPW4oZi5leGVjKSxwPSFmLmV4ZWModSksdj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGgodSxjLHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX0seT1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTtzd2l0Y2gobyh0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gcHx8ISFkKGYsbCh0KSl9Y2F0Y2godCl7cmV0dXJuITB9fTt5LnNoYW09ITAsdC5leHBvcnRzPSFofHxpKChmdW5jdGlvbigpe3ZhciB0O3JldHVybiB2KHYuY2FsbCl8fCF2KE9iamVjdCl8fCF2KChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/eTp2fSx0PT57dmFyIGU9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2lmKHQ8cil0aHJvdyBlKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig0MiksYT1yKDI4KSxvPXIoMTI3KSxzPVJlZ0V4cC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBzfHxpKHQsImZsYWdzIil8fCFhKHMsdCk/ZTpuKG8sdCl9fSwodCxlLHIpPT57dmFyIG49cig1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKSxpPXIoMTQpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1FcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIHQpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0YWNrIixpKDEsNykpLDchPT10LnN0YWNrKX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMTMwKSxpPXIoMTMxKTt0LmV4cG9ydHM9IW4mJiFpJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sdD0+e3QuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwodCxlLHIpPT57dmFyIG49cigxOCksaT1yKDcpO3QuZXhwb3J0cz0icHJvY2VzcyI9PW4oaS5wcm9jZXNzKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyk7dC5leHBvcnRzPW59LChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGV4cG9ydHMuYnVpbGQ9ZXhwb3J0cy5SZW5kZXJUYXNrPWV4cG9ydHMuUERGV29ya2VyVXRpbD1leHBvcnRzLlBERldvcmtlcj1leHBvcnRzLlBERlBhZ2VQcm94eT1leHBvcnRzLlBERkRvY3VtZW50UHJveHk9ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPWV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWV4cG9ydHMuTG9vcGJhY2tQb3J0PWV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwLGV4cG9ydHMuZ2V0RG9jdW1lbnQ9Z2V0RG9jdW1lbnQsZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeT1zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSxleHBvcnRzLnZlcnNpb249dm9pZCAwO3ZhciBfdXRpbD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLF9hbm5vdGF0aW9uX3N0b3JhZ2U9X193X3BkZmpzX3JlcXVpcmVfXygxMzQpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxfZm9udF9sb2FkZXI9X193X3BkZmpzX3JlcXVpcmVfXygxNDApLF9jYW52YXM9X193X3BkZmpzX3JlcXVpcmVfXygxNDEpLF93b3JrZXJfb3B0aW9ucz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygzKSxfbWVzc2FnZV9oYW5kbGVyPV9fd19wZGZqc19yZXF1aXJlX18oMTQ1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNDYpLF9vcHRpb25hbF9jb250ZW50X2NvbmZpZz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NyksX3RyYW5zcG9ydF9zdHJlYW09X193X3BkZmpzX3JlcXVpcmVfXygxNDgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE0OSk7ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHQsZSl7X2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheSh0KXtyZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5KHQpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCl8fF9ub25JdGVyYWJsZVNwcmVhZCgpfWZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheSh0KX1mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCl7X3JlZ2VuZXJhdG9yUnVudGltZT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgdD17fSxlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbih0LGUscil7dFtlXT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixvPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLHM9bmV3IHgoaXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp3KHQscixzKX0pLG99ZnVuY3Rpb24gYyh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O2wodixhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShFKFtdKSkpO20mJm0hPT1lJiZyLmNhbGwobSxhKSYmKHY9bSk7dmFyIGc9cC5wcm90b3R5cGU9Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiBiKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bCh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBfKHQsZSl7ZnVuY3Rpb24gaShuLGEsbyxzKXt2YXIgbD1jKHRbbl0sdCxhKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgdT1sLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1fdHlwZW9mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP2UucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsbyxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxvLHMpfSkpOmUucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsbyh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsbyxzKX0pKX1zKGwuYXJnKX12YXIgYTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbil7aSh0LHIsZSxuKX0pKX1yZXR1cm4gYT1hP2EudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihpLGEpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9aSxyLmFyZz1hOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9QShvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGw9Yyh0LGUscik7aWYoIm5vcm1hbCI9PT1sLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsbC5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5tZXRob2Qsbj10Lml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIGUuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmdC5pdGVyYXRvci5yZXR1cm4mJihlLm1ldGhvZD0icmV0dXJuIixlLmFyZz12b2lkIDAsQSh0LGUpLCJ0aHJvdyI9PT1lLm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBpPWMobix0Lml0ZXJhdG9yLGUuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiBlLm1ldGhvZD0idGhyb3ciLGUuYXJnPWkuYXJnLGUuZGVsZWdhdGU9bnVsbCxoO3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8oZVt0LnJlc3VsdE5hbWVdPWEudmFsdWUsZS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWUubWV0aG9kJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksZS5kZWxlZ2F0ZT1udWxsLGgpOmE6KGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxlLmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiB4KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKHQpe2lmKHQpe3ZhciBlPXRbYV07aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiBlKCl7Zm9yKDsrK248dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG4pKXJldHVybiBlLnZhbHVlPXRbbl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9dm9pZCAwLGUuZG9uZT0hMCxlfTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlB9fWZ1bmN0aW9uIFAoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLG4ocCwiY29uc3RydWN0b3IiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMH0pLGQuZGlzcGxheU5hbWU9bChwLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1kfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxwKToodC5fX3Byb3RvX189cCxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxiKF8ucHJvdG90eXBlKSxsKF8ucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPV8sdC5hc3luYz1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPVByb21pc2UpO3ZhciBvPW5ldyBfKHUoZSxyLG4saSksYSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sYihnKSxsKGcscywiR2VuZXJhdG9yIiksbChnLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChnLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gdC52YWx1ZT1uLHQuZG9uZT0hMSx0fXJldHVybiB0LmRvbmU9ITAsdH19LHQudmFsdWVzPUUseC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOngscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhdClmb3IodmFyIGUgaW4gdGhpcykidCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgZT10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9dCxlLm5leHQ9cixuJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxvPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksbD1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dO2lmKGkudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBhPWk7YnJlYWt9fWEmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZhLnRyeUxvYzw9ZSYmZTw9YS5maW5hbGx5TG9jJiYoYT1udWxsKTt2YXIgbz1hP2EuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxhPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWEuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLGh9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO1Mocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sdH1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2sodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsX3RvUHJvcGVydHlLZXkobi5rZXkpLG4pfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3ModCxlLHIpe3JldHVybiBlJiZfZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxlKSxyJiZfZGVmaW5lUHJvcGVydGllcyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCl7dmFyIGU9X3RvUHJpbWl0aXZlKHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBfdG9QcmltaXRpdmUodCxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3R5cGVvZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModCxlLHIpe19jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHQsZSxyKXtyZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQsX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsZSl7cmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldCh0LF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IodCxlLCJnZXQiKSl9ZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHQsZSxyLG4pe3JldHVybiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3ModCxlKSxfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3Iociwic2V0IiksX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQscixuKSxufWZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldCh0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19ZnVuY3Rpb24gX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LGUscil7cmV0dXJuIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2Vzcyh0LGUpLF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0ZpZWxkRGVzY3JpcHRvcihyLCJnZXQiKSxfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxyKX1mdW5jdGlvbiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IodCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2UrIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uIil9ZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX1mdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfWZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcCh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKHQpe2FzeW5jR2VuZXJhdG9yU3RlcChhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXN5bmNHZW5lcmF0b3JTdGVwKGEsbixpLG8scywidGhyb3ciLHQpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkodCxlKXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5TGltaXQodCxlKXx8X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQsZSl8fF9ub25JdGVyYWJsZVJlc3QoKX1mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/X2FycmF5TGlrZVRvQXJyYXkodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXModCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH1mdW5jdGlvbiBfdHlwZW9mKHQpe3JldHVybiBfdHlwZW9mPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxfdHlwZW9mKHQpfXZhciBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMCxEZWZhdWx0Q2FudmFzRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5O2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk7dmFyIERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7dmFyIERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxjcmVhdGVQREZOZXR3b3JrU3RyZWFtO2lmKGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxfaXNfbm9kZS5pc05vZGVKUyl7dmFyIF9yZXF1aXJlPV9fd19wZGZqc19yZXF1aXJlX18oMTUwKSxOb2RlQ2FudmFzRmFjdG9yeT1fcmVxdWlyZS5Ob2RlQ2FudmFzRmFjdG9yeSxOb2RlQ01hcFJlYWRlckZhY3Rvcnk9X3JlcXVpcmUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5LE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fcmVxdWlyZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1EZWZhdWx0Q2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeSxleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9Tm9kZUNNYXBSZWFkZXJGYWN0b3J5LGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9ZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkodCl7Y3JlYXRlUERGTmV0d29ya1N0cmVhbT10fWZ1bmN0aW9uIGdldERvY3VtZW50KHQpe3ZhciBlLHI9bmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgVVJMKWU9e3VybDp0fTtlbHNlIGlmKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpKWU9e2RhdGE6dH07ZWxzZSBpZih0IGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KWU9e3JhbmdlOnR9O2Vsc2V7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBUeXBlZEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LiIpO2lmKCF0LnVybCYmIXQuZGF0YSYmIXQucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybCIpO2U9dH12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bnVsbCxhPW51bGw7Zm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107c3dpdGNoKG8pe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7bltvXT1uZXcgVVJMKHMsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKCdDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIicuY29uY2F0KHQsJyIuJykpfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBzfHxzIGluc3RhbmNlb2YgVVJMKXtuW29dPXMudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjppPXM7Y29udGludWU7Y2FzZSJ3b3JrZXIiOmE9cztjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmcyBpbnN0YW5jZW9mIEJ1ZmZlciluW29dPW5ldyBVaW50OEFycmF5KHMpO2Vsc2V7aWYocyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBzKW5bb109KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7ZWxzZSBpZigib2JqZWN0IiE9PV90eXBlb2Yocyl8fG51bGw9PT1zfHxpc05hTihzLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW29dPW5ldyBVaW50OEFycmF5KHMpfWVsc2UgbltvXT1uZXcgVWludDhBcnJheShzKX1jb250aW51ZX1uW29dPXN9aWYobi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnksbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1uLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnksbi5pZ25vcmVFcnJvcnM9ITAhPT1uLnN0b3BBdEVycm9ycyxuLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1uLmZvbnRFeHRyYVByb3BlcnRpZXMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1ZyxuLmVuYWJsZVhmYT0hMD09PW4uZW5hYmxlWGZhLCghTnVtYmVyLmlzSW50ZWdlcihuLnJhbmdlQ2h1bmtTaXplKXx8bi5yYW5nZUNodW5rU2l6ZTwxKSYmKG4ucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKSwoInN0cmluZyIhPXR5cGVvZiBuLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkobi5kb2NCYXNlVXJsKSkmJihuLmRvY0Jhc2VVcmw9bnVsbCksKCFOdW1iZXIuaXNJbnRlZ2VyKG4ubWF4SW1hZ2VTaXplKXx8bi5tYXhJbWFnZVNpemU8LTEpJiYobi5tYXhJbWFnZVNpemU9LTEpLCJzdHJpbmciIT10eXBlb2Ygbi5jTWFwVXJsJiYobi5jTWFwVXJsPW51bGwpLCJzdHJpbmciIT10eXBlb2Ygbi5zdGFuZGFyZEZvbnREYXRhVXJsJiYobi5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlV29ya2VyRmV0Y2gmJihuLnVzZVdvcmtlckZldGNoPW4uQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzRXZhbFN1cHBvcnRlZCYmKG4uaXNFdmFsU3VwcG9ydGVkPSEwKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYobi5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlU3lzdGVtRm9udHMmJihuLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIW4uZGlzYWJsZUZvbnRGYWNlKSwib2JqZWN0Ij09PV90eXBlb2Yobi5vd25lckRvY3VtZW50KSYmbnVsbCE9PW4ub3duZXJEb2N1bWVudHx8KG4ub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVSYW5nZSYmKG4uZGlzYWJsZVJhbmdlPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVTdHJlYW0mJihuLmRpc2FibGVTdHJlYW09ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUF1dG9GZXRjaCYmKG4uZGlzYWJsZUF1dG9GZXRjaD0hMSksKDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKG4udmVyYm9zaXR5KSwhYSl7dmFyIGw9e3ZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0Ol93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnR9O2E9bC5wb3J0P1BERldvcmtlci5mcm9tUG9ydChsKTpuZXcgUERGV29ya2VyKGwpLHIuX3dvcmtlcj1hfXZhciB1PXIuZG9jSWQ7cmV0dXJuIGEucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHQ9X2ZldGNoRG9jdW1lbnQoYSxuLGksdSksZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIGU7aT9lPW5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxwcm9ncmVzc2l2ZURvbmU6bi5wcm9ncmVzc2l2ZURvbmUsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6bi5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGkpOm4uZGF0YXx8KGU9Y3JlYXRlUERGTmV0d29ya1N0cmVhbSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKSx0KGUpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdCxlXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9X3NsaWNlZFRvQXJyYXkodCwyKSxpPWVbMF0sbz1lWzFdO2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHM9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIodSxpLGEucG9ydCksbD1uZXcgV29ya2VyVHJhbnNwb3J0KHMscixvLG4pO3IuX3RyYW5zcG9ydD1sLHMuc2VuZCgiUmVhZHkiLG51bGwpfSkpfSkpLmNhdGNoKHIuX2NhcGFiaWxpdHkucmVqZWN0KSxyfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHQsZSxyLG4pe3JldHVybiBfZmV0Y2hEb2N1bWVudDIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50Migpe3JldHVybihfZmV0Y2hEb2N1bWVudDI9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZS5kZXN0cm95ZWQpe3QubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTtjYXNlIDI6cmV0dXJuIG4mJihyLmxlbmd0aD1uLmxlbmd0aCxyLmluaXRpYWxEYXRhPW4uaW5pdGlhbERhdGEsci5wcm9ncmVzc2l2ZURvbmU9bi5wcm9ncmVzc2l2ZURvbmUsci5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1uLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSx0Lm5leHQ9NSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4yLjAiLGRhdGE6ci5kYXRhLHBhc3N3b3JkOnIucGFzc3dvcmQsZGlzYWJsZUF1dG9GZXRjaDpyLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ci5yYW5nZUNodW5rU2l6ZSxsZW5ndGg6ci5sZW5ndGgsZG9jQmFzZVVybDpyLmRvY0Jhc2VVcmwsZW5hYmxlWGZhOnIuZW5hYmxlWGZhLGV2YWx1YXRvck9wdGlvbnM6e21heEltYWdlU2l6ZTpyLm1heEltYWdlU2l6ZSxkaXNhYmxlRm9udEZhY2U6ci5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOnIuaWdub3JlRXJyb3JzLGlzRXZhbFN1cHBvcnRlZDpyLmlzRXZhbFN1cHBvcnRlZCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGZvbnRFeHRyYVByb3BlcnRpZXM6ci5mb250RXh0cmFQcm9wZXJ0aWVzLHVzZVN5c3RlbUZvbnRzOnIudXNlU3lzdGVtRm9udHMsY01hcFVybDpyLnVzZVdvcmtlckZldGNoP3IuY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6ci51c2VXb3JrZXJGZXRjaD9yLnN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH19KTtjYXNlIDU6aWYoYT10LnNlbnQsci5kYXRhJiYoci5kYXRhPW51bGwpLCFlLmRlc3Ryb3llZCl7dC5uZXh0PTk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsYSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBfb25VbnN1cHBvcnRlZEZlYXR1cmU9bmV3IFdlYWtNYXAsUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXI9bnVsbCx0aGlzLmRvY0lkPSJkIi5jb25jYXQoKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNTZXQodCx0LF9kb2NJZCwoZT1fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfZG9jSWQpLHI9ZSsrLGUpKSxyKSksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5vblBhc3N3b3JkPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJvblVuc3VwcG9ydGVkRmVhdHVyZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9vblVuc3VwcG9ydGVkRmVhdHVyZSl9LHNldDpmdW5jdGlvbih0KXsoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgb25VbnN1cHBvcnRlZEZlYXR1cmUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHQpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOihlPV9hc3luY1RvR2VuZXJhdG9yKF9yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGU7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5kZXN0cm95ZWQ9ITAsdC5uZXh0PTMsbnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZGVzdHJveSgpO2Nhc2UgMzp0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIuZGVzdHJveSgpLHRoaXMuX3dvcmtlcj1udWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCk7ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPVBERkRvY3VtZW50TG9hZGluZ1Rhc2s7dmFyIF9kb2NJZD17d3JpdGFibGU6ITAsdmFsdWU6MH0sUERGRGF0YVJhbmdlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmxlbmd0aD1lLHRoaXMuaW5pdGlhbERhdGE9cix0aGlzLnByb2dyZXNzaXZlRG9uZT1uLHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9aSx0aGlzLl9yYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc0xpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2godCl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKHQpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9yYW5nZUxpc3RlbmVycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KSgwLHIudmFsdWUpKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25EYXRhUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciBuLGk9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoci5fcHJvZ3Jlc3NMaXN0ZW5lcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOykoMCxuLnZhbHVlKSh0LGUpfWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspKDAsci52YWx1ZSkodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fSkpfX0se2tleToib25EYXRhUHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHQuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KSgwLGUudmFsdWUpKCl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSkpfX0se2tleToidHJhbnNwb3J0UmVhZHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3REYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsX3V0aWwudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgUERGRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe319XSksdH0oKTtleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7dmFyIFBERkRvY3VtZW50UHJveHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksdGhpcy5fcGRmSW5mbz1lLHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToiYW5ub3RhdGlvblN0b3JhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuYW5ub3RhdGlvblN0b3JhZ2V9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXN9fSx7a2V5OiJmaW5nZXJwcmludHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50c319LHtrZXk6InN0YXRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50UHJveHkgc3RhdHMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5fdHJhbnNwb3J0LnN0YXRzfX0se2tleToiaXNQdXJlWGZhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImlzUHVyZVhmYSIsISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpfX0se2tleToiYWxsWGZhSHRtbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZSh0KX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKHQpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VMYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCl9fSx7a2V5OiJnZXRWaWV3ZXJQcmVmZXJlbmNlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCl9fSx7a2V5OiJnZXRPcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpfX0se2tleToiZ2V0T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKX19LHtrZXk6ImdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpfX0se2tleToiZ2V0UGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpfX0se2tleToiZ2V0TWFya0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKX19LHtrZXk6InNhdmVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNhdmVEb2N1bWVudCgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKHR8fHRoaXMuaXNQdXJlWGZhKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zfX0se2tleToibG9hZGluZ1Rhc2siLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2t9fSx7a2V5OiJnZXRGaWVsZE9iamVjdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRGaWVsZE9iamVjdHMoKX19LHtrZXk6Imhhc0pTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpfX0se2tleToiZ2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKX19XSksdH0oKTtleHBvcnRzLlBERkRvY3VtZW50UHJveHk9UERGRG9jdW1lbnRQcm94eTt2YXIgUERGUGFnZVByb3h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLHRoaXMuX3BhZ2VJbmRleD1lLHRoaXMuX3BhZ2VJbmZvPXIsdGhpcy5fb3duZXJEb2N1bWVudD1pLHRoaXMuX3RyYW5zcG9ydD1uLHRoaXMuX3N0YXRzPWE/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBQREZPYmplY3RzLHRoaXMuX2JpdG1hcHM9bmV3IFNldCx0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMSx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLHRoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExfXZhciBlO3JldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfX0se2tleToicmVmIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfX0se2tleToidXNlclVuaXQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fX0se2tleToiZ2V0Vmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9dC5zY2FsZSxyPXQucm90YXRpb24sbj12b2lkIDA9PT1yP3RoaXMucm90YXRlOnIsaT10Lm9mZnNldFgsYT12b2lkIDA9PT1pPzA6aSxvPXQub2Zmc2V0WSxzPXZvaWQgMD09PW8/MDpvLGw9dC5kb250RmxpcCx1PXZvaWQgMCE9PWwmJmw7cmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOmUscm90YXRpb246bixvZmZzZXRYOmEsb2Zmc2V0WTpzLGRvbnRGbGlwOnV9KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmludGVudCxlPXZvaWQgMD09PXQ/ImRpc3BsYXkiOnQscj10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGUpO3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5fcGFnZUluZGV4LHIucmVuZGVyaW5nSW50ZW50KX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VKU0FjdGlvbnModGhpcy5fcGFnZUluZGV4KX19LHtrZXk6ImlzUHVyZVhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJpc1B1cmVYZmEiLCEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKX19LHtrZXk6ImdldFhmYSIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZTtyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIiwobnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSl8fG51bGwpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMsaT10LmNhbnZhc0NvbnRleHQsYT10LnZpZXdwb3J0LG89dC5pbnRlbnQscz12b2lkIDA9PT1vPyJkaXNwbGF5IjpvLGw9dC5hbm5vdGF0aW9uTW9kZSx1PXZvaWQgMD09PWw/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmwsYz10LnRyYW5zZm9ybSxoPXZvaWQgMD09PWM/bnVsbDpjLGY9dC5jYW52YXNGYWN0b3J5LGQ9dm9pZCAwPT09Zj9udWxsOmYscD10LmJhY2tncm91bmQsdj12b2lkIDA9PT1wP251bGw6cCx5PXQub3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSxtPXZvaWQgMD09PXk/bnVsbDp5LGc9dC5hbm5vdGF0aW9uQ2FudmFzTWFwLGI9dm9pZCAwPT09Zz9udWxsOmcsXz10LnBhZ2VDb2xvcnMsdz12b2lkIDA9PT1fP251bGw6XyxBPXQucHJpbnRBbm5vdGF0aW9uU3RvcmFnZSxrPXZvaWQgMD09PUE/bnVsbDpBO251bGw9PT0oZT10aGlzLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiT3ZlcmFsbCIpO3ZhciBTPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyx1LGspO3RoaXMucGVuZGluZ0NsZWFudXA9ITEsbXx8KG09dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTt2YXIgeD10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KFMuY2FjaGVLZXkpO3h8fCh4PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faW50ZW50U3RhdGVzLnNldChTLmNhY2hlS2V5LHgpKSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQmJihjbGVhclRpbWVvdXQoeC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCk7dmFyIEUsUD1kfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLFQ9ISEoUy5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7eC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5fHwoeC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShFPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09RXx8RS50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KFMpKTt2YXIgQz1mdW5jdGlvbih0KXt2YXIgZSxyO3gucmVuZGVyVGFza3MuZGVsZXRlKE8pLChuLmNsZWFudXBBZnRlclJlbmRlcnx8VCkmJihuLnBlbmRpbmdDbGVhbnVwPSEwKSxuLl90cnlDbGVhbnVwKCksdD8oTy5jYXBhYmlsaXR5LnJlamVjdCh0KSxuLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6eCxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSkpOk8uY2FwYWJpbGl0eS5yZXNvbHZlKCksbnVsbD09PShlPW4uX3N0YXRzKXx8dm9pZCAwPT09ZXx8ZS50aW1lRW5kKCJSZW5kZXJpbmciKSxudWxsPT09KHI9bi5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIk92ZXJhbGwiKX0sTz1uZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDppLHZpZXdwb3J0OmEsdHJhbnNmb3JtOmgsYmFja2dyb3VuZDp2fSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmIsb3BlcmF0b3JMaXN0Ongub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpQLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohVCxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6d30pOygocj14KS5yZW5kZXJUYXNrc3x8KHIucmVuZGVyVGFza3M9bmV3IFNldCkpLmFkZChPKTt2YXIgRj1PLnRhc2s7cmV0dXJuIFByb21pc2UuYWxsKFt4LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxtXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGUscj1fc2xpY2VkVG9BcnJheSh0LDIpLGk9clswXSxhPXJbMV07bi5wZW5kaW5nQ2xlYW51cD9DKCk6KG51bGw9PT0oZT1uLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiUmVuZGVyaW5nIiksTy5pbml0aWFsaXplR3JhcGhpY3Moe3RyYW5zcGFyZW5jeTppLG9wdGlvbmFsQ29udGVudENvbmZpZzphfSksTy5vcGVyYXRvckxpc3RDaGFuZ2VkKCkpfSkpLmNhdGNoKEMpLEZ9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9bi5pbnRlbnQsYT12b2lkIDA9PT1pPyJkaXNwbGF5IjppLG89bi5hbm5vdGF0aW9uTW9kZSxzPXZvaWQgMD09PW8/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOm8sbD1uLnByaW50QW5ub3RhdGlvblN0b3JhZ2UsdT12b2lkIDA9PT1sP251bGw6bCxjPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoYSxzLHUsITApLGg9dGhpcy5faW50ZW50U3RhdGVzLmdldChjLmNhY2hlS2V5KTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGMuY2FjaGVLZXksaCkpLGgub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgodD1PYmplY3QuY3JlYXRlKG51bGwpKS5vcGVyYXRvckxpc3RDaGFuZ2VkPWZ1bmN0aW9uKCl7aC5vcGVyYXRvckxpc3QubGFzdENodW5rJiYoaC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGgub3BlcmF0b3JMaXN0KSxoLnJlbmRlclRhc2tzLmRlbGV0ZSh0KSl9LGgub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksKChlPWgpLnJlbmRlclRhc2tzfHwoZS5yZW5kZXJUYXNrcz1uZXcgU2V0KSkuYWRkKHQpLGgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShyPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09cnx8ci50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGMpKSxoLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJzdHJlYW1UZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLHI9dm9pZCAwIT09ZSYmZSxuPXQuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT12b2lkIDAhPT1uJiZuO3JldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxjb21iaW5lVGV4dEl0ZW1zOiEwIT09cixpbmNsdWRlTWFya2VkQ29udGVudDohMD09PWl9LHtoaWdoV2F0ZXJNYXJrOjEwMCxzaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpfSkpO3ZhciBlPXRoaXMuc3RyZWFtVGV4dENvbnRlbnQodCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZ2V0UmVhZGVyKCksaT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiBlKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4sYT1yLnZhbHVlO3IuZG9uZT90KGkpOihPYmplY3QuYXNzaWduKGkuc3R5bGVzLGEuc3R5bGVzKSwobj1pLml0ZW1zKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KGEuaXRlbXMpKSxlKCkpfSkscil9KCl9KSl9fSx7a2V5OiJnZXRTdHJ1Y3RUcmVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITA7dmFyIHQsZT1bXSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO2lmKHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTpuLHJlYXNvbjpuZXcgRXJyb3IoIlBhZ2Ugd2FzIGRlc3Ryb3llZC4iKSxmb3JjZTohMH0pLCFuLm9wTGlzdFJlYWRDYXBhYmlsaXR5KXt2YXIgaSxhPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG4ucmVuZGVyVGFza3MpO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOyl7dmFyIG89aS52YWx1ZTtlLnB1c2goby5jb21wbGV0ZWQpLG8uY2FuY2VsKCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMub2Jqcy5jbGVhcigpO3ZhciBzLGw9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXMudmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsUHJvbWlzZS5hbGwoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cCh0KX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMucGVuZGluZ0NsZWFudXApcmV0dXJuITE7dmFyIGUscj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPW4ucmVuZGVyVGFza3MsYT1uLm9wZXJhdG9yTGlzdDtpZihpLnNpemU+MHx8IWEubGFzdENodW5rKXJldHVybiExfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKSx0aGlzLm9ianMuY2xlYXIoKSx0JiZ0aGlzLl9zdGF0cyYmKHRoaXMuX3N0YXRzPW5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIpO3ZhciBvLHM9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KW8udmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsITB9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGUpO2kmJihudWxsPT09KHI9dGhpcy5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIlBhZ2UgUmVxdWVzdCIpLG51bGw9PT0obj1pLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpfHx2b2lkIDA9PT1ufHxuLnJlc29sdmUodCkpfX0se2tleToiX3JlbmRlclBhZ2VDaHVuayIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKHQuZm5BcnJheVtyXSksZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbcl0pO2Uub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz10Lmxhc3RDaHVuayxlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cz10LnNlcGFyYXRlQW5ub3RzO3ZhciBpLGE9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5yZW5kZXJUYXNrcyk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXQubGFzdENodW5rJiZ0aGlzLl90cnlDbGVhbnVwKCl9fSx7a2V5OiJfcHVtcE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucmVuZGVyaW5nSW50ZW50LG49dC5jYWNoZUtleSxpPXQuYW5ub3RhdGlvblN0b3JhZ2VNYXAsYT10aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsaW50ZW50OnIsY2FjaGVLZXk6bixhbm5vdGF0aW9uU3RvcmFnZTppfSkuZ2V0UmVhZGVyKCksbz10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO28uc3RyZWFtUmVhZGVyPWEsZnVuY3Rpb24gdCgpe2EucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBuPXIudmFsdWU7ci5kb25lP28uc3RyZWFtUmVhZGVyPW51bGw6ZS5fdHJhbnNwb3J0LmRlc3Ryb3llZHx8KGUuX3JlbmRlclBhZ2VDaHVuayhuLG8pLHQoKSl9KSwoZnVuY3Rpb24odCl7aWYoby5zdHJlYW1SZWFkZXI9bnVsbCwhZS5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7aWYoby5vcGVyYXRvckxpc3Qpe28ub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz0hMDt2YXIgcixuPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8ucmVuZGVyVGFza3MpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLm9wZXJhdG9yTGlzdENoYW5nZWQoKX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLl90cnlDbGVhbnVwKCl9aWYoby5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighby5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O28ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9KCl9fSx7a2V5OiJfYWJvcnRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmludGVudFN0YXRlLG49dC5yZWFzb24saT10LmZvcmNlLGE9dm9pZCAwIT09aSYmaTtpZihyLnN0cmVhbVJlYWRlcil7aWYoci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHIuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCksci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGwpLCFhKXtpZihyLnJlbmRlclRhc2tzLnNpemU+MClyZXR1cm47aWYobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbil7dmFyIG89UkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO3JldHVybiBuLmV4dHJhRGVsYXk+MCYmbi5leHRyYURlbGF5PDFlMyYmKG8rPW4uZXh0cmFEZWxheSksdm9pZChyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCxlLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6cixyZWFzb246bixmb3JjZTohMH0pfSksbykpfX1pZihyLnN0cmVhbVJlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKG4ubWVzc2FnZSkpLmNhdGNoKChmdW5jdGlvbigpe30pKSxyLnN0cmVhbVJlYWRlcj1udWxsLCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKXt2YXIgcyxsPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgdT1fc2xpY2VkVG9BcnJheShzLnZhbHVlLDIpLGM9dVswXTtpZih1WzFdPT09cil7dGhpcy5faW50ZW50U3RhdGVzLmRlbGV0ZShjKTticmVha319fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXRoaXMuY2xlYW51cCgpfX19fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzfX1dKSx0fSgpO2V4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTt2YXIgX2xpc3RlbmVycz1uZXcgV2Vha01hcCxfZGVmZXJyZWQ9bmV3IFdlYWtNYXAsTG9vcGJhY2tQb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2xpc3RlbmVycyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLF9kZWZlcnJlZCx7d3JpdGFibGU6ITAsdmFsdWU6UHJvbWlzZS5yZXNvbHZlKCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj17ZGF0YTpzdHJ1Y3R1cmVkQ2xvbmUodCxlKX07X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2RlZmVycmVkKS50aGVuKChmdW5jdGlvbigpe3ZhciB0LGU9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHIsX2xpc3RlbmVycykpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmNhbGwocixuKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19KSl9fSx7a2V5OiJhZGRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLnB1c2goZSl9fSx7a2V5OiJyZW1vdmVFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLmluZGV4T2YoZSk7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykuc3BsaWNlKHIsMSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykubGVuZ3RoPTB9fV0pLHR9KCk7ZXhwb3J0cy5Mb29wYmFja1BvcnQ9TG9vcGJhY2tQb3J0O3ZhciBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2lmKGV4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsLF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSlQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITAsUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz0iLi9wZGYud29ya2VyLmpzIjtlbHNlIGlmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/InVuZGVmaW5lZCI6X3R5cGVvZihkb2N1bWVudCkpKXt2YXIgX2RvY3VtZW50LF9kb2N1bWVudCRjdXJyZW50U2NyaSxwZGZqc0ZpbGVQYXRoPW51bGw9PT0oX2RvY3VtZW50PWRvY3VtZW50KXx8dm9pZCAwPT09X2RvY3VtZW50fHxudWxsPT09KF9kb2N1bWVudCRjdXJyZW50U2NyaT1fZG9jdW1lbnQuY3VycmVudFNjcmlwdCl8fHZvaWQgMD09PV9kb2N1bWVudCRjdXJyZW50U2NyaT92b2lkIDA6X2RvY3VtZW50JGN1cnJlbnRTY3JpLnNyYztwZGZqc0ZpbGVQYXRoJiYoUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz1wZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcLig/Om1pblwuKT9qcykoXD8uKik/JC9pLCIud29ya2VyJDEkMiIpKX1QREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbj1mdW5jdGlvbih0LGUpe3ZhciByO3RyeXtpZighKHI9bmV3IFVSTCh0KSkub3JpZ2lufHwibnVsbCI9PT1yLm9yaWdpbilyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgbj1uZXcgVVJMKGUscik7cmV0dXJuIHIub3JpZ2luPT09bi5vcmlnaW59LFBERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgZT0naW1wb3J0U2NyaXB0cygiJy5jb25jYXQodCwnIik7Jyk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdKSl9O3ZhciBQREZXb3JrZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQREZXb3JrZXIoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10Lm5hbWUscj12b2lkIDA9PT1lP251bGw6ZSxuPXQucG9ydCxpPXZvaWQgMD09PW4/bnVsbDpuLGE9dC52ZXJib3NpdHksbz12b2lkIDA9PT1hPygwLF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpOmE7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsUERGV29ya2VyKSxpJiZfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlcixQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO2lmKHRoaXMubmFtZT1yLHRoaXMuZGVzdHJveWVkPSExLHRoaXMudmVyYm9zaXR5PW8sdGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl93ZWJXb3JrZXI9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsLGkpcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLFBERldvcmtlcixfd29ya2VyUG9ydHMpLnNldChpLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KGkpO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKFBERldvcmtlcixbe2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToicG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnR9fSx7a2V5OiJtZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2VIYW5kbGVyfX0se2tleToiX2luaXRpYWxpemVGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcG9ydD10LHRoaXMuX21lc3NhZ2VIYW5kbGVyPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKCJtYWluIiwid29ya2VyIix0KSx0aGlzLl9tZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLChmdW5jdGlvbigpe30pKSx0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe3ZhciBlPVBERldvcmtlci53b3JrZXJTcmM7dHJ5e1BERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGUpfHwoZT1QREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIobmV3IFVSTChlLHdpbmRvdy5sb2NhdGlvbikuaHJlZikpO3ZhciByPW5ldyBXb3JrZXIoZSksbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsciksaT1mdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4uZGVzdHJveSgpLHIudGVybWluYXRlKCksdC5kZXN0cm95ZWQ/dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnQuX3NldHVwRmFrZVdvcmtlcigpfSxhPWZ1bmN0aW9uKCl7dC5fd2ViV29ya2VyfHxpKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4ub24oInRlc3QiLChmdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZD9pKCk6ZT8odC5fbWVzc2FnZUhhbmRsZXI9bix0Ll9wb3J0PXIsdC5fd2ViV29ya2VyPXIsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pKToodC5fc2V0dXBGYWtlV29ya2VyKCksbi5kZXN0cm95KCksci50ZXJtaW5hdGUoKSl9KSksbi5vbigicmVhZHkiLChmdW5jdGlvbihlKXtpZihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZClpKCk7ZWxzZSB0cnl7bygpfWNhdGNoKGUpe3QuX3NldHVwRmFrZVdvcmtlcigpfX0pKTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5O24uc2VuZCgidGVzdCIsdCxbdC5idWZmZXJdKX07cmV0dXJuIHZvaWQgbygpfWNhdGNoKHQpeygwLF91dGlsLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWR8fCgoMCxfdXRpbC53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITApLFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQuZGVzdHJveWVkKXQuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtlbHNle3ZhciByPW5ldyBMb29wYmFja1BvcnQ7dC5fcG9ydD1yO3ZhciBuPSJmYWtlIi5jb25jYXQoUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyksaT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuKyJfd29ya2VyIixuLHIpO2Uuc2V0dXAoaSxyKTt2YXIgYT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuLG4rIl93b3JrZXIiLHIpO3QuX21lc3NhZ2VIYW5kbGVyPWEsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxhLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJy5jb25jYXQoZS5tZXNzYWdlLCciLicpKSl9KSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3dlYldvcmtlciYmKHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93ZWJXb3JrZXI9bnVsbCksX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChQREZXb3JrZXIsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXR8fCF0LnBvcnQpdGhyb3cgbmV3IEVycm9yKCJQREZXb3JrZXIuZnJvbVBvcnQgLSBpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUuIik7cmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcyxQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXModC5wb3J0KT9fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX19LHtrZXk6IndvcmtlclNyYyIsZ2V0OmZ1bmN0aW9uKCl7aWYoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKXJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYobnVsbCE9PVBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMpcmV0dXJuIF9pc19ub2RlLmlzTm9kZUpTfHwoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgnTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyksUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYzt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfX0se2tleToiX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0O3JldHVybihudWxsPT09KHQ9Z2xvYmFsVGhpcy5wZGZqc1dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuV29ya2VyTWVzc2FnZUhhbmRsZXIpfHxudWxsfWNhdGNoKHQpe3JldHVybiBudWxsfX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgX3RoaXMxMD10aGlzLGxvYWRlcj1mdW5jdGlvbigpe3ZhciBfcmVmMTU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIF9jYWxsZWUzKCl7dmFyIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcix3b3JrZXI7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKXtmb3IoOzspc3dpdGNoKF9jb250ZXh0My5wcmV2PV9jb250ZXh0My5uZXh0KXtjYXNlIDA6aWYobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyPV90aGlzMTAuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciwhbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKXtfY29udGV4dDMubmV4dD0zO2JyZWFrfXJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7Y2FzZSAzOmlmKCFfaXNfbm9kZS5pc05vZGVKU3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHJlcXVpcmUpe19jb250ZXh0My5uZXh0PTY7YnJlYWt9cmV0dXJuIHdvcmtlcj1ldmFsKCJyZXF1aXJlIikoX3RoaXMxMC53b3JrZXJTcmMpLF9jb250ZXh0My5hYnJ1cHQoInJldHVybiIsd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtjYXNlIDY6cmV0dXJuIF9jb250ZXh0My5uZXh0PTgsKDAsX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkoX3RoaXMxMC53b3JrZXJTcmMpO2Nhc2UgODpyZXR1cm4gX2NvbnRleHQzLmFicnVwdCgicmV0dXJuIix3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXIpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIF9jb250ZXh0My5zdG9wKCl9fSksX2NhbGxlZTMpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3JlZjE1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJfc2V0dXBGYWtlV29ya2VyR2xvYmFsIixsb2FkZXIoKSl9fV0pLFBERldvcmtlcn0oKTtleHBvcnRzLlBERldvcmtlcj1QREZXb3JrZXI7dmFyIF93b3JrZXJQb3J0cz17d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdlYWtNYXB9LF9kb2NTdGF0cz1uZXcgV2Vha01hcCxfcGFnZUNhY2hlPW5ldyBXZWFrTWFwLF9wYWdlUHJvbWlzZXM9bmV3IFdlYWtNYXAsX21ldGFkYXRhUHJvbWlzZT1uZXcgV2Vha01hcCxXb3JrZXJUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2RvY1N0YXRzLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZUNhY2hlLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZVByb21pc2VzLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfbWV0YWRhdGFQcm9taXNlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5tZXNzYWdlSGFuZGxlcj1lLHRoaXMubG9hZGluZ1Rhc2s9cix0aGlzLmNvbW1vbk9ianM9bmV3IFBERk9iamVjdHMsdGhpcy5mb250TG9hZGVyPW5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7b25VbnN1cHBvcnRlZEZlYXR1cmU6dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxvd25lckRvY3VtZW50Omkub3duZXJEb2N1bWVudCxzdHlsZUVsZW1lbnQ6aS5zdHlsZUVsZW1lbnR9KSx0aGlzLl9wYXJhbXM9aSxpLnVzZVdvcmtlckZldGNofHwodGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgaS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDppLmNNYXBVcmwsaXNDb21wcmVzc2VkOmkuY01hcFBhY2tlZH0pLHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9bmV3IGkuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkoe2Jhc2VVcmw6aS5zdGFuZGFyZEZvbnREYXRhVXJsfSkpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX12YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFubm90YXRpb25TdG9yYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9kb2NTdGF0cyl9fSx7a2V5OiJnZXRSZW5kZXJpbmdJbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10saT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksYT1udWxsO3N3aXRjaCh0KXtjYXNlImFueSI6aT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWTticmVhaztjYXNlImRpc3BsYXkiOmJyZWFrO2Nhc2UicHJpbnQiOmk9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDticmVhaztkZWZhdWx0OigwLF91dGlsLndhcm4pKCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogIi5jb25jYXQodCkpfXN3aXRjaChlKXtjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6aSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFO2JyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmJyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOmkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVM7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRTphPSgoaSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFKSZfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UJiZyIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlP3I6dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSkuc2VyaWFsaXphYmxlO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICIuY29uY2F0KGUpKX1yZXR1cm4gbiYmKGkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKSx7cmVuZGVyaW5nSW50ZW50OmksY2FjaGVLZXk6IiIuY29uY2F0KGksIl8iKS5jb25jYXQoX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKGEpKSxhbm5vdGF0aW9uU3RvcmFnZU1hcDphfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkmJnRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFjayIpKTt2YXIgZSxyPVtdLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtyLnB1c2goaS5fZGVzdHJveSgpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfcGFnZVByb21pc2VzKS5jbGVhcigpLHRoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO3ZhciBhPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiByLnB1c2goYSksUHJvbWlzZS5hbGwocikudGhlbigoZnVuY3Rpb24oKXt0LmNvbW1vbk9ianMuY2xlYXIoKSx0LmZvbnRMb2FkZXIuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfbWV0YWRhdGFQcm9taXNlLG51bGwpLHQuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbCx0Ll9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGwsdC5fbmV0d29ya1N0cmVhbSYmdC5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSksdC5tZXNzYWdlSGFuZGxlciYmKHQubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLHQubWVzc2FnZUhhbmRsZXI9bnVsbCksdC5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5tZXNzYWdlSGFuZGxlcixyPXRoaXMubG9hZGluZ1Rhc2s7ZS5vbigiR2V0UmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIiksdC5fZnVsbFJlYWRlcj10Ll9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKSx0Ll9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dC5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH19LHIub25QdWxsPWZ1bmN0aW9uKCl7dC5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKSxyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoZSksMSxbZV0pKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ci5lcnJvcih0KX0pKX0sci5vbkNhbmNlbD1mdW5jdGlvbihlKXt0Ll9mdWxsUmVhZGVyLmNhbmNlbChlKSxyLnJlYWR5LmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5kZXN0cm95ZWQpdGhyb3cgZX0pKX19KSksZS5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwoZnVuY3Rpb24oZSl7dmFyIG49KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10Ll9mdWxsUmVhZGVyO3JldHVybiBpLmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe3ZhciBlO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJmkuaXNSYW5nZVN1cHBvcnRlZHx8KHQuX2xhc3RQcm9ncmVzcyYmKG51bGw9PT0oZT1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwocix0Ll9sYXN0UHJvZ3Jlc3MpKSxpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXIub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbChyLHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDppLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6aS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6aS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSkpLGUub24oIkdldFJhbmdlUmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt2YXIgbj10Ll9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO24/KHIub25QdWxsPWZ1bmN0aW9uKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpLHIuZW5xdWV1ZShuZXcgVWludDhBcnJheShlKSwxLFtlXSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVycm9yKHQpfSkpfSxyLm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe24uY2FuY2VsKGUpLHIucmVhZHkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCF0LmRlc3Ryb3llZCl0aHJvdyBlfSkpfSk6ci5jbG9zZSgpfSkpLGUub24oIkdldERvYyIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUucGRmSW5mbzt0Ll9udW1QYWdlcz1uLm51bVBhZ2VzLHQuX2h0bWxGb3JYZmE9bi5odG1sRm9yWGZhLGRlbGV0ZSBuLmh0bWxGb3JYZmEsci5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KG4sdCkpfSkpLGUub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe3ZhciBlO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOmU9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjplPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfXIuX2NhcGFiaWxpdHkucmVqZWN0KGUpfSkpLGUub24oIlBhc3N3b3JkUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe2lmKHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyLm9uUGFzc3dvcmQpdHJ5e3Iub25QYXNzd29yZCgoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3QuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZSk6dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOmV9KX0pLGUuY29kZSl9Y2F0Y2goZSl7dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChlKX1lbHNlIHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpKTtyZXR1cm4gdC5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2V9KSksZS5vbigiRGF0YUxvYWRlZCIsKGZ1bmN0aW9uKGUpe3ZhciBuO251bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSksZS5vbigiU3RhcnRSZW5kZXJQYWdlIiwoZnVuY3Rpb24oZSl7dC5kZXN0cm95ZWR8fF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0LF9wYWdlQ2FjaGUpLmdldChlLnBhZ2VJbmRleCkuX3N0YXJ0UmVuZGVyUGFnZShlLnRyYW5zcGFyZW5jeSxlLmNhY2hlS2V5KX0pKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbihyKXt2YXIgbixpPV9zbGljZWRUb0FycmF5KHIsMyksYT1pWzBdLG89aVsxXSxzPWlbMl07aWYoIXQuZGVzdHJveWVkJiYhdC5jb21tb25PYmpzLmhhcyhhKSlzd2l0Y2gobyl7Y2FzZSJGb250Ijp2YXIgbD10Ll9wYXJhbXM7aWYoImVycm9yImluIHMpe3ZhciB1PXMuZXJyb3I7KDAsX3V0aWwud2FybikoIkVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICIuY29uY2F0KHUpKSx0LmNvbW1vbk9ianMucmVzb2x2ZShhLHUpO2JyZWFrfXZhciBjPW51bGw7bC5wZGZCdWcmJm51bGwhPT0obj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpJiZ2b2lkIDAhPT1uJiZuLmVuYWJsZWQmJihjPXtyZWdpc3RlckZvbnQ6ZnVuY3Rpb24odCxlKXtnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKHQsZSl9fSk7dmFyIGg9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChzLHtpc0V2YWxTdXBwb3J0ZWQ6bC5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOmwuZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpsLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0Ll9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHQpLGZvbnRSZWdpc3RyeTpjfSk7dC5mb250TG9hZGVyLmJpbmQoaCkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbmRXaXRoUHJvbWlzZSgiRm9udEZhbGxiYWNrIix7aWQ6YX0pfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7IWwuZm9udEV4dHJhUHJvcGVydGllcyYmaC5kYXRhJiYoaC5kYXRhPW51bGwpLHQuY29tbW9uT2Jqcy5yZXNvbHZlKGEsaCl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6Y2FzZSJJbWFnZSI6dC5jb21tb25PYmpzLnJlc29sdmUoYSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19KSksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7dmFyIHI9X3NsaWNlZFRvQXJyYXkoZSw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxvPXJbM107aWYoIXQuZGVzdHJveWVkKXt2YXIgcz1fY2xhc3NQcml2YXRlRmllbGRHZXQodCxfcGFnZUNhY2hlKS5nZXQoaSk7aWYoIXMub2Jqcy5oYXMobikpc3dpdGNoKGEpe2Nhc2UiSW1hZ2UiOmlmKHMub2Jqcy5yZXNvbHZlKG4sbyksbyl7dmFyIGw7aWYoby5iaXRtYXApe3ZhciB1PW8uYml0bWFwO2w9by53aWR0aCpvLmhlaWdodCo0LHMuX2JpdG1hcHMuYWRkKHUpfWVsc2V7dmFyIGM7bD0obnVsbD09PShjPW8uZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMubGVuZ3RoKXx8MH1sPjhlNiYmKHMuY2xlYW51cEFmdGVyUmVuZGVyPSEwKX1icmVhaztjYXNlIlBhdHRlcm4iOnMub2Jqcy5yZXNvbHZlKG4sbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkdvdCB1bmtub3duIG9iamVjdCB0eXBlICIuY29uY2F0KGEpKX19fSkpLGUub24oIkRvY1Byb2dyZXNzIiwoZnVuY3Rpb24oZSl7dmFyIG47dC5kZXN0cm95ZWR8fG51bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pKSxlLm9uKCJEb2NTdGF0cyIsKGZ1bmN0aW9uKGUpe3QuZGVzdHJveWVkfHxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfZG9jU3RhdHMsT2JqZWN0LmZyZWV6ZSh7c3RyZWFtVHlwZXM6T2JqZWN0LmZyZWV6ZShlLnN0cmVhbVR5cGVzKSxmb250VHlwZXM6T2JqZWN0LmZyZWV6ZShlLmZvbnRUeXBlcyl9KSl9KSksZS5vbigiVW5zdXBwb3J0ZWRGZWF0dXJlIix0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpKSxlLm9uKCJGZXRjaEJ1aWx0SW5DTWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuQ01hcFJlYWRlckZhY3Rvcnk/dC5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSksZS5vbigiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk/dC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlN0YW5kYXJkRm9udERhdGFGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSl9fSx7a2V5OiJfb25VbnN1cHBvcnRlZEZlYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LmZlYXR1cmVJZDt0aGlzLmRlc3Ryb3llZHx8bnVsbD09PShlPShyPXRoaXMubG9hZGluZ1Rhc2spLm9uVW5zdXBwb3J0ZWRGZWF0dXJlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHIsbil9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJzYXZlRG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7cmV0dXJuIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2l6ZTw9MCYmKDAsX3V0aWwud2FybikoInNhdmVEb2N1bWVudCBjYWxsZWQgd2hpbGUgYGFubm90YXRpb25TdG9yYWdlYCBpcyBlbXB0eSwgcGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTpudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZWFkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmZpbGVuYW1lKSYmdm9pZCAwIT09dD90Om51bGx9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpfSkpfX0se2tleToiZ2V0UGFnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7dmFyIHI9dC0xLG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VQcm9taXNlcykuZ2V0KHIpO2lmKG4pcmV0dXJuIG47dmFyIGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6cn0pLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IGRlc3Ryb3llZCIpO3ZhciBuPW5ldyBQREZQYWdlUHJveHkocix0LGUsZS5fcGFyYW1zLm93bmVyRG9jdW1lbnQsZS5fcGFyYW1zLnBkZkJ1Zyk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChlLF9wYWdlQ2FjaGUpLnNldChyLG4pLG59KSk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9wYWdlUHJvbWlzZXMpLnNldChyLGkpLGl9fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT09X3R5cGVvZih0KXx8bnVsbD09PXR8fCFOdW1iZXIuaXNJbnRlZ2VyKHQubnVtKXx8dC5udW08MHx8IU51bWJlci5pc0ludGVnZXIodC5nZW4pfHx0LmdlbjwwP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VJbmRleCIse251bTp0Lm51bSxnZW46dC5nZW59KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLHtwYWdlSW5kZXg6dCxpbnRlbnQ6ZX0pfX0se2tleToiZ2V0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlfHwodGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZT10aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RmllbGRPYmplY3RzIixudWxsKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0pTQWN0aW9uc1Byb21pc2V8fCh0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJIYXNKU0FjdGlvbnMiLG51bGwpKX19LHtrZXk6ImdldENhbGN1bGF0aW9uT3JkZXJJZHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDp0fSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTGF5b3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxheW91dCIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldFZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLG51bGwpfX0se2tleToiZ2V0T3BlbkFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE9wZW5BY3Rpb24iLG51bGwpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRBdHRhY2htZW50cyIsbnVsbCl9fSx7a2V5OiJnZXRKYXZhU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0SmF2YVNjcmlwdCIsbnVsbCl9fSx7a2V5OiJnZXREb2NKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREb2NKU0FjdGlvbnMiLG51bGwpfX0se2tleToiZ2V0UGFnZUpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIix7cGFnZUluZGV4OnR9KX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0U3RydWN0VHJlZSIse3BhZ2VJbmRleDp0fSl9fSx7a2V5OiJnZXRPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3V0bGluZSIsbnVsbCl9fSx7a2V5OiJnZXRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KX0pKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSl8fF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9tZXRhZGF0YVByb21pc2UsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcixuLGksYTtyZXR1cm57aW5mbzplWzBdLG1ldGFkYXRhOmVbMV0/bmV3IF9tZXRhZGF0YS5NZXRhZGF0YShlWzFdKTpudWxsLGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOm51bGwhPT0ocj1udWxsPT09KG49dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsZW5hbWUpJiZ2b2lkIDAhPT1yP3I6bnVsbCxjb250ZW50TGVuZ3RoOm51bGwhPT0oaT1udWxsPT09KGE9dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29udGVudExlbmd0aCkmJnZvaWQgMCE9PWk/aTpudWxsfX0pKSl9fSx7a2V5OiJnZXRNYXJrSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1hcmtJbmZvIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxhPWFyZ3VtZW50cztyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKGU9YS5sZW5ndGg+MCYmdm9pZCAwIT09YVswXSYmYVswXSwhdGhpcy5kZXN0cm95ZWQpe3QubmV4dD0zO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsbnVsbCk7Y2FzZSA1OnI9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpLHQucHJldj02LHIucygpO2Nhc2UgODppZigobj1yLm4oKSkuZG9uZSl7dC5uZXh0PTE1O2JyZWFrfWlmKChpPW4udmFsdWUpLmNsZWFudXAoKSl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBFcnJvcigic3RhcnRDbGVhbnVwOiBQYWdlICIuY29uY2F0KGkucGFnZU51bWJlciwiIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIikpO2Nhc2UgMTM6dC5uZXh0PTg7YnJlYWs7Y2FzZSAxNTp0Lm5leHQ9MjA7YnJlYWs7Y2FzZSAxNzp0LnByZXY9MTcsdC50MD10LmNhdGNoKDYpLHIuZSh0LnQwKTtjYXNlIDIwOnJldHVybiB0LnByZXY9MjAsci5mKCksdC5maW5pc2goMjApO2Nhc2UgMjM6dGhpcy5jb21tb25PYmpzLmNsZWFyKCksZXx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSxudWxsKSx0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlPW51bGwsdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZT1udWxsO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s2LDE3LDIwLDIzXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJsb2FkaW5nUGFyYW1zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fV0pLHR9KCksX29ianM9bmV3IFdlYWtNYXAsX2Vuc3VyZU9iaj1uZXcgV2Vha1NldCxQREZPYmplY3RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLF9lbnN1cmVPYmopLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29ianMse3dyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5jcmVhdGUobnVsbCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoZSl7dmFyIHI9X2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLF9lbnN1cmVPYmosX2Vuc3VyZU9iajIpLmNhbGwodGhpcyx0KTtyZXR1cm4gci5jYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZShyLmRhdGEpfSkpLG51bGx9dmFyIG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO2lmKG51bGw9PW58fCFuLmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICIuY29uY2F0KHQsIi4iKSk7cmV0dXJuIG4uZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO3JldHVybihudWxsPT1lP3ZvaWQgMDplLmNhcGFiaWxpdHkuc2V0dGxlZCl8fCExfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1fY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsX2Vuc3VyZU9iaixfZW5zdXJlT2JqMikuY2FsbCh0aGlzLHQpO3IuZGF0YT1lLHIuY2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcyxfb2JqcyxPYmplY3QuY3JlYXRlKG51bGwpKX19XSksdH0oKTtmdW5jdGlvbiBfZW5zdXJlT2JqMih0KXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdfHwoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfXZhciBfaW50ZXJuYWxSZW5kZXJUYXNrPW5ldyBXZWFrTWFwLFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2ludGVybmFsUmVuZGVyVGFzayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2ssZSksdGhpcy5vbkNvbnRpbnVlPW51bGx9cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJwcm9taXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2ludGVybmFsUmVuZGVyVGFzaykuY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLmNhbmNlbChudWxsLHQpfX0se2tleToic2VwYXJhdGVBbm5vdHMiLGdldDpmdW5jdGlvbigpe3ZhciB0PV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cztpZighdClyZXR1cm4hMTt2YXIgZT1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfaW50ZXJuYWxSZW5kZXJUYXNrKS5hbm5vdGF0aW9uQ2FudmFzTWFwO3JldHVybiB0LmZvcm18fHQuY2FudmFzJiYobnVsbD09ZT92b2lkIDA6ZS5zaXplKT4wfX1dKSx0fSgpO2V4cG9ydHMuUmVuZGVyVGFzaz1SZW5kZXJUYXNrO3ZhciBJbnRlcm5hbFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUuY2FsbGJhY2ssbj1lLnBhcmFtcyxpPWUub2JqcyxhPWUuY29tbW9uT2JqcyxvPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxzPWUub3BlcmF0b3JMaXN0LGw9ZS5wYWdlSW5kZXgsdT1lLmNhbnZhc0ZhY3RvcnksYz1lLnVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSxoPXZvaWQgMCE9PWMmJmMsZj1lLnBkZkJ1ZyxkPXZvaWQgMCE9PWYmJmYscD1lLnBhZ2VDb2xvcnMsdj12b2lkIDA9PT1wP251bGw6cDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5wYXJhbXM9bix0aGlzLm9ianM9aSx0aGlzLmNvbW1vbk9ianM9YSx0aGlzLmFubm90YXRpb25DYW52YXNNYXA9byx0aGlzLm9wZXJhdG9yTGlzdElkeD1udWxsLHRoaXMub3BlcmF0b3JMaXN0PXMsdGhpcy5fcGFnZUluZGV4PWwsdGhpcy5jYW52YXNGYWN0b3J5PXUsdGhpcy5fcGRmQnVnPWQsdGhpcy5wYWdlQ29sb3JzPXYsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnRhc2s9bmV3IFJlbmRlclRhc2sodGhpcyksdGhpcy5fY2FuY2VsQm91bmQ9dGhpcy5jYW5jZWwuYmluZCh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBsZXRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX19LHtrZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUudHJhbnNwYXJlbmN5LGE9dm9pZCAwIT09aSYmaSxvPWUub3B0aW9uYWxDb250ZW50Q29uZmlnO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmbnVsbCE9PShyPWdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpJiZ2b2lkIDAhPT1yJiZyLmVuYWJsZWQmJih0aGlzLnN0ZXBwZXI9Z2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgcz10aGlzLnBhcmFtcyxsPXMuY2FudmFzQ29udGV4dCx1PXMudmlld3BvcnQsYz1zLnRyYW5zZm9ybSxoPXMuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhsLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHtvcHRpb25hbENvbnRlbnRDb25maWc6b30sdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyksdGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06Yyx2aWV3cG9ydDp1LHRyYW5zcGFyZW5jeTphLGJhY2tncm91bmQ6aH0pLHRoaXMub3BlcmF0b3JMaXN0SWR4PTAsdGhpcy5ncmFwaGljc1JlYWR5PSEwLG51bGw9PT0obj10aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayl8fHZvaWQgMD09PW58fG4uY2FsbCh0aGlzKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3RoaXMucnVubmluZz0hMSx0aGlzLmNhbmNlbGxlZD0hMCxudWxsPT09KGU9dGhpcy5nZngpfHx2b2lkIDA9PT1lfHxlLmVuZERyYXdpbmcoKSx0aGlzLl9jYW52YXMmJl9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodCx0LF9jYW52YXNJblVzZSkuZGVsZXRlKHRoaXMuX2NhbnZhcyksdGhpcy5jYWxsYmFjayhyfHxuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMuX3BhZ2VJbmRleCsxKSwiY2FudmFzIixuKSl9fSx7a2V5OiJvcGVyYXRvckxpc3RDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZ3JhcGhpY3NSZWFkeT8obnVsbD09PSh0PXRoaXMuc3RlcHBlcil8fHZvaWQgMD09PXR8fHQudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KSx0aGlzLnJ1bm5pbmd8fHRoaXMuX2NvbnRpbnVlKCkpOnRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9fSx7a2V5OiJfY29udGludWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX19LHtrZXk6Il9zY2hlZHVsZU5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Ll9uZXh0Qm91bmQoKS5jYXRjaCh0Ll9jYW5jZWxCb3VuZCl9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKX19LHtrZXk6Il9uZXh0Iix2YWx1ZTooZT1fYXN5bmNUb0dlbmVyYXRvcihfcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LHQsX2NhbnZhc0luVXNlKS5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCksX2NhbnZhc0luVXNlPXt3cml0YWJsZTohMCx2YWx1ZTpuZXcgV2Vha1NldH0sdmVyc2lvbj0iMy4yLjAiO2V4cG9ydHMudmVyc2lvbj12ZXJzaW9uO3ZhciBidWlsZD0iIjtleHBvcnRzLmJ1aWxkPWJ1aWxkfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QcmludEFubm90YXRpb25TdG9yYWdlPWUuQW5ub3RhdGlvblN0b3JhZ2U9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNSksbz1yKDEzOSk7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0scyh0LGUpfWZ1bmN0aW9uIGwodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LHUodCl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUscil7Zyh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gZyh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx3KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwodCk6ZS52YWx1ZX0odCx3KHQsZSwiZ2V0IikpfWZ1bmN0aW9uIHcodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIityKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQodCl9dmFyIEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrU2V0LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU7cCh0aGlzLHQpLGcodGhpcyxlPVMpLGUuYWRkKHRoaXMpLG0odGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLG0odGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5vblNldE1vZGlmaWVkPW51bGwsdGhpcy5vblJlc2V0TW9kaWZpZWQ9bnVsbCx0aGlzLm9uQW5ub3RhdGlvbkVkaXRvcj1udWxsfXJldHVybiB5KHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV8odGhpcyxrKS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXI/ZTpPYmplY3QuYXNzaWduKGUscil9fSx7a2V5OiJnZXRSYXdWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIF8odGhpcyxrKS5nZXQodCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKF8odGhpcyxrKS5kZWxldGUodCksMD09PV8odGhpcyxrKS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe3ZhciBlLHI9aChfKHRoaXMsaykudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOylpZihlLnZhbHVlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yKXJldHVybn1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLm9uQW5ub3RhdGlvbkVkaXRvcihudWxsKX19fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1fKHRoaXMsaykuZ2V0KHQpLG49ITE7aWYodm9pZCAwIT09cilmb3IodmFyIGk9MCxvPU9iamVjdC5lbnRyaWVzKGUpO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1jKG9baV0sMiksbD1zWzBdLHU9c1sxXTtyW2xdIT09dSYmKG49ITAscltsXT11KX1lbHNlIG49ITAsXyh0aGlzLGspLnNldCh0LGUpO24mJmZ1bmN0aW9uKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfSh0aGlzLFMsRSkuY2FsbCh0aGlzKSxlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3ImJnRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKGUuY29uc3RydWN0b3IuX3R5cGUpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh0aGlzLGspLmhhcyh0KX19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLGspLnNpemU+MD8oMCxpLm9iamVjdEZyb21NYXApKF8odGhpcyxrKSk6bnVsbH19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMsaykuc2l6ZX19LHtrZXk6InJlc2V0TW9kaWZpZWQiLHZhbHVlOmZ1bmN0aW9uKCl7Xyh0aGlzLEEpJiYoYih0aGlzLEEsITEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCYmdGhpcy5vblJlc2V0TW9kaWZpZWQoKSl9fSx7a2V5OiJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMpfX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZigwPT09Xyh0aGlzLGspLnNpemUpcmV0dXJuIG51bGw7dmFyIHQsZT1uZXcgTWFwLHI9aChfKHRoaXMsaykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIG49Yyh0LnZhbHVlLDIpLGk9blswXSxvPW5bMV0scz1vIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yP28uc2VyaWFsaXplKCk6bztzJiZlLnNldChpLHMpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gZX19XSxbe2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dmFyIGUscj1uZXcgby5NdXJtdXJIYXNoM182NCxuPWgodCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1jKGUudmFsdWUsMiksYT1pWzBdLHM9aVsxXTtyLnVwZGF0ZSgiIi5jb25jYXQoYSwiOiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShzKSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gci5oZXhkaWdlc3QoKX19XSksdH0oKTtmdW5jdGlvbiBFKCl7Xyh0aGlzLEEpfHwoYih0aGlzLEEsITApLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQmJnRoaXMub25TZXRNb2RpZmllZCgpKX1lLkFubm90YXRpb25TdG9yYWdlPXg7dmFyIFA9bmV3IFdlYWtNYXAsVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmcyh0LGUpfShvLHQpO3ZhciBlLHIsYT0oZT1vLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIHQsaT11KGUpO2lmKHIpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7dD1SZWZsZWN0LmNvbnN0cnVjdChpLGFyZ3VtZW50cyxhKX1lbHNlIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09bihlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gbCh0KX0odGhpcyx0KX0pO2Z1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHAodGhpcyxvKSxtKGwoZT1hLmNhbGwodGhpcykpLFAse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxiKGwoZSksUCxzdHJ1Y3R1cmVkQ2xvbmUodC5zZXJpYWxpemFibGUpKSxlfXJldHVybiB5KG8sW3trZXk6InByaW50IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFByaW50QW5ub3RhdGlvblN0b3JhZ2UucHJpbnQiKX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyxQKX19XSksb30oeCk7ZS5QcmludEFubm90YXRpb25TdG9yYWdlPVR9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXIoMTM2KSxhPXIoMSk7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGMobi5rZXkpLG4pfX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4oZT1jKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGModCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGgodCxlLHIpeyFmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LHAodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHAodCxlLCJnZXQiKSl9ZnVuY3Rpb24gcCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgdj1uZXcgV2Vha01hcCx5PW5ldyBXZWFrTWFwLG09bmV3IFdlYWtNYXAsZz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLF89bmV3IFdlYWtNYXAsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksaCh0aGlzLHYse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNpbi5iaW5kKHRoaXMpfSksaCh0aGlzLHkse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNvdXQuYmluZCh0aGlzKX0pLGgodGhpcyxtLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxnLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHUodGhpcywiX3VpTWFuYWdlciIsbnVsbCksaCh0aGlzLF8se3dyaXRhYmxlOiEwLHZhbHVlOnQuX3pJbmRleCsrfSksdGhpcy5jb25zdHJ1Y3Rvcj09PXQmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBbm5vdGF0aW9uRWRpdG9yLiIpLHRoaXMucGFyZW50PWUucGFyZW50LHRoaXMuaWQ9ZS5pZCx0aGlzLndpZHRoPXRoaXMuaGVpZ2h0PW51bGwsdGhpcy5wYWdlSW5kZXg9ZS5wYXJlbnQucGFnZUluZGV4LHRoaXMubmFtZT1lLm5hbWUsdGhpcy5kaXY9bnVsbCx0aGlzLl91aU1hbmFnZXI9ZS51aU1hbmFnZXI7dmFyIHI9dGhpcy5wYXJlbnQudmlld3BvcnQsbj1yLnJvdGF0aW9uLGk9ci5yYXdEaW1zLHM9aS5wYWdlV2lkdGgsbD1pLnBhZ2VIZWlnaHQsYz1pLnBhZ2VYLGY9aS5wYWdlWTt0aGlzLnJvdGF0aW9uPW4sdGhpcy5wYWdlRGltZW5zaW9ucz1bcyxsXSx0aGlzLnBhZ2VUcmFuc2xhdGlvbj1bYyxmXTt2YXIgZD1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxwPWRbMF0sdz1kWzFdO3RoaXMueD1lLngvcCx0aGlzLnk9ZS55L3csdGhpcy5pc0F0dGFjaGVkVG9ET009ITF9dmFyIGUscixuO3JldHVybiBlPXQsbj1be2tleToiX2RlZmF1bHRMaW5lQ29sb3IiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfZGVmYXVsdExpbmVDb2xvciIsdGhpcy5fY29sb3JNYW5hZ2VyLmdldEhleENvZGUoIkNhbnZhc1RleHQiKSl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKSx1aU1hbmFnZXI6cn0pO24ucm90YXRpb249dC5yb3RhdGlvbjt2YXIgaT1vKG4ucGFnZURpbWVuc2lvbnMsMiksYT1pWzBdLHM9aVsxXSxsPW8obi5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCxzKSw0KSx1PWxbMF0sYz1sWzFdLGg9bFsyXSxmPWxbM107cmV0dXJuIG4ueD11L2Esbi55PWMvcyxuLndpZHRoPWgvYSxuLmhlaWdodD1mL3Msbn19XSwocj1be2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXJ9fSx7a2V5OiJzZXRJbkJhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PTB9fSx7a2V5OiJzZXRJbkZvcmVncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PWQodGhpcyxfKX19LHtrZXk6InNldFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbCE9PXQmJih0aGlzLnBhZ2VJbmRleD10LnBhZ2VJbmRleCx0aGlzLnBhZ2VEaW1lbnNpb25zPXQucGFnZURpbWVuc2lvbnMpLHRoaXMucGFyZW50PXR9fSx7a2V5OiJmb2N1c2luIix2YWx1ZTpmdW5jdGlvbih0KXtkKHRoaXMsbSk/Zih0aGlzLG0sITEpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpfX0se2tleToiZm9jdXNvdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXt2YXIgcj10LnJlbGF0ZWRUYXJnZXQ7bnVsbCE9ciYmci5jbG9zZXN0KCIjIi5jb25jYXQodGhpcy5pZCkpfHwodC5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPT0oZT10aGlzLnBhcmVudCkmJnZvaWQgMCE9PWUmJmUuaXNNdWx0aXBsZVNlbGVjdGlvbnx8dGhpcy5jb21taXRPclJlbW92ZSgpKX19fSx7a2V5OiJjb21taXRPclJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkoKT90aGlzLnJlbW92ZSgpOnRoaXMuY29tbWl0KCl9fSx7a2V5OiJjb21taXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9fSx7a2V5OiJhZGRUb0Fubm90YXRpb25TdG9yYWdlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpfX0se2tleToiZHJhZ3N0YXJ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudC5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zdGFydFg9dC5jbGllbnRYLWUueCx0aGlzLnN0YXJ0WT10LmNsaWVudFktZS55LHQuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRoaXMuaWQpLHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUifX0se2tleToic2V0QXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8odGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxzPWlbMV0sbD1vKHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24ocixuKSwyKTtyPWxbMF0sbj1sWzFdLHRoaXMueD0odCtyKS9hLHRoaXMueT0oZStuKS9zLHRoaXMuZGl2LnN0eWxlLmxlZnQ9IiIuY29uY2F0KDEwMCp0aGlzLngsIiUiKSx0aGlzLmRpdi5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCp0aGlzLnksIiUiKX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdLGE9byh0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSksMik7dD1hWzBdLGU9YVsxXSx0aGlzLngrPXQvbix0aGlzLnkrPWUvaSx0aGlzLmRpdi5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqdGhpcy54LCIlIiksdGhpcy5kaXYuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqdGhpcy55LCIlIil9fSx7a2V5OiJzY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5wYXJlbnRSb3RhdGlvbil7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19fSx7a2V5OiJwYXJlbnRTY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGV9fSx7a2V5OiJwYXJlbnRSb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbn19LHtrZXk6InBhcmVudERpbWVuc2lvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUsZT1vKHRoaXMucGFnZURpbWVuc2lvbnMsMik7cmV0dXJuW2VbMF0qdCxlWzFdKnRdfX0se2tleToic2V0RGltcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdO3RoaXMuZGl2LnN0eWxlLndpZHRoPSIiLmNvbmNhdCgxMDAqdC9uLCIlIiksdGhpcy5kaXYuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZS9pLCIlIil9fSx7a2V5OiJmaXhEaW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGl2LnN0eWxlLGU9dC5oZWlnaHQscj10LndpZHRoLG49ci5lbmRzV2l0aCgiJSIpLGk9ZS5lbmRzV2l0aCgiJSIpO2lmKCFufHwhaSl7dmFyIGE9byh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscz1hWzBdLGw9YVsxXTtufHwodC53aWR0aD0iIi5jb25jYXQoMTAwKnBhcnNlRmxvYXQocikvcywiJSIpKSxpfHwodC5oZWlnaHQ9IiIuY29uY2F0KDEwMCpwYXJzZUZsb2F0KGUpL2wsIiUiKSl9fX0se2tleToiZ2V0SW5pdGlhbFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblswLDBdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZGl0b3Itcm90YXRpb24iLCgzNjAtdGhpcy5yb3RhdGlvbiklMzYwKSx0aGlzLmRpdi5jbGFzc05hbWU9dGhpcy5uYW1lLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLDApLHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKTt2YXIgdD1vKHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCksMiksZT10WzBdLHI9dFsxXTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoZSxyKSwoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKSx0aGlzLmRpdn19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjOzAhPT10LmJ1dHRvbnx8dC5jdHJsS2V5JiZlP3QucHJldmVudERlZmF1bHQoKToodC5jdHJsS2V5JiYhZXx8dC5zaGlmdEtleXx8dC5tZXRhS2V5JiZlP3RoaXMucGFyZW50LnRvZ2dsZVNlbGVjdGVkKHRoaXMpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLGYodGhpcyxtLCEwKSl9fSx7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyZW50U2NhbGUsbj1vKHRoaXMucGFnZURpbWVuc2lvbnMsMiksaT1uWzBdLGE9blsxXSxzPW8odGhpcy5wYWdlVHJhbnNsYXRpb24sMiksbD1zWzBdLHU9c1sxXSxjPXQvcixoPWUvcixmPXRoaXMueCppLGQ9dGhpcy55KmEscD10aGlzLndpZHRoKmksdj10aGlzLmhlaWdodCphO3N3aXRjaCh0aGlzLnJvdGF0aW9uKXtjYXNlIDA6cmV0dXJuW2YrYytsLGEtZC1oLXYrdSxmK2MrcCtsLGEtZC1oK3VdO2Nhc2UgOTA6cmV0dXJuW2YraCtsLGEtZCtjK3UsZitoK3YrbCxhLWQrYytwK3VdO2Nhc2UgMTgwOnJldHVybltmLWMtcCtsLGEtZCtoK3UsZi1jK2wsYS1kK2grdit1XTtjYXNlIDI3MDpyZXR1cm5bZi1oLXYrbCxhLWQtYy1wK3UsZi1oK2wsYS1kLWMrdV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19fSx7a2V5OiJnZXRSZWN0SW5DdXJyZW50Q29vcmRzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW8odCw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxzPXJbM10sbD1hLW4sdT1zLWk7c3dpdGNoKHRoaXMucm90YXRpb24pe2Nhc2UgMDpyZXR1cm5bbixlLXMsbCx1XTtjYXNlIDkwOnJldHVybltuLGUtaSx1LGxdO2Nhc2UgMTgwOnJldHVyblthLGUtaSxsLHVdO2Nhc2UgMjcwOnJldHVyblthLGUtcyx1LGxdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fX0se2tleToib25jZUFkZGVkIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtmKHRoaXMsYiwhMCl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zih0aGlzLGIsITEpfX0se2tleToiaXNJbkVkaXRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsYil9fSx7a2V5OiJzaG91bGRHZXRLZXlib2FyZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6Im5lZWRzVG9CZVJlYnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2JiYhdGhpcy5pc0F0dGFjaGVkVG9ET019fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O251bGw9PT0odD10aGlzLmRpdil8fHZvaWQgMD09PXR8fHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxhLnVucmVhY2hhYmxlKSgiQW4gZWRpdG9yIG11c3QgYmUgc2VyaWFsaXphYmxlIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKSx0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKSx0aGlzLnBhcmVudC5yZW1vdmUodGhpcyl9fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe319LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImVuYWJsZUVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImlzRWRpdGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxnKX0sc2V0OmZ1bmN0aW9uKHQpe2YodGhpcyxnLHQpLHQ/KHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKSk6dGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKG51bGwpfX1dKSYmbChlLnByb3RvdHlwZSxyKSxuJiZsKGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLkFubm90YXRpb25FZGl0b3I9dyx1KHcsIl9jb2xvck1hbmFnZXIiLG5ldyBpLkNvbG9yTWFuYWdlciksdSh3LCJfekluZGV4IiwxKX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMCxlLmJpbmRFdmVudHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9XyhyKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7ZS5hZGRFdmVudExpc3RlbmVyKGEsdFthXS5iaW5kKHQpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fSxlLm9wYWNpdHlUb0hleD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMSwyNTUqdCkpKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEEodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx3KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybihlPXAoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx3KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7eSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHAobi5rZXkpLG4pfX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiB2KHQsZSxyKXt5KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB5KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LGIodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gYih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj13KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB3KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBBKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBrPW5ldyBXZWFrTWFwLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpLHYodGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTowfSl9cmV0dXJuIGQodCxbe2tleToiZ2V0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4iIi5jb25jYXQoaS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KS5jb25jYXQoKG0odGhpcyxrLCh0PWcodGhpcyxrKSxlPXQrKyx0KSksZSkpfX1dKSx0fSgpLHg9bmV3IFdlYWtNYXAsRT1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLFQ9bmV3IFdlYWtNYXAsQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTI4O2godGhpcyx0KSx2KHRoaXMseCx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2KHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2KHRoaXMsUCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdih0aGlzLFQse3dyaXRhYmxlOiEwLHZhbHVlOi0xfSksbSh0aGlzLFAsZSl9cmV0dXJuIGQodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNtZCxyPXQudW5kbyxuPXQubXVzdEV4ZWMsaT10LnR5cGUsYT12b2lkIDA9PT1pP05hTjppLG89dC5vdmVyd3JpdGVJZlNhbWVUeXBlLHM9dm9pZCAwIT09byYmbyxsPXQua2VlcFVuZG8sdT12b2lkIDAhPT1sJiZsO2lmKG4mJmUoKSwhZyh0aGlzLEUpKXt2YXIgYz17Y21kOmUsdW5kbzpyLHR5cGU6YX07aWYoLTE9PT1nKHRoaXMsVCkpcmV0dXJuIGcodGhpcyx4KS5sZW5ndGg+MCYmKGcodGhpcyx4KS5sZW5ndGg9MCksbSh0aGlzLFQsMCksdm9pZCBnKHRoaXMseCkucHVzaChjKTtpZihzJiZnKHRoaXMseClbZyh0aGlzLFQpXS50eXBlPT09YSlyZXR1cm4gdSYmKGMudW5kbz1nKHRoaXMseClbZyh0aGlzLFQpXS51bmRvKSx2b2lkKGcodGhpcyx4KVtnKHRoaXMsVCldPWMpO3ZhciBoPWcodGhpcyxUKSsxO2g9PT1nKHRoaXMsUCk/Zyh0aGlzLHgpLnNwbGljZSgwLDEpOihtKHRoaXMsVCxoKSxoPGcodGhpcyx4KS5sZW5ndGgmJmcodGhpcyx4KS5zcGxpY2UoaCkpLGcodGhpcyx4KS5wdXNoKGMpfX19LHtrZXk6InVuZG8iLHZhbHVlOmZ1bmN0aW9uKCl7LTEhPT1nKHRoaXMsVCkmJihtKHRoaXMsRSwhMCksZyh0aGlzLHgpW2codGhpcyxUKV0udW5kbygpLG0odGhpcyxFLCExKSxtKHRoaXMsVCxnKHRoaXMsVCktMSkpfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xJiYobSh0aGlzLFQsZyh0aGlzLFQpKzEpLG0odGhpcyxFLCEwKSxnKHRoaXMseClbZyh0aGlzLFQpXS5jbWQoKSxtKHRoaXMsRSwhMSkpfX0se2tleToiaGFzU29tZXRoaW5nVG9VbmRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi0xIT09Zyh0aGlzLFQpfX0se2tleToiaGFzU29tZXRoaW5nVG9SZWRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttKHRoaXMseCxudWxsKX19XSksdH0oKTtlLkNvbW1hbmRNYW5hZ2VyPUM7dmFyIE89bmV3IFdlYWtTZXQsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHUodGhpcyxPKSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmNhbGxiYWNrcz1uZXcgTWFwLHRoaXMuYWxsS2V5cz1uZXcgU2V0O3ZhciByLG49aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYyxhPV8oZSk7dHJ5e2ZvcihhLnMoKTshKHI9YS5uKCkpLmRvbmU7KXt2YXIgbyxzPWwoci52YWx1ZSwyKSxjPXNbMF0sZj1zWzFdLGQ9XyhjKTt0cnl7Zm9yKGQucygpOyEobz1kLm4oKSkuZG9uZTspe3ZhciBwPW8udmFsdWUsdj1wLnN0YXJ0c1dpdGgoIm1hYysiKTtuJiZ2Pyh0aGlzLmNhbGxiYWNrcy5zZXQocC5zbGljZSg0KSxmKSx0aGlzLmFsbEtleXMuYWRkKHAuc3BsaXQoIisiKS5hdCgtMSkpKTpufHx2fHwodGhpcy5jYWxsYmFja3Muc2V0KHAsZiksdGhpcy5hbGxLZXlzLmFkZChwLnNwbGl0KCIrIikuYXQoLTEpKSl9fWNhdGNoKHQpe2QuZSh0KX1maW5hbGx5e2QuZigpfX19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9fXJldHVybiBkKHQsW3trZXk6ImV4ZWMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpe3ZhciByPXRoaXMuY2FsbGJhY2tzLmdldChjKHRoaXMsTyxNKS5jYWxsKHRoaXMsZSkpO3ImJihyLmJpbmQodCkoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9fX1dKSx0fSgpO2Z1bmN0aW9uIE0odCl7dC5hbHRLZXkmJnRoaXMuYnVmZmVyLnB1c2goImFsdCIpLHQuY3RybEtleSYmdGhpcy5idWZmZXIucHVzaCgiY3RybCIpLHQubWV0YUtleSYmdGhpcy5idWZmZXIucHVzaCgibWV0YSIpLHQuc2hpZnRLZXkmJnRoaXMuYnVmZmVyLnB1c2goInNoaWZ0IiksdGhpcy5idWZmZXIucHVzaCh0LmtleSk7dmFyIGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg9MCxlfWUuS2V5Ym9hcmRNYW5hZ2VyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpfXJldHVybiBkKHQsW3trZXk6Il9jb2xvcnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBNYXAoW1siQ2FudmFzVGV4dCIsbnVsbF0sWyJDYW52YXMiLG51bGxdXSk7cmV0dXJuKDAsYS5nZXRDb2xvclZhbHVlcykodCksKDAsaS5zaGFkb3cpKHRoaXMsIl9jb2xvcnMiLHQpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHI9KDAsYS5nZXRSR0IpKGUpO2lmKCF3aW5kb3cubWF0Y2hNZWRpYSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5tYXRjaGVzKXJldHVybiByO3ZhciBuLGk9Xyh0aGlzLl9jb2xvcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bChuLnZhbHVlLDIpLHM9b1swXTtpZihvWzFdLmV2ZXJ5KChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09cltlXX0pKSlyZXR1cm4gdC5fY29sb3JzTWFwcGluZy5nZXQocyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfXJldHVybiByfX0se2tleToiZ2V0SGV4Q29kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxvKGUpKTp0fX1dKSx0fSgpO2UuQ29sb3JNYW5hZ2VyPVIscyhSLCJfY29sb3JzTWFwcGluZyIsbmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKSk7dmFyIEk9bmV3IFdlYWtNYXAsaj1uZXcgV2Vha01hcCxMPW5ldyBXZWFrTWFwLEQ9bmV3IFdlYWtNYXAsTj1uZXcgV2Vha01hcCxVPW5ldyBXZWFrTWFwLFc9bmV3IFdlYWtNYXAsRz1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLHE9bmV3IFdlYWtNYXAsSD1uZXcgV2Vha01hcCx6PW5ldyBXZWFrTWFwLFY9bmV3IFdlYWtNYXAsWD1uZXcgV2Vha01hcCxZPW5ldyBXZWFrTWFwLEs9bmV3IFdlYWtNYXAsSj1uZXcgV2Vha01hcCxRPW5ldyBXZWFrTWFwLCQ9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCx0dD1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxydD1uZXcgV2Vha01hcCxudD1uZXcgV2Vha1NldCxpdD1uZXcgV2Vha1NldCxhdD1uZXcgV2Vha1NldCxvdD1uZXcgV2Vha1NldCxzdD1uZXcgV2Vha1NldCxsdD1uZXcgV2Vha1NldCx1dD1uZXcgV2Vha1NldCxjdD1uZXcgV2Vha1NldCxodD1uZXcgV2Vha1NldCxmdD1uZXcgV2Vha1NldCxkdD1uZXcgV2Vha1NldCxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe2godGhpcyx0KSx1KHRoaXMsZHQpLHUodGhpcyxmdCksdSh0aGlzLGh0KSx1KHRoaXMsY3QpLHUodGhpcyx1dCksdSh0aGlzLGx0KSx1KHRoaXMsc3QpLHUodGhpcyxvdCksdSh0aGlzLGF0KSx1KHRoaXMsaXQpLHUodGhpcyxudCksdih0aGlzLEkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsaix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHYodGhpcyxMLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdih0aGlzLEQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsTix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEN9KSx2KHRoaXMsVSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHYodGhpcyxXLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdih0aGlzLEcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2KHRoaXMsQix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHYodGhpcyxxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU30pLHYodGhpcyxILHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHYodGhpcyx6LHt3cml0YWJsZTohMCx2YWx1ZTppLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkV9KSx2KHRoaXMsVix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLHYodGhpcyxYLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmNvcHkuYmluZCh0aGlzKX0pLHYodGhpcyxZLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmN1dC5iaW5kKHRoaXMpfSksdih0aGlzLEsse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMucGFzdGUuYmluZCh0aGlzKX0pLHYodGhpcyxKLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmtleWRvd24uYmluZCh0aGlzKX0pLHYodGhpcyxRLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uRWRpdGluZ0FjdGlvbi5iaW5kKHRoaXMpfSksdih0aGlzLCQse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKX0pLHYodGhpcyxaLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLHR0LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLGV0LHt3cml0YWJsZTohMCx2YWx1ZTp7aXNFZGl0aW5nOiExLGlzRW1wdHk6ITAsaGFzU29tZXRoaW5nVG9VbmRvOiExLGhhc1NvbWV0aGluZ1RvUmVkbzohMSxoYXNTZWxlY3RlZEVkaXRvcjohMX19KSx2KHRoaXMscnQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxtKHRoaXMscnQsZSksbSh0aGlzLEIsciksZyh0aGlzLEIpLl9vbigiZWRpdGluZ2FjdGlvbiIsZyh0aGlzLFEpKSxnKHRoaXMsQikuX29uKCJwYWdlY2hhbmdpbmciLGcodGhpcywkKSksZyh0aGlzLEIpLl9vbigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29uKCJyb3RhdGlvbmNoYW5naW5nIixnKHRoaXMsdHQpKSxtKHRoaXMsRCxuKSx0aGlzLnZpZXdQYXJhbWV0ZXJzPXtyZWFsU2NhbGU6YS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMscm90YXRpb246MH19cmV0dXJuIGQodCxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksZyh0aGlzLEIpLl9vZmYoImVkaXRpbmdhY3Rpb24iLGcodGhpcyxRKSksZyh0aGlzLEIpLl9vZmYoInBhZ2VjaGFuZ2luZyIsZyh0aGlzLCQpKSxnKHRoaXMsQikuX29mZigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29mZigicm90YXRpb25jaGFuZ2luZyIsZyh0aGlzLHR0KSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGVzdHJveSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxMKS5jbGVhcigpLGcodGhpcyxqKS5jbGVhcigpLGcodGhpcyxHKS5jbGVhcigpLG0odGhpcyxJLG51bGwpLGcodGhpcyxWKS5jbGVhcigpLGcodGhpcyxOKS5kZXN0cm95KCl9fSx7a2V5OiJvblBhZ2VDaGFuZ2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYWdlTnVtYmVyO20odGhpcyxVLGUtMSl9fSx7a2V5OiJmb2N1c01haW5Db250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zyh0aGlzLHJ0KS5mb2N1cygpfX0se2tleToiYWRkU2hvdWxkUmVzY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEcpLmFkZCh0KX19LHtrZXk6InJlbW92ZVNob3VsZFJlc2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxHKS5kZWxldGUodCl9fSx7a2V5OiJvblNjYWxlQ2hhbmdpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2NhbGU7dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlPWUqYS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7dmFyIHIsbj1fKGcodGhpcyxHKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUub25TY2FsZUNoYW5naW5nKCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25Sb3RhdGlvbkNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhZ2VzUm90YXRpb247dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucm90YXRpb249ZX19LHtrZXk6ImFkZFRvQW5ub3RhdGlvblN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuaXNFbXB0eSgpfHwhZyh0aGlzLEQpfHxnKHRoaXMsRCkuaGFzKHQuaWQpfHxnKHRoaXMsRCkuc2V0VmFsdWUodC5pZCx0KX19LHtrZXk6ImNvcHkiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxnKHRoaXMsSSkmJmcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpLHRoaXMuaGFzU2VsZWN0aW9uKXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsVikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLmlzRW1wdHkoKXx8ci5wdXNoKGkuc2VyaWFsaXplKCkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX0wIT09ci5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkocikpfX19LHtrZXk6ImN1dCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb3B5KHQpLHRoaXMuZGVsZXRlKCl9fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYocil7dHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX1pZihBcnJheS5pc0FycmF5KHIpKXt0aGlzLnVuc2VsZWN0QWxsKCk7dmFyIG49Zyh0aGlzLEwpLmdldChnKHRoaXMsVSkpO3RyeXt2YXIgYSxvPVtdLHM9XyhyKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1uLmRlc2VyaWFsaXplKGwpO2lmKCF1KXJldHVybjtvLnB1c2godSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9bzt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtjKGUsaHQsa3QpLmNhbGwoZSxuKX1jKGUsZHQseHQpLmNhbGwoZSxvKX0sdW5kbzpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9bzt0PGUubGVuZ3RoO3QrKyllW3RdLnJlbW92ZSgpfSxtdXN0RXhlYzohMH0pfWNhdGNoKHQpeygwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX19fX19LHtrZXk6ImtleWRvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByO251bGwhPT0ocj10aGlzLmdldEFjdGl2ZSgpKSYmdm9pZCAwIT09ciYmci5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpfHx0Ll9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLGUpfX0se2tleToib25FZGl0aW5nQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtbInVuZG8iLCJyZWRvIiwiZGVsZXRlIiwic2VsZWN0QWxsIl0uaW5jbHVkZXModC5uYW1lKSYmdGhpc1t0Lm5hbWVdKCl9fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q/KGModGhpcyxudCx2dCkuY2FsbCh0aGlzKSxjKHRoaXMsYXQsbXQpLmNhbGwodGhpcyksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2lzRWRpdGluZzpnKHRoaXMseikhPT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyksaGFzU29tZXRoaW5nVG9VbmRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvUmVkbygpLGhhc1NlbGVjdGVkRWRpdG9yOiExfSkpOihjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksYyh0aGlzLG90LGd0KS5jYWxsKHRoaXMpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtpc0VkaXRpbmc6ITF9KSl9fSx7a2V5OiJyZWdpc3RlckVkaXRvclR5cGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZyh0aGlzLFcpKXttKHRoaXMsVyx0KTt2YXIgZSxyPV8oZyh0aGlzLFcpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7Yyh0aGlzLGx0LF90KS5jYWxsKHRoaXMsbi5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX19LHtrZXk6ImdldElkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMscSkuZ2V0SWQoKX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyxMKS5nZXQoZyh0aGlzLFUpKX19LHtrZXk6ImN1cnJlbnRQYWdlSW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVSl9fSx7a2V5OiJhZGRMYXllciIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEwpLnNldCh0LnBhZ2VJbmRleCx0KSxnKHRoaXMsSCk/dC5lbmFibGUoKTp0LmRpc2FibGUoKX19LHtrZXk6InJlbW92ZUxheWVyIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsTCkuZGVsZXRlKHQucGFnZUluZGV4KX19LHtrZXk6InVwZGF0ZU1vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG0odGhpcyx6LHQpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpdGhpcy5zZXRFZGl0aW5nU3RhdGUoITEpLGModGhpcyxjdCxBdCkuY2FsbCh0aGlzKTtlbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKSxjKHRoaXMsdXQsd3QpLmNhbGwodGhpcyk7dmFyIGUscj1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUudXBkYXRlTW9kZSh0KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fX0se2tleToidXBkYXRlVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24odCl7dCE9PWcodGhpcyx6KSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKGcodGhpcyxXKSl7dmFyIHIsbj1fKGcodGhpcyxWKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUudXBkYXRlUGFyYW1zKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9dmFyIGksYT1fKGcodGhpcyxXKSk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fSx7a2V5OiJnZXRFZGl0b3JzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLnBhZ2VJbmRleD09PXQmJnIucHVzaChpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fSx7a2V5OiJnZXRFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsaikuZ2V0KHQpfX0se2tleToiYWRkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsaikuc2V0KHQuaWQsdCl9fSx7a2V5OiJyZW1vdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2codGhpcyxqKS5kZWxldGUodC5pZCksdGhpcy51bnNlbGVjdCh0KSxudWxsPT09KGU9Zyh0aGlzLEQpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUodC5pZCl9fSx7a2V5OiJzZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxJKSE9PXQmJihtKHRoaXMsSSx0KSx0JiZjKHRoaXMsbHQsX3QpLmNhbGwodGhpcyx0LnByb3BlcnRpZXNUb1VwZGF0ZSkpfX0se2tleToidG9nZ2xlU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGcodGhpcyxWKS5oYXModCkpcmV0dXJuIGcodGhpcyxWKS5kZWxldGUodCksdC51bnNlbGVjdCgpLHZvaWQgYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NlbGVjdGVkRWRpdG9yOnRoaXMuaGFzU2VsZWN0aW9ufSk7Zyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7biE9PXQmJm4udW5zZWxlY3QoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9Zyh0aGlzLFYpLmNsZWFyKCksZyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsVikuaGFzKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QudW5zZWxlY3QoKSxnKHRoaXMsVikuZGVsZXRlKHQpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfX0se2tleToiaGFzU2VsZWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PWcodGhpcyxWKS5zaXplfX0se2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikudW5kbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikucmVkbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1JlZG8oKSxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxOKS5hZGQodCksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NvbWV0aGluZ1RvVW5kbzohMCxoYXNTb21ldGhpbmdUb1JlZG86ITEsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyl9KX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY29tbWl0T3JSZW1vdmUoKSx0aGlzLmhhc1NlbGVjdGlvbil7dmFyIGU9byhnKHRoaXMsVikpO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe3ZhciB0LHI9XyhlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspdC52YWx1ZS5yZW1vdmUoKX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19LHVuZG86ZnVuY3Rpb24oKXt2YXIgcixuPV8oZSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2ModCxodCxrdCkuY2FsbCh0LGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19LG11c3RFeGVjOiEwfSl9fX0se2tleToiY29tbWl0T3JSZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PWcodGhpcyxJKSl8fHZvaWQgMD09PXR8fHQuY29tbWl0T3JSZW1vdmUoKX19LHtrZXk6InNlbGVjdEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS5jb21taXQoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1jKHRoaXMsZHQseHQpLmNhbGwodGhpcyxnKHRoaXMsaikudmFsdWVzKCkpfX0se2tleToidW5zZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoZyh0aGlzLEkpKWcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PWcodGhpcyxWKS5zaXplKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS51bnNlbGVjdCgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxWKS5jbGVhcigpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjohMX0pfX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLEkpPT09dH19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLEkpfX0se2tleToiZ2V0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLHopfX1dKSx0fSgpO2Z1bmN0aW9uIHZ0KCl7Zyh0aGlzLHJ0KS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIHl0KCl7Zyh0aGlzLHJ0KS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIG10KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZyh0aGlzLFgpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLGcodGhpcyxZKSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGcodGhpcyxLKSl9ZnVuY3Rpb24gZ3QoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5IixnKHRoaXMsWCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImN1dCIsZyh0aGlzLFkpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsZyh0aGlzLEspKX1mdW5jdGlvbiBidCh0KXt2YXIgZT10aGlzO09iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPWwodCwyKSxuPXJbMF0saT1yWzFdO3JldHVybiBnKGUsZXQpW25dIT09aX0pKSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbihnKHRoaXMsZXQpLHQpfSl9ZnVuY3Rpb24gX3QodCl7Zyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6dH0pfWZ1bmN0aW9uIHd0KCl7aWYoIWcodGhpcyxIKSl7bSh0aGlzLEgsITApO3ZhciB0LGU9XyhnKHRoaXMsTCkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24gQXQoKXtpZih0aGlzLnVuc2VsZWN0QWxsKCksZyh0aGlzLEgpKXttKHRoaXMsSCwhMSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGlzYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24ga3QodCl7dmFyIGU9Zyh0aGlzLEwpLmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1mdW5jdGlvbiBTdCgpe2lmKDA9PT1nKHRoaXMsaikuc2l6ZSlyZXR1cm4hMDtpZigxPT09Zyh0aGlzLGopLnNpemUpe3ZhciB0LGU9XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOylyZXR1cm4gdC52YWx1ZS5pc0VtcHR5KCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fXJldHVybiExfWZ1bmN0aW9uIHh0KHQpe2codGhpcyxWKS5jbGVhcigpO3ZhciBlLHI9Xyh0KTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7bi5pc0VtcHR5KCl8fChnKHRoaXMsVikuYWRkKG4pLG4uc2VsZWN0KCkpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1jKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1lLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI9cHQscyhwdCwiX2tleWJvYXJkTWFuYWdlciIsbmV3IEYoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxwdC5wcm90b3R5cGUuc2VsZWN0QWxsXSxbWyJjdHJsK3oiLCJtYWMrbWV0YSt6Il0scHQucHJvdG90eXBlLnVuZG9dLFtbImN0cmwreSIsImN0cmwrc2hpZnQrWiIsIm1hYyttZXRhK3NoaWZ0K1oiXSxwdC5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxwdC5wcm90b3R5cGUuZGVsZXRlXSxbWyJFc2NhcGUiLCJtYWMrRXNjYXBlIl0scHQucHJvdG90eXBlLnVuc2VsZWN0QWxsXV0pKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlN0YXRUaW1lcj1lLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbj1lLlBpeGVsc1BlckluY2g9ZS5QYWdlVmlld3BvcnQ9ZS5QREZEYXRlU3RyaW5nPWUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5ET01TVkdGYWN0b3J5PWUuRE9NQ2FudmFzRmFjdG9yeT1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PWUuQW5ub3RhdGlvblByZWZpeD12b2lkIDAsZS5kZXByZWNhdGVkPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKCJEZXByZWNhdGVkIEFQSSB1c2FnZTogIit0KX0sZS5nZXRDb2xvclZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kKGUpO3ZhciByLG49cyh0LmtleXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2Uuc3R5bGUuY29sb3I9aTt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChpLEkoYSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLnJlbW92ZSgpfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUcmFuc2Zvcm0oKTtyZXR1cm5bZS5hLGUuYixlLmMsZS5kLGUuZSxlLmZdfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO3JldHVybltlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZl19LGUuZ2V0RmlsZW5hbWVGcm9tVXJsPWZ1bmN0aW9uKHQpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpe3ZhciBlPXQuc3BsaXQoL1sjP10vLDEpO3Q9KDEsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0ocj1lKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQsMDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwxIT09cy5sZW5ndGgpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHIpfHxsKHIsMSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSlbMF19dmFyIHI7cmV0dXJuIHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoIi8iKSsxKX0sZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJkb2N1bWVudC5wZGYiO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gZTtpZihDKHQpKXJldHVybigwLGkud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlICJkYXRhOiItVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLGU7dmFyIHI9L1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaSxuPS9eKD86KD86W146XSs6KT9cL1wvW14vXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLmV4ZWModCksYT1yLmV4ZWMoblsxXSl8fHIuZXhlYyhuWzJdKXx8ci5leGVjKG5bM10pO2lmKGEmJihhPWFbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2E9ci5leGVjKGRlY29kZVVSSUNvbXBvbmVudChhKSlbMF19Y2F0Y2godCl7fXJldHVybiBhfHxlfSxlLmdldFJHQj1JLGUuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zY2FsZSxuPXZvaWQgMD09PXI/MTpyLGk9ZS5yb3RhdGlvbixhPXZvaWQgMD09PWk/MDppLG89dC5hdHRyaWJ1dGVzLnN0eWxlLHM9by53aWR0aCxsPW8uaGVpZ2h0LHU9WzAsMCxwYXJzZUludChzKSxwYXJzZUludChsKV07cmV0dXJuIG5ldyBQKHt2aWV3Qm94OnUsc2NhbGU6bixyb3RhdGlvbjphfSl9LGUuaXNEYXRhU2NoZW1lPUMsZS5pc1BkZkZpbGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvXC5wZGYkL2kudGVzdCh0KX0sZS5pc1ZhbGlkRmV0Y2hVcmw9TSxlLmxvYWRTY3JpcHQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9dCxpLm9ubG9hZD1mdW5jdGlvbih0KXtlJiZpLnJlbW92ZSgpLHIodCl9LGkub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEVycm9yKCJDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICIuY29uY2F0KGkuc3JjKSkpfSwoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQoaSl9KSl9LGUuc2V0TGF5ZXJEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM107aWYoZSBpbnN0YW5jZW9mIFApe3ZhciBpPWUucmF3RGltcyxhPWkucGFnZVdpZHRoLG89aS5wYWdlSGVpZ2h0LHM9dC5zdHlsZSxsPSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChhLCJweCkiKSx1PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChvLCJweCkiKTtyJiZlLnJvdGF0aW9uJTE4MCE9MD8ocy53aWR0aD11LHMuaGVpZ2h0PWwpOihzLndpZHRoPWwscy5oZWlnaHQ9dSl9biYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsZS5yb3RhdGlvbil9O3ZhciBuPXIoMTM4KSxpPXIoMSk7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxzPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIscykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLHMsbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09byhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LHMsbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQscyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LHMoYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LHMsbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W3NdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbyh0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKHQpO2lmKGUpe3ZhciBpPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09byhlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fSh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0scCh0KX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxiKG4ua2V5KSxuKX19ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybihlPWIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gYih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW8oZSk/ZTpTdHJpbmcoZSl9ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO3ZhciBfPXkoKGZ1bmN0aW9uIHQoKXttKHRoaXMsdCl9KSk7ZS5QaXhlbHNQZXJJbmNoPV8sZyhfLCJDU1MiLDk2KSxnKF8sIlBERiIsNzIpLGcoXywiUERGX1RPX0NTU19VTklUUyIsXy5DU1MvXy5QREYpO3ZhciB3PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXt2YXIgdCxuPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtyZXR1cm4gbSh0aGlzLHIpLCh0PWUuY2FsbCh0aGlzKSkuX2RvY3VtZW50PWksdH1yZXR1cm4geShyLFt7a2V5OiJfY3JlYXRlQ2FudmFzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxyfX1dKSxyfShuLkJhc2VDYW52YXNGYWN0b3J5KTtmdW5jdGlvbiBBKHQpe3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrKCl7dmFyIHQ7cmV0dXJuIHQ9YSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvPWFyZ3VtZW50cztyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9by5sZW5ndGg+MSYmdm9pZCAwIT09b1sxXSYmb1sxXSwhTShlLGRvY3VtZW50LmJhc2VVUkkpKXt0Lm5leHQ9MjE7YnJlYWt9cmV0dXJuIHQubmV4dD00LGZldGNoKGUpO2Nhc2UgNDppZigobj10LnNlbnQpLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3Iobi5zdGF0dXNUZXh0KTtjYXNlIDc6aWYoIXIpe3QubmV4dD0xNTticmVha31yZXR1cm4gdC50MT1VaW50OEFycmF5LHQubmV4dD0xMSxuLmFycmF5QnVmZmVyKCk7Y2FzZSAxMTp0LnQyPXQuc2VudCx0LnQwPW5ldyB0LnQxKHQudDIpLHQubmV4dD0yMDticmVhaztjYXNlIDE1OnJldHVybiB0LnQzPWkuc3RyaW5nVG9CeXRlcyx0Lm5leHQ9MTgsbi50ZXh0KCk7Y2FzZSAxODp0LnQ0PXQuc2VudCx0LnQwPSgwLHQudDMpKHQudDQpO2Nhc2UgMjA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMjE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9wZW4oIkdFVCIsZSwhMCksciYmKGEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7dmFyIGU7aWYoKDIwMD09PWEuc3RhdHVzfHwwPT09YS5zdGF0dXMpJiYociYmYS5yZXNwb25zZT9lPW5ldyBVaW50OEFycmF5KGEucmVzcG9uc2UpOiFyJiZhLnJlc3BvbnNlVGV4dCYmKGU9KDAsaS5zdHJpbmdUb0J5dGVzKShhLnJlc3BvbnNlVGV4dCkpLGUpKXJldHVybiB2b2lkIHQoZSk7bihuZXcgRXJyb3IoYS5zdGF0dXNUZXh0KSl9fSxhLnNlbmQobnVsbCl9KSkpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSxrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9LGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuRE9NQ2FudmFzRmFjdG9yeT13O3ZhciBTPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEEodCx0aGlzLmlzQ29tcHJlc3NlZCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9fSkpfX1dKSxyfShuLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSk7ZS5ET01DTWFwUmVhZGVyRmFjdG9yeT1TO3ZhciB4PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHQsITApfX1dKSxyfShuLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT14O3ZhciBFPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KX19XSkscn0obi5CYXNlU1ZHRmFjdG9yeSk7ZS5ET01TVkdGYWN0b3J5PUU7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUudmlld0JveCxuPWUuc2NhbGUsaT1lLnJvdGF0aW9uLGE9ZS5vZmZzZXRYLG89dm9pZCAwPT09YT8wOmEscz1lLm9mZnNldFksbD12b2lkIDA9PT1zPzA6cyx1PWUuZG9udEZsaXAsYz12b2lkIDAhPT11JiZ1O20odGhpcyx0KSx0aGlzLnZpZXdCb3g9cix0aGlzLnNjYWxlPW4sdGhpcy5yb3RhdGlvbj1pLHRoaXMub2Zmc2V0WD1vLHRoaXMub2Zmc2V0WT1sO3ZhciBoLGYsZCxwLHYseSxnLGIsXz0oclsyXStyWzBdKS8yLHc9KHJbM10rclsxXSkvMjtzd2l0Y2goKGklPTM2MCk8MCYmKGkrPTM2MCksaSl7Y2FzZSAxODA6aD0tMSxmPTAsZD0wLHA9MTticmVhaztjYXNlIDkwOmg9MCxmPTEsZD0xLHA9MDticmVhaztjYXNlIDI3MDpoPTAsZj0tMSxkPS0xLHA9MDticmVhaztjYXNlIDA6aD0xLGY9MCxkPTAscD0tMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiUGFnZVZpZXdwb3J0OiBJbnZhbGlkIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgZGVncmVlcy4iKX1jJiYoZD0tZCxwPS1wKSwwPT09aD8odj1NYXRoLmFicyh3LXJbMV0pKm4rbyx5PU1hdGguYWJzKF8tclswXSkqbitsLGc9KHJbM10tclsxXSkqbixiPShyWzJdLXJbMF0pKm4pOih2PU1hdGguYWJzKF8tclswXSkqbitvLHk9TWF0aC5hYnMody1yWzFdKSpuK2wsZz0oclsyXS1yWzBdKSpuLGI9KHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixmKm4sZCpuLHAqbix2LWgqbipfLWQqbip3LHktZipuKl8tcCpuKnddLHRoaXMud2lkdGg9Zyx0aGlzLmhlaWdodD1ifXJldHVybiB5KHQsW3trZXk6InJhd0RpbXMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld0JveDtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicmF3RGltcyIse3BhZ2VXaWR0aDp0WzJdLXRbMF0scGFnZUhlaWdodDp0WzNdLXRbMV0scGFnZVg6dFswXSxwYWdlWTp0WzFdfSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj1lLnNjYWxlLG49dm9pZCAwPT09cj90aGlzLnNjYWxlOnIsaT1lLnJvdGF0aW9uLGE9dm9pZCAwPT09aT90aGlzLnJvdGF0aW9uOmksbz1lLm9mZnNldFgscz12b2lkIDA9PT1vP3RoaXMub2Zmc2V0WDpvLGw9ZS5vZmZzZXRZLHU9dm9pZCAwPT09bD90aGlzLm9mZnNldFk6bCxjPWUuZG9udEZsaXAsaD12b2lkIDAhPT1jJiZjO3JldHVybiBuZXcgdCh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmEsb2Zmc2V0WDpzLG9mZnNldFk6dSxkb250RmxpcDpofSl9fSx7a2V5OiJjb252ZXJ0VG9WaWV3cG9ydFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3QsZV0sdGhpcy50cmFuc2Zvcm0pfX0se2tleToiY29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzFdXSx0aGlzLnRyYW5zZm9ybSkscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFszXV0sdGhpcy50cmFuc2Zvcm0pO3JldHVybltlWzBdLGVbMV0sclswXSxyWzFdXX19LHtrZXk6ImNvbnZlcnRUb1BkZlBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKFt0LGVdLHRoaXMudHJhbnNmb3JtKX19XSksdH0oKTtlLlBhZ2VWaWV3cG9ydD1QO3ZhciBUPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBtKHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikpLnR5cGU9bixpLmV4dHJhRGVsYXk9YSxpfXJldHVybiB5KHIpfShpLkJhc2VFeGNlcHRpb24pO2Z1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGUmJiIiPT09dFtyXS50cmltKCk7KXIrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocixyKzUpLnRvTG93ZXJDYXNlKCl9ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249VDt2YXIgTyxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe20odGhpcyx0KSxnKHRoaXMsInN0YXJ0ZWQiLE9iamVjdC5jcmVhdGUobnVsbCkpLGcodGhpcywidGltZXMiLFtdKX1yZXR1cm4geSh0LFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZCYmKDAsaS53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiLmNvbmNhdCh0KSksdGhpcy5zdGFydGVkW3RdPURhdGUubm93KCl9fSx7a2V5OiJ0aW1lRW5kIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZHx8KDAsaS53YXJuKSgiVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICIuY29uY2F0KHQpKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6dCxzdGFydDp0aGlzLnN0YXJ0ZWRbdF0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW3RdfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPTAsbj1zKHRoaXMudGltZXMpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZS5uYW1lO3I9TWF0aC5tYXgoaS5sZW5ndGgscil9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXZhciBhLG89cyh0aGlzLnRpbWVzKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1sLm5hbWUsYz1sLnN0YXJ0LGg9bC5lbmQ7ZS5wdXNoKCIiLmNvbmNhdCh1LnBhZEVuZChyKSwiICIpLmNvbmNhdChoLWMsIm1zXG4iKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiBlLmpvaW4oIiIpfX1dKSx0fSgpO2Z1bmN0aW9uIE0odCxlKXt0cnl7dmFyIHI9KGU/bmV3IFVSTCh0LGUpOm5ldyBVUkwodCkpLnByb3RvY29sO3JldHVybiJodHRwOiI9PT1yfHwiaHR0cHM6Ij09PXJ9Y2F0Y2godCl7cmV0dXJuITF9fWUuU3RhdFRpbWVyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bSh0aGlzLHQpfXJldHVybiB5KHQsbnVsbCxbe2tleToidG9EYXRlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO098fChPPW5ldyBSZWdFeHAoIl5EOihcXGR7NH0pKFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFtafCt8LV0pPyhcXGR7Mn0pPyc/KFxcZHsyfSk/Jz8iKSk7dmFyIGU9Ty5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXBhcnNlSW50KGVbMV0sMTApLG49cGFyc2VJbnQoZVsyXSwxMCk7bj1uPj0xJiZuPD0xMj9uLTE6MDt2YXIgaT1wYXJzZUludChlWzNdLDEwKTtpPWk+PTEmJmk8PTMxP2k6MTt2YXIgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDt2YXIgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDt2YXIgcz1wYXJzZUludChlWzZdLDEwKTtzPXM+PTAmJnM8PTU5P3M6MDt2YXIgbD1lWzddfHwiWiIsdT1wYXJzZUludChlWzhdLDEwKTt1PXU+PTAmJnU8PTIzP3U6MDt2YXIgYz1wYXJzZUludChlWzldLDEwKXx8MDtyZXR1cm4gYz1jPj0wJiZjPD01OT9jOjAsIi0iPT09bD8oYSs9dSxvKz1jKToiKyI9PT1sJiYoYS09dSxvLT1jKSxuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLG8scykpfX1dKSx0fSgpO2Z1bmN0aW9uIEkodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe3ZhciBlPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpO3JldHVyblsoMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZV19cmV0dXJuIHQuc3RhcnRzV2l0aCgicmdiKCIpP3Quc2xpY2UoNCwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pKTp0LnN0YXJ0c1dpdGgoInJnYmEoIik/dC5zbGljZSg1LC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSkpLnNsaWNlKDAsMyk6KCgwLGkud2FybikoJ05vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIicuY29uY2F0KHQsJyInKSksWzAsMCwwXSl9ZS5QREZEYXRlU3RyaW5nPVJ9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5CYXNlU1ZHRmFjdG9yeT1lLkJhc2VDYW52YXNGYWN0b3J5PWUuQmFzZUNNYXBSZWFkZXJGYWN0b3J5PXZvaWQgMDt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkoKXtpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLGwpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PXMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8sbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLGwpfSkpfWwodS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EobyxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PXModCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1zKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09cyhpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUmJnUodC5wcm90b3R5cGUsZSksciYmdSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9dGhpcy5fY3JlYXRlQ2FudmFzKHQsZSk7cmV0dXJue2NhbnZhczpyLGNvbnRleHQ6ci5nZXRDb250ZXh0KCIyZCIpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYoIXQuY2FudmFzKXRocm93IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWQiKTtpZihlPD0wfHxyPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjYW52YXMgc2l6ZSIpO3QuY2FudmFzLndpZHRoPWUsdC5jYW52YXMuaGVpZ2h0PXJ9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO3QuY2FudmFzLndpZHRoPTAsdC5jYW52YXMuaGVpZ2h0PTAsdC5jYW52YXM9bnVsbCx0LmNvbnRleHQ9bnVsbH19LHtrZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZUNhbnZhc0ZhY3Rvcnk9aDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnIsYT1lLmlzQ29tcHJlc3NlZCxvPXZvaWQgMCE9PWEmJmE7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pLHRoaXMuaXNDb21wcmVzc2VkPW99dmFyIGU7cmV0dXJuIGModCxbe2tleToiZmV0Y2giLHZhbHVlOihlPW8oaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsYSxvLHM9dGhpcztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZS5uYW1lLHRoaXMuYmFzZVVybCl7dC5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCAiYmFzZVVybCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgImNNYXBVcmwiIGFuZCAiY01hcFBhY2tlZCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO2Nhc2UgMzppZihyKXt0Lm5leHQ9NTticmVha310aHJvdyBuZXcgRXJyb3IoIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjYXNlIDU6cmV0dXJuIGE9dGhpcy5iYXNlVXJsK3IrKHRoaXMuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPXRoaXMuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUsdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKGEsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIi5jb25jYXQocy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiLCJDTWFwIGF0OiAiKS5jb25jYXQoYSkpfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuIil9fV0pLHR9KCk7ZS5CYXNlQ01hcFJlYWRlckZhY3Rvcnk9Zjt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnI7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pfXZhciBlO3JldHVybiBjKHQsW3trZXk6ImZldGNoIix2YWx1ZTooZT1vKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZmlsZW5hbWUsdGhpcy5iYXNlVXJsKXt0Lm5leHQ9MzticmVha310aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGFuZGFyZCBmb250ICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAic3RhbmRhcmRGb250RGF0YVVybCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtjYXNlIDM6aWYocil7dC5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpO2Nhc2UgNTpyZXR1cm4gbj0iIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQociksdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogIi5jb25jYXQobikpfSkpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodDw9MHx8ZTw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTt2YXIgbj10aGlzLl9jcmVhdGVTVkcoInN2ZzpzdmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyfHwobi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiIi5jb25jYXQodCwicHgiKSksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIiIuY29uY2F0KGUsInB4IikpKSxuLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiLmNvbmNhdCh0LCIgIikuY29uY2F0KGUpKSxufX0se2tleToiY3JlYXRlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX19LHtrZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19XSksdH0oKTtlLkJhc2VTVkdGYWN0b3J5PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpKHQpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09aSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1pKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxsPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6byx0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm99dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpLHI9MDtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKTtvPD0yNTU/ZVtyKytdPW86KGVbcisrXT1vPj4+OCxlW3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KGU9dC5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGM9ci00KnUsaD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCx1KSxmPTAsZD0wLHA9dGhpcy5oMSx2PXRoaXMuaDIseT0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MTE2MDEsYj0xMzcxNSxfPTA7Xzx1O18rKykxJl8/cD01KihwPShwXj1mPShmPShmPShmPWhbX10pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2OnY9NSoodj0odl49ZD0oZD0oZD0oZD1oW19dKSp5JnN8ZCpnJmwpPDwxNXxkPj4+MTcpKm0mc3xkKmImbCk8PDEzfHY+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goZj0wLGMpe2Nhc2UgMzpmXj1lWzQqdSsyXTw8MTY7Y2FzZSAyOmZePWVbNCp1KzFdPDw4O2Nhc2UgMTpmPShmPShmPShmXj1lWzQqdV0pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsLDEmdT9wXj1mOnZePWZ9dGhpcy5oMT1wLHRoaXMuaDI9dn19LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmgxLGU9dGhpcy5oMjtyZXR1cm4gdD0zOTgxODA2Nzk3Kih0Xj1lPj4+MSkmc3wzNjA0NSp0JmwsdD00NDQ5ODQ0MDMqKHRePShlPTQyODM1NDM1MTEqZSZzfCgyOTUwMTYzNzk3KihlPDwxNnx0Pj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSp0JmwsKCh0Xj0oZT0zMzAxODgyMzY2KmUmc3woMzEyMDQzNzg5MyooZTw8MTZ8dD4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZhKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NdXJtdXJIYXNoM182ND11fSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRm9udExvYWRlcj1lLkZvbnRGYWNlT2JqZWN0PXZvaWQgMDt2YXIgbj1yKDEpLGk9cigzKTtmdW5jdGlvbiBhKHQpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxhKHQpfWZ1bmN0aW9uIG8oKXtvPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLHMpJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sbyxzLGwpe3ZhciB1PWYodFtuXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWEoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxzLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LHMsbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxzKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxzLGwpfSkpfWwodS5hcmcpfXZhciBvO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtzXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWEodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIGUmJmgodC5wcm90b3R5cGUsZSksciYmaCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUub25VbnN1cHBvcnRlZEZlYXR1cmUsbj1lLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtlLnN0eWxlRWxlbWVudCxjKHRoaXMsdCksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9cix0aGlzLl9kb2N1bWVudD1pLHRoaXMubmF0aXZlRm9udEZhY2VzPVtdLHRoaXMuc3R5bGVFbGVtZW50PW51bGwsdGhpcy5sb2FkaW5nUmVxdWVzdHM9W10sdGhpcy5sb2FkVGVzdEZvbnRJZD0wfXZhciBlLHI7cmV0dXJuIGYodCxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2godCksdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZUVsZW1lbnR8fCh0aGlzLnN0eWxlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZCh0aGlzLnN0eWxlRWxlbWVudCkpO3ZhciBlPXRoaXMuc3R5bGVFbGVtZW50LnNoZWV0O2UuaW5zZXJ0UnVsZSh0LGUuY3NzUnVsZXMubGVuZ3RoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9bCh0aGlzLm5hdGl2ZUZvbnRGYWNlcyk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShyKX19Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9dGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOihlPW8oKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLGksYT10aGlzO3JldHVybiBvKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUuYXR0YWNoZWQmJiFlLm1pc3NpbmdGaWxlKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZihlLmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe3QubmV4dD0xOTticmVha31pZighKHI9ZS5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLHQucHJldj03LHQubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOnQubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IHQucHJldj0xMix0LnQwPXQuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmV9KSwoMCxuLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdCh0LnQwLCInLiIpKSxlLmRpc2FibGVGb250RmFjZT0hMCx0LnQwO2Nhc2UgMTg6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEoaT1lLmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7dC5uZXh0PTI2O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShpKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gdC5uZXh0PTI2LG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1hLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KTthLl9wcmVwYXJlRm9udExvYWRFdmVudChlLHIpfSkpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgYT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyh0KXtzKGEsbixpLG8sbCwibmV4dCIsdCl9ZnVuY3Rpb24gbCh0KXtzKGEsbixpLG8sbCwidGhyb3ciLHQpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0LGU9IShudWxsPT09KHQ9dGhpcy5fZG9jdW1lbnQpfHx2b2lkIDA9PT10fHwhdC5mb250cyk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PSExO3JldHVybihpLmlzTm9kZUpTfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01vemlsbGFcLzUuMC4qP3J2OlxkKy4qPyBHZWNrby8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkmJih0PSEwKSwoMCxuLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfX0se2tleToiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdSZXF1ZXN0cyxyPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLG4uYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDtlLmxlbmd0aD4wJiZlWzBdLmRvbmU7KXt2YXIgdD1lLnNoaWZ0KCk7c2V0VGltZW91dCh0LmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6dH07cmV0dXJuIGUucHVzaChyKSxyfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9fSx7a2V5OiJfcHJlcGFyZUZvbnRMb2FkRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmNoYXJDb2RlQXQoZSk8PDI0fHQuY2hhckNvZGVBdChlKzEpPDwxNnx0LmNoYXJDb2RlQXQoZSsyKTw8OHwyNTUmdC5jaGFyQ29kZUF0KGUrMyl9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStuK3Quc3Vic3RyaW5nKGUrcil9dmFyIGEsbyxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9MSxzLmhlaWdodD0xO3ZhciBsPXMuZ2V0Q29udGV4dCgiMmQiKSx1PTAsYz0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxmPTE0ODIxODQ3OTIsZD1yKGg9aShoLDk3NixjLmxlbmd0aCxjKSwxNik7Zm9yKGE9MCxvPWMubGVuZ3RoLTM7YTxvO2ErPTQpZD1kLWYrcihjLGEpfDA7YTxjLmxlbmd0aCYmKGQ9ZC1mK3IoYysiWFhYIixhKXwwKSxoPWkoaCwxNiw0LCgwLG4uc3RyaW5nMzIpKGQpKTt2YXIgcD0idXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsIi5jb25jYXQoYnRvYShoKSwiKTsiKSx2PSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQoYywnIjtzcmM6JykuY29uY2F0KHAsIn0iKTt0aGlzLmluc2VydFJ1bGUodik7dmFyIHk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7eS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHkuc3R5bGUud2lkdGg9eS5zdHlsZS5oZWlnaHQ9IjEwcHgiLHkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix5LnN0eWxlLnRvcD15LnN0eWxlLmxlZnQ9IjBweCI7Zm9yKHZhciBtPTAsZz1bdC5sb2FkZWROYW1lLGNdO208Zy5sZW5ndGg7bSsrKXt2YXIgYj1nW21dLF89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO18udGV4dENvbnRlbnQ9IkhpIixfLnN0eWxlLmZvbnRGYW1pbHk9Yix5LmFwcGVuZChfKX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZCh5KSxmdW5jdGlvbiB0KGUscil7aWYoKyt1PjMwKXJldHVybigwLG4ud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtsLmZvbnQ9IjMwcHggIitlLGwuZmlsbFRleHQoIi4iLDAsMjApLGwuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLHIpKX0oYywoZnVuY3Rpb24oKXt5LnJlbW92ZSgpLGUuY29tcGxldGUoKX0pKX19XSksdH0oKTtlLkZvbnRMb2FkZXI9ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbj1yLmlzRXZhbFN1cHBvcnRlZCxpPXZvaWQgMD09PW58fG4sYT1yLmRpc2FibGVGb250RmFjZSxvPXZvaWQgMCE9PWEmJmEscz1yLmlnbm9yZUVycm9ycyxsPXZvaWQgMCE9PXMmJnMsdT1yLm9uVW5zdXBwb3J0ZWRGZWF0dXJlLGg9ci5mb250UmVnaXN0cnksZj12b2lkIDA9PT1oP251bGw6aDtmb3IodmFyIGQgaW4gYyh0aGlzLHQpLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXRoaXNbZF09ZVtkXTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWksdGhpcy5kaXNhYmxlRm9udEZhY2U9ITA9PT1vLHRoaXMuaWdub3JlRXJyb3JzPSEwPT09bCx0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZT11LHRoaXMuZm9udFJlZ2lzdHJ5PWZ9cmV0dXJuIGYodCxbe2tleToiY3JlYXRlTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtpZih0aGlzLmNzc0ZvbnRJbmZvKXt2YXIgcj17d2VpZ2h0OnRoaXMuY3NzRm9udEluZm8uZm9udFdlaWdodH07dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHIuc3R5bGU9Im9ibGlxdWUgIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwiZGVnIikpLGU9bmV3IEZvbnRGYWNlKHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSx0aGlzLmRhdGEscil9ZWxzZSBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gbnVsbD09PSh0PXRoaXMuZm9udFJlZ2lzdHJ5KXx8dm9pZCAwPT09dHx8dC5yZWdpc3RlckZvbnQodGhpcyksZX19LHtrZXk6ImNyZWF0ZUZvbnRGYWNlUnVsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDt2YXIgZSxyPSgwLG4uYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxpPSJ1cmwoZGF0YToiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCI7YmFzZTY0LCIpLmNvbmNhdChidG9hKHIpLCIpOyIpO2lmKHRoaXMuY3NzRm9udEluZm8pe3ZhciBhPSJmb250LXdlaWdodDogIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0LCI7Iik7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKGErPSJmb250LXN0eWxlOiBvYmxpcXVlICIuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUsImRlZzsiKSksZT0nQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IicuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSwnIjsnKS5jb25jYXQoYSwic3JjOiIpLmNvbmNhdChpLCJ9Iil9ZWxzZSBlPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQoaSwifSIpO3JldHVybiBudWxsPT09KHQ9dGhpcy5mb250UmVnaXN0cnkpfHx2b2lkIDA9PT10fHx0LnJlZ2lzdGVyRm9udCh0aGlzLGkpLGV9fSx7a2V5OiJnZXRQYXRoR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbZV0pcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07dmFyIHI7dHJ5e3I9dC5nZXQodGhpcy5sb2FkZWROYW1lKyJfcGF0aF8iK2UpfWNhdGNoKHQpe2lmKCF0aGlzLmlnbm9yZUVycm9ycyl0aHJvdyB0O3JldHVybiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aH0pLCgwLG4ud2FybikoJ2dldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6ICInLmNvbmNhdCh0LCciLicpKSx0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7fX1pZih0aGlzLmlzRXZhbFN1cHBvcnRlZCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBpLGE9W10sbz1sKHIpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PXZvaWQgMCE9PXMuYXJncz9zLmFyZ3Muam9pbigiLCIpOiIiO2EucHVzaCgiYy4iLHMuY21kLCIoIix1LCIpO1xuIil9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLGEuam9pbigiIikpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1sKHIpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTsic2NhbGUiPT09YS5jbWQmJihhLmFyZ3M9W2UsLWVdKSx0W2EuY21kXS5hcHBseSh0LGEuYXJncyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX19fV0pLHR9KCk7ZS5Gb250RmFjZU9iamVjdD1wfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDE0Miksbz1yKDE0Mykscz1yKDMpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9Zih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz00MDk2LGI9cy5pc05vZGVKUyYmInVuZGVmaW5lZCI9PXR5cGVvZiBQYXRoMkQ/LTE6MWUzLF89MTYsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dih0aGlzLHQpLHRoaXMuY2FudmFzRmFjdG9yeT1lLHRoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtyZXR1cm4gdm9pZCAwIT09dGhpcy5jYWNoZVt0XT8obj10aGlzLmNhY2hlW3RdLHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChuLGUscikpOihuPXRoaXMuY2FudmFzRmFjdG9yeS5jcmVhdGUoZSxyKSx0aGlzLmNhY2hlW3RdPW4pLG59fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmNhY2hlW3RdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuY2FjaGUpe3ZhciBlPXRoaXMuY2FjaGVbdF07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuY2FjaGVbdF19fX1dKSx0fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixhLG8scyxsLHUsYyl7dmFyIGY9aCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpLDYpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWZbNF0sZz1mWzVdO2lmKDA9PT1wJiYwPT09dil7dmFyIGI9cypkK20sXz1NYXRoLnJvdW5kKGIpLHc9bCp5K2csQT1NYXRoLnJvdW5kKHcpLGs9KHMrdSkqZCttLFM9TWF0aC5hYnMoTWF0aC5yb3VuZChrKS1fKXx8MSx4PShsK2MpKnkrZyxFPU1hdGguYWJzKE1hdGgucm91bmQoeCktQSl8fDE7cmV0dXJuIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwwLDAsTWF0aC5zaWduKHkpLF8sQSksdC5kcmF3SW1hZ2UoZSxyLG4sYSxvLDAsMCxTLEUpLHQuc2V0VHJhbnNmb3JtKGQscCx2LHksbSxnKSxbUyxFXX1pZigwPT09ZCYmMD09PXkpe3ZhciBQPWwqdittLFQ9TWF0aC5yb3VuZChQKSxDPXMqcCtnLE89TWF0aC5yb3VuZChDKSxGPShsK2MpKnYrbSxNPU1hdGguYWJzKE1hdGgucm91bmQoRiktVCl8fDEsUj0ocyt1KSpwK2csST1NYXRoLmFicyhNYXRoLnJvdW5kKFIpLU8pfHwxO3JldHVybiB0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbihwKSxNYXRoLnNpZ24odiksMCxULE8pLHQuZHJhd0ltYWdlKGUscixuLGEsbywwLDAsSSxNKSx0LnNldFRyYW5zZm9ybShkLHAsdix5LG0sZyksW0ksTV19cmV0dXJuIHQuZHJhd0ltYWdlKGUscixuLGEsbyxzLGwsdSxjKSxbTWF0aC5oeXBvdChkLHApKnUsTWF0aC5oeXBvdCh2LHkpKmNdfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3YodGhpcyx0KSx0aGlzLmFscGhhSXNTaGFwZT0hMSx0aGlzLmZvbnRTaXplPTAsdGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeFNjYWxlPTEsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy54PTAsdGhpcy55PTAsdGhpcy5saW5lWD0wLHRoaXMubGluZVk9MCx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMudGV4dFJpc2U9MCx0aGlzLmZpbGxDb2xvcj0iIzAwMDAwMCIsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5wYXR0ZXJuRmlsbD0hMSx0aGlzLmZpbGxBbHBoYT0xLHRoaXMuc3Ryb2tlQWxwaGE9MSx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuYWN0aXZlU01hc2s9bnVsbCx0aGlzLnRyYW5zZmVyTWFwcz1udWxsLHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwwLGUscl0pfXJldHVybiBtKHQsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQuY2xpcEJveD10aGlzLmNsaXBCb3guc2xpY2UoKSx0fX0se2tleToic2V0Q3VycmVudFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMueD10LHRoaXMueT1lfX0se2tleToidXBkYXRlUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWgobi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHJdLHQpLDIpO2U9aVswXSxyPWlbMV0sdGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlKSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLHIpLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZSksdGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxyKX19LHtrZXk6InVwZGF0ZVJlY3RNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCksaT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyKSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLHJbMF0saVswXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxyWzFdLGlbMV0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsclswXSxpWzBdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHJbMV0saVsxXSl9fSx7a2V5OiJ1cGRhdGVTY2FsaW5nUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtuLlV0aWwuc2NhbGVNaW5NYXgodCxlKSx0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGVbMF0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZVsxXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlWzJdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLGVbM10pfX0se2tleToidXBkYXRlQ3VydmVQYXRoTWluTWF4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjKXt2YXIgaD1uLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxyLGksYSxvLHMsbCx1KTtpZihjKXJldHVybiBjWzBdPU1hdGgubWluKGNbMF0saFswXSxoWzJdKSxjWzFdPU1hdGgubWF4KGNbMV0saFswXSxoWzJdKSxjWzJdPU1hdGgubWluKGNbMl0saFsxXSxoWzNdKSx2b2lkKGNbM109TWF0aC5tYXgoY1szXSxoWzFdLGhbM10pKTt0aGlzLnVwZGF0ZVJlY3RNaW5NYXgodCxoKX19LHtrZXk6ImdldFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1bdGhpcy5taW5YLHRoaXMubWluWSx0aGlzLm1heFgsdGhpcy5tYXhZXTtpZih0PT09YS5QYXRoVHlwZS5TVFJPS0Upe2V8fCgwLG4udW5yZWFjaGFibGUpKCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uIik7dmFyIGk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG89aVswXSp0aGlzLmxpbmVXaWR0aC8yLHM9aVsxXSp0aGlzLmxpbmVXaWR0aC8yO3JbMF0tPW8sclsxXS09cyxyWzJdKz1vLHJbM10rPXN9cmV0dXJuIHJ9fSx7a2V5OiJ1cGRhdGVDbGlwRnJvbVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bi5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsdGhpcy5nZXRQYXRoQm91bmRpbmdCb3goKSk7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHR8fFswLDAsMCwwXSl9fSx7a2V5OiJpc0VtcHR5Q2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5YPT09MS8wfX0se2tleToic3RhcnROZXdQYXRoQW5kQ2xpcEJveCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jbGlwQm94PXQsdGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0wLHRoaXMubWF4WT0wfX0se2tleToiZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIG4uVXRpbC5pbnRlcnNlY3QodGhpcy5jbGlwQm94LHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsZSkpfX1dKSx0fSgpO2Z1bmN0aW9uIFModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmZSBpbnN0YW5jZW9mIEltYWdlRGF0YSl0LnB1dEltYWdlRGF0YShlLDAsMCk7ZWxzZXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD1lLmhlaWdodCxwPWUud2lkdGgsdj1kJV8seT0oZC12KS9fLG09MD09PXY/eTp5KzEsZz10LmNyZWF0ZUltYWdlRGF0YShwLF8pLGI9MCx3PWUuZGF0YSxBPWcuZGF0YTtpZihyKXN3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnU9clswXSxjPXJbMF0saD1yWzBdLGY9clswXTticmVhaztjYXNlIDQ6dT1yWzBdLGM9clsxXSxoPXJbMl0sZj1yWzNdfWlmKGUua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgaz13LmJ5dGVMZW5ndGgsUz1uZXcgVWludDMyQXJyYXkoQS5idWZmZXIsMCxBLmJ5dGVMZW5ndGg+PjIpLHg9Uy5sZW5ndGgsRT1wKzc+PjMsUD00Mjk0OTY3Mjk1LFQ9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtpZihmJiYyNTU9PT1mWzBdJiYwPT09ZlsyNTVdKXt2YXIgQz1bVCxQXTtQPUNbMF0sVD1DWzFdfWZvcihhPTA7YTxtO2ErKyl7Zm9yKHM9YTx5P186dixpPTAsbz0wO288cztvKyspe2Zvcih2YXIgTz1rLWIsRj0wLE09Tz5FP3A6OCpPLTcsUj0tOCZNLEk9MCxqPTA7RjxSO0YrPTgpaj13W2IrK10sU1tpKytdPTEyOCZqP1A6VCxTW2krK109NjQmaj9QOlQsU1tpKytdPTMyJmo/UDpULFNbaSsrXT0xNiZqP1A6VCxTW2krK109OCZqP1A6VCxTW2krK109NCZqP1A6VCxTW2krK109MiZqP1A6VCxTW2krK109MSZqP1A6VDtmb3IoO0Y8TTtGKyspMD09PUkmJihqPXdbYisrXSxJPTEyOCksU1tpKytdPWomST9QOlQsST4+PTF9Zm9yKDtpPHg7KVNbaSsrXT0wO3QucHV0SW1hZ2VEYXRhKGcsMCxhKl8pfX1lbHNlIGlmKGUua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe3ZhciBMPSEhKHV8fGN8fGgpO2ZvcihvPTAsbD1wKl8qNCxhPTA7YTx5O2ErKyl7aWYoQS5zZXQody5zdWJhcnJheShiLGIrbCkpLGIrPWwsTClmb3IodmFyIEQ9MDtEPGw7RCs9NCl1JiYoQVtEKzBdPXVbQVtEKzBdXSksYyYmKEFbRCsxXT1jW0FbRCsxXV0pLGgmJihBW0QrMl09aFtBW0QrMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsbyksbys9X31pZihhPG0pe2lmKGw9cCp2KjQsQS5zZXQody5zdWJhcnJheShiLGIrbCkpLEwpZm9yKHZhciBOPTA7TjxsO04rPTQpdSYmKEFbTiswXT11W0FbTiswXV0pLGMmJihBW04rMV09Y1tBW04rMV1dKSxoJiYoQVtOKzJdPWhbQVtOKzJdXSk7dC5wdXRJbWFnZURhdGEoZywwLG8pfX1lbHNle2lmKGUua2luZCE9PW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCl0aHJvdyBuZXcgRXJyb3IoImJhZCBpbWFnZSBraW5kOiAiLmNvbmNhdChlLmtpbmQpKTt2YXIgVT0hISh1fHxjfHxoKTtmb3IobD1wKihzPV8pLGE9MDthPG07YSsrKXtmb3IoYT49eSYmKGw9cCoocz12KSksaT0wLG89bDtvLS07KUFbaSsrXT13W2IrK10sQVtpKytdPXdbYisrXSxBW2krK109d1tiKytdLEFbaSsrXT0yNTU7aWYoVSlmb3IodmFyIFc9MDtXPGk7Vys9NCl1JiYoQVtXKzBdPXVbQVtXKzBdXSksYyYmKEFbVysxXT1jW0FbVysxXV0pLGgmJihBW1crMl09aFtBW1crMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsYSpfKX19fX1mdW5jdGlvbiB4KHQsZSl7aWYoZS5iaXRtYXApdC5kcmF3SW1hZ2UoZS5iaXRtYXAsMCwwKTtlbHNlIGZvcih2YXIgcj1lLmhlaWdodCxuPWUud2lkdGgsaT1yJV8sYT0oci1pKS9fLHM9MD09PWk/YTphKzEsbD10LmNyZWF0ZUltYWdlRGF0YShuLF8pLHU9MCxjPWUuZGF0YSxoPWwuZGF0YSxmPTA7ZjxzO2YrKyl7dmFyIGQ9ZjxhP186aTt1PSgwLG8uYXBwbHlNYXNrSW1hZ2VEYXRhKSh7c3JjOmMsc3JjUG9zOnUsZGVzdDpoLHdpZHRoOm4saGVpZ2h0OmR9KS5zcmNQb3MsdC5wdXRJbWFnZURhdGEobCwwLGYqXyl9fWZ1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9MCxuPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTt2b2lkIDAhPT10W2ldJiYoZVtpXT10W2ldKX12b2lkIDAhPT10LnNldExpbmVEYXNoJiYoZS5zZXRMaW5lRGFzaCh0LmdldExpbmVEYXNoKCkpLGUubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gUCh0LGUpe3Quc3Ryb2tlU3R5bGU9dC5maWxsU3R5bGU9ZXx8IiMwMDAwMDAiLHQuZmlsbFJ1bGU9Im5vbnplcm8iLHQuZ2xvYmFsQWxwaGE9MSx0LmxpbmVXaWR0aD0xLHQubGluZUNhcD0iYnV0dCIsdC5saW5lSm9pbj0ibWl0ZXIiLHQubWl0ZXJMaW1pdD0xMCx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuZm9udD0iMTBweCBzYW5zLXNlcmlmIix2b2lkIDAhPT10LnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChbXSksdC5saW5lRGFzaE9mZnNldD0wKX1mdW5jdGlvbiBUKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTM7YTxpO2ErPTQpe3ZhciBvPXRbYV07aWYoMD09PW8pdFthLTNdPWUsdFthLTJdPXIsdFthLTFdPW47ZWxzZSBpZihvPDI1NSl7dmFyIHM9MjU1LW87dFthLTNdPXRbYS0zXSpvK2Uqcz4+OCx0W2EtMl09dFthLTJdKm8rcipzPj44LHRbYS0xXT10W2EtMV0qbytuKnM+Pjh9fX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT0zO2k8bjtpKz00KXt2YXIgYT1yP3JbdFtpXV06dFtpXTtlW2ldPWVbaV0qYSouMDAzOTIxNTY4NjI3NDUwOTh8MH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MztpPG47aSs9NCl7dmFyIGE9NzcqdFtpLTNdKzE1Mip0W2ktMl0rMjgqdFtpLTFdO2VbaV09cj9lW2ldKnJbYT4+OF0+Pjg6ZVtpXSphPj4xNn19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtyWzBdPU1hdGguZnJvdW5kKHJbMF0pLHJbMV09TWF0aC5mcm91bmQoclsxXSk7dmFyIGE9TWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MSkqaS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO3JldHVybiB2b2lkIDAhPT1lP2U6clswXTw9YXx8clsxXTw9YX12YXIgTT1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLFI9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxJPXt9LGo9e30sTD1uZXcgV2Vha1NldCxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzKXt2YXIgbCx1LGM9YS5vcHRpb25hbENvbnRlbnRDb25maWcsaD1hLm1hcmtlZENvbnRlbnRTdGFjayxmPXZvaWQgMD09PWg/bnVsbDpoO3YodGhpcyx0KSxmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KGw9dGhpcyx1PUwpLHUuYWRkKGwpLHRoaXMuY3R4PWUsdGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnN0YXRlU3RhY2s9W10sdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMucGVuZGluZ0VPRmlsbD0hMSx0aGlzLnJlcz1udWxsLHRoaXMueG9ianM9bnVsbCx0aGlzLmNvbW1vbk9ianM9cix0aGlzLm9ianM9bix0aGlzLmNhbnZhc0ZhY3Rvcnk9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuc3VzcGVuZGVkQ3R4PW51bGwsdGhpcy5jb250ZW50VmlzaWJsZT0hMCx0aGlzLm1hcmtlZENvbnRlbnRTdGFjaz1mfHxbXSx0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZz1jLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHcodGhpcy5jYW52YXNGYWN0b3J5KSx0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXAsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPW8sdGhpcy52aWV3cG9ydFNjYWxlPTEsdGhpcy5vdXRwdXRTY2FsZVg9MSx0aGlzLm91dHB1dFNjYWxlWT0xLHRoaXMuYmFja2dyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmJhY2tncm91bmQpfHxudWxsLHRoaXMuZm9yZWdyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmZvcmVncm91bmQpfHxudWxsLHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsdGhpcy5fY2FjaGVkQml0bWFwc01hcD1uZXcgTWFwfXJldHVybiBtKHQsW3trZXk6ImdldE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX19LHtrZXk6ImJlZ2luRHJhd2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhbnNmb3JtLGE9dC52aWV3cG9ydCxvPXQudHJhbnNwYXJlbmN5LHM9dm9pZCAwIT09byYmbyx1PXQuYmFja2dyb3VuZCxjPXZvaWQgMD09PXU/bnVsbDp1LGY9dGhpcy5jdHguY2FudmFzLndpZHRoLGQ9dGhpcy5jdHguY2FudmFzLmhlaWdodCxwPWN8fCIjZmZmZmZmIjtpZih0aGlzLmN0eC5zYXZlKCksdGhpcy5mb3JlZ3JvdW5kQ29sb3ImJnRoaXMuYmFja2dyb3VuZENvbG9yKXt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5mb3JlZ3JvdW5kQ29sb3I7dmFyIHY9dGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcjt2YXIgeSxtLGc9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO2lmKHRoaXMuY3R4LmZpbGxTdHlsZT1wLHk9InN0cmluZyI9PXR5cGVvZihtPXRoaXMuY3R4LmZpbGxTdHlsZSkmJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChtKSwiIzAwMDAwMCI9PT12JiYiI2ZmZmZmZiI9PT1nfHx2PT09Z3x8IXkpdGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDtlbHNle3ZhciBiPWgoKDAsaS5nZXRSR0IpKG0pLDMpLF89YlswXSx3PWJbMV0sQT1iWzJdLGs9ZnVuY3Rpb24odCl7cmV0dXJuKHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9LFM9TWF0aC5yb3VuZCguMjEyNiprKF8pKy43MTUyKmsodykrLjA3MjIqayhBKSk7dGhpcy5zZWxlY3RDb2xvcj1mdW5jdGlvbih0LGUscil7dmFyIG49LjIxMjYqayh0KSsuNzE1MiprKGUpKy4wNzIyKmsocik7cmV0dXJuIE1hdGgucm91bmQobik9PT1TP2c6dn19fWlmKHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8cCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsZixkKSx0aGlzLmN0eC5yZXN0b3JlKCkscyl7dmFyIHgsRT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLGYsZCk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHgsdGhpcy50cmFuc3BhcmVudENhbnZhcz1FLmNhbnZhcyx0aGlzLmN0eD1FLmNvbnRleHQsdGhpcy5jdHguc2F2ZSgpLCh4PXRoaXMuY3R4KS50cmFuc2Zvcm0uYXBwbHkoeCxsKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jb21wb3NpdGVDdHgpKSl9dGhpcy5jdHguc2F2ZSgpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpLG4mJigocj10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KHIsbChuKSksdGhpcy5vdXRwdXRTY2FsZVg9blswXSx0aGlzLm91dHB1dFNjYWxlWT1uWzBdKSwoZT10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KGUsbChhLnRyYW5zZm9ybSkpLHRoaXMudmlld3BvcnRTY2FsZT1hLnNjYWxlLHRoaXMuYmFzZVRyYW5zZm9ybT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KX19LHtrZXk6ImV4ZWN1dGVPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuYXJnc0FycmF5LG89dC5mbkFycmF5LHM9ZXx8MCxsPWEubGVuZ3RoO2lmKGw9PT1zKXJldHVybiBzO2Zvcih2YXIgdSxoPWwtcz4xMCYmImZ1bmN0aW9uIj09dHlwZW9mIHIsZj1oP0RhdGUubm93KCkrMTU6MCxkPTAscD10aGlzLmNvbW1vbk9ianMsdj10aGlzLm9ianM7Oyl7aWYodm9pZCAwIT09aSYmcz09PWkubmV4dEJyZWFrUG9pbnQpcmV0dXJuIGkuYnJlYWtJdChzLHIpLHM7aWYoKHU9b1tzXSkhPT1uLk9QUy5kZXBlbmRlbmN5KXRoaXNbdV0uYXBwbHkodGhpcyxhW3NdKTtlbHNle3ZhciB5LG09YyhhW3NdKTt0cnl7Zm9yKG0ucygpOyEoeT1tLm4oKSkuZG9uZTspe3ZhciBnPXkudmFsdWUsYj1nLnN0YXJ0c1dpdGgoImdfIik/cDp2O2lmKCFiLmhhcyhnKSlyZXR1cm4gYi5nZXQoZyxyKSxzfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19aWYoKytzPT09bClyZXR1cm4gcztpZihoJiYrK2Q+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7ZD0wfX19fSx7a2V5OiJlbmREcmF3aW5nIix2YWx1ZTpmdW5jdGlvbigpe3UodGhpcyxMLE4pLmNhbGwodGhpcyksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTt2YXIgdCxlPWModGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcixuPXQudmFsdWUsaT1jKG4udmFsdWVzKCkpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTsidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQmJihhLndpZHRoPWEuaGVpZ2h0PTApfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1uLmNsZWFyKCl9fWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfXRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKX19LHtrZXk6Il9zY2FsZUltYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC53aWR0aCxhPXQuaGVpZ2h0LG89TWF0aC5tYXgoTWF0aC5oeXBvdChlWzBdLGVbMV0pLDEpLHM9TWF0aC5tYXgoTWF0aC5oeXBvdChlWzJdLGVbM10pLDEpLGw9aSx1PWEsYz0icHJlc2NhbGUxIjtvPjImJmw+MXx8cz4yJiZ1PjE7KXt2YXIgaD1sLGY9dTtvPjImJmw+MSYmKG8vPWwvKGg9TWF0aC5jZWlsKGwvMikpKSxzPjImJnU+MSYmKHMvPXUvKGY9TWF0aC5jZWlsKHUvMikpKSwobj0ocj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjLGgsZikpLmNvbnRleHQpLmNsZWFyUmVjdCgwLDAsaCxmKSxuLmRyYXdJbWFnZSh0LDAsMCxsLHUsMCwwLGgsZiksdD1yLmNhbnZhcyxsPWgsdT1mLGM9InByZXNjYWxlMSI9PT1jPyJwcmVzY2FsZTIiOiJwcmVzY2FsZTEifXJldHVybntpbWc6dCxwYWludFdpZHRoOmwscGFpbnRIZWlnaHQ6dX19fSx7a2V5OiJfY3JlYXRlTWFza0NhbnZhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixvLHMsdT10aGlzLmN0eCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXRoaXMuY3VycmVudC5maWxsQ29sb3IsZD10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHUpO2lmKCh0LmJpdG1hcHx8dC5kYXRhKSYmdC5jb3VudD4xKXt2YXIgdj10LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcjtyPUpTT04uc3RyaW5naWZ5KGQ/cDpbcC5zbGljZSgwLDQpLGZdKSwoZT10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldCh2KSl8fChlPW5ldyBNYXAsdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQodixlKSk7dmFyIHk9ZS5nZXQocik7aWYoeSYmIWQpcmV0dXJue2NhbnZhczp5LG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihwWzBdLHBbMl0pK3BbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihwWzFdLHBbM10pK3BbNV0pfTtvPXl9b3x8eCgocz10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsYyxoKSkuY29udGV4dCx0KTt2YXIgbT1uLlV0aWwudHJhbnNmb3JtKHAsWzEvYywwLDAsLTEvaCwwLDBdKTttPW4uVXRpbC50cmFuc2Zvcm0obSxbMSwwLDAsMSwwLC1oXSk7dmFyIGc9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLDBdLG0pLGI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtjLGhdLG0pLF89bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2dbMF0sZ1sxXSxiWzBdLGJbMV1dKSx3PU1hdGgucm91bmQoX1syXS1fWzBdKXx8MSxrPU1hdGgucm91bmQoX1szXS1fWzFdKXx8MSxTPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJmaWxsQ2FudmFzIix3LGspLEU9Uy5jb250ZXh0LFA9TWF0aC5taW4oZ1swXSxiWzBdKSxUPU1hdGgubWluKGdbMV0sYlsxXSk7RS50cmFuc2xhdGUoLVAsLVQpLEUudHJhbnNmb3JtLmFwcGx5KEUsbChtKSksb3x8KG89KG89dGhpcy5fc2NhbGVJbWFnZShzLmNhbnZhcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSkpLmltZyxlJiZkJiZlLnNldChyLG8pKSxFLmltYWdlU21vb3RoaW5nRW5hYmxlZD1GKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkoRSksdC5pbnRlcnBvbGF0ZSksQShFLG8sMCwwLG8ud2lkdGgsby5oZWlnaHQsMCwwLGMsaCksRS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7dmFyIEM9bi5VdGlsLnRyYW5zZm9ybSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSxbMSwwLDAsMSwtUCwtVF0pO3JldHVybiBFLmZpbGxTdHlsZT1kP2YuZ2V0UGF0dGVybih1LHRoaXMsQyxhLlBhdGhUeXBlLkZJTEwpOmYsRS5maWxsUmVjdCgwLDAsYyxoKSxlJiYhZCYmKHRoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIiksZS5zZXQocixTLmNhbnZhcykpLHtjYW52YXM6Uy5jYW52YXMsb2Zmc2V0WDpNYXRoLnJvdW5kKFApLG9mZnNldFk6TWF0aC5yb3VuZChUKX19fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLmN1cnJlbnQubGluZVdpZHRoJiYodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsKSx0aGlzLmN1cnJlbnQubGluZVdpZHRoPXQsdGhpcy5jdHgubGluZVdpZHRoPXR9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lQ2FwPU1bdF19fSx7a2V5OiJzZXRMaW5lSm9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHgubGluZUpvaW49Ult0XX19LHtrZXk6InNldE1pdGVyTGltaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldERhc2giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jdHg7dm9pZCAwIT09ci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2godCksci5saW5lRGFzaE9mZnNldD1lKX19LHtrZXk6InNldFJlbmRlcmluZ0ludGVudCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0RmxhdG5lc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe319LHtrZXk6InNldEdTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1jKHQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49aChlLnZhbHVlLDIpLGk9blswXSxhPW5bMV07c3dpdGNoKGkpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGEpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChhKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGEpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChhKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChhWzBdLGFbMV0pO2JyZWFrO2Nhc2UiUkkiOnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGEpO2JyZWFrO2Nhc2UiRkwiOnRoaXMuc2V0RmxhdG5lc3MoYSk7YnJlYWs7Y2FzZSJGb250Ijp0aGlzLnNldEZvbnQoYVswXSxhWzFdKTticmVhaztjYXNlIkNBIjp0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9YTticmVhaztjYXNlImNhIjp0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWEsdGhpcy5jdHguZ2xvYmFsQWxwaGE9YTticmVhaztjYXNlIkJNIjp0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YTticmVhaztjYXNlIlNNYXNrIjp0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9YT90aGlzLnRlbXBTTWFzazpudWxsLHRoaXMudGVtcFNNYXNrPW51bGwsdGhpcy5jaGVja1NNYXNrU3RhdGUoKTticmVhaztjYXNlIlRSIjp0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzPWF9fX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fSx7a2V5OiJpblNNYXNrTW9kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN1c3BlbmRlZEN0eH19LHtrZXk6ImNoZWNrU01hc2tTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluU01hc2tNb2RlO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzayYmIXQ/dGhpcy5iZWdpblNNYXNrTW9kZSgpOiF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJnQmJnRoaXMuZW5kU01hc2tNb2RlKCl9fSx7a2V5OiJiZWdpblNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmluU01hc2tNb2RlKXRocm93IG5ldyBFcnJvcigiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZSIpO3ZhciB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsbj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhyLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9bi5jb250ZXh0O3ZhciBhPXRoaXMuY3R4O2Euc2V0VHJhbnNmb3JtLmFwcGx5KGEsbCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSkpLEUodGhpcy5zdXNwZW5kZWRDdHgsYSksZnVuY3Rpb24odCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlLHQuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlLHQuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZSx0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlLHQuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZSx0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm0sdC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtLHQuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm0sdC5fX29yaWdpbmFsQ2xpcD10LmNsaXAsdC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvLHQuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbyx0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbyx0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdCx0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGgsdC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoLHQuX3JlbW92ZU1pcnJvcmluZz1mdW5jdGlvbigpe3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlLHQucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlLHQucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZSx0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlLHQudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZSx0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm0sdC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtLHQucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0sdC5jbGlwPXQuX19vcmlnaW5hbENsaXAsdC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvLHQubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbyx0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyx0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdCx0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGgsdC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoLGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9LHQuc2F2ZT1mdW5jdGlvbigpe2Uuc2F2ZSgpLHRoaXMuX19vcmlnaW5hbFNhdmUoKX0sdC5yZXN0b3JlPWZ1bmN0aW9uKCl7ZS5yZXN0b3JlKCksdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe2UudHJhbnNsYXRlKHQsciksdGhpcy5fX29yaWdpbmFsVHJhbnNsYXRlKHQscil9LHQuc2NhbGU9ZnVuY3Rpb24odCxyKXtlLnNjYWxlKHQsciksdGhpcy5fX29yaWdpbmFsU2NhbGUodCxyKX0sdC50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UudHJhbnNmb3JtKHQscixuLGksYSxvKSx0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4saSxhLG8pfSx0LnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixpLGEsbyl7ZS5zZXRUcmFuc2Zvcm0odCxyLG4saSxhLG8pLHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybSh0LHIsbixpLGEsbyl9LHQucmVzZXRUcmFuc2Zvcm09ZnVuY3Rpb24oKXtlLnJlc2V0VHJhbnNmb3JtKCksdGhpcy5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0oKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7ZS5yb3RhdGUodCksdGhpcy5fX29yaWdpbmFsUm90YXRlKHQpfSx0LmNsaXA9ZnVuY3Rpb24odCl7ZS5jbGlwKHQpLHRoaXMuX19vcmlnaW5hbENsaXAodCl9LHQubW92ZVRvPWZ1bmN0aW9uKHQscil7ZS5tb3ZlVG8odCxyKSx0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxyKX0sdC5saW5lVG89ZnVuY3Rpb24odCxyKXtlLmxpbmVUbyh0LHIpLHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LHIpfSx0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UuYmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyksdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyl9LHQucmVjdD1mdW5jdGlvbih0LHIsbixpKXtlLnJlY3QodCxyLG4saSksdGhpcy5fX29yaWdpbmFsUmVjdCh0LHIsbixpKX0sdC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpLHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfSx0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCksdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShhLHRoaXMuc3VzcGVuZGVkQ3R4KSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX19LHtrZXk6ImVuZFNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCksRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5jdHg9dGhpcy5zdXNwZW5kZWRDdHgsdGhpcy5zdXNwZW5kZWRDdHg9bnVsbH19LHtrZXk6ImNvbXBvc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayl7dD8odFswXT1NYXRoLmZsb29yKHRbMF0pLHRbMV09TWF0aC5mbG9vcih0WzFdKSx0WzJdPU1hdGguY2VpbCh0WzJdKSx0WzNdPU1hdGguY2VpbCh0WzNdKSk6dD1bMCwwLHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTt2YXIgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7KGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5bMF0sYT1uWzFdLG89blsyXS1pLHM9blszXS1hOzAhPT1vJiYwIT09cyYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGgsZj0hIWEsZD1mP2FbMF06MCxwPWY/YVsxXTowLHY9Zj9hWzJdOjA7aD0iTHVtaW5vc2l0eSI9PT1pP086Qztmb3IodmFyIHk9TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksbT0wO208bjttKz15KXt2YXIgZz1NYXRoLm1pbih5LG4tbSksYj10LmdldEltYWdlRGF0YShzLXUsbSsobC1jKSxyLGcpLF89ZS5nZXRJbWFnZURhdGEocyxtK2wscixnKTtmJiZUKGIuZGF0YSxkLHAsdiksaChiLmRhdGEsXy5kYXRhLG8pLGUucHV0SW1hZ2VEYXRhKF8scyxtK2wpfX0oZS5jb250ZXh0LHIsbyxzLGUuc3VidHlwZSxlLmJhY2tkcm9wLGUudHJhbnNmZXJNYXAsaSxhLGUub2Zmc2V0WCxlLm9mZnNldFkpLHQuc2F2ZSgpLHQuZ2xvYmFsQWxwaGE9MSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmRyYXdJbWFnZShyLmNhbnZhcywwLDApLHQucmVzdG9yZSgpKX0pKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCksdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCksdGhpcy5jdHgucmVzdG9yZSgpfX19LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pblNNYXNrTW9kZT8oRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpKTp0aGlzLmN0eC5zYXZlKCk7dmFyIHQ9dGhpcy5jdXJyZW50O3RoaXMuc3RhdGVTdGFjay5wdXNoKHQpLHRoaXMuY3VycmVudD10LmNsb25lKCl9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbigpezA9PT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiZ0aGlzLmluU01hc2tNb2RlJiZ0aGlzLmVuZFNNYXNrTW9kZSgpLDAhPT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiYodGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKSx0aGlzLmluU01hc2tNb2RlPyh0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCksRSh0aGlzLnN1c3BlbmRlZEN0eCx0aGlzLmN0eCkpOnRoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLmNoZWNrU01hc2tTdGF0ZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscixuLGksYSksdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH19LHtrZXk6ImNvbnN0cnVjdFBhdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGEsbyxzPXRoaXMuY3R4LGw9dGhpcy5jdXJyZW50LHU9bC54LGM9bC55LGg9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShzKSxmPTA9PT1oWzBdJiYwPT09aFszXXx8MD09PWhbMV0mJjA9PT1oWzJdLGQ9Zj9yLnNsaWNlKDApOm51bGwscD0wLHY9MCx5PXQubGVuZ3RoO3A8eTtwKyspc3dpdGNoKDB8dFtwXSl7Y2FzZSBuLk9QUy5yZWN0YW5nbGU6dT1lW3YrK10sYz1lW3YrK107dmFyIG09ZVt2KytdLGc9ZVt2KytdLGI9dSttLF89YytnO3MubW92ZVRvKHUsYyksMD09PW18fDA9PT1nP3MubGluZVRvKGIsXyk6KHMubGluZVRvKGIsYykscy5saW5lVG8oYixfKSxzLmxpbmVUbyh1LF8pKSxmfHxsLnVwZGF0ZVJlY3RNaW5NYXgoaCxbdSxjLGIsX10pLHMuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVG86dT1lW3YrK10sYz1lW3YrK10scy5tb3ZlVG8odSxjKSxmfHxsLnVwZGF0ZVBhdGhNaW5NYXgoaCx1LGMpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOnU9ZVt2KytdLGM9ZVt2KytdLHMubGluZVRvKHUsYyksZnx8bC51cGRhdGVQYXRoTWluTWF4KGgsdSxjKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86YT11LG89Yyx1PWVbdis0XSxjPWVbdis1XSxzLmJlemllckN1cnZlVG8oZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sdSxjLGQpLHYrPTY7YnJlYWs7Y2FzZSBuLk9QUy5jdXJ2ZVRvMjphPXUsbz1jLHMuYmV6aWVyQ3VydmVUbyh1LGMsZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSksbC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoaCxhLG8sdSxjLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sZCksdT1lW3YrMl0sYz1lW3YrM10sdis9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmE9dSxvPWMsdT1lW3YrMl0sYz1lW3YrM10scy5iZXppZXJDdXJ2ZVRvKGVbdl0sZVt2KzFdLHUsYyx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLHUsYyx1LGMsZCksdis9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDpzLmNsb3NlUGF0aCgpfWYmJmwudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoaCxkKSxsLnNldEN1cnJlbnRQb2ludCh1LGMpfX0se2tleToiY2xvc2VQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfX0se2tleToic3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYSx0aGlzLmNvbnRlbnRWaXNpYmxlJiYoIm9iamVjdCI9PT1wKHIpJiZudWxsIT1yJiZyLmdldFBhdHRlcm4/KGUuc2F2ZSgpLGUuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKGUsdGhpcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSxhLlBhdGhUeXBlLlNUUk9LRSksdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCExKSxlLnJlc3RvcmUoKSk6dGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKSksdCYmdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKSxlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5maWxsQWxwaGF9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbj0hMTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT1yLmdldFBhdHRlcm4oZSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLGEuUGF0aFR5cGUuRklMTCksbj0hMCk7dmFyIG89dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTt0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09byYmKHRoaXMucGVuZGluZ0VPRmlsbD8oZS5maWxsKCJldmVub2RkIiksdGhpcy5wZW5kaW5nRU9GaWxsPSExKTplLmZpbGwoKSksbiYmZS5yZXN0b3JlKCksdCYmdGhpcy5jb25zdW1lUGF0aChvKX19LHtrZXk6ImVvRmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmlsbCghMSksdGhpcy5zdHJva2UoITEpLHRoaXMuY29uc3VtZVBhdGgoKX19LHtrZXk6ImVvRmlsbFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0VPRmlsbD0hMCx0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfX0se2tleToiZW5kUGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9SX19LHtrZXk6ImVvQ2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPWp9fSx7a2V5OiJiZWdpblRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpO3ZhciByLG49Yyh0KTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSxsKGkudHJhbnNmb3JtKSksZS50cmFuc2xhdGUoaS54LGkueSksaS5hZGRUb1BhdGgoZSxpLmZvbnRTaXplKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9ZS5yZXN0b3JlKCksZS5jbGlwKCksZS5iZWdpblBhdGgoKSxkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzfWVsc2UgZS5iZWdpblBhdGgoKX19LHtrZXk6InNldENoYXJTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH19LHtrZXk6InNldFdvcmRTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH19LHtrZXk6InNldEhTY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9fSx7a2V5OiJzZXRMZWFkaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldCh0KSxpPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQodCkpO2lmKGkuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWkuZm9udE1hdHJpeFswXSYmMCE9PWkuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpLGU8MD8oZT0tZSxpLmZvbnREaXJlY3Rpb249LTEpOmkuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPWUsIXIuaXNUeXBlM0ZvbnQpe3ZhciBhPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89Im5vcm1hbCI7ci5ibGFjaz9vPSI5MDAiOnIuYm9sZCYmKG89ImJvbGQiKTt2YXIgcz1yLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIixsPSciJy5jb25jYXQoYSwnIiwgJykuY29uY2F0KHIuZmFsbGJhY2tOYW1lKSx1PWU7ZTwxNj91PTE2OmU+MTAwJiYodT0xMDApLHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvdSx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQodSwicHggIikuY29uY2F0KGwpfX19LHtrZXk6InNldFRleHRSZW5kZXJpbmdNb2RlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH19LHtrZXk6InNldFRleHRSaXNlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPWV9fSx7a2V5OiJzZXRMZWFkaW5nTW92ZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKSx0aGlzLm1vdmVUZXh0KHQsZSl9fSx7a2V5OiJzZXRUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9W3QsZSxyLG4saSxhXSx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSx0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH19LHtrZXk6Im5leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9fSx7a2V5OiJwYWludENoYXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9dGhpcy5jdHgsdT10aGlzLmN1cnJlbnQsYz11LmZvbnQsaD11LnRleHRSZW5kZXJpbmdNb2RlLGY9dS5mb250U2l6ZS91LmZvbnRTaXplU2NhbGUsZD1oJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxwPSEhKGgmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSx2PXUucGF0dGVybkZpbGwmJiFjLm1pc3NpbmdGaWxlOyhjLmRpc2FibGVGb250RmFjZXx8cHx8dikmJihvPWMuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsdCkpLGMuZGlzYWJsZUZvbnRGYWNlfHx2PyhzLnNhdmUoKSxzLnRyYW5zbGF0ZShlLHIpLHMuYmVnaW5QYXRoKCksbyhzLGYpLGEmJnMuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbChhKSksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuZmlsbCgpLGQhPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpOihkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5maWxsVGV4dCh0LGUsciksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5zdHJva2VUZXh0KHQsZSxyKSkscCYmKHRoaXMucGVuZGluZ1RleHRQYXRoc3x8KHRoaXMucGVuZGluZ1RleHRQYXRocz1bXSkpLnB1c2goe3RyYW5zZm9ybTooMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLHg6ZSx5OnIsZm9udFNpemU6ZixhZGRUb1BhdGg6b30pfX0se2tleToiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsMTAsMTApLmNvbnRleHQ7dC5zY2FsZSgxLjUsMSksdC5maWxsVGV4dCgiSSIsMCwxMCk7Zm9yKHZhciBlPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxMCwxMCkuZGF0YSxyPSExLGk9MztpPGUubGVuZ3RoO2krPTQpaWYoZVtpXT4wJiZlW2ldPDI1NSl7cj0hMDticmVha31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLHIpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7dmFyIG89ZS5mb250U2l6ZTtpZigwIT09byl7dmFyIHMsdT10aGlzLmN0eCxoPWUuZm9udFNpemVTY2FsZSxmPWUuY2hhclNwYWNpbmcsZD1lLndvcmRTcGFjaW5nLHA9ZS5mb250RGlyZWN0aW9uLHY9ZS50ZXh0SFNjYWxlKnAseT10Lmxlbmd0aCxtPXIudmVydGljYWwsZz1tPzE6LTEsYj1yLmRlZmF1bHRWTWV0cmljcyxfPW8qZS5mb250TWF0cml4WzBdLHc9ZS50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhZS5wYXR0ZXJuRmlsbDtpZih1LnNhdmUoKSx1LnRyYW5zZm9ybS5hcHBseSh1LGwoZS50ZXh0TWF0cml4KSksdS50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKSxwPjA/dS5zY2FsZSh2LC0xKTp1LnNjYWxlKHYsMSksZS5wYXR0ZXJuRmlsbCl7dS5zYXZlKCk7dmFyIEE9ZS5maWxsQ29sb3IuZ2V0UGF0dGVybih1LHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkodSksYS5QYXRoVHlwZS5GSUxMKTtzPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodSksdS5yZXN0b3JlKCksdS5maWxsU3R5bGU9QX12YXIgaz1lLmxpbmVXaWR0aCxTPWUudGV4dE1hdHJpeFNjYWxlO2lmKDA9PT1TfHwwPT09ayl7dmFyIHg9ZS50ZXh0UmVuZGVyaW5nTW9kZSZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7eCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZ4IT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8KGs9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2Ugay89UztpZigxIT09aCYmKHUuc2NhbGUoaCxoKSxrLz1oKSx1LmxpbmVXaWR0aD1rLHIuaXNJbnZhbGlkUERGanNGb250KXt2YXIgRSxQPVtdLFQ9MCxDPWModCk7dHJ5e2ZvcihDLnMoKTshKEU9Qy5uKCkpLmRvbmU7KXt2YXIgTz1FLnZhbHVlO1AucHVzaChPLnVuaWNvZGUpLFQrPU8ud2lkdGh9fWNhdGNoKHQpe0MuZSh0KX1maW5hbGx5e0MuZigpfXJldHVybiB1LmZpbGxUZXh0KFAuam9pbigiIiksMCwwKSxlLngrPVQqXyp2LHUucmVzdG9yZSgpLHZvaWQgdGhpcy5jb21wb3NlKCl9dmFyIEYsTT0wO2ZvcihGPTA7Rjx5OysrRil7dmFyIFI9dFtGXTtpZigibnVtYmVyIiE9dHlwZW9mIFIpe3ZhciBJPSExLGo9KFIuaXNTcGFjZT9kOjApK2YsTD1SLmZvbnRDaGFyLEQ9Ui5hY2NlbnQsTj12b2lkIDAsVT12b2lkIDAsVz1SLndpZHRoO2lmKG0pe3ZhciBHPVIudm1ldHJpY3x8YixCPS0oUi52bWV0cmljP0dbMV06LjUqVykqXyxxPUdbMl0qXztXPUc/LUdbMF06VyxOPUIvaCxVPShNK3EpL2h9ZWxzZSBOPU0vaCxVPTA7aWYoci5yZW1lYXN1cmUmJlc+MCl7dmFyIEg9MWUzKnUubWVhc3VyZVRleHQoTCkud2lkdGgvbypoO2lmKFc8SCYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIHo9Vy9IO0k9ITAsdS5zYXZlKCksdS5zY2FsZSh6LDEpLE4vPXp9ZWxzZSBXIT09SCYmKE4rPShXLUgpLzJlMypvL2gpfWlmKHRoaXMuY29udGVudFZpc2libGUmJihSLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSlpZih3JiYhRCl1LmZpbGxUZXh0KEwsTixVKTtlbHNlIGlmKHRoaXMucGFpbnRDaGFyKEwsTixVLHMpLEQpe3ZhciBWPU4rbypELm9mZnNldC54L2gsWD1VLW8qRC5vZmZzZXQueS9oO3RoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsVixYLHMpfU0rPW0/VypfLWoqcDpXKl8raipwLEkmJnUucmVzdG9yZSgpfWVsc2UgTSs9ZypSKm8vMWUzfW0/ZS55LT1NOmUueCs9TSp2LHUucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InNob3dUeXBlM1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsdT1zLmZvbnQsYz1zLmZvbnRTaXplLGg9cy5mb250RGlyZWN0aW9uLGY9dS52ZXJ0aWNhbD8xOi0xLGQ9cy5jaGFyU3BhY2luZyxwPXMud29yZFNwYWNpbmcsdj1zLnRleHRIU2NhbGUqaCx5PXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxtPXQubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsLG8uc2F2ZSgpLG8udHJhbnNmb3JtLmFwcGx5KG8sbChzLnRleHRNYXRyaXgpKSxvLnRyYW5zbGF0ZShzLngscy55KSxvLnNjYWxlKHYsaCksZT0wO2U8bTsrK2UpaWYoIm51bWJlciIhPXR5cGVvZihyPXRbZV0pKXt2YXIgZz0oci5pc1NwYWNlP3A6MCkrZCxiPXUuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07Yj8odGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMucHJvY2Vzc2luZ1R5cGUzPXIsdGhpcy5zYXZlKCksby5zY2FsZShjLGMpLG8udHJhbnNmb3JtLmFwcGx5KG8sbCh5KSksdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KGIpLHRoaXMucmVzdG9yZSgpKSxpPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbci53aWR0aCwwXSx5KVswXSpjK2csby50cmFuc2xhdGUoaSwwKSxzLngrPWkqdik6KDAsbi53YXJuKSgnVHlwZTMgY2hhcmFjdGVyICInLmNvbmNhdChyLm9wZXJhdG9yTGlzdElkLCciIGlzIG5vdCBhdmFpbGFibGUuJykpfWVsc2UgYT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGEsMCkscy54Kz1hKnY7by5yZXN0b3JlKCksdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19fSx7a2V5OiJzZXRDaGFyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToic2V0Q2hhcldpZHRoQW5kQm91bmRzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdHgucmVjdChyLG4saS1yLGEtbiksdGhpcy5jdHguY2xpcCgpLHRoaXMuZW5kUGF0aCgpfX0se2tleToiZ2V0Q29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZigiVGlsaW5nUGF0dGVybiI9PT1lWzBdKXt2YXIgbz1lWzFdLHM9dGhpcy5iYXNlVHJhbnNmb3JtfHwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxsPXtjcmVhdGVDYW52YXNHcmFwaGljczpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSxuLmNvbW1vbk9ianMsbi5vYmpzLG4uY2FudmFzRmFjdG9yeSx7b3B0aW9uYWxDb250ZW50Q29uZmlnOm4ub3B0aW9uYWxDb250ZW50Q29uZmlnLG1hcmtlZENvbnRlbnRTdGFjazpuLm1hcmtlZENvbnRlbnRTdGFja30pfX07cj1uZXcgYS5UaWxpbmdQYXR0ZXJuKGUsbyx0aGlzLmN0eCxsLHMpfWVsc2Ugcj10aGlzLl9nZXRQYXR0ZXJuKGVbMV0sZVsyXSk7cmV0dXJuIHJ9fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKX19LHtrZXk6InNldEZpbGxDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyksdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsPSEwfX0se2tleToic2V0U3Ryb2tlUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LnN0cm9rZVN0eWxlPWEsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWF9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LmZpbGxTdHlsZT1hLHRoaXMuY3VycmVudC5maWxsQ29sb3I9YSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITF9fSx7a2V5OiJfZ2V0UGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCk/ZT10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTooZT0oMCxhLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLm9ianMuZ2V0KHQpKSx0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LGUpKSxyJiYoZS5tYXRyaXg9ciksZX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmN0eDt0aGlzLnNhdmUoKTt2YXIgcj10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXIuZ2V0UGF0dGVybihlLHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksYS5QYXRoVHlwZS5TSEFESU5HKTt2YXIgbz0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKTtpZihvKXt2YXIgcz1lLmNhbnZhcyxsPXMud2lkdGgsdT1zLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxvKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCx1XSxvKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCwwXSxvKSxkPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCx1XSxvKSxwPU1hdGgubWluKGNbMF0saFswXSxmWzBdLGRbMF0pLHY9TWF0aC5taW4oY1sxXSxoWzFdLGZbMV0sZFsxXSkseT1NYXRoLm1heChjWzBdLGhbMF0sZlswXSxkWzBdKSxtPU1hdGgubWF4KGNbMV0saFsxXSxmWzFdLGRbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KHAsdix5LXAsbS12KX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpLHRoaXMucmVzdG9yZSgpfX19LHtrZXk6ImJlZ2luSW5saW5lSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9fSx7a2V5OiJiZWdpbkltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KHQpJiY2PT09dC5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbCh0KSksdGhpcy5iYXNlVHJhbnNmb3JtPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLGUpKXt2YXIgcj1lWzJdLWVbMF0sbj1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0scixuKSx0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxlKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0RW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGVudFZpc2libGUmJih0aGlzLnJlc3RvcmUoKSx0aGlzLmJhc2VUcmFuc2Zvcm09dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCkpfX0se2tleToiYmVnaW5Hcm91cCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCksdGhpcy5pblNNYXNrTW9kZSYmKHRoaXMuZW5kU01hc2tNb2RlKCksdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPW51bGwpO3ZhciBlPXRoaXMuY3R4O3QuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSx0Lmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO2lmKHQubWF0cml4JiZlLnRyYW5zZm9ybS5hcHBseShlLGwodC5tYXRyaXgpKSwhdC5iYm94KXRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpO3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSksbz1bMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF07YT1uLlV0aWwuaW50ZXJzZWN0KGEsbyl8fFswLDAsMCwwXTt2YXIgcz1NYXRoLmZsb29yKGFbMF0pLHU9TWF0aC5mbG9vcihhWzFdKSxjPU1hdGgubWF4KE1hdGguY2VpbChhWzJdKS1zLDEpLGg9TWF0aC5tYXgoTWF0aC5jZWlsKGFbM10pLXUsMSksZj0xLGQ9MTtjPmcmJihmPWMvZyxjPWcpLGg+ZyYmKGQ9aC9nLGg9ZyksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3goWzAsMCxjLGhdKTt2YXIgcD0iZ3JvdXBBdCIrdGhpcy5ncm91cExldmVsO3Quc21hc2smJihwKz0iX3NtYXNrXyIrdGhpcy5zbWFza0NvdW50ZXIrKyUyKTt2YXIgdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhwLGMsaCkseT12LmNvbnRleHQ7eS5zY2FsZSgxL2YsMS9kKSx5LnRyYW5zbGF0ZSgtcywtdSkseS50cmFuc2Zvcm0uYXBwbHkoeSxsKHIpKSx0LnNtYXNrP3RoaXMuc21hc2tTdGFjay5wdXNoKHtjYW52YXM6di5jYW52YXMsY29udGV4dDp5LG9mZnNldFg6cyxvZmZzZXRZOnUsc2NhbGVYOmYsc2NhbGVZOmQsc3VidHlwZTp0LnNtYXNrLnN1YnR5cGUsYmFja2Ryb3A6dC5zbWFzay5iYWNrZHJvcCx0cmFuc2Zlck1hcDp0LnNtYXNrLnRyYW5zZmVyTWFwfHxudWxsLHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTpudWxsfSk6KGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnRyYW5zbGF0ZShzLHUpLGUuc2NhbGUoZixkKSxlLnNhdmUoKSksRShlLHkpLHRoaXMuY3R4PXksdGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSksdGhpcy5ncm91cFN0YWNrLnB1c2goZSksdGhpcy5ncm91cExldmVsKyt9fX0se2tleToiZW5kR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuZ3JvdXBMZXZlbC0tO3ZhciBlPXRoaXMuY3R4LHI9dGhpcy5ncm91cFN0YWNrLnBvcCgpO2lmKHRoaXMuY3R4PXIsdGhpcy5jdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHQuc21hc2spdGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpLHRoaXMucmVzdG9yZSgpO2Vsc2V7dmFyIGE7dGhpcy5jdHgucmVzdG9yZSgpO3ZhciBvPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO3RoaXMucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSwoYT10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KGEsbChvKSk7dmFyIHM9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XSxvKTt0aGlzLmN0eC5kcmF3SW1hZ2UoZS5jYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy5jb21wb3NlKHMpfX19fSx7a2V5OiJiZWdpbkFubm90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM7aWYodSh0aGlzLEwsTikuY2FsbCh0aGlzKSxQKHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiYocz10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbCh0aGlzLmJhc2VUcmFuc2Zvcm0pKSxBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGgpe3ZhciBjPWVbMl0tZVswXSxmPWVbM10tZVsxXTtpZihvJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhyPXIuc2xpY2UoKSlbNF0tPWVbMF0scls1XS09ZVsxXSwoZT1lLnNsaWNlKCkpWzBdPWVbMV09MCxlWzJdPWMsZVszXT1mO3ZhciBkPWgobi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSwyKSxwPWRbMF0sdj1kWzFdLHk9dGhpcy52aWV3cG9ydFNjYWxlLG09TWF0aC5jZWlsKGMqdGhpcy5vdXRwdXRTY2FsZVgqeSksZz1NYXRoLmNlaWwoZip0aGlzLm91dHB1dFNjYWxlWSp5KTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShtLGcpO3ZhciBiPXRoaXMuYW5ub3RhdGlvbkNhbnZhcyxfPWIuY2FudmFzLHc9Yi5jb250ZXh0O3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCxfKSx0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9dyx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0ocCwwLDAsLXYsMCxmKnYpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpfWVsc2UgUCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvciksdGhpcy5jdHgucmVjdChlWzBdLGVbMV0sYyxmKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5lbmRQYXRoKCl9dGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLGwocikpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbChhKSl9fSx7a2V5OiJlbmRBbm5vdGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbkNhbnZhcyYmKHRoaXMuY3R4PXRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCxkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4LGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMpfX0se2tleToicGFpbnRJbWFnZU1hc2tYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10LmNvdW50Oyh0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KSkuY291bnQ9ZTt2YXIgcj10aGlzLmN0eCxuPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKG4mJih2b2lkIDA9PT1uLmNvbXBpbGVkJiYobi5jb21waWxlZD1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQ7aWYoZT5ifHxyPmIpcmV0dXJuIG51bGw7dmFyIG4saSxhLG8scz1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxsPWUrMSx1PW5ldyBVaW50OEFycmF5KGwqKHIrMSkpLGg9ZSs3Ji04LGY9bmV3IFVpbnQ4QXJyYXkoaCpyKSxkPTAscD1jKHQuZGF0YSk7dHJ5e2ZvcihwLnMoKTshKG89cC5uKCkpLmRvbmU7KWZvcih2YXIgdj1vLnZhbHVlLHk9MTI4O3k+MDspZltkKytdPXYmeT8wOjI1NSx5Pj49MX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX12YXIgbT0wO2ZvcigwIT09ZltkPTBdJiYodVswXT0xLCsrbSksaT0xO2k8ZTtpKyspZltkXSE9PWZbZCsxXSYmKHVbaV09ZltkXT8yOjEsKyttKSxkKys7Zm9yKDAhPT1mW2RdJiYodVtpXT0yLCsrbSksbj0xO248cjtuKyspe2E9bipsLGZbKGQ9bipoKS1oXSE9PWZbZF0mJih1W2FdPWZbZF0/MTo4LCsrbSk7dmFyIGc9KGZbZF0/NDowKSsoZltkLWhdPzg6MCk7Zm9yKGk9MTtpPGU7aSsrKXNbZz0oZz4+MikrKGZbZCsxXT80OjApKyhmW2QtaCsxXT84OjApXSYmKHVbYStpXT1zW2ddLCsrbSksZCsrO2lmKGZbZC1oXSE9PWZbZF0mJih1W2EraV09ZltkXT8yOjQsKyttKSxtPjFlMylyZXR1cm4gbnVsbH1mb3IoYT1uKmwsMCE9PWZbZD1oKihyLTEpXSYmKHVbYV09OCwrK20pLGk9MTtpPGU7aSsrKWZbZF0hPT1mW2QrMV0mJih1W2EraV09ZltkXT80OjgsKyttKSxkKys7aWYoMCE9PWZbZF0mJih1W2EraV09NCwrK20pLG0+MWUzKXJldHVybiBudWxsO3ZhciBfPW5ldyBJbnQzMkFycmF5KFswLGwsLTEsMCwtbCwwLDAsMCwxXSksdz1uZXcgUGF0aDJEO2ZvcihuPTA7bSYmbjw9cjtuKyspe2Zvcih2YXIgQT1uKmwsaz1BK2U7QTxrJiYhdVtBXTspQSsrO2lmKEEhPT1rKXt3Lm1vdmVUbyhBJWwsbik7dmFyIFM9QSx4PXVbQV07ZG97dmFyIEU9X1t4XTtkb3tBKz1FfXdoaWxlKCF1W0FdKTt2YXIgUD11W0FdOzUhPT1QJiYxMCE9PVA/KHg9UCx1W0FdPTApOih4PVAmNTEqeD4+NCx1W0FdJj14Pj4yfHg8PDIpLHcubGluZVRvKEElbCxBL2x8MCksdVtBXXx8LS1tfXdoaWxlKFMhPT1BKTstLW59fXJldHVybiBmPW51bGwsdT1udWxsLGZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2NhbGUoMS9lLC0xL3IpLHQudHJhbnNsYXRlKDAsLXIpLHQuZmlsbCh3KSx0LmJlZ2luUGF0aCgpLHQucmVzdG9yZSgpfX0odCkpLG4uY29tcGlsZWQpKW4uY29tcGlsZWQocik7ZWxzZXt2YXIgaT10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpLGE9aS5jYW52YXM7ci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZHJhd0ltYWdlKGEsaS5vZmZzZXRYLGkub2Zmc2V0WSksci5yZXN0b3JlKCksdGhpcy5jb21wb3NlKCl9fX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTt2YXIgbD10aGlzLmN0eDtsLnNhdmUoKTt2YXIgdT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGwpO2wudHJhbnNmb3JtKGUscixhLG8sMCwwKTt2YXIgYz10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpO2wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYy5vZmZzZXRYLXVbNF0sYy5vZmZzZXRZLXVbNV0pO2Zvcih2YXIgZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrPTIpe3ZhciBwPW4uVXRpbC50cmFuc2Zvcm0odSxbZSxyLGEsbyxzW2ZdLHNbZisxXV0pLHY9aChuLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0scCksMikseT12WzBdLG09dlsxXTtsLmRyYXdJbWFnZShjLmNhbnZhcyx5LG0pfWwucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZSxyPXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixvPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxzPWModCk7dHJ5e2ZvcihzLnMoKTshKGU9cy5uKCkpLmRvbmU7KXt2YXIgdT1lLnZhbHVlLGg9dS5kYXRhLGY9dS53aWR0aCxkPXUuaGVpZ2h0LHA9dS50cmFuc2Zvcm0sdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsZixkKSx5PXYuY29udGV4dDt5LnNhdmUoKSx4KHksdGhpcy5nZXRPYmplY3QoaCx1KSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIseS5maWxsU3R5bGU9bz9uLmdldFBhdHRlcm4oeSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHIpLGEuUGF0aFR5cGUuRklMTCk6bix5LmZpbGxSZWN0KDAsMCxmLGQpLHkucmVzdG9yZSgpLHIuc2F2ZSgpLHIudHJhbnNmb3JtLmFwcGx5KHIsbChwKSksci5zY2FsZSgxLC0xKSxBKHIsdi5jYW52YXMsMCwwLGYsZCwwLC0xLDEsMSksci5yZXN0b3JlKCl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpKXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgYT10aGlzLmdldE9iamVjdCh0KTtpZihhKXtmb3IodmFyIG89YS53aWR0aCxzPWEuaGVpZ2h0LGw9W10sdT0wLGM9aS5sZW5ndGg7dTxjO3UrPTIpbC5wdXNoKHt0cmFuc2Zvcm06W2UsMCwwLHIsaVt1XSxpW3UrMV1dLHg6MCx5OjAsdzpvLGg6c30pO3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChhLGwpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9fX0se2tleToicGFpbnRJbmxpbmVJbWFnZVhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGE9dGhpcy5jdHg7aWYodGhpcy5zYXZlKCksYS5zY2FsZSgxL3IsLTEvbiksImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpZT10O2Vsc2V7dmFyIG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pO1Moby5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyksZT1vLmNhbnZhc312YXIgcz10aGlzLl9zY2FsZUltYWdlKGUsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoYSkpO2EuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPUYoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSx0LmludGVycG9sYXRlKSxBKGEscy5pbWcsMCwwLHMucGFpbnRXaWR0aCxzLnBhaW50SGVpZ2h0LDAsLW4scixuKSx0aGlzLmNvbXBvc2UoKSx0aGlzLnJlc3RvcmUoKX19fSx7a2V5OiJwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciByPXRoaXMuY3R4LG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixuLGkpO1MoYS5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7dmFyIG8scz1jKGUpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtyLnNhdmUoKSxyLnRyYW5zZm9ybS5hcHBseShyLGwodS50cmFuc2Zvcm0pKSxyLnNjYWxlKDEsLTEpLEEocixhLmNhbnZhcyx1LngsdS55LHUudyx1LmgsMCwtMSwxLDEpLHIucmVzdG9yZSgpfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX10aGlzLmNvbXBvc2UoKX19fSx7a2V5OiJwYWludFNvbGlkQ29sb3JJbWFnZU1hc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpLHRoaXMuY29tcG9zZSgpKX19LHtrZXk6Im1hcmtQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToibWFya1BvaW50UHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToiYmVnaW5NYXJrZWRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9fSx7a2V5OiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiZW5kTWFya2VkQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiYmVnaW5Db21wYXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiZW5kQ29tcGF0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImNvbnN1bWVQYXRoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQuaXNFbXB0eUNsaXAoKTt0aGlzLnBlbmRpbmdDbGlwJiZ0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCksdGhpcy5wZW5kaW5nQ2xpcHx8dGhpcy5jb21wb3NlKHQpO3ZhciByPXRoaXMuY3R4O3RoaXMucGVuZGluZ0NsaXAmJihlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWo/ci5jbGlwKCJldmVub2RkIik6ci5jbGlwKCkpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godGhpcy5jdXJyZW50LmNsaXBCb3gpLHIuYmVnaW5QYXRoKCl9fSx7a2V5OiJnZXRTaW5nbGVQaXhlbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtpZigwPT09dFsxXSYmMD09PXRbMl0pdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD0xL01hdGgubWluKE1hdGguYWJzKHRbMF0pLE1hdGguYWJzKHRbM10pKTtlbHNle3ZhciBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHI9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLG49TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocixuKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH19LHtrZXk6ImdldFNjYWxlRm9yU3Ryb2tpbmciLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe3ZhciB0LGUscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PW5bMV0mJjA9PT1uWzJdKXt2YXIgYT1NYXRoLmFicyhuWzBdKSxvPU1hdGguYWJzKG5bM10pO2lmKDA9PT1yKXQ9MS9hLGU9MS9vO2Vsc2V7dmFyIHM9YSpyLGw9bypyO3Q9czwxPzEvczoxLGU9bDwxPzEvbDoxfX1lbHNle3ZhciB1PU1hdGguYWJzKG5bMF0qblszXS1uWzJdKm5bMV0pLGM9TWF0aC5oeXBvdChuWzBdLG5bMV0pLGg9TWF0aC5oeXBvdChuWzJdLG5bM10pO2lmKDA9PT1yKXQ9aC91LGU9Yy91O2Vsc2V7dmFyIGY9cip1O3Q9aD5mP2gvZjoxLGU9Yz5mP2MvZjoxfX10aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPVt0LGVdfXJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nfX0se2tleToicmVzY2FsZUFuZFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49aCh0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKSwyKSxhPW5bMF0sbz1uWzFdO2lmKGUubGluZVdpZHRoPXJ8fDEsMSE9PWF8fDEhPT1vKXt2YXIgcyx1LGM7dCYmKHM9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSx1PWUuZ2V0TGluZURhc2goKS5zbGljZSgpLGM9ZS5saW5lRGFzaE9mZnNldCksZS5zY2FsZShhLG8pO3ZhciBmPU1hdGgubWF4KGEsbyk7ZS5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9mfSkpKSxlLmxpbmVEYXNoT2Zmc2V0Lz1mLGUuc3Ryb2tlKCksdCYmKGUuc2V0VHJhbnNmb3JtLmFwcGx5KGUsbChzKSksZS5zZXRMaW5lRGFzaCh1KSxlLmxpbmVEYXNoT2Zmc2V0PWMpfWVsc2UgZS5zdHJva2UoKX19LHtrZXk6ImlzQ29udGVudFZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1t0XS52aXNpYmxlKXJldHVybiExO3JldHVybiEwfX1dKSx0fSgpO2Z1bmN0aW9uIE4oKXtmb3IoO3RoaXMuc3RhdGVTdGFjay5sZW5ndGh8fHRoaXMuaW5TTWFza01vZGU7KXRoaXMucmVzdG9yZSgpO3RoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLnRyYW5zcGFyZW50Q2FudmFzJiYodGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHgsdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsKX1mb3IodmFyIFUgaW4gZS5DYW52YXNHcmFwaGljcz1ELG4uT1BTKXZvaWQgMCE9PUQucHJvdG90eXBlW1VdJiYoRC5wcm90b3R5cGVbbi5PUFNbVV1dPUQucHJvdG90eXBlW1VdKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpbGluZ1BhdHRlcm49ZS5QYXRoVHlwZT12b2lkIDAsZS5nZXRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbih0KXtzd2l0Y2godFswXSl7Y2FzZSJSYWRpYWxBeGlhbCI6cmV0dXJuIG5ldyB3KHQpO2Nhc2UiTWVzaCI6cmV0dXJuIG5ldyBTKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgeH10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQodFswXSkpfTt2YXIgbj1yKDEpLGk9cigxMzcpLGE9cigzKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB1KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LGgodCxlKX1mdW5jdGlvbiBmKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQodCk7aWYoZSl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGkpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1wKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxkKHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz17RklMTDoiRmlsbCIsU1RST0tFOiJTdHJva2UiLFNIQURJTkc6IlNoYWRpbmcifTtmdW5jdGlvbiBiKHQsZSl7aWYoZSYmIWEuaXNOb2RlSlMpe3ZhciByPWVbMl0tZVswXSxuPWVbM10tZVsxXSxpPW5ldyBQYXRoMkQ7aS5yZWN0KGVbMF0sZVsxXSxyLG4pLHQuY2xpcChpKX19ZS5QYXRoVHlwZT1nO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YodGhpcyx0KSx0aGlzLmNvbnN0cnVjdG9yPT09dCYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKX19XSksdH0oKSx3PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl90eXBlPXRbMV0sbi5fYmJveD10WzJdLG4uX2NvbG9yU3RvcHM9dFszXSxuLl9wMD10WzRdLG4uX3AxPXRbNV0sbi5fcjA9dFs2XSxuLl9yMT10WzddLG4ubWF0cml4PW51bGwsbn1yZXR1cm4gbShyLFt7a2V5OiJfY3JlYXRlR3JhZGllbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlOyJheGlhbCI9PT10aGlzLl90eXBlP2U9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSk6InJhZGlhbCI9PT10aGlzLl90eXBlJiYoZT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLHRoaXMuX3AwWzFdLHRoaXMuX3IwLHRoaXMuX3AxWzBdLHRoaXMuX3AxWzFdLHRoaXMuX3IxKSk7dmFyIHIsbj1zKHRoaXMuX2NvbG9yU3RvcHMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtlLmFkZENvbG9yU3RvcChpWzBdLGlbMV0pfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gZX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzO2lmKGE9PT1nLlNUUk9LRXx8YT09PWcuRklMTCl7dmFyIGw9ZS5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goYSwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKXx8WzAsMCwwLDBdLHU9TWF0aC5jZWlsKGxbMl0tbFswXSl8fDEsYz1NYXRoLmNlaWwobFszXS1sWzFdKXx8MSxoPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIix1LGMsITApLGY9aC5jb250ZXh0O2YuY2xlYXJSZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYuYmVnaW5QYXRoKCksZi5yZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYudHJhbnNsYXRlKC1sWzBdLC1sWzFdKSxyPW4uVXRpbC50cmFuc2Zvcm0ocixbMSwwLDAsMSxsWzBdLGxbMV1dKSxmLnRyYW5zZm9ybS5hcHBseShmLG8oZS5iYXNlVHJhbnNmb3JtKSksdGhpcy5tYXRyaXgmJmYudHJhbnNmb3JtLmFwcGx5KGYsbyh0aGlzLm1hdHJpeCkpLGIoZix0aGlzLl9iYm94KSxmLmZpbGxTdHlsZT10aGlzLl9jcmVhdGVHcmFkaWVudChmKSxmLmZpbGwoKSxzPXQuY3JlYXRlUGF0dGVybihoLmNhbnZhcywibm8tcmVwZWF0Iik7dmFyIGQ9bmV3IERPTU1hdHJpeChyKTtzLnNldFRyYW5zZm9ybShkKX1lbHNlIGIodCx0aGlzLl9iYm94KSxzPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpO3JldHVybiBzfX1dKSxyfShfKTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdT1lLmNvb3JkcyxjPWUuY29sb3JzLGg9dC5kYXRhLGY9NCp0LndpZHRoO3VbcisxXT51W24rMV0mJihsPXIscj1uLG49bCxsPWEsYT1vLG89bCksdVtuKzFdPnVbaSsxXSYmKGw9bixuPWksaT1sLGw9byxvPXMscz1sKSx1W3IrMV0+dVtuKzFdJiYobD1yLHI9bixuPWwsbD1hLGE9byxvPWwpO3ZhciBkPSh1W3JdK2Uub2Zmc2V0WCkqZS5zY2FsZVgscD0odVtyKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVksdj0odVtuXStlLm9mZnNldFgpKmUuc2NhbGVYLHk9KHVbbisxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KHVbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxnPSh1W2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWTtpZighKHA+PWcpKWZvcih2YXIgYixfLHcsQSxrLFMseCxFLFA9Y1thXSxUPWNbYSsxXSxDPWNbYSsyXSxPPWNbb10sRj1jW28rMV0sTT1jW28rMl0sUj1jW3NdLEk9Y1tzKzFdLGo9Y1tzKzJdLEw9TWF0aC5yb3VuZChwKSxEPU1hdGgucm91bmQoZyksTj1MO048PUQ7TisrKXtpZihOPHkpe3ZhciBVO2I9ZC0oZC12KSooVT1OPHA/MDoocC1OKS8ocC15KSksXz1QLShQLU8pKlUsdz1ULShULUYpKlUsQT1DLShDLU0pKlV9ZWxzZXt2YXIgVztiPXYtKHYtbSkqKFc9Tj5nPzE6eT09PWc/MDooeS1OKS8oeS1nKSksXz1PLShPLVIpKlcsdz1GLShGLUkpKlcsQT1NLShNLWopKld9dmFyIEc9dm9pZCAwO2s9ZC0oZC1tKSooRz1OPHA/MDpOPmc/MToocC1OKS8ocC1nKSksUz1QLShQLVIpKkcseD1ULShULUkpKkcsRT1DLShDLWopKkc7Zm9yKHZhciBCPU1hdGgucm91bmQoTWF0aC5taW4oYixrKSkscT1NYXRoLnJvdW5kKE1hdGgubWF4KGIsaykpLEg9ZipOKzQqQix6PUI7ejw9cTt6KyspKEc9KGIteikvKGItaykpPDA/Rz0wOkc+MSYmKEc9MSksaFtIKytdPV8tKF8tUykqR3wwLGhbSCsrXT13LSh3LXgpKkd8MCxoW0grK109QS0oQS1FKSpHfDAsaFtIKytdPTI1NX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saSxhPWUuY29vcmRzLG89ZS5jb2xvcnM7c3dpdGNoKGUudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgcz1lLnZlcnRpY2VzUGVyUm93LGw9TWF0aC5mbG9vcihhLmxlbmd0aC9zKS0xLHU9cy0xO2ZvcihuPTA7bjxsO24rKylmb3IodmFyIGM9bipzLGg9MDtoPHU7aCsrLGMrKylBKHQscixhW2NdLGFbYysxXSxhW2Mrc10sb1tjXSxvW2MrMV0sb1tjK3NdKSxBKHQscixhW2MrcysxXSxhW2MrMV0sYVtjK3NdLG9bYytzKzFdLG9bYysxXSxvW2Mrc10pO2JyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rPTMpQSh0LHIsYVtuXSxhW24rMV0sYVtuKzJdLG9bbl0sb1tuKzFdLG9bbisyXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgZmlndXJlIil9fXZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl9jb29yZHM9dFsyXSxuLl9jb2xvcnM9dFszXSxuLl9maWd1cmVzPXRbNF0sbi5fYm91bmRzPXRbNV0sbi5fYmJveD10WzddLG4uX2JhY2tncm91bmQ9dFs4XSxuLm1hdHJpeD1udWxsLG59cmV0dXJuIG0ocixbe2tleToiX2NyZWF0ZU1lc2hDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSksYT1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1uLG89TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktaSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMF0qMS4xKSksM2UzKSx1PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhvKnRbMV0qMS4xKSksM2UzKSxjPWEvbCxoPW8vdSxmPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotbixvZmZzZXRZOi1pLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sZD1sKzQscD11KzQsdj1yLmdldENhbnZhcygibWVzaCIsZCxwLCExKSx5PXYuY29udGV4dCxtPXkuY3JlYXRlSW1hZ2VEYXRhKGwsdSk7aWYoZSlmb3IodmFyIGc9bS5kYXRhLGI9MCxfPWcubGVuZ3RoO2I8XztiKz00KWdbYl09ZVswXSxnW2IrMV09ZVsxXSxnW2IrMl09ZVsyXSxnW2IrM109MjU1O3ZhciB3LEE9cyh0aGlzLl9maWd1cmVzKTt0cnl7Zm9yKEEucygpOyEodz1BLm4oKSkuZG9uZTspayhtLHcudmFsdWUsZil9Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9cmV0dXJuIHkucHV0SW1hZ2VEYXRhKG0sMiwyKSx7Y2FudmFzOnYuY2FudmFzLG9mZnNldFg6bi0yKmMsb2Zmc2V0WTppLTIqaCxzY2FsZVg6YyxzY2FsZVk6aH19fSx7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0LGUscixhKXt2YXIgcztpZihiKHQsdGhpcy5fYmJveCksYT09PWcuU0hBRElORylzPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKTtlbHNlIGlmKHM9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgpe3ZhciBsPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7cz1bc1swXSpsWzBdLHNbMV0qbFsxXV19dmFyIHU9dGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzLGE9PT1nLlNIQURJTkc/bnVsbDp0aGlzLl9iYWNrZ3JvdW5kLGUuY2FjaGVkQ2FudmFzZXMpO3JldHVybiBhIT09Zy5TSEFESU5HJiYodC5zZXRUcmFuc2Zvcm0uYXBwbHkodCxvKGUuYmFzZVRyYW5zZm9ybSkpLHRoaXMubWF0cml4JiZ0LnRyYW5zZm9ybS5hcHBseSh0LG8odGhpcy5tYXRyaXgpKSksdC50cmFuc2xhdGUodS5vZmZzZXRYLHUub2Zmc2V0WSksdC5zY2FsZSh1LnNjYWxlWCx1LnNjYWxlWSksdC5jcmVhdGVQYXR0ZXJuKHUuY2FudmFzLCJuby1yZXBlYXQiKX19XSkscn0oXykseD1mdW5jdGlvbih0KXtjKHIsdCk7dmFyIGU9ZihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHYodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbShyLFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJob3RwaW5rIn19XSkscn0oXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4saSxhKXt2KHRoaXMsdCksdGhpcy5vcGVyYXRvckxpc3Q9ZVsyXSx0aGlzLm1hdHJpeD1lWzNdfHxbMSwwLDAsMSwwLDBdLHRoaXMuYmJveD1lWzRdLHRoaXMueHN0ZXA9ZVs1XSx0aGlzLnlzdGVwPWVbNl0sdGhpcy5wYWludFR5cGU9ZVs3XSx0aGlzLnRpbGluZ1R5cGU9ZVs4XSx0aGlzLmNvbG9yPXIsdGhpcy5jdHg9bix0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pLHRoaXMuYmFzZVRyYW5zZm9ybT1hfXJldHVybiBtKHQsW3trZXk6ImNyZWF0ZVBhdHRlcm5DYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3BlcmF0b3JMaXN0LHI9dGhpcy5iYm94LGE9dGhpcy54c3RlcCxvPXRoaXMueXN0ZXAscz10aGlzLnBhaW50VHlwZSxsPXRoaXMudGlsaW5nVHlwZSx1PXRoaXMuY29sb3IsYz10aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTsoMCxuLmluZm8pKCJUaWxpbmdUeXBlOiAiK2wpO3ZhciBoPXJbMF0sZj1yWzFdLGQ9clsyXSxwPXJbM10sdj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLHk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksbT1bdlswXSp5WzBdLHZbMV0qeVsxXV0sZz10aGlzLmdldFNpemVBbmRTY2FsZShhLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxtWzBdKSxiPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKG8sdGhpcy5jdHguY2FudmFzLmhlaWdodCxtWzFdKSxfPXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLnNpemUsYi5zaXplLCEwKSx3PV8uY29udGV4dCxBPWMuY3JlYXRlQ2FudmFzR3JhcGhpY3Modyk7QS5ncm91cExldmVsPXQuZ3JvdXBMZXZlbCx0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChBLHMsdSk7dmFyIGs9aCxTPWYseD1kLEU9cDtyZXR1cm4gaDwwJiYoaz0wLHgrPU1hdGguYWJzKGgpKSxmPDAmJihTPTAsRSs9TWF0aC5hYnMoZikpLHcudHJhbnNsYXRlKC1nLnNjYWxlKmssLWIuc2NhbGUqUyksQS50cmFuc2Zvcm0oZy5zY2FsZSwwLDAsYi5zY2FsZSwwLDApLHcuc2F2ZSgpLHRoaXMuY2xpcEJib3goQSxrLFMseCxFKSxBLmJhc2VUcmFuc2Zvcm09KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShBLmN0eCksQS5leGVjdXRlT3BlcmF0b3JMaXN0KGUpLEEuZW5kRHJhd2luZygpLHtjYW52YXM6Xy5jYW52YXMsc2NhbGVYOmcuc2NhbGUsc2NhbGVZOmIuc2NhbGUsb2Zmc2V0WDprLG9mZnNldFk6U319fSx7a2V5OiJnZXRTaXplQW5kU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtlPU1hdGguYWJzKGUpO3ZhciBpPU1hdGgubWF4KHQuTUFYX1BBVFRFUk5fU0laRSxyKSxhPU1hdGguY2VpbChlKm4pO3JldHVybiBhPj1pP2E9aTpuPWEvZSx7c2NhbGU6bixzaXplOmF9fX0se2tleToiY2xpcEJib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89bi1lLHM9YS1yO3QuY3R4LnJlY3QoZSxyLG8scyksdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0LmN0eCksW2UscixuLGFdKSx0LmNsaXAoKSx0LmVuZFBhdGgoKX19LHtrZXk6InNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY3R4LGE9dC5jdXJyZW50O3N3aXRjaChlKXtjYXNlIDE6dmFyIG89dGhpcy5jdHg7aS5maWxsU3R5bGU9by5maWxsU3R5bGUsaS5zdHJva2VTdHlsZT1vLnN0cm9rZVN0eWxlLGEuZmlsbENvbG9yPW8uZmlsbFN0eWxlLGEuc3Ryb2tlQ29sb3I9by5zdHJva2VTdHlsZTticmVhaztjYXNlIDI6dmFyIHM9bi5VdGlsLm1ha2VIZXhDb2xvcihyWzBdLHJbMV0sclsyXSk7aS5maWxsU3R5bGU9cyxpLnN0cm9rZVN0eWxlPXMsYS5maWxsQ29sb3I9cyxhLnN0cm9rZUNvbG9yPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogIi5jb25jYXQoZSkpfX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXI7aSE9PWcuU0hBRElORyYmKGE9bi5VdGlsLnRyYW5zZm9ybShhLGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgmJihhPW4uVXRpbC50cmFuc2Zvcm0oYSx0aGlzLm1hdHJpeCkpKTt2YXIgbz10aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSkscz1uZXcgRE9NTWF0cml4KGEpO3M9KHM9cy50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSkpLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7dmFyIGw9dC5jcmVhdGVQYXR0ZXJuKG8uY2FudmFzLCJyZXBlYXQiKTtyZXR1cm4gbC5zZXRUcmFuc2Zvcm0ocyksbH19XSxbe2tleToiTUFYX1BBVFRFUk5fU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9QQVRURVJOX1NJWkUiLDNlMyl9fV0pLHR9KCk7ZS5UaWxpbmdQYXR0ZXJuPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNyYyxhPXQuc3JjUG9zLG89dm9pZCAwPT09YT8wOmEscz10LmRlc3QsbD10LmRlc3RQb3MsdT12b2lkIDA9PT1sPzA6bCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXQuaW52ZXJzZURlY29kZSxkPXZvaWQgMCE9PWYmJmYscD1uLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1LHY9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0oZT1kP1swLHBdOltwLDBdKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQ7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGkodCwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKHQsMik6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSx5PXZbMF0sbT12WzFdLGc9Yz4+MyxiPTcmYyxfPXIubGVuZ3RoO3M9bmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtmb3IodmFyIHc9MDt3PGg7dysrKXtmb3IodmFyIEE9bytnO288QTtvKyspe3ZhciBrPW88Xz9yW29dOjI1NTtzW3UrK109MTI4Jms/bTp5LHNbdSsrXT02NCZrP206eSxzW3UrK109MzImaz9tOnksc1t1KytdPTE2Jms/bTp5LHNbdSsrXT04Jms/bTp5LHNbdSsrXT00Jms/bTp5LHNbdSsrXT0yJms/bTp5LHNbdSsrXT0xJms/bTp5fWlmKDAhPT1iKWZvcih2YXIgUz1vPF8/cltvKytdOjI1NSx4PTA7eDxiO3grKylzW3UrK109UyYxPDw3LXg/bTp5fXJldHVybntzcmNQb3M6byxkZXN0UG9zOnV9fTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtlLkdsb2JhbFdvcmtlck9wdGlvbnM9cixyLndvcmtlclBvcnQ9dm9pZCAwPT09ci53b3JrZXJQb3J0P251bGw6ci53b3JrZXJQb3J0LHIud29ya2VyU3JjPXZvaWQgMD09PXIud29ya2VyU3JjPyIiOnIud29ya2VyU3JjfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gaSgpe2k9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsbykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8sbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09cyhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8sbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LG8oYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8sbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W29dO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1zKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCl7c3dpdGNoKHQgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKHQpJiZudWxsIT09dHx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksdC5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSx0LnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPXRoaXM7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKGUudGFyZ2V0TmFtZT09PWkuc291cmNlTmFtZSlpZihlLnN0cmVhbSlpLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtlbHNlIGlmKGUuY2FsbGJhY2spe3ZhciByPWUuY2FsbGJhY2tJZCxhPWkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PWUuY2FsbGJhY2spYS5yZXNvbHZlKGUuZGF0YSk7ZWxzZXtpZigyIT09ZS5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2EucmVqZWN0KGwoZS5yZWFzb24pKX19ZWxzZXt2YXIgbz1pLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KGUuYWN0aW9uKSk7aWYoZS5jYWxsYmFja0lkKXt2YXIgcz1pLnNvdXJjZU5hbWUsdT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbih0KXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjpsKHQpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP2kuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6byhlLmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIGUscixzLHU7cmV0dXJuIGU9dCxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYoclt0XSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KHQsJyInKSk7clt0XT1lfX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246dCxkYXRhOmV9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5jYWxsYmFja0lkKyssYT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbaV09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6aSxkYXRhOmV9LHIpfWNhdGNoKHQpe2EucmVqZWN0KHQpfXJldHVybiBhLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxjPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBsPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bCxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246dCxzdHJlYW1JZDpvLGRhdGE6ZSxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxpKSxsLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24odCl7dmFyIGU9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD1lLGMucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSksZS5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciBlPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD1lLGEuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpsKHQpfSksZS5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbih0KXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbD10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sbD4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo0LHN0cmVhbUlkOmUsY2h1bms6dH0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjMsc3RyZWFtSWQ6ZX0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW2VdKX0sZXJyb3I6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NSxzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6dC5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2VdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocyh0LmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06OCxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo4LHN0cmVhbUlkOmUscmVhc29uOmwodCl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxzPXRoaXMuc3RyZWFtU2lua3NbZV07c3dpdGNoKHQuc3RyZWFtKXtjYXNlIDg6dC5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNzp0LnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NyxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZ0LmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9dC5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo3LHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjcsc3RyZWFtSWQ6ZSxyZWFzb246bCh0KX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUodC5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihsKHQucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLGUpO2JyZWFrO2Nhc2UgMjp0LnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGwodC5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHMub25DYW5jZWwmJnMub25DYW5jZWwobCh0LnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjIsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06MixzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QobCh0LnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9aSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsJiZlLnN0YXJ0Q2FsbC5wcm9taXNlLGUucHVsbENhbGwmJmUucHVsbENhbGwucHJvbWlzZSxlLmNhbmNlbENhbGwmJmUuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBpPXMuYXBwbHkodCxlKTtmdW5jdGlvbiBvKHQpe2EoaSxyLG4sbyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EoaSxyLG4sbyxsLCJ0aHJvdyIsdCl9byh2b2lkIDApfSkpfSxmdW5jdGlvbih0LGUpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NZXNzYWdlSGFuZGxlcj11fSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NZXRhZGF0YT12b2lkIDA7dmFyIGk9cigxKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24gbyh0LGUscil7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHUodCxlLCJnZXQiKSl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx1KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiB1KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBjPW5ldyBXZWFrTWFwLGg9bmV3IFdlYWtNYXAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5wYXJzZWREYXRhLG49ZS5yYXdEYXRhOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG8odGhpcyxjLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxvKHRoaXMsaCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbCh0aGlzLGMsciksbCh0aGlzLGgsbil9dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyxoKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zKHRoaXMsYykuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOm51bGx9fSx7a2V5OiJnZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKShzKHRoaXMsYykpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLGMpLmhhcyh0KX19XSkmJmEoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLk1ldGFkYXRhPWZ9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cigxKSxhPXIoMTM5KTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1zKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgYX19fX1mdW5jdGlvbiBzKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBsKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZSYmaCh0LnByb3RvdHlwZSxlKSxyJiZoKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBkKHQsZSxyKXtwKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBwKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LG0odCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LG0odCxlLCJnZXQiKSl9ZnVuY3Rpb24gbSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgZz1TeW1ib2woIklOVEVSTkFMIiksYj1uZXcgV2Vha01hcCxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2ModGhpcyx0KSxkKHRoaXMsYix7d3JpdGFibGU6ITAsdmFsdWU6ITB9KSx0aGlzLm5hbWU9ZSx0aGlzLmludGVudD1yfXJldHVybiBmKHQsW3trZXk6InZpc2libGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsYil9fSx7a2V5OiJfc2V0VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0IT09ZyYmKDAsaS51bnJlYWNoYWJsZSkoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKSx2KHRoaXMsYixlKX19XSksdH0oKSx3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7aWYoYyh0aGlzLHQpLHAodGhpcyxyPXgpLHIuYWRkKHRoaXMpLGQodGhpcyx3LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZCh0aGlzLEEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxkKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGQodGhpcyxTLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5uYW1lPW51bGwsdGhpcy5jcmVhdG9yPW51bGwsbnVsbCE9PWUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5jcmVhdG9yPWUuY3JlYXRvcix2KHRoaXMsUyxlLm9yZGVyKTt2YXIgbixpPW8oZS5ncm91cHMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTt5KHRoaXMsQSkuc2V0KGEuaWQsbmV3IF8oYS5uYW1lLGEuaW50ZW50KSl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfWlmKCJPRkYiPT09ZS5iYXNlU3RhdGUpe3ZhciBzLGw9byh5KHRoaXMsQSkudmFsdWVzKCkpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOylzLnZhbHVlLl9zZXRWaXNpYmxlKGcsITEpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX12YXIgdSxoPW8oZS5vbik7dHJ5e2ZvcihoLnMoKTshKHU9aC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO3kodGhpcyxBKS5nZXQoZikuX3NldFZpc2libGUoZywhMCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXZhciBtLGI9byhlLm9mZik7dHJ5e2ZvcihiLnMoKTshKG09Yi5uKCkpLmRvbmU7KXt2YXIgRT1tLnZhbHVlO3kodGhpcyxBKS5nZXQoRSkuX3NldFZpc2libGUoZywhMSl9fWNhdGNoKHQpe2IuZSh0KX1maW5hbGx5e2IuZigpfXYodGhpcyxrLHRoaXMuZ2V0SGFzaCgpKX19cmV0dXJuIGYodCxbe2tleToiaXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09eSh0aGlzLEEpLnNpemUpcmV0dXJuITA7aWYoIXQpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC4iKSwhMDtpZigiT0NHIj09PXQudHlwZSlyZXR1cm4geSh0aGlzLEEpLmhhcyh0LmlkKT95KHRoaXMsQSkuZ2V0KHQuaWQpLnZpc2libGU6KCgwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh0LmlkKSksITApO2lmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB1KHRoaXMseCxQKS5jYWxsKHRoaXMsdC5leHByZXNzaW9uKTtpZighdC5wb2xpY3l8fCJBbnlPbiI9PT10LnBvbGljeSl7dmFyIGUscj1vKHQuaWRzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobikpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KG4pKSwhMDtpZih5KHRoaXMsQSkuZ2V0KG4pLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXJldHVybiExfWlmKCJBbGxPbiI9PT10LnBvbGljeSl7dmFyIGEscz1vKHQuaWRzKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobCkpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KGwpKSwhMDtpZigheSh0aGlzLEEpLmdldChsKS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXt2YXIgYyxoPW8odC5pZHMpO3RyeXtmb3IoaC5zKCk7IShjPWgubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZigheSh0aGlzLEEpLmhhcyhmKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoZikpLCEwO2lmKCF5KHRoaXMsQSkuZ2V0KGYpLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiExfWlmKCJBbGxPZmYiPT09dC5wb2xpY3kpe3ZhciBkLHA9byh0Lmlkcyk7dHJ5e2ZvcihwLnMoKTshKGQ9cC5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlO2lmKCF5KHRoaXMsQSkuaGFzKHYpKXJldHVybigwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh2KSksITA7aWYoeSh0aGlzLEEpLmdldCh2KS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX1yZXR1cm4hMH1yZXR1cm4oMCxpLndhcm4pKCJVbmtub3duIG9wdGlvbmFsIGNvbnRlbnQgcG9saWN5ICIuY29uY2F0KHQucG9saWN5LCIuIikpLCEwfXJldHVybigwLGkud2FybikoIlVua25vd24gZ3JvdXAgdHlwZSAiLmNvbmNhdCh0LnR5cGUsIi4iKSksITB9fSx7a2V5OiJzZXRWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3kodGhpcyxBKS5oYXModCk/KHkodGhpcyxBKS5nZXQodCkuX3NldFZpc2libGUoZywhIWUpLHYodGhpcyx3LG51bGwpKTooMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQodCkpfX0se2tleToiaGFzSW5pdGlhbFZpc2liaWxpdHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhhc2goKT09PXkodGhpcyxrKX19LHtrZXk6ImdldE9yZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT95KHRoaXMsUyk/eSh0aGlzLFMpLnNsaWNlKCk6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbCh0KX0odD15KHRoaXMsQSkua2V5cygpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8cyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKTpudWxsO3ZhciB0fX0se2tleToiZ2V0R3JvdXBzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkoeSh0aGlzLEEpKTpudWxsfX0se2tleToiZ2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMsQSkuZ2V0KHQpfHxudWxsfX0se2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsIT09eSh0aGlzLHcpKXJldHVybiB5KHRoaXMsdyk7dmFyIHQsZSxyLG49bmV3IGEuTXVybXVySGFzaDNfNjQsaT1vKHkodGhpcyxBKSk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbD0oZT10LnZhbHVlLHI9MixmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fShlKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlLHIpfHxzKGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdT1sWzBdLGM9bFsxXTtuLnVwZGF0ZSgiIi5jb25jYXQodSwiOiIpLmNvbmNhdChjLnZpc2libGUpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHYodGhpcyx3LG4uaGV4ZGlnZXN0KCkpfX1dKSx0fSgpO2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiEwO2Zvcih2YXIgcj10WzBdLG49MTtuPGU7bisrKXt2YXIgYT10W25dLG89dm9pZCAwO2lmKEFycmF5LmlzQXJyYXkoYSkpbz11KHRoaXMseCxQKS5jYWxsKHRoaXMsYSk7ZWxzZXtpZigheSh0aGlzLEEpLmhhcyhhKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoYSkpLCEwO289eSh0aGlzLEEpLmdldChhKS52aXNpYmxlfXN3aXRjaChyKXtjYXNlIkFuZCI6aWYoIW8pcmV0dXJuITE7YnJlYWs7Y2FzZSJPciI6aWYobylyZXR1cm4hMDticmVhaztjYXNlIk5vdCI6cmV0dXJuIW87ZGVmYXVsdDpyZXR1cm4hMH19cmV0dXJuIkFuZCI9PT1yfWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxMzcpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1sKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgaT10aGlzO2godGhpcyx0KSwoMCxuLmFzc2VydCkociwnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyksdGhpcy5fcXVldWVkQ2h1bmtzPVtdLHRoaXMuX3Byb2dyZXNzaXZlRG9uZT1lLnByb2dyZXNzaXZlRG9uZXx8ITEsdGhpcy5fY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9ZS5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZXx8bnVsbDt2YXIgYT1lLmluaXRpYWxEYXRhO2lmKChudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MCl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKG8pfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD1yLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblJlY2VpdmVEYXRhKHtiZWdpbjp0LGNodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblByb2dyZXNzKHtsb2FkZWQ6dCx0b3RhbDplfSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKChmdW5jdGlvbih0KXtpLl9vblJlY2VpdmVEYXRhKHtjaHVuazp0fSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKChmdW5jdGlvbigpe2kuX29uUHJvZ3Jlc3NpdmVEb25lKCl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCl9cmV0dXJuIGQodCxbe2tleToiX29uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7dmFyIHI9dGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiByLl9iZWdpbj09PXQuYmVnaW4mJihyLl9lbnF1ZXVlKGUpLCEwKX0pKTsoMCxuLmFzc2VydCkociwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKX19fSx7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7dm9pZCAwPT09dC50b3RhbD9udWxsPT09KGU9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUub25Qcm9ncmVzcyl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHtsb2FkZWQ6dC5sb2FkZWR9KTpudWxsPT09KG49dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09aXx8aS5jYWxsKG4se2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9fSx7a2V5OiJfb25Qcm9ncmVzc2l2ZURvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09dHx8dC5wcm9ncmVzc2l2ZURvbmUoKSx0aGlzLl9wcm9ncmVzc2l2ZURvbmU9ITB9fSx7a2V5OiJfcmVtb3ZlUmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHQpO2U+PTAmJnRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3ZhciB0PXRoaXMuX3F1ZXVlZENodW5rcztyZXR1cm4gdGhpcy5fcXVldWVkQ2h1bmtzPW51bGwsbmV3IHYodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IHkodGhpcyx0LGUpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCk7dmFyIHIsbj11KHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUuY2FuY2VsKHQpfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX1dKSx0fSgpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1wO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtoKHRoaXMsdCksdGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT1ufHwhMSx0aGlzLl9maWxlbmFtZT0oMCxpLmlzUGRmRmlsZSkoYSk/YTpudWxsLHRoaXMuX3F1ZXVlZENodW5rcz1yfHxbXSx0aGlzLl9sb2FkZWQ9MDt2YXIgbyxzPXUodGhpcy5fcXVldWVkQ2h1bmtzKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWU7dGhpcy5fbG9hZGVkKz1sLmJ5dGVMZW5ndGh9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKSxlLl9mdWxsUmVxdWVzdFJlYWRlcj10aGlzLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lfHwodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KSx0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJyZWFkIix2YWx1ZTooZT1zKGEoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCEodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKSl7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIGU9dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmUsZG9uZTohMX0pO2Nhc2UgMzppZighdGhpcy5fZG9uZSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNTpyZXR1cm4gcj0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3JlcXVlc3RzLnB1c2gociksdC5hYnJ1cHQoInJldHVybiIsci5wcm9taXNlKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITA7dmFyIGUscj11KHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX0se2tleToicHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXIsdGhpcy5fZW5kPW4sdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTt2YXIgZSxyPXUodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NDticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lPSEwO3ZhciBlLHI9dSh0aGlzLl9yZXF1ZXN0cyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1dKSx0fSgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9ZnVuY3Rpb24gbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4uY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1yKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5YZmFUZXh0PXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToidGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9e2l0ZW1zOnIsc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybiBmdW5jdGlvbiBlKGkpe3ZhciBhO2lmKGkpe3ZhciBvPW51bGwscz1pLm5hbWU7aWYoIiN0ZXh0Ij09PXMpbz1pLnZhbHVlO2Vsc2V7aWYoIXQuc2hvdWxkQnVpbGRUZXh0KHMpKXJldHVybjtudWxsIT1pJiZudWxsIT09KGE9aS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09YSYmYS50ZXh0Q29udGVudD9vPWkuYXR0cmlidXRlcy50ZXh0Q29udGVudDppLnZhbHVlJiYobz1pLnZhbHVlKX1pZihudWxsIT09byYmci5wdXNoKHtzdHI6b30pLGkuY2hpbGRyZW4pe3ZhciBsLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBuKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIGk9MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gaT49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbaSsrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gcz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgb319fX0oaS5jaGlsZHJlbik7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWUobC52YWx1ZSl9Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9fX19KGUpLGl9fSx7a2V5OiJzaG91bGRCdWlsZFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fV0sbnVsbCYmaShlLnByb3RvdHlwZSxudWxsKSxyJiZpKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYVRleHQ9YX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXIoMTM4KTtmdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBlJiZvKHQucHJvdG90eXBlLGUpLHImJm8odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGwodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmdSh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LHUodCxlKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPWgodCk7aWYoZSl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGksYXJndW1lbnRzLGEpfWVsc2Ugcj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBoKHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxoKHQpfXZhciBmPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKGZ1bmN0aW9uKHQsbil7IXQmJm4/ZShuZXcgVWludDhBcnJheShuKSk6cihuZXcgRXJyb3IodCkpfSkpfSkpfSxkPWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJlcXVpcmUoImNhbnZhcyIpLmNyZWF0ZUNhbnZhcyh0LGUpfX1dKSxyfShpLkJhc2VDYW52YXNGYWN0b3J5KTtlLk5vZGVDYW52YXNGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24odCl7bChyLHQpO3ZhciBlPWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBhKHRoaXMsciksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHMocixbe2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57Y01hcERhdGE6dCxjb21wcmVzc2lvblR5cGU6ZX19KSl9fV0pLHJ9KGkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5KTtlLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1wO3ZhciB2PWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpfX1dKSxyfShpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9dn0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGV4dExheWVyUmVuZGVyVGFzaz12b2lkIDAsZS5yZW5kZXJUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudFNvdXJjZXx8IXQudGV4dENvbnRlbnQmJiF0LnRleHRDb250ZW50U3RyZWFtfHwoKDAsYS5kZXByZWNhdGVkKSgiVGhlIFRleHRMYXllclJlbmRlciBgdGV4dENvbnRlbnRgL2B0ZXh0Q29udGVudFN0cmVhbWAgcGFyYW1ldGVycyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgcGxlYXNlIHVzZSBgdGV4dENvbnRlbnRTb3VyY2VgIGluc3RlYWQuIiksdC50ZXh0Q29udGVudFNvdXJjZT10LnRleHRDb250ZW50fHx0LnRleHRDb250ZW50U3RyZWFtKTt2YXIgZT1uZXcgcCh0KTtyZXR1cm4gZS5fcmVuZGVyKCksZX0sZS51cGRhdGVUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250YWluZXIscj10LnZpZXdwb3J0LG49dC50ZXh0RGl2cyxpPXQudGV4dERpdlByb3BlcnRpZXMsbz10LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGw9dC5tdXN0Um90YXRlLHU9dm9pZCAwPT09bHx8bCxjPXQubXVzdFJlc2NhbGUsZj12b2lkIDA9PT1jfHxjO2lmKHUmJigwLGEuc2V0TGF5ZXJEaW1lbnNpb25zKShlLHtyb3RhdGlvbjpyLnJvdGF0aW9ufSksZil7dmFyIHAsdj1oKDAsbykseT17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpyLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6dn0sbT1zKG4pO3RyeXtmb3IobS5zKCk7IShwPW0ubigpKS5kb25lOyl7dmFyIGc9cC52YWx1ZTt5LnByb3BlcnRpZXM9aS5nZXQoZykseS5kaXY9ZyxkKHkpfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19fTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2wodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciB1PTMwLGM9bmV3IE1hcDtmdW5jdGlvbiBoKHQsZSl7dmFyIHI7aWYoZSYmaS5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClyPW5ldyBPZmZzY3JlZW5DYW52YXModCx0KS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PXQscj1uLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksYT17YW5nbGU6MCxjYW52YXNXaWR0aDowLGhhc1RleHQ6IiIhPT1lLnN0cixoYXNFT0w6ZS5oYXNFT0wsZm9udFNpemU6MH07dC5fdGV4dERpdnMucHVzaChuKTt2YXIgbz1pLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSxlLnRyYW5zZm9ybSkscz1NYXRoLmF0YW4yKG9bMV0sb1swXSksbD1yW2UuZm9udE5hbWVdO2wudmVydGljYWwmJihzKz1NYXRoLlBJLzIpO3ZhciBmLGQscD1NYXRoLmh5cG90KG9bMl0sb1szXSksdj1wKmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5nZXQodCk7aWYocilyZXR1cm4gcjt2YXIgbj1oKHUsZSk7bi5mb250PSIiLmNvbmNhdCh1LCJweCAiKS5jb25jYXQodCk7dmFyIGk9bi5tZWFzdXJlVGV4dCgiIiksYT1pLmZvbnRCb3VuZGluZ0JveEFzY2VudCxvPU1hdGguYWJzKGkuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7aWYoYSl7dmFyIHM9YS8oYStvKTtyZXR1cm4gYy5zZXQodCxzKSxuLmNhbnZhcy53aWR0aD1uLmNhbnZhcy5oZWlnaHQ9MCxzfW4uc3Ryb2tlU3R5bGU9InJlZCIsbi5jbGVhclJlY3QoMCwwLHUsdSksbi5zdHJva2VUZXh0KCJnIiwwLDApO3ZhciBsPW4uZ2V0SW1hZ2VEYXRhKDAsMCx1LHUpLmRhdGE7bz0wO2Zvcih2YXIgZj1sLmxlbmd0aC0xLTM7Zj49MDtmLT00KWlmKGxbZl0+MCl7bz1NYXRoLmNlaWwoZi80L3UpO2JyZWFrfW4uY2xlYXJSZWN0KDAsMCx1LHUpLG4uc3Ryb2tlVGV4dCgiQSIsMCx1KSxhPTA7Zm9yKHZhciBkPTAscD0obD1uLmdldEltYWdlRGF0YSgwLDAsdSx1KS5kYXRhKS5sZW5ndGg7ZDxwO2QrPTQpaWYobFtkXT4wKXthPXUtTWF0aC5mbG9vcihkLzQvdSk7YnJlYWt9aWYobi5jYW52YXMud2lkdGg9bi5jYW52YXMuaGVpZ2h0PTAsYSl7dmFyIHY9YS8oYStvKTtyZXR1cm4gYy5zZXQodCx2KSx2fXJldHVybiBjLnNldCh0LC44KSwuOH0obC5mb250RmFtaWx5LHQuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTswPT09cz8oZj1vWzRdLGQ9b1s1XS12KTooZj1vWzRdK3YqTWF0aC5zaW4ocyksZD1vWzVdLXYqTWF0aC5jb3MocykpO3ZhciB5PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikqIixtPW4uc3R5bGU7dC5fY29udGFpbmVyPT09dC5fcm9vdENvbnRhaW5lcj8obS5sZWZ0PSIiLmNvbmNhdCgoMTAwKmYvdC5fcGFnZVdpZHRoKS50b0ZpeGVkKDIpLCIlIiksbS50b3A9IiIuY29uY2F0KCgxMDAqZC90Ll9wYWdlSGVpZ2h0KS50b0ZpeGVkKDIpLCIlIikpOihtLmxlZnQ9IiIuY29uY2F0KHkpLmNvbmNhdChmLnRvRml4ZWQoMiksInB4KSIpLG0udG9wPSIiLmNvbmNhdCh5KS5jb25jYXQoZC50b0ZpeGVkKDIpLCJweCkiKSksbS5mb250U2l6ZT0iIi5jb25jYXQoeSkuY29uY2F0KHAudG9GaXhlZCgyKSwicHgpIiksbS5mb250RmFtaWx5PWwuZm9udEZhbWlseSxhLmZvbnRTaXplPXAsbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxuLnRleHRDb250ZW50PWUuc3RyLG4uZGlyPWUuZGlyLHQuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYobi5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpLDAhPT1zJiYoYS5hbmdsZT1zKigxODAvTWF0aC5QSSkpO3ZhciBnPSExO2lmKGUuc3RyLmxlbmd0aD4xKWc9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7dmFyIGI9TWF0aC5hYnMoZS50cmFuc2Zvcm1bMF0pLF89TWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO2IhPT1fJiZNYXRoLm1heChiLF8pL01hdGgubWluKGIsXyk+MS41JiYoZz0hMCl9ZyYmKGEuY2FudmFzV2lkdGg9bC52ZXJ0aWNhbD9lLmhlaWdodDplLndpZHRoKSx0Ll90ZXh0RGl2UHJvcGVydGllcy5zZXQobixhKSx0Ll9pc1JlYWRhYmxlU3RyZWFtJiZ0Ll9sYXlvdXRUZXh0KG4pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXYscj10LnNjYWxlLG49dC5wcm9wZXJ0aWVzLGk9dC5jdHgsYT10LnByZXZGb250U2l6ZSxvPXQucHJldkZvbnRGYW1pbHkscz1lLnN0eWxlLGw9IiI7aWYoMCE9PW4uY2FudmFzV2lkdGgmJm4uaGFzVGV4dCl7dmFyIHU9cy5mb250RmFtaWx5LGM9bi5jYW52YXNXaWR0aCxoPW4uZm9udFNpemU7YT09PWgmJm89PT11fHwoaS5mb250PSIiLmNvbmNhdChoKnIsInB4ICIpLmNvbmNhdCh1KSx0LnByZXZGb250U2l6ZT1oLHQucHJldkZvbnRGYW1pbHk9dSk7dmFyIGY9aS5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aDtmPjAmJihsPSJzY2FsZVgoIi5jb25jYXQoYypyL2YsIikiKSl9MCE9PW4uYW5nbGUmJihsPSJyb3RhdGUoIi5jb25jYXQobi5hbmdsZSwiZGVnKSAiKS5jb25jYXQobCkpLGwubGVuZ3RoPjAmJihzLnRyYW5zZm9ybT1sKX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbj10aGlzLG89ZS50ZXh0Q29udGVudFNvdXJjZSxzPWUuY29udGFpbmVyLGw9ZS52aWV3cG9ydCx1PWUudGV4dERpdnMsYz1lLnRleHREaXZQcm9wZXJ0aWVzLGY9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGQ9ZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLl90ZXh0Q29udGVudFNvdXJjZT1vLHRoaXMuX2lzUmVhZGFibGVTdHJlYW09byBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtLHRoaXMuX2NvbnRhaW5lcj10aGlzLl9yb290Q29udGFpbmVyPXMsdGhpcy5fdGV4dERpdnM9dXx8W10sdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0cj1mfHxbXSx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKG51bGw9PT0ocj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpfHx2b2lkIDA9PT1yfHwhci5lbmFibGVkKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1jfHxuZXcgV2Vha01hcCx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fbGF5b3V0VGV4dFBhcmFtcz17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpsLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6aCgwLGQpfTt2YXIgcD1sLnJhd0RpbXMsdj1wLnBhZ2VXaWR0aCx5PXAucGFnZUhlaWdodCxtPXAucGFnZVgsZz1wLnBhZ2VZO3RoaXMuX3RyYW5zZm9ybT1bMSwwLDAsLTEsLW0sZyt5XSx0aGlzLl9wYWdlV2lkdGg9dix0aGlzLl9wYWdlSGVpZ2h0PXksKDAsYS5zZXRMYXllckRpbWVuc2lvbnMpKHMsbCksdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi5fbGF5b3V0VGV4dFBhcmFtcz1udWxsfSkpLmNhdGNoKChmdW5jdGlvbigpe30pKX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsZWQ9ITAsdGhpcy5fcmVhZGVyJiYodGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBpLkFib3J0RXhjZXB0aW9uKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfX0se2tleToiX3Byb2Nlc3NJdGVtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXModCk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKHZvaWQgMCE9PWkuc3RyKXRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpLnN0ciksZih0aGlzLGksZSk7ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09aS50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PWkudHlwZSl7dmFyIGE9dGhpcy5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcmtlZENvbnRlbnQiKSxudWxsIT09aS5pZCYmdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCIiLmNvbmNhdChpLmlkKSksYS5hcHBlbmQodGhpcy5fY29udGFpbmVyKX1lbHNlImVuZE1hcmtlZENvbnRlbnQiPT09aS50eXBlJiYodGhpcy5fY29udGFpbmVyPXRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2xheW91dFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcz10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodCk7aWYodGhpcy5fbGF5b3V0VGV4dFBhcmFtcy5kaXY9dCxkKHRoaXMuX2xheW91dFRleHRQYXJhbXMpLGUuaGFzVGV4dCYmdGhpcy5fY29udGFpbmVyLmFwcGVuZCh0KSxlLmhhc0VPTCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTtyLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmQocil9fX0se2tleToiX3JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5faXNSZWFkYWJsZVN0cmVhbSl0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTb3VyY2UuZ2V0UmVhZGVyKCksZnVuY3Rpb24gbigpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oaSl7dmFyIGE9aS52YWx1ZTtpLmRvbmU/ZS5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24ocixhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsciksbigpKX0pLGUucmVqZWN0KX0oKTtlbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoJ05vICJ0ZXh0Q29udGVudFNvdXJjZSIgcGFyYW1ldGVyIHNwZWNpZmllZC4nKTt2YXIgbj10aGlzLl90ZXh0Q29udGVudFNvdXJjZSxhPW4uaXRlbXMsbz1uLnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMoYSxvKSxlLnJlc29sdmUoKX1lLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyPW51bGwsZnVuY3Rpb24odCl7aWYoIXQuX2NhbmNlbGVkKXt2YXIgZT10Ll90ZXh0RGl2cyxyPXQuX2NhcGFiaWxpdHk7aWYoZS5sZW5ndGg+MWU1KXIucmVzb2x2ZSgpO2Vsc2V7aWYoIXQuX2lzUmVhZGFibGVTdHJlYW0pe3ZhciBuLGk9cyhlKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7dC5fbGF5b3V0VGV4dChhKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fXIucmVzb2x2ZSgpfX19KHQpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1dKSYmbyhlLnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2UuVGV4dExheWVyUmVuZGVyVGFzaz1wfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDE1Mykscz1yKDE1NCksbD1yKDEzNyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKHQsZSk6dm9pZCAwfX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkKG4ua2V5KSxuKX19ZnVuY3Rpb24gZih0LGUpe3YodCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBkKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwKHQsZSxyKXt2KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB2KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB5KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCxiKHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBiKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBfLHcsQT1uZXcgV2Vha01hcCxrPW5ldyBXZWFrTWFwLFM9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcCxFPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsVD1uZXcgV2Vha01hcCxDPW5ldyBXZWFrTWFwLE89bmV3IFdlYWtTZXQsRj1uZXcgV2Vha1NldCxNPW5ldyBXZWFrU2V0LFI9bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksZih0aGlzLFIpLGYodGhpcyxNKSxmKHRoaXMsRiksZih0aGlzLE8pLHAodGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxwKHRoaXMsUyx7d3JpdGFibGU6ITAsdmFsdWU6dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKX0pLHAodGhpcyx4LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyl9KSxwKHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHAodGhpcyxQLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxULHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0Ll9pbml0aWFsaXplZHx8KHQuX2luaXRpYWxpemVkPSEwLG8uRnJlZVRleHRFZGl0b3IuaW5pdGlhbGl6ZShlLmwxMG4pLHMuSW5rRWRpdG9yLmluaXRpYWxpemUoZS5sMTBuKSksZS51aU1hbmFnZXIucmVnaXN0ZXJFZGl0b3JUeXBlcyhbby5GcmVlVGV4dEVkaXRvcixzLklua0VkaXRvcl0pLGcodGhpcyxDLGUudWlNYW5hZ2VyKSx0aGlzLnBhZ2VJbmRleD1lLnBhZ2VJbmRleCx0aGlzLmRpdj1lLmRpdixnKHRoaXMsQSxlLmFjY2Vzc2liaWxpdHlNYW5hZ2VyKSxtKHRoaXMsQykuYWRkTGF5ZXIodGhpcyl9dmFyIGUscjtyZXR1cm4gZT10LHI9W3trZXk6InVwZGF0ZVRvb2xiYXIiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51cGRhdGVUb29sYmFyKHQpfX0se2tleToidXBkYXRlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bSh0aGlzLEMpLmdldE1vZGUoKTt5KHRoaXMsUixOKS5jYWxsKHRoaXMpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8odGhpcy5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMSksdGhpcy5kaXNhYmxlQ2xpY2soKSk6dGhpcy5lbmFibGVDbGljaygpLG0odGhpcyxDKS51bnNlbGVjdEFsbCgpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWVUZXh0RWRpdGluZyIsdD09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImlua0VkaXRpbmciLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyl9fSx7a2V5OiJhZGRJbmtFZGl0b3JJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodHx8bSh0aGlzLEMpLmdldE1vZGUoKT09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKXtpZighdCl7dmFyIGUscj11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlO2lmKG4uaXNFbXB0eSgpKXJldHVybiB2b2lkIG4uc2V0SW5CYWNrZ3JvdW5kKCl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX15KHRoaXMsTSxEKS5jYWxsKHRoaXMse29mZnNldFg6MCxvZmZzZXRZOjB9KS5zZXRJbkJhY2tncm91bmQoKX19fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS5zZXRFZGl0aW5nU3RhdGUodCl9fSx7a2V5OiJhZGRDb21tYW5kcyIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLmFkZENvbW1hbmRzKHQpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZUVkaXRpbmcoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmRpc2FibGVFZGl0aW5nKCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fX0se2tleToic2V0QWN0aXZlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuZ2V0QWN0aXZlKCkhPT10JiZtKHRoaXMsQykuc2V0QWN0aXZlRWRpdG9yKHQpfX0se2tleToiZW5hYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0odGhpcyx4KSksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixtKHRoaXMsUykpfX0se2tleToiZGlzYWJsZUNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixtKHRoaXMseCkpLHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsbSh0aGlzLFMpKX19LHtrZXk6ImF0dGFjaCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEUpLnNldCh0LmlkLHQpfX0se2tleToiZGV0YWNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTttKHRoaXMsRSkuZGVsZXRlKHQuaWQpLG51bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO20odGhpcyxDKS5yZW1vdmVFZGl0b3IodCksdGhpcy5kZXRhY2godCksdC5kaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmRpdi5zdHlsZS5kaXNwbGF5PSIiLHQuZGl2LnJlbW92ZSgpLHQuaXNBdHRhY2hlZFRvRE9NPSExLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5JiZtKGUsQykuZm9jdXNNYWluQ29udGFpbmVyKCl9KSwwKSxtKHRoaXMsVCl8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtpZih5KHRoaXMsTyxqKS5jYWxsKHRoaXMsdCksbSh0aGlzLEMpLmFkZEVkaXRvcih0KSx0aGlzLmF0dGFjaCh0KSwhdC5pc0F0dGFjaGVkVG9ET00pe3ZhciBlPXQucmVuZGVyKCk7dGhpcy5kaXYuYXBwZW5kKGUpLHQuaXNBdHRhY2hlZFRvRE9NPSEwfXRoaXMubW92ZUVkaXRvckluRE9NKHQpLHQub25jZUFkZGVkKCksbSh0aGlzLEMpLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodCl9fSx7a2V5OiJtb3ZlRWRpdG9ySW5ET00iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX19LHtrZXk6ImFkZE9yUmVidWlsZCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5uZWVkc1RvQmVSZWJ1aWx0KCk/dC5yZWJ1aWxkKCk6dGhpcy5hZGQodCl9fSx7a2V5OiJhZGRBTmV3RWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX19LHtrZXk6ImFkZFVuZG9hYmxlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITF9KX19LHtrZXk6ImdldE5leHRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLEMpLmdldElkKCl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuYW5ub3RhdGlvblR5cGUpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gby5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKTtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBzLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKX1yZXR1cm4gbnVsbH19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuc2V0U2VsZWN0ZWQodCl9fSx7a2V5OiJ0b2dnbGVTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLnRvZ2dsZVNlbGVjdGVkKHQpfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyxDKS5pc1NlbGVjdGVkKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51bnNlbGVjdCh0KX19LHtrZXk6InBvaW50ZXJ1cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYzswIT09dC5idXR0b258fHQuY3RybEtleSYmZXx8dC50YXJnZXQ9PT10aGlzLmRpdiYmbSh0aGlzLFApJiYoZyh0aGlzLFAsITEpLG0odGhpcyxrKT95KHRoaXMsTSxEKS5jYWxsKHRoaXMsdCk6Zyh0aGlzLGssITApKX19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1pLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjO2lmKCEoMCE9PXQuYnV0dG9ufHx0LmN0cmxLZXkmJmUpJiZ0LnRhcmdldD09PXRoaXMuZGl2KXtnKHRoaXMsUCwhMCk7dmFyIHI9bSh0aGlzLEMpLmdldEFjdGl2ZSgpO2codGhpcyxrLCFyfHxyLmlzRW1wdHkoKSl9fX0se2tleToiZHJvcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpLHI9bSh0aGlzLEMpLmdldEVkaXRvcihlKTtpZihyKXt0LnByZXZlbnREZWZhdWx0KCksdC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIseSh0aGlzLE8saikuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jbGllbnRYLW4ueCxhPXQuY2xpZW50WS1uLnk7ci50cmFuc2xhdGUoaS1yLnN0YXJ0WCxhLXIuc3RhcnRZKSx0aGlzLm1vdmVFZGl0b3JJbkRPTShyKSxyLmRpdi5mb2N1cygpfX19LHtrZXk6ImRyYWdvdmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0OyhudWxsPT09KHQ9bSh0aGlzLEMpLmdldEFjdGl2ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXJlbnQpPT09dGhpcyYmbSh0aGlzLEMpLnNldEFjdGl2ZUVkaXRvcihudWxsKTt2YXIgZSxyPXUobSh0aGlzLEUpLnZhbHVlcygpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuLGk9ZS52YWx1ZTtudWxsPT09KG49bSh0aGlzLEEpKXx8dm9pZCAwPT09bnx8bi5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoaS5jb250ZW50RGl2KSxpLnNldFBhcmVudChudWxsKSxpLmlzQXR0YWNoZWRUb0RPTT0hMSxpLmRpdi5yZW1vdmUoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5kaXY9bnVsbCxtKHRoaXMsRSkuY2xlYXIoKSxtKHRoaXMsQykucmVtb3ZlTGF5ZXIodGhpcyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld3BvcnQ7dGhpcy52aWV3cG9ydD1lLCgwLGwuc2V0TGF5ZXJEaW1lbnNpb25zKSh0aGlzLmRpdixlKSwoMCxhLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dmFyIHIsbj11KG0odGhpcyxDKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3RoaXMuYWRkKGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX10aGlzLnVwZGF0ZU1vZGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3cG9ydDttKHRoaXMsQykuY29tbWl0T3JSZW1vdmUoKSx0aGlzLnZpZXdwb3J0PWUsKDAsbC5zZXRMYXllckRpbWVuc2lvbnMpKHRoaXMuZGl2LHtyb3RhdGlvbjplLnJvdGF0aW9ufSksdGhpcy51cGRhdGVNb2RlKCl9fSx7a2V5OiJwYWdlRGltZW5zaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5yYXdEaW1zO3JldHVyblt0LnBhZ2VXaWR0aCx0LnBhZ2VIZWlnaHRdfX1dLHImJmgoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBqKHQpe3ZhciBlO3QucGFyZW50IT09dGhpcyYmKHRoaXMuYXR0YWNoKHQpLG51bGw9PT0oZT10LnBhcmVudCl8fHZvaWQgMD09PWV8fGUuZGV0YWNoKHQpLHQuc2V0UGFyZW50KHRoaXMpLHQuZGl2JiZ0LmlzQXR0YWNoZWRUb0RPTSYmKHQuZGl2LnJlbW92ZSgpLHRoaXMuZGl2LmFwcGVuZCh0LmRpdikpKX1mdW5jdGlvbiBMKHQpe3N3aXRjaChtKHRoaXMsQykuZ2V0TW9kZSgpKXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBvLkZyZWVUZXh0RWRpdG9yKHQpO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6cmV0dXJuIG5ldyBzLklua0VkaXRvcih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEKHQpe3ZhciBlPXRoaXMuZ2V0TmV4dElkKCkscj15KHRoaXMsRixMKS5jYWxsKHRoaXMse3BhcmVudDp0aGlzLGlkOmUseDp0Lm9mZnNldFgseTp0Lm9mZnNldFksdWlNYW5hZ2VyOm0odGhpcyxDKX0pO3JldHVybiByJiZ0aGlzLmFkZChyKSxyfWZ1bmN0aW9uIE4oKXtnKHRoaXMsVCwhMCk7dmFyIHQsZT11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3IuaXNFbXB0eSgpJiZyLnJlbW92ZSgpfX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1nKHRoaXMsVCwhMSl9ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9SSxfPUksKHc9ZCh3PSJfaW5pdGlhbGl6ZWQiKSlpbiBfP09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHcse3ZhbHVlOmZhbHNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6X1t3XT1mYWxzZX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRnJlZVRleHRFZGl0b3I9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDEzNSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9dSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx1KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/aChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmgoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXyhuLmtleSksbil9fWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PW0odCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSx2KHQsZSl9ZnVuY3Rpb24geSh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sbSh0KX1mdW5jdGlvbiBnKHQsZSl7QSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGIodCxlLHIpe3JldHVybihlPV8oZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gXyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW4oZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gdyh0LGUscil7QSh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gQSh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKHQpOmUudmFsdWV9KHQsRSh0LGUsImdldCIpKX1mdW5jdGlvbiBTKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19KHQsRSh0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gRSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgUD1uZXcgV2Vha01hcCxUPW5ldyBXZWFrTWFwLEM9bmV3IFdlYWtNYXAsTz1uZXcgV2Vha01hcCxGPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha1NldCxEPW5ldyBXZWFrU2V0LE49bmV3IFdlYWtTZXQsVT1uZXcgV2Vha1NldCxXPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ2KHQsZSl9KEUsdCk7dmFyIGUscixoLGIsXyxBPShiPUUsXz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgdCxlPW0oYik7aWYoXyl7dmFyIHI9bSh0aGlzKS5jb25zdHJ1Y3Rvcjt0PVJlZmxlY3QuY29uc3RydWN0KGUsYXJndW1lbnRzLHIpfWVsc2UgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiB5KHQpfSh0aGlzLHQpfSk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxFKSxnKHkoZT1BLmNhbGwodGhpcyxmKGYoe30sdCkse30se25hbWU6ImZyZWVUZXh0RWRpdG9yIn0pKSksVSksZyh5KGUpLE4pLGcoeShlKSxEKSxnKHkoZSksTCksdyh5KGUpLFAse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Qmx1ci5iaW5kKHkoZSkpfSksdyh5KGUpLFQse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Rm9jdXMuYmluZCh5KGUpKX0pLHcoeShlKSxDLHt3cml0YWJsZTohMCx2YWx1ZTplLmVkaXRvckRpdklucHV0LmJpbmQoeShlKSl9KSx3KHkoZSksTyx7d3JpdGFibGU6ITAsdmFsdWU6ZS5lZGl0b3JEaXZLZXlkb3duLmJpbmQoeShlKSl9KSx3KHkoZSksRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdyh5KGUpLE0se3dyaXRhYmxlOiEwLHZhbHVlOiIifSksdyh5KGUpLFIse3dyaXRhYmxlOiEwLHZhbHVlOiIiLmNvbmNhdChlLmlkLCItZWRpdG9yIil9KSx3KHkoZSksSSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx3KHkoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseCh5KGUpLEYsdC5jb2xvcnx8RS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLHgoeShlKSxqLHQuZm9udFNpemV8fEUuX2RlZmF1bHRGb250U2l6ZSksZX1yZXR1cm4gZT1FLGg9W3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO3RoaXMuX2ludGVybmFsUGFkZGluZz1wYXJzZUZsb2F0KGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1mcmVldGV4dC1wYWRkaW5nIikpfX0se2tleToidXBkYXRlRGVmYXVsdFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6RS5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkUuX2RlZmF1bHRDb2xvcj1lfX19LHtrZXk6ImRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLEUuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4sYT1wKG0oRSksImRlc2VyaWFsaXplIix0aGlzKS5jYWxsKHRoaXMsdCxlLHIpO3JldHVybiB4KGEsaix0LmZvbnRTaXplKSx4KGEsRixpLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBjKHQpfShuPXQuY29sb3IpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KG4pfHx1KG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSkseChhLE0sdC52YWx1ZSksYX19XSwocj1be2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpTKHRoaXMsTCxHKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOlModGhpcyxELEIpLmNhbGwodGhpcyxlKX19fSx7a2V5OiJwcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLGsodGhpcyxqKV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isayh0aGlzLEYpXV19fSx7a2V5OiJnZXRJbml0aWFsVHJhbnNsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnRTY2FsZTtyZXR1cm5bLUUuX2ludGVybmFsUGFkZGluZyp0LC0oRS5faW50ZXJuYWxQYWRkaW5nK2sodGhpcyxqKSkqdF19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3AobShFLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5pc0F0dGFjaGVkVG9ET018fHRoaXMucGFyZW50LmFkZCh0aGlzKSl9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpfHwodGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCExKSx0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHAobShFLnByb3RvdHlwZSksImVuYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QucmVtb3ZlKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwLHRoaXMuZGl2LmRyYWdnYWJsZT0hMSx0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGsodGhpcyxPKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGsodGhpcyxUKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsayh0aGlzLFApKSx0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsayh0aGlzLEMpKSl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0luRWRpdE1vZGUoKSYmKHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCkscChtKEUucHJvdG90eXBlKSwiZGlzYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSExLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixrKHRoaXMsUikpLHRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKHRoaXMsTykpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixrKHRoaXMsVCkpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGsodGhpcyxQKSksdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGsodGhpcyxDKSksdGhpcy5kaXYuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmlzRWRpdGluZz0hMSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cChtKEUucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHQudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fSx7a2V5OiJvbmNlQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53aWR0aHx8KHRoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpKX19LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikscChtKEUucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNJbkVkaXRNb2RlKCkmJihwKG0oRS5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksayh0aGlzLEkpfHwoeCh0aGlzLEksITApLHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpKSx0aGlzLmRpc2FibGVFZGl0TW9kZSgpLHgodGhpcyxNLFModGhpcyxOLHEpLmNhbGwodGhpcykudHJpbUVuZCgpKSxTKHRoaXMsVSxIKS5jYWxsKHRoaXMpKX19LHtrZXk6InNob3VsZEdldEtleWJvYXJkRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5FZGl0TW9kZSgpfX0se2tleToiZGJsY2xpY2siLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpfX0se2tleToia2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLmRpdiYmIkVudGVyIj09PXQua2V5JiYodGhpcy5lbmFibGVFZGl0TW9kZSgpLHRoaXMuZWRpdG9yRGl2LmZvY3VzKCkpfX0se2tleToiZWRpdG9yRGl2S2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7RS5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcyx0KX19LHtrZXk6ImVkaXRvckRpdkZvY3VzIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmlzRWRpdGluZz0hMH19LHtrZXk6ImVkaXRvckRpdkJsdXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaXNFZGl0aW5nPSExfX0se2tleToiZWRpdG9yRGl2SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHRoaXMuaXNFbXB0eSgpKX19LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsImNvbW1lbnQiKSx0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIil9fSx7a2V5OiJlbmFibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIiwhMCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkscChtKEUucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiLHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLGsodGhpcyxSKSksdGhpcy5lbmFibGVFZGl0aW5nKCksRS5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX0pKSxFLl9sMTBuUHJvbWlzZS5nZXQoImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50IikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJkZWZhdWx0LWNvbnRlbnQiLHQpfSkpLHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt2YXIgbj10aGlzLmVkaXRvckRpdi5zdHlsZTtpZihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGsodGhpcyxqKSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpLG4uY29sb3I9ayh0aGlzLEYpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLmVkaXRvckRpdiksdGhpcy5vdmVybGF5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJvdmVybGF5IiwiZW5hYmxlZCIpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLm92ZXJsYXlEaXYpLCgwLGEuYmluZEV2ZW50cykodGhpcyx0aGlzLmRpdixbImRibGNsaWNrIiwia2V5ZG93biJdKSx0aGlzLndpZHRoKXt2YXIgaT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWlbMF0sdT1pWzFdO3RoaXMuc2V0QXQodCpvLGUqdSx0aGlzLndpZHRoKm8sdGhpcy5oZWlnaHQqdSk7dmFyIGMsaD1zKGsodGhpcyxNKS5zcGxpdCgiXG4iKSk7dHJ5e2ZvcihoLnMoKTshKGM9aC5uKCkpLmRvbmU7KXt2YXIgZj1jLnZhbHVlLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmQoZj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSx0aGlzLmVkaXRvckRpdi5hcHBlbmQoZCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZSB0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwO3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvckRpdn19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD1FLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnRTY2FsZSxlPXRoaXMuZ2V0UmVjdCh0LHQpLHI9by5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTT9nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWRpdG9yRGl2KS5jb2xvcjprKHRoaXMsRikpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhULGNvbG9yOnIsZm9udFNpemU6ayh0aGlzLGopLHZhbHVlOmsodGhpcyxNKSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1dKSYmZChlLnByb3RvdHlwZSxyKSxoJiZkKGUsaCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksRX0oby5Bbm5vdGF0aW9uRWRpdG9yKTtmdW5jdGlvbiBHKHQpe3ZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtlLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdCh0LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIiksZS50cmFuc2xhdGUoMCwtKHQtayhlLGopKSplLnBhcmVudFNjYWxlKSx4KGUsaix0KSxTKGUsVSxIKS5jYWxsKGUpfSxuPWsodGhpcyxqKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyKHQpfSx1bmRvOmZ1bmN0aW9uKCl7cihuKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIEIodCl7dmFyIGU9dGhpcyxyPWsodGhpcyxGKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXt4KGUsRixlLmVkaXRvckRpdi5zdHlsZS5jb2xvcj10KX0sdW5kbzpmdW5jdGlvbigpe3goZSxGLGUuZWRpdG9yRGl2LnN0eWxlLmNvbG9yPXIpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIHEoKXt2YXIgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7dmFyIGUscj1bXSxuPXModCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1lLnZhbHVlO3IucHVzaChpLmlubmVyVGV4dC5yZXBsYWNlKC9cclxuP3xcbi8sIiIpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIuam9pbigiXG4iKX1mdW5jdGlvbiBIKCl7dmFyIHQsZT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxyPWVbMF0sbj1lWzFdO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXQ9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt2YXIgaT10aGlzLmN1cnJlbnRMYXllcixhPXRoaXMuZGl2LG89YS5zdHlsZS5kaXNwbGF5O2Euc3R5bGUuZGlzcGxheT0iaGlkZGVuIixpLmRpdi5hcHBlbmQodGhpcy5kaXYpLHQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLnJlbW92ZSgpLGEuc3R5bGUuZGlzcGxheT1vfXRoaXMud2lkdGg9dC53aWR0aC9yLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0L259ZS5GcmVlVGV4dEVkaXRvcj1XLGIoVywiX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQiLCIiKSxiKFcsIl9sMTBuUHJvbWlzZSIsdm9pZCAwKSxiKFcsIl9pbnRlcm5hbFBhZGRpbmciLDApLGIoVywiX2RlZmF1bHRDb2xvciIsbnVsbCksYihXLCJfZGVmYXVsdEZvbnRTaXplIiwxMCksYihXLCJfa2V5Ym9hcmRNYW5hZ2VyIixuZXcgYS5LZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrRW50ZXIiLCJtYWMrbWV0YStFbnRlciIsIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxXLnByb3RvdHlwZS5jb21taXRPclJlbW92ZV1dKSksYihXLCJfdHlwZSIsImZyZWV0ZXh0Iil9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLklua0VkaXRvcj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpdEN1cnZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5maXRDdXJ2ZX19KTt2YXIgaT1yKDEpLGE9cigxMzUpLG89cigxNTUpLHM9cigxMzYpO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWgodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxoKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8aCh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2YodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP2QoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt3KHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpkKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEEobi5rZXkpLG4pfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHk9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm51bGwhPT0odD1iKHQpKTspO3JldHVybiB0fSh0LGUpO2lmKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKTtyZXR1cm4gaS5nZXQ/aS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/dDpyKTppLnZhbHVlfX0seS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbSh0LGUpfWZ1bmN0aW9uIGcodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGIodCl9ZnVuY3Rpb24gXyh0LGUpe1ModCxlKSxlLmFkZCh0KX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oZT1BKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIEEodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGsodCxlLHIpe1ModCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIFModCxlKXtpZihlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlIil9KHQsZSkscn1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LFQodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LFQodCxlLCJnZXQiKSl9ZnVuY3Rpb24gVCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBDKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfXZhciBPPTE2LEY9MTAwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha01hcCxEPW5ldyBXZWFrTWFwLE49bmV3IFdlYWtNYXAsVT1uZXcgV2Vha01hcCxXPW5ldyBXZWFrTWFwLEc9bmV3IFdlYWtNYXAsQj1uZXcgV2Vha01hcCxxPW5ldyBXZWFrTWFwLEg9bmV3IFdlYWtNYXAsej1uZXcgV2Vha01hcCxWPW5ldyBXZWFrU2V0LFg9bmV3IFdlYWtTZXQsWT1uZXcgV2Vha1NldCxLPW5ldyBXZWFrU2V0LEo9bmV3IFdlYWtTZXQsUT1uZXcgV2Vha1NldCwkPW5ldyBXZWFrU2V0LFo9bmV3IFdlYWtTZXQsdHQ9bmV3IFdlYWtTZXQsZXQ9bmV3IFdlYWtTZXQscnQ9bmV3IFdlYWtTZXQsbnQ9bmV3IFdlYWtTZXQsaXQ9bmV3IFdlYWtTZXQsYXQ9bmV3IFdlYWtTZXQsb3Q9bmV3IFdlYWtTZXQsc3Q9bmV3IFdlYWtTZXQsbHQ9bmV3IFdlYWtTZXQsdXQ9bmV3IFdlYWtTZXQsY3Q9bmV3IFdlYWtTZXQsaHQ9bmV3IFdlYWtTZXQsZnQ9bmV3IFdlYWtTZXQsZHQ9bmV3IFdlYWtTZXQscHQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJm0odCxlKX0oZCx0KTt2YXIgZSxyLG8scyxoLGY9KHM9ZCxoPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciB0LGU9YihzKTtpZihoKXt2YXIgcj1iKHRoaXMpLmNvbnN0cnVjdG9yO3Q9UmVmbGVjdC5jb25zdHJ1Y3QoZSxhcmd1bWVudHMscil9ZWxzZSB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW4oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGcodCl9KHRoaXMsdCl9KTtmdW5jdGlvbiBkKHQpe3ZhciBlO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGQpLF8oZyhlPWYuY2FsbCh0aGlzLHAocCh7fSx0KSx7fSx7bmFtZToiaW5rRWRpdG9yIn0pKSksZHQpLF8oZyhlKSxmdCksXyhnKGUpLGh0KSxfKGcoZSksY3QpLF8oZyhlKSx1dCksXyhnKGUpLGx0KSxfKGcoZSksc3QpLF8oZyhlKSxvdCksXyhnKGUpLGF0KSxfKGcoZSksaXQpLF8oZyhlKSxudCksXyhnKGUpLHJ0KSxfKGcoZSksZXQpLF8oZyhlKSx0dCksXyhnKGUpLFopLF8oZyhlKSwkKSxfKGcoZSksUSksXyhnKGUpLEopLF8oZyhlKSxLKSxfKGcoZSksWSksXyhnKGUpLFgpLF8oZyhlKSxWKSxrKGcoZSksTSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSxSLHt3cml0YWJsZTohMCx2YWx1ZTowfSksayhnKGUpLEkse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVybW92ZS5iaW5kKGcoZSkpfSksayhnKGUpLEwse3dyaXRhYmxlOiEwLHZhbHVlOmUuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQoZyhlKSl9KSxrKGcoZSksRCx7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVydXAuYmluZChnKGUpKX0pLGsoZyhlKSxOLHt3cml0YWJsZTohMCx2YWx1ZTplLmNhbnZhc1BvaW50ZXJkb3duLmJpbmQoZyhlKSl9KSxrKGcoZSksVSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksVyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksRyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGsoZyhlKSxCLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksayhnKGUpLHEse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksSCx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSx6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZS5jb2xvcj10LmNvbG9yfHxudWxsLGUudGhpY2tuZXNzPXQudGhpY2tuZXNzfHxudWxsLGUub3BhY2l0eT10Lm9wYWNpdHl8fG51bGwsZS5wYXRocz1bXSxlLmJlemllclBhdGgyRD1bXSxlLmN1cnJlbnRQYXRoPVtdLGUuc2NhbGVGYWN0b3I9MSxlLnRyYW5zbGF0aW9uWD1lLnRyYW5zbGF0aW9uWT0wLGUueD0wLGUueT0wLGV9cmV0dXJuIGU9ZCxvPVt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9sMTBuUHJvbWlzZT1uZXcgTWFwKFsiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbCIsImVkaXRvcl9pbmsyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSl9fSx7a2V5OiJ1cGRhdGVEZWZhdWx0UGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUzpkLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpkLl9kZWZhdWx0Q29sb3I9ZTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6ZC5fZGVmYXVsdE9wYWNpdHk9ZS8xMDB9fX0se2tleToiZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCpkLl9kZWZhdWx0T3BhY2l0eSldXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49eShiKGQpLCJkZXNlcmlhbGl6ZSIsdGhpcykuY2FsbCh0aGlzLHQsZSxyKTtuLnRoaWNrbmVzcz10LnRoaWNrbmVzcyxuLmNvbG9yPWkuVXRpbC5tYWtlSGV4Q29sb3IuYXBwbHkoaS5VdGlsLHUodC5jb2xvcikpLG4ub3BhY2l0eT10Lm9wYWNpdHk7dmFyIGE9YyhuLnBhZ2VEaW1lbnNpb25zLDIpLG89YVswXSxzPWFbMV0saD1uLndpZHRoKm8sZj1uLmhlaWdodCpzLHA9bi5wYXJlbnRTY2FsZSx2PXQudGhpY2tuZXNzLzI7RShuLE0saC9mKSxFKG4sVSwhMCksRShuLHEsTWF0aC5yb3VuZChoKSksRShuLEgsTWF0aC5yb3VuZChmKSk7dmFyIG0sZz1sKHQucGF0aHMpO3RyeXtmb3IoZy5zKCk7IShtPWcubigpKS5kb25lOyl7dmFyIF89bS52YWx1ZS5iZXppZXIsdz1bXTtuLnBhdGhzLnB1c2godyk7Zm9yKHZhciBBPXAqKF9bMF0tdiksaz1wKihmLV9bMV0tdiksUz0yLFA9Xy5sZW5ndGg7UzxQO1MrPTYpe3ZhciBUPXAqKF9bU10tdiksRj1wKihmLV9bUysxXS12KSxqPXAqKF9bUysyXS12KSxMPXAqKGYtX1tTKzNdLXYpLEQ9cCooX1tTKzRdLXYpLE49cCooZi1fW1MrNV0tdik7dy5wdXNoKFtbQSxrXSxbVCxGXSxbaixMXSxbRCxOXV0pLEE9RCxrPU59dmFyIFc9eCh0aGlzLGQsT3QpLmNhbGwodGhpcyx3KTtuLmJlemllclBhdGgyRC5wdXNoKFcpfX1jYXRjaCh0KXtnLmUodCl9ZmluYWxseXtnLmYoKX12YXIgRz1DKG4sY3QsSXQpLmNhbGwobik7cmV0dXJuIEUobixJLE1hdGgubWF4KE8sR1syXS1HWzBdKSksRShuLFIsTWF0aC5tYXgoTyxHWzNdLUdbMV0pKSxDKG4sYXQsVHQpLmNhbGwobixoLGYpLG59fV0sKHI9W3trZXk6InVwZGF0ZVBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6Qyh0aGlzLFYsdnQpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOkModGhpcyxYLHl0KS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZOkModGhpcyxZLG10KS5jYWxsKHRoaXMsZSl9fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm5bW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyx0aGlzLnRoaWNrbmVzc3x8ZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLHRoaXMuY29sb3J8fGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoobnVsbCE9PSh0PXRoaXMub3BhY2l0eSkmJnZvaWQgMCE9PXQ/dDpkLl9kZWZhdWx0T3BhY2l0eSkpXV19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3koYihkLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5jYW52YXN8fChDKHRoaXMscnQseHQpLmNhbGwodGhpcyksQyh0aGlzLG50LEV0KS5jYWxsKHRoaXMpKSx0aGlzLmlzQXR0YWNoZWRUb0RPTXx8KHRoaXMucGFyZW50LmFkZCh0aGlzKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcykpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuY2FudmFzJiYodGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PTAsdGhpcy5jYW52YXMucmVtb3ZlKCksdGhpcy5jYW52YXM9bnVsbCxQKHRoaXMsQikuZGlzY29ubmVjdCgpLEUodGhpcyxCLG51bGwpLHkoYihkLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJzZXRQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLnBhcmVudCYmdD90aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKTp0aGlzLnBhcmVudCYmbnVsbD09PXQmJnRoaXMuX3VpTWFuYWdlci5hZGRTaG91bGRSZXNjYWxlKHRoaXMpLHkoYihkLnByb3RvdHlwZSksInNldFBhcmVudCIsdGhpcykuY2FsbCh0aGlzLHQpfX0se2tleToib25TY2FsZUNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV0sbj10aGlzLndpZHRoKmUsaT10aGlzLmhlaWdodCpyO3RoaXMuc2V0RGltZW5zaW9ucyhuLGkpfX0se2tleToiZW5hYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7UCh0aGlzLFUpfHxudWxsPT09dGhpcy5jYW52YXN8fCh5KGIoZC5wcm90b3R5cGUpLCJlbmFibGVFZGl0TW9kZSIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6ImRpc2FibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMmJih5KGIoZC5wcm90b3R5cGUpLCJkaXNhYmxlRWRpdE1vZGUiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kaXYuZHJhZ2dhYmxlPSF0aGlzLmlzRW1wdHkoKSx0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0aW5nIiksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6Im9uY2VBZGRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpdi5kcmFnZ2FibGU9IXRoaXMuaXNFbXB0eSgpfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMucGF0aHMubGVuZ3RofHwxPT09dGhpcy5wYXRocy5sZW5ndGgmJjA9PT10aGlzLnBhdGhzWzBdLmxlbmd0aH19LHtrZXk6ImNvbW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXtQKHRoaXMsVSl8fCh5KGIoZC5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5kaXNhYmxlRWRpdE1vZGUoKSx0aGlzLnNldEluRm9yZWdyb3VuZCgpLEUodGhpcyxVLCEwKSx0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJkaXNhYmxlZCIpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzLCEwKSx0aGlzLnBhcmVudC5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMCksdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpLHRoaXMuZGl2LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7eShiKGQucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHRoaXMuZW5hYmxlRWRpdE1vZGUoKX19LHtrZXk6ImNhbnZhc1BvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiFQKHRoaXMsVSkmJih0aGlzLnNldEluRm9yZWdyb3VuZCgpLCJtb3VzZSIhPT10LnR5cGUmJnRoaXMuZGl2LmZvY3VzKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksQyh0aGlzLFEsX3QpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybW92ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxDKHRoaXMsJCx3dCkuY2FsbCh0aGlzLHQub2Zmc2V0WCx0Lm9mZnNldFkpfX0se2tleToiY2FudmFzUG9pbnRlcnVwIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJjAhPT10aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCYmKHQuc3RvcFByb3BhZ2F0aW9uKCksQyh0aGlzLGV0LFN0KS5jYWxsKHRoaXMsdCksdGhpcy5zZXRJbkJhY2tncm91bmQoKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybGVhdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe0ModGhpcyxldCxTdCkuY2FsbCh0aGlzLHQpLHRoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkseShiKGQucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLGQuX2wxMG5Qcm9taXNlLmdldCgiZWRpdG9yX2luazJfYXJpYV9sYWJlbCIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9ci5kaXYpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCl9KSk7dmFyIG49YyhDKHRoaXMsSyxndCkuY2FsbCh0aGlzKSw0KSxpPW5bMF0sYT1uWzFdLG89blsyXSxzPW5bM107aWYodGhpcy5zZXRBdChpLGEsMCwwKSx0aGlzLnNldERpbXMobyxzKSxDKHRoaXMscnQseHQpLmNhbGwodGhpcyksdGhpcy53aWR0aCl7dmFyIGw9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMiksdT1sWzBdLGg9bFsxXTt0aGlzLnNldEF0KHQqdSxlKmgsdGhpcy53aWR0aCp1LHRoaXMuaGVpZ2h0KmgpLEUodGhpcyxXLCEwKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksdGhpcy5zZXREaW1zKHRoaXMud2lkdGgqdSx0aGlzLmhlaWdodCpoKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksQyh0aGlzLGR0LER0KS5jYWxsKHRoaXMpLHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZSB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIiksdGhpcy5lbmFibGVFZGl0TW9kZSgpO3JldHVybiBDKHRoaXMsbnQsRXQpLmNhbGwodGhpcyksdGhpcy5kaXZ9fSx7a2V5OiJzZXREaW1lbnNpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucm91bmQodCksbj1NYXRoLnJvdW5kKGUpO2lmKFAodGhpcyxxKSE9PXJ8fFAodGhpcyxIKSE9PW4pe0UodGhpcyxxLHIpLEUodGhpcyxILG4pLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsUCh0aGlzLE0pJiZNYXRoLmFicyhQKHRoaXMsTSktdC9lKT4uMDEmJihlPU1hdGguY2VpbCh0L1AodGhpcyxNKSksdGhpcy5zZXREaW1zKHQsZSkpO3ZhciBpPWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxvPWlbMV07dGhpcy53aWR0aD10L2EsdGhpcy5oZWlnaHQ9ZS9vLFAodGhpcyxVKSYmQyh0aGlzLGF0LFR0KS5jYWxsKHRoaXMsdCxlKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmdldFJlY3QoMCwwKSxlPXRoaXMucm90YXRpb24lMTgwPT0wP3RbM10tdFsxXTp0WzJdLXRbMF0scj1hLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuY3R4LnN0cm9rZVN0eWxlKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssY29sb3I6cix0aGlja25lc3M6dGhpcy50aGlja25lc3Msb3BhY2l0eTp0aGlzLm9wYWNpdHkscGF0aHM6Qyh0aGlzLHN0LEZ0KS5jYWxsKHRoaXMsdGhpcy5zY2FsZUZhY3Rvci90aGlzLnBhcmVudFNjYWxlLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxyZWN0OnQscm90YXRpb246dGhpcy5yb3RhdGlvbn19fV0pJiZ2KGUucHJvdG90eXBlLHIpLG8mJnYoZSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxkfShhLkFubm90YXRpb25FZGl0b3IpO2Z1bmN0aW9uIHZ0KHQpe3ZhciBlPXRoaXMscj10aGlzLnRoaWNrbmVzczt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLnRoaWNrbmVzcz10LEMoZSxmdCxMdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UudGhpY2tuZXNzPXIsQyhlLGZ0LEx0KS5jYWxsKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24geXQodCl7dmFyIGU9dGhpcyxyPXRoaXMuY29sb3I7dGhpcy5hZGRDb21tYW5kcyh7Y21kOmZ1bmN0aW9uKCl7ZS5jb2xvcj10LEMoZSx0dCxrdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UuY29sb3I9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIG10KHQpe3ZhciBlPXRoaXM7dC89MTAwO3ZhciByPXRoaXMub3BhY2l0eTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLm9wYWNpdHk9dCxDKGUsdHQsa3QpLmNhbGwoZSl9LHVuZG86ZnVuY3Rpb24oKXtlLm9wYWNpdHk9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24gZ3QoKXt2YXIgdD10aGlzLnBhcmVudFJvdGF0aW9uLGU9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscj1lWzBdLG49ZVsxXTtzd2l0Y2godCl7Y2FzZSA5MDpyZXR1cm5bMCxuLG4scl07Y2FzZSAxODA6cmV0dXJuW3IsbixyLG5dO2Nhc2UgMjcwOnJldHVybltyLDAsbixyXTtkZWZhdWx0OnJldHVyblswLDAscixuXX19ZnVuY3Rpb24gYnQoKXt2YXIgdD10aGlzLmN0eCxlPXRoaXMuY29sb3Iscj10aGlzLm9wYWNpdHksbj10aGlzLnRoaWNrbmVzcyxpPXRoaXMucGFyZW50U2NhbGUsYT10aGlzLnNjYWxlRmFjdG9yO3QubGluZVdpZHRoPW4qaS9hLHQubGluZUNhcD0icm91bmQiLHQubGluZUpvaW49InJvdW5kIix0Lm1pdGVyTGltaXQ9MTAsdC5zdHJva2VTdHlsZT0iIi5jb25jYXQoZSkuY29uY2F0KCgwLHMub3BhY2l0eVRvSGV4KShyKSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcixuPXRoaXM7dGhpcy5pc0VkaXRpbmc9ITAsUCh0aGlzLFcpfHwoRSh0aGlzLFcsITApLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSx0aGlzLnRoaWNrbmVzc3x8KHRoaXMudGhpY2tuZXNzPXB0Ll9kZWZhdWx0VGhpY2tuZXNzKSx0aGlzLmNvbG9yfHwodGhpcy5jb2xvcj1wdC5fZGVmYXVsdENvbG9yfHxhLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLG51bGwhPT0ocj10aGlzLm9wYWNpdHkpJiZ2b2lkIDAhPT1yfHwodGhpcy5vcGFjaXR5PXB0Ll9kZWZhdWx0T3BhY2l0eSkpLHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsbnVsbCksQyh0aGlzLEosYnQpLmNhbGwodGhpcyksdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKHQsZSksRSh0aGlzLHosKGZ1bmN0aW9uKCl7dmFyIHQ7UChuLHopJiYoUChuLEcpJiYobi5pc0VtcHR5KCk/KG4uY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jdHguY2xlYXJSZWN0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpKTpDKG4sdHQsa3QpLmNhbGwobiksKHQ9bi5jdHgpLmxpbmVUby5hcHBseSh0LHUoUChuLEcpKSksRShuLEcsbnVsbCksbi5jdHguc3Ryb2tlKCkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUChuLHopKSl9KSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShQKHRoaXMseikpfWZ1bmN0aW9uIHd0KHQsZSl7dmFyIHI9Yyh0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKSwyKSxuPXJbMF0saT1yWzFdO3Q9PT1uJiZlPT09aXx8KHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsW3QsZV0pKX1mdW5jdGlvbiBBdCh0LGUpe3ZhciByPXRoaXM7dGhpcy5jdHguY2xvc2VQYXRoKCksRSh0aGlzLHosbnVsbCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKSxlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTt2YXIgbixpPWModGhpcy5jdXJyZW50UGF0aC5hdCgtMSksMiksYT1pWzBdLHM9aVsxXTtpZih0PT09YSYmZT09PXN8fHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksMSE9PXRoaXMuY3VycmVudFBhdGgubGVuZ3RoKW49KDAsby5maXRDdXJ2ZSkodGhpcy5jdXJyZW50UGF0aCwzMCxudWxsKTtlbHNle3ZhciBsPVt0LGVdO249W1tsLGwuc2xpY2UoKSxsLnNsaWNlKCksbF1dfXZhciB1PXgocHQscHQsT3QpLmNhbGwocHQsbik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MCx0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyLnBhdGhzLnB1c2gobiksci5iZXppZXJQYXRoMkQucHVzaCh1KSxyLnJlYnVpbGQoKX0sdW5kbzpmdW5jdGlvbigpe3IucGF0aHMucG9wKCksci5iZXppZXJQYXRoMkQucG9wKCksMD09PXIucGF0aHMubGVuZ3RoP3IucmVtb3ZlKCk6KHIuY2FudmFzfHwoQyhyLHJ0LHh0KS5jYWxsKHIpLEMocixudCxFdCkuY2FsbChyKSksQyhyLGZ0LEx0KS5jYWxsKHIpKX0sbXVzdEV4ZWM6ITB9KX1mdW5jdGlvbiBrdCgpe2lmKHRoaXMuaXNFbXB0eSgpKUModGhpcyxvdCxDdCkuY2FsbCh0aGlzKTtlbHNle0ModGhpcyxKLGJ0KS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2FudmFzLGU9dGhpcy5jdHg7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyk7dmFyIHIsbj1sKHRoaXMuYmV6aWVyUGF0aDJEKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zdHJva2UoaSl9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfX19ZnVuY3Rpb24gU3QodCl7Qyh0aGlzLFosQXQpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSx0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksdGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD0wLHRoaXMuY2FudmFzLmNsYXNzTmFtZT0iaW5rRWRpdG9yQ2FudmFzIixwdC5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10LmNhbnZhcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX0pKSx0aGlzLmRpdi5hcHBlbmQodGhpcy5jYW52YXMpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIil9ZnVuY3Rpb24gRXQoKXt2YXIgdD10aGlzLGU9bnVsbDtFKHRoaXMsQixuZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uY29udGVudFJlY3Q7bi53aWR0aCYmbi5oZWlnaHQmJihudWxsIT09ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZpeERpbXMoKSxlPW51bGx9KSxGKSx0LnNldERpbWVuc2lvbnMobi53aWR0aCxuLmhlaWdodCkpfSkpKSxQKHRoaXMsQikub2JzZXJ2ZSh0aGlzLmRpdil9ZnVuY3Rpb24gUHQoKXtpZihQKHRoaXMsVykpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV07dGhpcy5jYW52YXMud2lkdGg9TWF0aC5jZWlsKHRoaXMud2lkdGgqZSksdGhpcy5jYW52YXMuaGVpZ2h0PU1hdGguY2VpbCh0aGlzLmhlaWdodCpyKSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpLG49KHQtcikvUCh0aGlzLEkpLGk9KGUtcikvUCh0aGlzLFIpO3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4obixpKX1mdW5jdGlvbiBDdCgpe3ZhciB0PUModGhpcyxodCxqdCkuY2FsbCh0aGlzKS8yO3RoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLDAsMCx0aGlzLnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YKnRoaXMuc2NhbGVGYWN0b3IrdCx0aGlzLnRyYW5zbGF0aW9uWSp0aGlzLnNjYWxlRmFjdG9yK3QpfWZ1bmN0aW9uIE90KHQpe2Zvcih2YXIgZT1uZXcgUGF0aDJELHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe3ZhciBpPWModFtyXSw0KSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxsPWlbM107MD09PXImJmUubW92ZVRvLmFwcGx5KGUsdShhKSksZS5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBGdCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSx1PXRoaXMudGhpY2tuZXNzLzIsaD1sKHRoaXMucGF0aHMpO3RyeXtmb3IoaC5zKCk7IShvPWgubigpKS5kb25lOyl7dmFyIGY9by52YWx1ZTtpPVtdLGE9W107Zm9yKHZhciBkPTAscD1mLmxlbmd0aDtkPHA7ZCsrKXt2YXIgdj1jKGZbZF0sNCkseT12WzBdLG09dlsxXSxnPXZbMl0sYj12WzNdLF89dCooeVswXStlKSt1LHc9bi10Kih5WzFdK3IpLXUsQT10KihtWzBdK2UpK3Usaz1uLXQqKG1bMV0rciktdSxTPXQqKGdbMF0rZSkrdSx4PW4tdCooZ1sxXStyKS11LEU9dCooYlswXStlKSt1LFA9bi10KihiWzFdK3IpLXU7MD09PWQmJihpLnB1c2goXyx3KSxhLnB1c2goXyx3KSksaS5wdXNoKEEsayxTLHgsRSxQKSxDKHRoaXMsbHQsTXQpLmNhbGwodGhpcyxfLHcsQSxrLFMseCxFLFAsNCxhKX1zLnB1c2goe2JlemllcjppLHBvaW50czphfSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiBzfWZ1bmN0aW9uIE10KHQsZSxyLG4saSxhLG8scyxsLHUpe2lmKEModGhpcyx1dCxSdCkuY2FsbCh0aGlzLHQsZSxyLG4saSxhLG8scykpdS5wdXNoKG8scyk7ZWxzZXtmb3IodmFyIGM9MTtjPGwtMTtjKyspe3ZhciBoPWMvbCxmPTEtaCxkPWgqdCtmKnIscD1oKmUrZipuLHY9aCpyK2YqaSx5PWgqbitmKmE7ZD1oKihkPWgqZCtmKnYpK2YqKHY9aCp2K2YqKGgqaStmKm8pKSxwPWgqKHA9aCpwK2YqeSkrZiooeT1oKnkrZiooaCphK2YqcykpLHUucHVzaChkLHApfXUucHVzaChvLHMpfX1mdW5jdGlvbiBSdCh0LGUscixuLGksYSxvLHMpe3ZhciBsPU1hdGgucG93KDMqci0yKnQtbywyKSx1PU1hdGgucG93KDMqbi0yKmUtcywyKSxjPU1hdGgucG93KDMqaS10LTIqbywyKSxoPU1hdGgucG93KDMqYS1lLTIqcywyKTtyZXR1cm4gTWF0aC5tYXgobCxjKStNYXRoLm1heCh1LGgpPD0xMH1mdW5jdGlvbiBJdCgpe3ZhciB0LGU9MS8wLHI9LTEvMCxuPTEvMCxhPS0xLzAsbz1sKHRoaXMucGF0aHMpO3RyeXtmb3Ioby5zKCk7ISh0PW8ubigpKS5kb25lOyl7dmFyIHMsaD1sKHQudmFsdWUpO3RyeXtmb3IoaC5zKCk7IShzPWgubigpKS5kb25lOyl7dmFyIGY9YyhzLnZhbHVlLDQpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWkuVXRpbC5iZXppZXJCb3VuZGluZ0JveC5hcHBseShpLlV0aWwsdShkKS5jb25jYXQodShwKSx1KHYpLHUoeSkpKTtlPU1hdGgubWluKGUsbVswXSksbj1NYXRoLm1pbihuLG1bMV0pLHI9TWF0aC5tYXgocixtWzJdKSxhPU1hdGgubWF4KGEsbVszXSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9cmV0dXJuW2UsbixyLGFdfWZ1bmN0aW9uIGp0KCl7cmV0dXJuIFAodGhpcyxVKT9NYXRoLmNlaWwodGhpcy50aGlja25lc3MqdGhpcy5wYXJlbnRTY2FsZSk6MH1mdW5jdGlvbiBMdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuaXNFbXB0eSgpKWlmKFAodGhpcyxVKSl7dmFyIGU9Qyh0aGlzLGN0LEl0KS5jYWxsKHRoaXMpLHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpO0UodGhpcyxJLE1hdGgubWF4KE8sZVsyXS1lWzBdKSksRSh0aGlzLFIsTWF0aC5tYXgoTyxlWzNdLWVbMV0pKTt2YXIgbj1NYXRoLmNlaWwocitQKHRoaXMsSSkqdGhpcy5zY2FsZUZhY3RvciksaT1NYXRoLmNlaWwocitQKHRoaXMsUikqdGhpcy5zY2FsZUZhY3RvciksYT1jKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWFbMF0scz1hWzFdO3RoaXMud2lkdGg9bi9vLHRoaXMuaGVpZ2h0PWkvcyxFKHRoaXMsTSxuL2kpLEModGhpcyxkdCxEdCkuY2FsbCh0aGlzKTt2YXIgbD10aGlzLnRyYW5zbGF0aW9uWCx1PXRoaXMudHJhbnNsYXRpb25ZO3RoaXMudHJhbnNsYXRpb25YPS1lWzBdLHRoaXMudHJhbnNsYXRpb25ZPS1lWzFdLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksRSh0aGlzLHEsbiksRSh0aGlzLEgsaSksdGhpcy5zZXREaW1zKG4saSk7dmFyIGg9dD9yL3RoaXMuc2NhbGVGYWN0b3IvMjowO3RoaXMudHJhbnNsYXRlKGwtdGhpcy50cmFuc2xhdGlvblgtaCx1LXRoaXMudHJhbnNsYXRpb25ZLWgpfWVsc2UgQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIER0KCl7dmFyIHQ9dGhpcy5kaXYuc3R5bGU7UCh0aGlzLE0pPj0xPyh0Lm1pbkhlaWdodD0iIi5jb25jYXQoTywicHgiKSx0Lm1pbldpZHRoPSIiLmNvbmNhdChNYXRoLnJvdW5kKFAodGhpcyxNKSpPKSwicHgiKSk6KHQubWluV2lkdGg9IiIuY29uY2F0KE8sInB4IiksdC5taW5IZWlnaHQ9IiIuY29uY2F0KE1hdGgucm91bmQoTy9QKHRoaXMsTSkpLCJweCIpKX1lLklua0VkaXRvcj1wdCx3KHB0LCJfZGVmYXVsdENvbG9yIixudWxsKSx3KHB0LCJfZGVmYXVsdE9wYWNpdHkiLDEpLHcocHQsIl9kZWZhdWx0VGhpY2tuZXNzIiwxKSx3KHB0LCJfbDEwblByb21pc2UiLHZvaWQgMCksdyhwdCwiX3R5cGUiLCJpbmsiKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmZpdEN1cnZlPXZvaWQgMDt2YXIgbj1yKDE1Nik7ZS5maXRDdXJ2ZT1ufSx0PT57ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQscil7aWYoIm9iamVjdCIhPT1lKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZShpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PWUoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlJiZuKHQucHJvdG90eXBlLGUpLHImJm4odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8byh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG8scyxoLGYsZCxwLHksbSxnLGIsXyx3LEE7aWYoMj09PXQubGVuZ3RoKXJldHVybiB3PXYudmVjdG9yTGVuKHYuc3VidHJhY3QodFswXSx0WzFdKSkvMyxbbz1bdFswXSx2LmFkZEFycmF5cyh0WzBdLHYubXVsSXRlbXMoZSx3KSksdi5hZGRBcnJheXModFsxXSx2Lm11bEl0ZW1zKHIsdykpLHRbMV1dXTtzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZT1hP3Irdi52ZWN0b3JMZW4odi5zdWJ0cmFjdCh0LG4pKTowLGkucHVzaChlKSxyPWUsbj10fSkpLGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L3J9KSl9KHQpO3ZhciBrPWEodSh0LHMscyxlLHIsaSksMyk7aWYobz1rWzBdLGY9a1sxXSxwPWtbMl0sMD09PWZ8fGY8bilyZXR1cm5bb107aWYoZjxuKm4pZm9yKGg9cyxkPWYseT1wLEE9MDtBPDIwO0ErKyl7dmFyIFM9YSh1KHQscyxoPWMobyx0LGgpLGUscixpKSwzKTtpZihvPVNbMF0sZj1TWzFdLHA9U1syXSxmPG4pcmV0dXJuW29dO2lmKHA9PT15KXt2YXIgeD1mL2Q7aWYoeD4uOTk5OSYmeDwxLjAwMDEpYnJlYWt9ZD1mLHk9cH1pZihfPVtdLChtPXYuc3VidHJhY3QodFtwLTFdLHRbcCsxXSkpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSkpe3ZhciBFPVstKG09di5zdWJ0cmFjdCh0W3AtMV0sdFtwXSkpWzFdLG1bMF1dO21bMF09RVswXSxtWzFdPUVbMV19cmV0dXJuIGc9di5ub3JtYWxpemUobSksYj12Lm11bEl0ZW1zKGcsLTEpLChfPV8uY29uY2F0KGwodC5zbGljZSgwLHArMSksZSxnLG4saSkpKS5jb25jYXQobCh0LnNsaWNlKHApLGIscixuLGkpKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxvKXt2YXIgcyxsLHU7cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sZyxiLF8sdyxBLGs9dFswXSxTPXRbdC5sZW5ndGgtMV07Zm9yKGk9W2ssbnVsbCxudWxsLFNdLGE9di56ZXJvc19YeDJ4MihlLmxlbmd0aCksZz0wLGI9ZS5sZW5ndGg7ZzxiO2crKylBPTEtKHc9ZVtnXSksKG89YVtnXSlbMF09di5tdWxJdGVtcyhyLDMqdyooQSpBKSksb1sxXT12Lm11bEl0ZW1zKG4sMypBKih3KncpKTtmb3Iocz1bWzAsMF0sWzAsMF1dLGw9WzAsMF0sZz0wLGI9dC5sZW5ndGg7ZzxiO2crKyl3PWVbZ10sbz1hW2ddLHNbMF1bMF0rPXYuZG90KG9bMF0sb1swXSksc1swXVsxXSs9di5kb3Qob1swXSxvWzFdKSxzWzFdWzBdKz12LmRvdChvWzBdLG9bMV0pLHNbMV1bMV0rPXYuZG90KG9bMV0sb1sxXSksXz12LnN1YnRyYWN0KHRbZ10seS5xKFtrLGssUyxTXSx3KSksbFswXSs9di5kb3Qob1swXSxfKSxsWzFdKz12LmRvdChvWzFdLF8pO3JldHVybiB1PXNbMF1bMF0qc1sxXVsxXS1zWzFdWzBdKnNbMF1bMV0sYz1zWzBdWzBdKmxbMV0tc1sxXVswXSpsWzBdLGg9bFswXSpzWzFdWzFdLWxbMV0qc1swXVsxXSxkPTA9PT11PzA6Yy91LChmPTA9PT11PzA6aC91KTwocD0xZS02KihtPXYudmVjdG9yTGVuKHYuc3VidHJhY3QoayxTKSkpKXx8ZDxwPyhpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLG0vMykpLGlbMl09di5hZGRBcnJheXMoUyx2Lm11bEl0ZW1zKG4sbS8zKSkpOihpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLGYpKSxpWzJdPXYuYWRkQXJyYXlzKFMsdi5tdWxJdGVtcyhuLGQpKSksaX0odCxyLG4saSk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCx1LGM7aT0wLGE9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKTt2YXIgaD1mKGUsMTApO2ZvcihzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXU9dFtzXSxjPWQoMCxyW3NdLGgsMTApLChuPShvPXYuc3VidHJhY3QoeS5xKGUsYyksdSkpWzBdKm9bMF0rb1sxXSpvWzFdKT5pJiYoaT1uLGE9cyk7cmV0dXJuW2ksYV19KHQscyxlKSxoPWEoYywyKTtyZXR1cm4gbD1oWzBdLHU9aFsxXSxvJiZvKHtiZXo6cyxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6bCxtYXhQb2ludDp1fSksW3MsbCx1XX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGgodCxlW25dLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXYuc3VidHJhY3QoeS5xKHQsciksZSksaT15LnFwcmltZSh0LHIpLGE9di5tdWxNYXRyaXgobixpKSxvPXYuc3VtKHYuc3F1YXJlSXRlbXMoaSkpKzIqdi5tdWxNYXRyaXgobix5LnFwcmltZXByaW1lKHQscikpO3JldHVybiAwPT09bz9yOnItYS9vfXZhciBmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49WzBdLGk9dFswXSxhPTAsbz0xO288PWU7bysrKXI9eS5xKHQsby9lKSxhKz12LnZlY3Rvckxlbih2LnN1YnRyYWN0KHIsaSkpLG4ucHVzaChhKSxpPXI7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9hfSkpfTtmdW5jdGlvbiBkKHQsZSxyLG4pe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBpLGEsbyxzLGw9MTtsPD1uO2wrKylpZihlPD1yW2xdKXtvPShsLTEpL24sYT1sL24scz0oZS0oaT1yW2wtMV0pKS8ocltsXS1pKSooYS1vKStvO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdi5ub3JtYWxpemUodi5zdWJ0cmFjdCh0LGUpKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OiJ6ZXJvc19YeDJ4MiIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QtLTspZS5wdXNoKFswLDBdKTtyZXR1cm4gZX19LHtrZXk6Im11bEl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX19LHtrZXk6Im11bE1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdCtyKmVbbl19KSwwKX19LHtrZXk6InN1YnRyYWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC1lW3JdfSkpfX0se2tleToiYWRkQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlW3JdfSkpfX0se2tleToiYWRkSXRlbXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpfX0se2tleToic3VtIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX19LHtrZXk6ImRvdCIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5tdWxNYXRyaXgoZSxyKX19LHtrZXk6InZlY3RvckxlbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguaHlwb3QuYXBwbHkoTWF0aCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBzKHQpfShlPXQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KGUpfHxvKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKTt2YXIgZX19LHtrZXk6ImRpdkl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX19LHtrZXk6InNxdWFyZUl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KnR9KSl9fSx7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdkl0ZW1zKHQsdGhpcy52ZWN0b3JMZW4odCkpfX1dKSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleToicSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHRbMF0scipyKnIpLGk9di5tdWxJdGVtcyh0WzFdLDMqcipyKmUpLGE9di5tdWxJdGVtcyh0WzJdLDMqciplKmUpLG89di5tdWxJdGVtcyh0WzNdLGUqZSplKTtyZXR1cm4gdi5hZGRBcnJheXModi5hZGRBcnJheXMobixpKSx2LmFkZEFycmF5cyhhLG8pKX19LHtrZXk6InFwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsxXSx0WzBdKSwzKnIqciksaT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsyXSx0WzFdKSw2KnIqZSksYT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIHYuYWRkQXJyYXlzKHYuYWRkQXJyYXlzKG4saSksYSl9fSx7a2V5OiJxcHJpbWVwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hZGRBcnJheXModi5tdWxJdGVtcyh2LmFkZEFycmF5cyh2LnN1YnRyYWN0KHRbMl0sdi5tdWxJdGVtcyh0WzFdLDIpKSx0WzBdKSw2KigxLWUpKSx2Lm11bEl0ZW1zKHYuYWRkQXJyYXlzKHYuc3VidHJhY3QodFszXSx2Lm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX1dKSx0fSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7aWYodC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl8fGUubGVuZ3RoIT09dFswXS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVhY2ggcG9pbnQgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG51bWJlcnMuIEVhY2ggcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYW1vdW50IG9mIG51bWJlcnMuIil9KSksKHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIDA9PT1yfHwhZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbci0xXVtuXX0pKX0pKSkubGVuZ3RoPDIpcmV0dXJuW107dmFyIG49dC5sZW5ndGgsaT1wKHRbMV0sdFswXSksYT1wKHRbbi0yXSx0W24tMV0pO3JldHVybiBsKHQsaSxhLGUscil9LHQuZXhwb3J0cy5maXRDdWJpYz1sLHQuZXhwb3J0cy5jcmVhdGVUYW5nZW50PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uTGF5ZXI9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDEzNCksbz1yKDE1OCkscz1yKDE1OSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX0odCxlKSxyfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdT0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PXYodCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB3KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Xyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj12KHQpO2lmKGUpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09QShlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gcCh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sdih0KX1mdW5jdGlvbiB5KHQsZSl7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBtKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPV8odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8Xyh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gXyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3codCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHcodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe3JldHVybiBBPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxBKHQpfWZ1bmN0aW9uIGsodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFKG4ua2V5KSxuKX19ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIGUmJlModC5wcm90b3R5cGUsZSksciYmUyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gRSh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09QSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PUEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PUEoZSk/ZTpTdHJpbmcoZSl9dmFyIFA9MWUzLFQ9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gQyh0KXtyZXR1cm57d2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2sodGhpcyx0KX1yZXR1cm4geCh0LG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBJKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5URVhUOnJldHVybiBuZXcgVyh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuV0lER0VUOnN3aXRjaCh0LmRhdGEuZmllbGRUeXBlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IEIodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IEgodCk6dC5kYXRhLmNoZWNrQm94P25ldyBxKHQpOm5ldyB6KHQpO2Nhc2UiQ2giOnJldHVybiBuZXcgVih0KX1yZXR1cm4gbmV3IEcodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlBPUFVQOnJldHVybiBuZXcgWCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBLKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgSih0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgUSh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgJCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBaKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpyZXR1cm4gbmV3IGV0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBydCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpyZXR1cm4gbmV3IHR0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6cmV0dXJuIG5ldyBudCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgaXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOnJldHVybiBuZXcgYXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpyZXR1cm4gbmV3IG90KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IHN0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IGx0KHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBGKHQpfX19XSksdH0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLmlzUmVuZGVyYWJsZSxpPXZvaWQgMCE9PW4mJm4sYT1yLmlnbm9yZUJvcmRlcixvPXZvaWQgMCE9PWEmJmEscz1yLmNyZWF0ZVF1YWRyaWxhdGVyYWxzLGw9dm9pZCAwIT09cyYmcztrKHRoaXMsdCksdGhpcy5pc1JlbmRlcmFibGU9aSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMubGF5ZXI9ZS5sYXllcix0aGlzLnBhZ2U9ZS5wYWdlLHRoaXMudmlld3BvcnQ9ZS52aWV3cG9ydCx0aGlzLmxpbmtTZXJ2aWNlPWUubGlua1NlcnZpY2UsdGhpcy5kb3dubG9hZE1hbmFnZXI9ZS5kb3dubG9hZE1hbmFnZXIsdGhpcy5pbWFnZVJlc291cmNlc1BhdGg9ZS5pbWFnZVJlc291cmNlc1BhdGgsdGhpcy5yZW5kZXJGb3Jtcz1lLnJlbmRlckZvcm1zLHRoaXMuc3ZnRmFjdG9yeT1lLnN2Z0ZhY3RvcnksdGhpcy5hbm5vdGF0aW9uU3RvcmFnZT1lLmFubm90YXRpb25TdG9yYWdlLHRoaXMuZW5hYmxlU2NyaXB0aW5nPWUuZW5hYmxlU2NyaXB0aW5nLHRoaXMuaGFzSlNBY3Rpb25zPWUuaGFzSlNBY3Rpb25zLHRoaXMuX2ZpZWxkT2JqZWN0cz1lLmZpZWxkT2JqZWN0cyxpJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG8pKSxsJiYodGhpcy5xdWFkcmlsYXRlcmFscz10aGlzLl9jcmVhdGVRdWFkcmlsYXRlcmFscyhvKSl9cmV0dXJuIHgodCxbe2tleToiX2NyZWF0ZUNvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGU9dGhpcy5kYXRhLHI9dGhpcy5wYWdlLGk9dGhpcy52aWV3cG9ydCxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIixlLmlkKTt2YXIgbz1pLnJhd0RpbXMscz1vLnBhZ2VXaWR0aCxsPW8ucGFnZUhlaWdodCx1PW8ucGFnZVgsYz1vLnBhZ2VZLGg9QyhlLnJlY3QpLGY9aC53aWR0aCxkPWguaGVpZ2h0LHA9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2UucmVjdFswXSxyLnZpZXdbM10tZS5yZWN0WzFdK3Iudmlld1sxXSxlLnJlY3RbMl0sci52aWV3WzNdLWUucmVjdFszXStyLnZpZXdbMV1dKTtpZighdCYmZS5ib3JkZXJTdHlsZS53aWR0aD4wKXthLnN0eWxlLmJvcmRlcldpZHRoPSIiLmNvbmNhdChlLmJvcmRlclN0eWxlLndpZHRoLCJweCIpO3ZhciB2PWUuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cyx5PWUuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7aWYodj4wfHx5PjApe3ZhciBtPSJjYWxjKCIuY29uY2F0KHYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkgLyBjYWxjKCIpLmNvbmNhdCh5LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIik7YS5zdHlsZS5ib3JkZXJSYWRpdXM9bX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBIKXt2YXIgZz0iY2FsYygiLmNvbmNhdChmLCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygiKS5jb25jYXQoZCwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpO2Euc3R5bGUuYm9yZGVyUmFkaXVzPWd9c3dpdGNoKGUuYm9yZGVyU3R5bGUuc3R5bGUpe2Nhc2Ugbi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOmEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6YS5zdHlsZS5ib3JkZXJTdHlsZT0iZGFzaGVkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEOigwLG4ud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkIik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6KDAsbi53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOmEuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGU9InNvbGlkIn12YXIgYj1lLmJvcmRlckNvbG9yfHxudWxsO2I/YS5zdHlsZS5ib3JkZXJDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8YlswXSwwfGJbMV0sMHxiWzJdKTphLnN0eWxlLmJvcmRlcldpZHRoPTB9YS5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqKHBbMF0tdSkvcywiJSIpLGEuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqKHBbMV0tYykvbCwiJSIpO3ZhciBfPWUucm90YXRpb247cmV0dXJuIGUuaGFzT3duQ2FudmFzfHwwPT09Xz8oYS5zdHlsZS53aWR0aD0iIi5jb25jYXQoMTAwKmYvcywiJSIpLGEuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZC9sLCIlIikpOnRoaXMuc2V0Um90YXRpb24oXyxhKSxhfX0se2tleToic2V0Um90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jb250YWluZXIsaT10aGlzLnZpZXdwb3J0LnJhd0RpbXMsYT1pLnBhZ2VXaWR0aCxvPWkucGFnZUhlaWdodCxzPUModGhpcy5kYXRhLnJlY3QpLGw9cy53aWR0aCx1PXMuaGVpZ2h0O3QlMTgwPT0wPyhlPTEwMCpsL2Escj0xMDAqdS9vKTooZT0xMDAqdS9hLHI9MTAwKmwvbyksbi5zdHlsZS53aWR0aD0iIi5jb25jYXQoZSwiJSIpLG4uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChyLCIlIiksbi5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfX0se2tleToiX2NvbW1vbkFjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5kZXRhaWxbdF07ci50YXJnZXQuc3R5bGVbZV09by5Db2xvckNvbnZlcnRlcnNbIiIuY29uY2F0KG5bMF0sIl9IVE1MIildKG4uc2xpY2UoMSkpfTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2NvbW1vbkFjdGlvbnMiLHtkaXNwbGF5OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLmRpc3BsYXklMj09MTt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXI/ImhpZGRlbiI6InZpc2libGUiLHQuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodC5kYXRhLmlkLHtoaWRkZW46cixwcmludDowPT09ZS5kZXRhaWwuZGlzcGxheXx8Mz09PWUuZGV0YWlsLmRpc3BsYXl9KX0scHJpbnQ6ZnVuY3Rpb24oZSl7dC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3ByaW50OmUuZGV0YWlsLnByaW50fSl9LGhpZGRlbjpmdW5jdGlvbihlKXt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PWUuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIsdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse2hpZGRlbjplLmRldGFpbC5oaWRkZW59KX0sZm9jdXM6ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC50YXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITF9KX0pLDApfSx1c2VyTmFtZTpmdW5jdGlvbih0KXt0LnRhcmdldC50aXRsZT10LmRldGFpbC51c2VyTmFtZX0scmVhZG9ubHk6ZnVuY3Rpb24odCl7dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6ZnVuY3Rpb24oZSl7dC5fc2V0UmVxdWlyZWQoZS50YXJnZXQsZS5kZXRhaWwucmVxdWlyZWQpfSxiZ0NvbG9yOmZ1bmN0aW9uKHQpe2UoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6ZnVuY3Rpb24odCl7ZSgiZmlsbENvbG9yIiwiYmFja2dyb3VuZENvbG9yIix0KX0sZmdDb2xvcjpmdW5jdGlvbih0KXtlKCJmZ0NvbG9yIiwiY29sb3IiLHQpfSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7ZSgidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjpmdW5jdGlvbih0KXtlKCJib3JkZXJDb2xvciIsImJvcmRlckNvbG9yIix0KX0sc3Ryb2tlQ29sb3I6ZnVuY3Rpb24odCl7ZSgic3Ryb2tlQ29sb3IiLCJib3JkZXJDb2xvciIsdCl9LHJvdGF0aW9uOmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLnJvdGF0aW9uO3Quc2V0Um90YXRpb24ociksdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3JvdGF0aW9uOnJ9KX19KX19LHtrZXk6Il9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbW1vbkFjdGlvbnMsbj0wLGk9T2JqZWN0LmtleXMoZS5kZXRhaWwpO248aS5sZW5ndGg7bisrKXt2YXIgYT1pW25dLG89dFthXXx8clthXTtudWxsPT1vfHxvKGUpfX19LHtrZXk6Il9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5lbmFibGVTY3JpcHRpbmcpe3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZihlKWZvcih2YXIgcj10aGlzLl9jb21tb25BY3Rpb25zLG49MCxpPU9iamVjdC5lbnRyaWVzKGUpO248aS5sZW5ndGg7bisrKXt2YXIgYT1iKGlbbl0sMiksbz1hWzBdLHM9YVsxXSxsPXJbb107bCYmKGwoe2RldGFpbDp7W29dOnN9LHRhcmdldDp0fSksZGVsZXRlIGVbb10pfX19fSx7a2V5OiJfY3JlYXRlUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5kYXRhLnF1YWRQb2ludHMpcmV0dXJuIG51bGw7dmFyIGUscj1bXSxuPXRoaXMuZGF0YS5yZWN0LGk9Zyh0aGlzLmRhdGEucXVhZFBvaW50cyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgYT1lLnZhbHVlO3RoaXMuZGF0YS5yZWN0PVthWzJdLngsYVsyXS55LGFbMV0ueCxhWzFdLnldLHIucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdGhpcy5kYXRhLnJlY3Q9bixyfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGFpbmVyO3RoaXMucXVhZHJpbGF0ZXJhbHMmJih0PXR8fHRoaXMucXVhZHJpbGF0ZXJhbHMscj10aGlzLnF1YWRyaWxhdGVyYWxzWzBdKSx0fHwoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSIsci5hcHBlbmQodCkpO3ZhciBuPW5ldyBZKHtjb250YWluZXI6cix0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO24uc3R5bGUubGVmdD0iMTAwJSIsci5hcHBlbmQobil9fSx7a2V5OiJfcmVuZGVyUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI9Zyh0aGlzLnF1YWRyaWxhdGVyYWxzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5jbGFzc05hbWU9dH1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfX0se2tleToiX2dldEVsZW1lbnRzQnlOYW1lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPVtdO2lmKHRoaXMuX2ZpZWxkT2JqZWN0cyl7dmFyIGk9dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKGkpe3ZhciBhLG89ZyhpKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsbD1zLnBhZ2UsdT1zLmlkLGM9cy5leHBvcnRWYWx1ZXM7aWYoLTEhPT1sJiZ1IT09ZSl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbCxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KHUsJyJdJykpOyFmfHxULmhhcyhmKT9yLnB1c2goe2lkOnUsZXhwb3J0VmFsdWU6aCxkb21FbGVtZW50OmZ9KTooMCxuLndhcm4pKCJfZ2V0RWxlbWVudHNCeU5hbWUgLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdCh1KSl9fX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX19cmV0dXJuIHJ9dmFyIGQscD1nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LmV4cG9ydFZhbHVlLG09di5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO20hPT1lJiZULmhhcyh2KSYmci5wdXNoKHtpZDptLGV4cG9ydFZhbHVlOnksZG9tRWxlbWVudDp2fSl9fWNhdGNoKHQpe3AuZSh0KX1maW5hbGx5e3AuZigpfXJldHVybiByfX1dKSx0fSgpLE09bmV3IFdlYWtTZXQsUj1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gayh0aGlzLHIpLHkocChuPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6IShudWxsPT1pfHwhaS5pZ25vcmVCb3JkZXIpLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSkpLFIpLHkocChuKSxNKSxuLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHksbn1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dGhpcy5saW5rU2VydmljZSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIix0LmlkKTt2YXIgbj0hMTtyZXR1cm4gdC51cmw/KGUuYWRkTGlua0F0dHJpYnV0ZXMocix0LnVybCx0Lm5ld1dpbmRvdyksbj0hMCk6dC5hY3Rpb24/KHRoaXMuX2JpbmROYW1lZEFjdGlvbihyLHQuYWN0aW9uKSxuPSEwKTp0LmF0dGFjaG1lbnQ/KHRoaXMuX2JpbmRBdHRhY2htZW50KHIsdC5hdHRhY2htZW50KSxuPSEwKTp0LnNldE9DR1N0YXRlPyhtKHRoaXMsUixMKS5jYWxsKHRoaXMscix0LnNldE9DR1N0YXRlKSxuPSEwKTp0LmRlc3Q/KHRoaXMuX2JpbmRMaW5rKHIsdC5kZXN0KSxuPSEwKToodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKHRoaXMuX2JpbmRKU0FjdGlvbihyLHQpLG49ITApLHQucmVzZXRGb3JtPyh0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKHIsdC5yZXNldEZvcm0pLG49ITApOnRoaXMuaXNUb29sdGlwT25seSYmIW4mJih0aGlzLl9iaW5kTGluayhyLCIiKSxuPSEwKSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygibGlua0Fubm90YXRpb24iKS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49MD09PWU/cjpyLmNsb25lTm9kZSgpO3JldHVybiB0LmFwcGVuZChuKSx0fSkpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmtBbm5vdGF0aW9uIixuJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXIpfX0se2tleToiX2JpbmRMaW5rIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiBlJiZyLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihlKSwhMX0sKGV8fCIiPT09ZSkmJm0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZE5hbWVkQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEF0dGFjaG1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5kb3dubG9hZE1hbmFnZXIpfHx2b2lkIDA9PT10fHx0Lm9wZW5PckRvd25sb2FkRGF0YShyLmNvbnRhaW5lcixlLmNvbnRlbnQsZS5maWxlbmFtZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEpTQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTtmb3IodmFyIG49bmV3IE1hcChbWyJBY3Rpb24iLCJvbmNsaWNrIl0sWyJNb3VzZSBVcCIsIm9ubW91c2V1cCJdLFsiTW91c2UgRG93biIsIm9ubW91c2Vkb3duIl1dKSxpPWZ1bmN0aW9uKCl7dmFyIGk9b1thXSxzPW4uZ2V0KGkpO2lmKCFzKXJldHVybiJjb250aW51ZSI7dFtzXT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PXR8fHQuZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6cixkZXRhaWw6e2lkOmUuaWQsbmFtZTppfX0pLCExfX0sYT0wLG89T2JqZWN0LmtleXMoZS5hY3Rpb25zKTthPG8ubGVuZ3RoO2ErKylpKCk7dC5vbmNsaWNrfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxtKHRoaXMsTSxqKS5jYWxsKHRoaXMpfX0se2tleToiX2JpbmRSZXNldEZvcm1BY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXQub25jbGljaztpZihpfHwodC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSksbSh0aGlzLE0saikuY2FsbCh0aGlzKSwhdGhpcy5fZmllbGRPYmplY3RzKXJldHVybigwLG4ud2FybikoJ19iaW5kUmVzZXRGb3JtQWN0aW9uIC0gInJlc2V0Rm9ybSIgYWN0aW9uIG5vdCBzdXBwb3J0ZWQsIGVuc3VyZSB0aGF0IHRoZSBgZmllbGRPYmplY3RzYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuJyksdm9pZChpfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7dC5vbmNsaWNrPWZ1bmN0aW9uKCl7bnVsbD09aXx8aSgpO3ZhciB0PWUuZmllbGRzLGE9ZS5yZWZzLG89ZS5pbmNsdWRlLHM9W107aWYoMCE9PXQubGVuZ3RofHwwIT09YS5sZW5ndGgpe3ZhciBsLHU9bmV3IFNldChhKSxoPWcodCk7dHJ5e2ZvcihoLnMoKTshKGw9aC5uKCkpLmRvbmU7KXt2YXIgZixkPWwudmFsdWUscD1nKHIuX2ZpZWxkT2JqZWN0c1tkXXx8W10pO3RyeXtmb3IocC5zKCk7IShmPXAubigpKS5kb25lOyl7dmFyIHY9Zi52YWx1ZS5pZDt1LmFkZCh2KX19Y2F0Y2godCl7cC5lKHQpfWZpbmFsbHl7cC5mKCl9fX1jYXRjaCh0KXtoLmUodCl9ZmluYWxseXtoLmYoKX1mb3IodmFyIHk9MCxtPU9iamVjdC52YWx1ZXMoci5fZmllbGRPYmplY3RzKTt5PG0ubGVuZ3RoO3krKyl7dmFyIGIsXz1nKG1beV0pO3RyeXtmb3IoXy5zKCk7IShiPV8ubigpKS5kb25lOyl7dmFyIHc9Yi52YWx1ZTt1Lmhhcyh3LmlkKT09PW8mJnMucHVzaCh3KX19Y2F0Y2godCl7Xy5lKHQpfWZpbmFsbHl7Xy5mKCl9fX1lbHNlIGZvcih2YXIgQT0wLGs9T2JqZWN0LnZhbHVlcyhyLl9maWVsZE9iamVjdHMpO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1rW0FdO3MucHVzaC5hcHBseShzLGMoUykpfWZvcih2YXIgeCxFPXIuYW5ub3RhdGlvblN0b3JhZ2UsUD1bXSxDPTAsTz1zO0M8Ty5sZW5ndGg7QysrKXt2YXIgRj1PW0NdLE09Ri5pZDtzd2l0Y2goUC5wdXNoKE0pLEYudHlwZSl7Y2FzZSJ0ZXh0Ijp2YXIgUj1GLmRlZmF1bHRWYWx1ZXx8IiI7RS5zZXRWYWx1ZShNLHt2YWx1ZTpSfSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpb2J1dHRvbiI6dmFyIEk9Ri5kZWZhdWx0VmFsdWU9PT1GLmV4cG9ydFZhbHVlcztFLnNldFZhbHVlKE0se3ZhbHVlOkl9KTticmVhaztjYXNlImNvbWJvYm94IjpjYXNlImxpc3Rib3giOnZhciBqPUYuZGVmYXVsdFZhbHVlfHwiIjtFLnNldFZhbHVlKE0se3ZhbHVlOmp9KTticmVhaztkZWZhdWx0OmNvbnRpbnVlfXZhciBMPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KE0sJyJdJykpO0wmJihULmhhcyhMKT9MLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsbi53YXJuKSgiX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdChNKSkpfXJldHVybiByLmVuYWJsZVNjcmlwdGluZyYmKG51bGw9PT0oeD1yLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09eHx8eC5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTpyLGRldGFpbDp7aWQ6ImFwcCIsaWRzOlAsbmFtZToiUmVzZXRGb3JtIn19KSksITF9fX1dKSxyfShGKTtmdW5jdGlvbiBqKCl7dGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWludGVybmFsLWxpbmsiLCIiKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKSwhMX0sbSh0aGlzLE0saikuY2FsbCh0aGlzKX12YXIgRCxOLFUsVz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm99KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIHQuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsdC5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsdC5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLHQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksRz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGsodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9nZXRLZXlNb2RpZmllciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bi5GZWF0dXJlVGVzdC5wbGF0Zm9ybSxyPWUuaXNXaW4saT1lLmlzTWFjO3JldHVybiByJiZ0LmN0cmxLZXl8fGkmJnQubWV0YUtleX19LHtrZXk6Il9zZXRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6aS5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpfX0pfSkpfX0se2tleToiX3NldEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saT1nKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGEsbz1iKG4udmFsdWUsMikscz1vWzBdLGw9b1sxXTsoIkFjdGlvbiI9PT1sfHxudWxsIT09KGE9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT1hJiZhW2xdKSYmdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcih0LHMsbCxyKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fX0se2tleToiX3NldEJhY2tncm91bmRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcnx8bnVsbDt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsPT09ZT8idHJhbnNwYXJlbnQiOm4uVXRpbC5tYWtlSGV4Q29sb3IoZVswXSxlWzFdLGVbMl0pfX0se2tleToiX3NldFRleHRTdHlsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcixpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fDksYT10LnN0eWxlLG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMTAqdCkvMTB9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3ZhciBzPU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGw9cy8oTWF0aC5yb3VuZChzLyhuLkxJTkVfRkFDVE9SKmkpKXx8MSk7ZT1NYXRoLm1pbihpLG8obC9uLkxJTkVfRkFDVE9SKSl9ZWxzZXt2YXIgdT1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTtlPU1hdGgubWluKGksbyh1L24uTElORV9GQUNUT1IpKX1hLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGUsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKSxhLmNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IoclswXSxyWzFdLHJbMl0pLG51bGwhPT10aGlzLmRhdGEudGV4dEFsaWdubWVudCYmKGEudGV4dEFsaWduPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il1bdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdKX19LHtrZXk6Il9zZXRSZXF1aXJlZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtlP3Quc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsITApOnQucmVtb3ZlQXR0cmlidXRlKCJyZXF1aXJlZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIixlKX19XSkscn0oRiksQj1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe2sodGhpcyxyKTt2YXIgbj10LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpufSl9cmV0dXJuIHgocixbe2tleToic2V0UHJvcGVydHlPblNpYmxpbmdzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Usbz1nKHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlO3MuZG9tRWxlbWVudCYmKHMuZG9tRWxlbWVudFtlXT1yKSxhLnNldFZhbHVlKHMuaWQse1tuXTpyfSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZDt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InRleHRXaWRnZXRBbm5vdGF0aW9uIjt2YXIgbj1udWxsO2lmKHRoaXMucmVuZGVyRm9ybXMpe3ZhciBpPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxhPWkuZm9ybWF0dGVkVmFsdWV8fGkudmFsdWV8fCIiLG89ZS5nZXRWYWx1ZShyLHtjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbn0pLmNoYXJMaW1pdDtvJiZhLmxlbmd0aD5vJiYoYT1hLnNsaWNlKDAsbykpO3ZhciBzPXt1c2VyVmFsdWU6YSxmb3JtYXR0ZWRWYWx1ZTpudWxsLGxhc3RDb21taXR0ZWRWYWx1ZTpudWxsLGNvbW1pdEtleToxfTt0aGlzLmRhdGEubXVsdGlMaW5lPygobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpKS50ZXh0Q29udGVudD1hLHRoaXMuZGF0YS5kb05vdFNjcm9sbCYmKG4uc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSk6KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9InRleHQiLG4uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYSksdGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYobi5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIpKSxULmFkZChuKSxuLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixyKSxuLmRpc2FibGVkPXRoaXMuZGF0YS5yZWFkT25seSxuLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxuLnRhYkluZGV4PVAsdGhpcy5fc2V0UmVxdWlyZWQobix0aGlzLmRhdGEucmVxdWlyZWQpLG8mJihuLm1heExlbmd0aD1vKSxuLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24oaSl7ZS5zZXRWYWx1ZShyLHt2YWx1ZTppLnRhcmdldC52YWx1ZX0pLHQuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sInZhbHVlIixpLnRhcmdldC52YWx1ZSwidmFsdWUiKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLGk9bnVsbCE9PShyPXQuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSkmJnZvaWQgMCE9PXI/cjoiIjtuLnZhbHVlPXMudXNlclZhbHVlPWkscy5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXMuZm9ybWF0dGVkVmFsdWU7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpLHQudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXt2YXIgdTtuLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cy51c2VyVmFsdWUmJihlLnZhbHVlPXMudXNlclZhbHVlKSxzLmxhc3RDb21taXR0ZWRWYWx1ZT1lLnZhbHVlLHMuY29tbWl0S2V5PTF9KSksbi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBpPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtzLnVzZXJWYWx1ZT1udWxsIT09KG49dC5kZXRhaWwudmFsdWUpJiZ2b2lkIDAhPT1uP246IiIsZS5zZXRWYWx1ZShyLHt2YWx1ZTpzLnVzZXJWYWx1ZS50b1N0cmluZygpfSksdC50YXJnZXQudmFsdWU9cy51c2VyVmFsdWV9LGZvcm1hdHRlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGV0YWlsLmZvcm1hdHRlZFZhbHVlO3MuZm9ybWF0dGVkVmFsdWU9bixudWxsIT1uJiZ0LnRhcmdldCE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJih0LnRhcmdldC52YWx1ZT1uKSxlLnNldFZhbHVlKHIse2Zvcm1hdHRlZFZhbHVlOm59KX0sc2VsUmFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU7KGU9dC50YXJnZXQpLnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KGUsYyh0LmRldGFpbC5zZWxSYW5nZSkpfSxjaGFyTGltaXQ6ZnVuY3Rpb24obil7dmFyIGksYT1uLmRldGFpbC5jaGFyTGltaXQsbz1uLnRhcmdldDtpZigwIT09YSl7by5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsYSk7dmFyIGw9cy51c2VyVmFsdWU7IWx8fGwubGVuZ3RoPD1hfHwobD1sLnNsaWNlKDAsYSksby52YWx1ZT1zLnVzZXJWYWx1ZT1sLGUuc2V0VmFsdWUocix7dmFsdWU6bH0pLG51bGw9PT0oaT10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09aXx8aS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmwsd2lsbENvbW1pdDohMCxjb21taXRLZXk6MSxzZWxTdGFydDpvLnNlbGVjdGlvblN0YXJ0LHNlbEVuZDpvLnNlbGVjdGlvbkVuZH19KSl9ZWxzZSBvLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIil9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSxuKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihlKXt2YXIgbjtzLmNvbW1pdEtleT0xO3ZhciBpPS0xO2lmKCJFc2NhcGUiPT09ZS5rZXk/aT0wOiJFbnRlciIhPT1lLmtleXx8dC5kYXRhLm11bHRpTGluZT8iVGFiIj09PWUua2V5JiYocy5jb21taXRLZXk9Myk6aT0yLC0xIT09aSl7dmFyIGE9ZS50YXJnZXQudmFsdWU7cy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1hJiYocy5sYXN0Q29tbWl0dGVkVmFsdWU9YSxzLnVzZXJWYWx1ZT1hLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmEsd2lsbENvbW1pdDohMCxjb21taXRLZXk6aSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKX19KSk7dmFyIGg9bDtsPW51bGwsbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0KXt2YXIgbixpPWUudGFyZ2V0LnZhbHVlO3MudXNlclZhbHVlPWkscy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1pJiYobnVsbD09PShuPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1ufHxuLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6aSx3aWxsQ29tbWl0OiEwLGNvbW1pdEtleTpzLmNvbW1pdEtleSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKSxoKGUpfX0pKSxudWxsIT09KHU9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT11JiZ1LktleXN0cm9rZSYmbi5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsKGZ1bmN0aW9uKGUpe3ZhciBuO3MubGFzdENvbW1pdHRlZFZhbHVlPW51bGw7dmFyIGk9ZS5kYXRhLGE9ZS50YXJnZXQsbz1hLnZhbHVlLGw9YS5zZWxlY3Rpb25TdGFydCx1PWEuc2VsZWN0aW9uRW5kLGM9bCxoPXU7c3dpdGNoKGUuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6dmFyIGY9by5zdWJzdHJpbmcoMCxsKS5tYXRjaCgvXHcqW15cd10qJC8pO2YmJihjLT1mWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6dmFyIGQ9by5zdWJzdHJpbmcobCkubWF0Y2goL15bXlx3XSpcdyovKTtkJiYoaCs9ZFswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpsPT09dSYmKGMtPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmw9PT11JiYoaCs9MSl9ZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOm8sY2hhbmdlOml8fCIiLHdpbGxDb21taXQ6ITEsc2VsU3RhcnQ6YyxzZWxFbmQ6aH19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhuLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC52YWx1ZX0pKX1pZihsJiZuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLHRoaXMuZGF0YS5jb21iKXt2YXIgZj0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL287bi5jbGFzc0xpc3QuYWRkKCJjb21iIiksbi5zdHlsZS5sZXR0ZXJTcGFjaW5nPSJjYWxjKCIuY29uY2F0KGYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSAtIDFjaCkiKX19ZWxzZShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZSxuLnN0eWxlLnZlcnRpY2FsQWxpZ249Im1pZGRsZSIsbi5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIjtyZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlKG4pLHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHE9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmFubm90YXRpb25TdG9yYWdlLHI9dGhpcy5kYXRhLG49ci5pZCxpPWUuZ2V0VmFsdWUobix7dmFsdWU6ci5leHBvcnRWYWx1ZT09PXIuZmllbGRWYWx1ZX0pLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9Ik9mZiIhPT1pLGUuc2V0VmFsdWUobix7dmFsdWU6aX0pKSx0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIFQuYWRkKGEpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLG4pLGEuZGlzYWJsZWQ9ci5yZWFkT25seSx0aGlzLl9zZXRSZXF1aXJlZChhLHRoaXMuZGF0YS5yZXF1aXJlZCksYS50eXBlPSJjaGVja2JveCIsYS5uYW1lPXIuZmllbGROYW1lLGkmJmEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksYS5zZXRBdHRyaWJ1dGUoImV4cG9ydFZhbHVlIixyLmV4cG9ydFZhbHVlKSxhLnRhYkluZGV4PVAsYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbihpKXt2YXIgYSxvPWkudGFyZ2V0LHM9by5uYW1lLGw9by5jaGVja2VkLHU9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShzLG4pKTt0cnl7Zm9yKHUucygpOyEoYT11Lm4oKSkuZG9uZTspe3ZhciBjPWEudmFsdWUsaD1sJiZjLmV4cG9ydFZhbHVlPT09ci5leHBvcnRWYWx1ZTtjLmRvbUVsZW1lbnQmJihjLmRvbUVsZW1lbnQuY2hlY2tlZD1oKSxlLnNldFZhbHVlKGMuaWQse3ZhbHVlOmh9KX19Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9ZS5zZXRWYWx1ZShuLHt2YWx1ZTpsfSl9KSksYS5hZGRFdmVudExpc3RlbmVyKCJyZXNldGZvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHRGaWVsZFZhbHVlfHwiT2ZmIjt0LnRhcmdldC5jaGVja2VkPWU9PT1yLmV4cG9ydFZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChmdW5jdGlvbihyKXt2YXIgaT17dmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PXQuZGV0YWlsLnZhbHVlLGUuc2V0VmFsdWUobix7dmFsdWU6dC50YXJnZXQuY2hlY2tlZH0pfX07dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscil9KSksdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoYSxbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSksdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGEpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRyksSD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3JldHVybiBrKHRoaXMsciksZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcmFkaW9CdXR0b24iO3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uscj10aGlzLmRhdGEsbj1yLmlkLGk9ZS5nZXRWYWx1ZShuLHt2YWx1ZTpyLmZpZWxkVmFsdWU9PT1yLmJ1dHRvblZhbHVlfSkudmFsdWU7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1pIT09ci5idXR0b25WYWx1ZSxlLnNldFZhbHVlKG4se3ZhbHVlOml9KSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihULmFkZChhKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixuKSxhLmRpc2FibGVkPXIucmVhZE9ubHksdGhpcy5fc2V0UmVxdWlyZWQoYSx0aGlzLmRhdGEucmVxdWlyZWQpLGEudHlwZT0icmFkaW8iLGEubmFtZT1yLmZpZWxkTmFtZSxpJiZhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLGEudGFiSW5kZXg9UCxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHIpe3ZhciBpLGE9ci50YXJnZXQsbz1hLm5hbWUscz1hLmNoZWNrZWQsbD1nKHQuX2dldEVsZW1lbnRzQnlOYW1lKG8sbikpO3RyeXtmb3IobC5zKCk7IShpPWwubigpKS5kb25lOyl7dmFyIHU9aS52YWx1ZTtlLnNldFZhbHVlKHUuaWQse3ZhbHVlOiExfSl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfWUuc2V0VmFsdWUobix7dmFsdWU6c30pfSkpLGEuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPWUmJmU9PT1yLmJ1dHRvblZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dmFyIG89ci5idXR0b25WYWx1ZTthLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24ocil7dmFyIGk9e3ZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBpLGE9bz09PXIuZGV0YWlsLnZhbHVlLHM9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShyLnRhcmdldC5uYW1lKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgbD1pLnZhbHVlLHU9YSYmbC5pZD09PW47bC5kb21FbGVtZW50JiYobC5kb21FbGVtZW50LmNoZWNrZWQ9dSksZS5zZXRWYWx1ZShsLmlkLHt2YWx1ZTp1fSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfX19O3QuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChpLHIpfSkpLHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGEsW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNoZWNrZWR9KSl9cmV0dXJuIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihhKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lnbm9yZUJvcmRlcjp0LmRhdGEuaGFzQXBwZWFyYW5jZX0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dSh2KHIucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpO2UuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b24iLHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJihlLnRpdGxlPXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpO3ZhciBuPWUubGFzdENoaWxkO3JldHVybiB0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMmJm4mJih0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSxuLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24oZSl7dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LGUpfSkpKSxlfX1dKSxyfShJKSxWPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGsodGhpcyxyKSxlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZCxuPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO1QuYWRkKGkpLGkuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHIpLGkuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKSxpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxpLnRhYkluZGV4PVA7dmFyIGE9dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDt0aGlzLmRhdGEuY29tYm98fChpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHRoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApKSxpLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLG49dC5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGE9ZyhpLm9wdGlvbnMpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvLnNlbGVjdGVkPW8udmFsdWU9PT1ufX1jYXRjaCh0KXthLmUodCl9ZmluYWxseXthLmYoKX19KSk7dmFyIG8scz1nKHRoaXMuZGF0YS5vcHRpb25zKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWUsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTt1LnRleHRDb250ZW50PWwuZGlzcGxheVZhbHVlLHUudmFsdWU9bC5leHBvcnRWYWx1ZSxuLnZhbHVlLmluY2x1ZGVzKGwuZXhwb3J0VmFsdWUpJiYodS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIiwhMCksYT0hMSksaS5hcHBlbmQodSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXZhciBjPW51bGw7aWYoYSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7aC52YWx1ZT0iICIsaC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLGguc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApLGkucHJlcGVuZChoKSxjPWZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixjKSxjPW51bGx9LGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGMpfXZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQ/InZhbHVlIjoidGV4dENvbnRlbnQiLHI9aS5vcHRpb25zO3JldHVybiBpLm11bHRpcGxlP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RlZH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfSkpOi0xPT09ci5zZWxlY3RlZEluZGV4P251bGw6cltyLnNlbGVjdGVkSW5kZXhdW2VdfSxkPWYoITEpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQub3B0aW9ucztyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfX0pKX07cmV0dXJuIHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucz8oaS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBhPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49Yyl8fHZvaWQgMD09PW58fG4oKTt2YXIgYSxvPXQuZGV0YWlsLnZhbHVlLHM9bmV3IFNldChBcnJheS5pc0FycmF5KG8pP286W29dKSxsPWcoaS5vcHRpb25zKTt0cnl7Zm9yKGwucygpOyEoYT1sLm4oKSkuZG9uZTspe3ZhciB1PWEudmFsdWU7dS5zZWxlY3RlZD1zLmhhcyh1LnZhbHVlKX19Y2F0Y2godCl7bC5lKHQpfWZpbmFsbHl7bC5mKCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKX0pLGQ9ZighMSl9LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKHQpe2kubXVsdGlwbGU9ITB9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1pLm9wdGlvbnMsYT10LmRldGFpbC5yZW1vdmU7aWYoblthXS5zZWxlY3RlZD0hMSxpLnJlbW92ZShhKSxuLmxlbmd0aD4wKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KSk7LTE9PT1vJiYoblswXS5zZWxlY3RlZD0hMCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKSxpdGVtczpwKHQpfSksZD1mKCExKX0sY2xlYXI6ZnVuY3Rpb24odCl7Zm9yKDswIT09aS5sZW5ndGg7KWkucmVtb3ZlKDApO2Uuc2V0VmFsdWUocix7dmFsdWU6bnVsbCxpdGVtczpbXX0pLGQ9ZighMSl9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgbj10LmRldGFpbC5pbnNlcnQsYT1uLmluZGV4LG89bi5kaXNwbGF5VmFsdWUscz1uLmV4cG9ydFZhbHVlLGw9aS5jaGlsZHJlblthXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3UudGV4dENvbnRlbnQ9byx1LnZhbHVlPXMsbD9sLmJlZm9yZSh1KTppLmFwcGVuZCh1KSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpdGVtczpmdW5jdGlvbih0KXtmb3IodmFyIG49dC5kZXRhaWwuaXRlbXM7MCE9PWkubGVuZ3RoOylpLnJlbW92ZSgwKTt2YXIgYSxvPWcobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlLGw9cy5kaXNwbGF5VmFsdWUsdT1zLmV4cG9ydFZhbHVlLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Yy50ZXh0Q29udGVudD1sLGMudmFsdWU9dSxpLmFwcGVuZChjKX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpbmRpY2VzOmZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFNldCh0LmRldGFpbC5pbmRpY2VzKSxhPWcodC50YXJnZXQub3B0aW9ucyk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28uc2VsZWN0ZWQ9aS5oYXMoby5pbmRleCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfWUuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KSxkPWYoITEpfSxlZGl0YWJsZTpmdW5jdGlvbih0KXt0LnRhcmdldC5kaXNhYmxlZD0hdC5kZXRhaWwuZWRpdGFibGV9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYSxuKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24obil7dmFyIGksYT1mKCEwKTtlLnNldFZhbHVlKHIse3ZhbHVlOmF9KSxuLnByZXZlbnREZWZhdWx0KCksbnVsbD09PShpPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1pfHxpLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6ZCxjaGFuZ2VFeDphLHdpbGxDb21taXQ6ITEsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSk6aS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe2Uuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KX0pKSx0aGlzLmRhdGEuY29tYm8mJnRoaXMuX3NldFRleHRTdHlsZShpKSx0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoaSksdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShHKSxYPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhO2sodGhpcyxyKTt2YXIgbz10LmRhdGEscz0hci5JR05PUkVfVFlQRVMuaGFzKG8ucGFyZW50VHlwZSkmJiEhKG51bGwhPT0obj1vLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT1vLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT1vLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybiBlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6c30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdCh0aGlzLmRhdGEucGFyZW50SWQsJyJdJykpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIGU9bmV3IFkoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxyPXRoaXMucGFnZSxpPW4uVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxyLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rci52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHIudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStyLnZpZXdbMV1dKSxhPWlbMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sbz1pWzFdLHM9dGhpcy52aWV3cG9ydC5yYXdEaW1zLGw9cy5wYWdlV2lkdGgsdT1zLnBhZ2VIZWlnaHQsYz1zLnBhZ2VYLGg9cy5wYWdlWTtyZXR1cm4gdGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoMTAwKihhLWMpL2wsIiUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCooby1oKS91LCIlIiksdGhpcy5jb250YWluZXIuYXBwZW5kKGUucmVuZGVyKCkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKTtEPVgsTj0iSUdOT1JFX1RZUEVTIixVPW5ldyBTZXQoWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0pLChOPUUoTikpaW4gRD9PYmplY3QuZGVmaW5lUHJvcGVydHkoRCxOLHt2YWx1ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RFtOXT1VO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtrKHRoaXMsdCksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy50aXRsZU9iaj1lLnRpdGxlT2JqLHRoaXMubW9kaWZpY2F0aW9uRGF0ZT1lLm1vZGlmaWNhdGlvbkRhdGUsdGhpcy5jb250ZW50c09iaj1lLmNvbnRlbnRzT2JqLHRoaXMucmljaFRleHQ9ZS5yaWNoVGV4dCx0aGlzLmhpZGVXcmFwcGVyPWUuaGlkZVdyYXBwZXJ8fCExLHRoaXMucGlubmVkPSExfXJldHVybiB4KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9InBvcHVwV3JhcHBlciIsdGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3I6dGhpcy5jb250YWluZXIsdGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9InBvcHVwIjt2YXIgbz10aGlzLmNvbG9yO2lmKG8pe3ZhciBsPS43KigyNTUtb1swXSkrb1swXSx1PS43KigyNTUtb1sxXSkrb1sxXSxjPS43KigyNTUtb1syXSkrb1syXTthLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8bCwwfHUsMHxjKX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO2guZGlyPXRoaXMudGl0bGVPYmouZGlyLGgudGV4dENvbnRlbnQ9dGhpcy50aXRsZU9iai5zdHIsYS5hcHBlbmQoaCk7dmFyIGY9aS5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO2lmKGYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtkLmNsYXNzTmFtZT0icG9wdXBEYXRlIixkLnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iLGQuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciLGQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6Zi50b0xvY2FsZVRpbWVTdHJpbmcoKX0pLGEuYXBwZW5kKGQpfWlmKG51bGw9PT0odD10aGlzLnJpY2hUZXh0KXx8dm9pZCAwPT09dHx8IXQuc3RyfHxudWxsIT09KGU9dGhpcy5jb250ZW50c09iaikmJnZvaWQgMCE9PWUmJmUuc3RyJiZ0aGlzLmNvbnRlbnRzT2JqLnN0ciE9PXRoaXMucmljaFRleHQuc3RyKXt2YXIgcD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTthLmFwcGVuZChwKX1lbHNlIHMuWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6YX0pLGEubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50IjtBcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO3ZhciB2LHk9Zyh0aGlzLnRyaWdnZXIpO3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIG09di52YWx1ZTttLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl90b2dnbGUuYmluZCh0aGlzKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3cuYmluZCh0aGlzLCExKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKX19Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hpZGUuYmluZCh0aGlzLCEwKSksci5hcHBlbmQoYSkscn19LHtrZXk6Il9mb3JtYXRDb250ZW50cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHIscj10LmRpcixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtuLmNsYXNzTmFtZT0icG9wdXBDb250ZW50IixuLmRpcj1yO2Zvcih2YXIgaT1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxhPTAsbz1pLmxlbmd0aDthPG87KythKXt2YXIgcz1pW2FdO24uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKSxhPG8tMSYmbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIG59fSx7a2V5OiJfdG9nZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfX0se2tleToiX3Nob3ciLHZhbHVlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiYmKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlMyl9fSx7a2V5OiJfaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXsoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkmJih0aGlzLnBpbm5lZD0hMSksdGhpcy5oaWRlRWxlbWVudC5oaWRkZW58fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITAsdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzKX19XSksdH0oKSxLPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLnRleHRDb250ZW50PXQuZGF0YS50ZXh0Q29udGVudCxvfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZyZWVUZXh0QW5ub3RhdGlvbiIsdGhpcy50ZXh0Q29udGVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFubm90YXRpb25UZXh0Q29udGVudCIsdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dmFyIGUscj1nKHRoaXMudGV4dENvbnRlbnQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpLnRleHRDb250ZW50PW4sdC5hcHBlbmQoaSl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuY29udGFpbmVyLmFwcGVuZCh0KX1yZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLEo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjt2YXIgdD10aGlzLmRhdGEsZT1DKHQucmVjdCkscj1lLndpZHRoLG49ZS5oZWlnaHQsaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHIsbiwhMCksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLHQucmVjdFsyXS10LmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIix0LnJlY3RbM10tdC5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxpLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSksdGhpcy5fY3JlYXRlUG9wdXAoYSx0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksUT1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5kYXRhLGU9Qyh0LnJlY3QpLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShyLG4sITApLGE9dC5ib3JkZXJTdHlsZS53aWR0aCxvPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgieCIsYS8yKSxvLnNldEF0dHJpYnV0ZSgieSIsYS8yKSxvLnNldEF0dHJpYnV0ZSgid2lkdGgiLHItYSksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbi1hKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixhfHwxKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKSxvLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50IiksaS5hcHBlbmQobyksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuX2NyZWF0ZVBvcHVwKG8sdCksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLCQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO3ZhciB0PXRoaXMuZGF0YSxlPUModC5yZWN0KSxyPWUud2lkdGgsbj1lLmhlaWdodCxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUocixuLCEwKSxhPXQuYm9yZGVyU3R5bGUud2lkdGgsbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImN4IixyLzIpLG8uc2V0QXR0cmlidXRlKCJjeSIsbi8yKSxvLnNldEF0dHJpYnV0ZSgicngiLHIvMi1hLzIpLG8uc2V0QXR0cmlidXRlKCJyeSIsbi8yLWEvMiksby5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsYXx8MSksby5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iiksby5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpLGkuYXBwZW5kKG8pLHRoaXMuY29udGFpbmVyLmFwcGVuZChpKSx0aGlzLl9jcmVhdGVQb3B1cChvLHQpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxaPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIixvLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUiLG99cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTt2YXIgdCxlPXRoaXMuZGF0YSxyPUMoZS5yZWN0KSxuPXIud2lkdGgsaT1yLmhlaWdodCxhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUobixpLCEwKSxvPVtdLHM9ZyhlLnZlcnRpY2VzKTt0cnl7Zm9yKHMucygpOyEodD1zLm4oKSkuZG9uZTspe3ZhciBsPXQudmFsdWUsdT1sLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWwueTtvLnB1c2godSsiLCIrYyl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfW89by5qb2luKCIgIik7dmFyIGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGguc2V0QXR0cmlidXRlKCJwb2ludHMiLG8pLGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGguc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGguc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxhLmFwcGVuZChoKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5fY3JlYXRlUG9wdXAoaCxlKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksdHQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbjtyZXR1cm4gayh0aGlzLHIpLChuPWUuY2FsbCh0aGlzLHQpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlnb25Bbm5vdGF0aW9uIixuLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWdvbiIsbn1yZXR1cm4geChyKX0oWiksZXQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJjYXJldEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxydD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYSxvO2sodGhpcyxyKTt2YXIgcz0hISh0LmRhdGEuaGFzUG9wdXB8fG51bGwhPT0obj10LmRhdGEudGl0bGVPYmopJiZ2b2lkIDAhPT1uJiZuLnN0cnx8bnVsbCE9PShpPXQuZGF0YS5jb250ZW50c09iaikmJnZvaWQgMCE9PWkmJmkuc3RyfHxudWxsIT09KGE9dC5kYXRhLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybihvPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpzLGlnbm9yZUJvcmRlcjohMH0pKS5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iLG8uc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSIsb31yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO3ZhciB0LGU9dGhpcy5kYXRhLHI9QyhlLnJlY3QpLG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShuLGksITApLG89ZyhlLmlua0xpc3RzKTt0cnl7Zm9yKG8ucygpOyEodD1vLm4oKSkuZG9uZTspe3ZhciBzLGw9dC52YWx1ZSx1PVtdLGM9ZyhsKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciBoPXMudmFsdWUsZj1oLngtZS5yZWN0WzBdLGQ9ZS5yZWN0WzNdLWgueTt1LnB1c2goIiIuY29uY2F0KGYsIiwiKS5jb25jYXQoZCkpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX11PXUuam9pbigiICIpO3ZhciBwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO3Auc2V0QXR0cmlidXRlKCJwb2ludHMiLHUpLHAuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLHAuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLHAuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSx0aGlzLl9jcmVhdGVQb3B1cChwLGUpLGEuYXBwZW5kKHApfX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdGhpcy5jb250YWluZXIuYXBwZW5kKGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxudD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJoaWdobGlnaHRBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxpdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idW5kZXJsaW5lQW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxhdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJzcXVpZ2dseUFubm90YXRpb24iKToodGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksb3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0cmlrZW91dEFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksc3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxsdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGE7ayh0aGlzLHIpO3ZhciBvPShhPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMH0pKS5kYXRhLmZpbGUscz1vLmZpbGVuYW1lLGw9by5jb250ZW50O3JldHVybiBhLmZpbGVuYW1lPSgwLGkuZ2V0RmlsZW5hbWVGcm9tVXJsKShzLCEwKSxhLmNvbnRlbnQ9bCxudWxsPT09KG49YS5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PW58fG4uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIse3NvdXJjZTpwKGEpLGZpbGVuYW1lOnMsY29udGVudDpsfSksYX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyO3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKToocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkuc3JjPSIiLmNvbmNhdCh0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCwiYW5ub3RhdGlvbi0iKS5jb25jYXQoL3BhcGVyY2xpcC9pLnRlc3QodGhpcy5kYXRhLm5hbWUpPyJwYXBlcmNsaXAiOiJwdXNocGluIiwiLnN2ZyIpLHIuY2xhc3NOYW1lPSJwb3B1cFRyaWdnZXJBcmVhIixyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSwhdGhpcy5kYXRhLmhhc1BvcHVwJiYobnVsbCE9PSh0PXRoaXMuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PXQmJnQuc3RyfHxudWxsIT09KGU9dGhpcy5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09ZSYmZS5zdHJ8fHRoaXMuZGF0YS5yaWNoVGV4dCkmJnRoaXMuX2NyZWF0ZVBvcHVwKHIsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfZG93bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZG93bmxvYWRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5vcGVuT3JEb3dubG9hZERhdGEodGhpcy5jb250YWluZXIsdGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUpfX1dKSxyfShGKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtrKHRoaXMsdCl9cmV0dXJuIHgodCxudWxsLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbnMsbz1lLmRpdixzPWUudmlld3BvcnQsdT1lLmFjY2Vzc2liaWxpdHlNYW5hZ2VyOygwLGkuc2V0TGF5ZXJEaW1lbnNpb25zKShvLHMpO3ZhciBjLGg9e2RhdGE6bnVsbCxsYXllcjpvLHBhZ2U6ZS5wYWdlLHZpZXdwb3J0OnMsbGlua1NlcnZpY2U6ZS5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6ZS5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOmUuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PWUucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgaS5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyBhLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzohMD09PWUuZW5hYmxlU2NyaXB0aW5nLGhhc0pTQWN0aW9uczplLmhhc0pTQWN0aW9ucyxmaWVsZE9iamVjdHM6ZS5maWVsZE9iamVjdHN9LGY9MCxkPWcocik7dHJ5e2ZvcihkLnMoKTshKGM9ZC5uKCkpLmRvbmU7KXt2YXIgcD1jLnZhbHVlO2lmKHAuYW5ub3RhdGlvblR5cGUhPT1uLkFubm90YXRpb25UeXBlLlBPUFVQKXt2YXIgdj1DKHAucmVjdCkseT12LndpZHRoLG09di5oZWlnaHQ7aWYoeTw9MHx8bTw9MCljb250aW51ZX1oLmRhdGE9cDt2YXIgYj1PLmNyZWF0ZShoKTtpZihiLmlzUmVuZGVyYWJsZSl7dmFyIF89Yi5yZW5kZXIoKTtpZihwLmhpZGRlbiYmKF8uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQXJyYXkuaXNBcnJheShfKSl7dmFyIHcsQT1nKF8pO3RyeXtmb3IoQS5zKCk7ISh3PUEubigpKS5kb25lOyl7dmFyIGs9dy52YWx1ZTtrLnN0eWxlLnpJbmRleD1mKyssbCh0LHQsY3QpLmNhbGwodCxrLHAuaWQsbyx1KX19Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9fWVsc2UgXy5zdHlsZS56SW5kZXg9ZisrLGIgaW5zdGFuY2VvZiBYP28ucHJlcGVuZChfKTpsKHQsdCxjdCkuY2FsbCh0LF8scC5pZCxvLHUpfX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9bCh0aGlzLHQsaHQpLmNhbGwodGhpcyxvLGUuYW5ub3RhdGlvbkNhbnZhc01hcCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxuPWUuZGl2LGE9ZS52aWV3cG9ydDsoMCxpLnNldExheWVyRGltZW5zaW9ucykobix7cm90YXRpb246YS5yb3RhdGlvbn0pLGwodGhpcyx0LGh0KS5jYWxsKHRoaXMsbixyKSxuLmhpZGRlbj0hMX19XSksdH0oKTtmdW5jdGlvbiBjdCh0LGUscixuKXt2YXIgYT10LmZpcnN0Q2hpbGR8fHQ7YS5pZD0iIi5jb25jYXQoaS5Bbm5vdGF0aW9uUHJlZml4KS5jb25jYXQoZSksci5hcHBlbmQodCksbnVsbD09bnx8bi5tb3ZlRWxlbWVudEluRE9NKHIsdCxhLCExKX1mdW5jdGlvbiBodCh0LGUpe2lmKGUpe3ZhciByLG49ZyhlKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPWIoci52YWx1ZSwyKSxhPWlbMF0sbz1pWzFdLHM9dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdChhLCciXScpKTtpZihzKXt2YXIgbD1zLmZpcnN0Q2hpbGQ7bD8iQ0FOVkFTIj09PWwubm9kZU5hbWU/bC5yZXBsYWNlV2l0aChvKTpsLmJlZm9yZShvKTpzLmFwcGVuZChvKX19fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfWUuY2xlYXIoKX19ZS5Bbm5vdGF0aW9uTGF5ZXI9dXR9LCh0LGUpPT57ZnVuY3Rpb24gcih0KXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBpKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1yKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PXIoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29sb3JDb252ZXJ0ZXJzPXZvaWQgMDt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToiQ01ZS19HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsNCkscj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVyblsiRyIsMS1NYXRoLm1pbigxLC4zKnIrLjU5KmErLjExKmkrbyldfX0se2tleToiR19DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm5bIkNNWUsiLDAsMCwwLDEtbih0LDEpWzBdXX19LHtrZXk6IkdfUkdCIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMSlbMF07cmV0dXJuWyJSR0IiLGUsZSxlXX19LHtrZXk6IkdfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9byhuKHQsMSlbMF0pO3JldHVybiIjIi5jb25jYXQoZSkuY29uY2F0KGUpLmNvbmNhdChlKX19LHtrZXk6IlJHQl9HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMyk7cmV0dXJuWyJHIiwuMyplWzBdKy41OSplWzFdKy4xMSplWzJdXX19LHtrZXk6IlJHQl9IVE1MIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1vKHIpLGw9byhpKSx1PW8oYSk7cmV0dXJuIiMiLmNvbmNhdChzKS5jb25jYXQobCkuY29uY2F0KHUpfX0se2tleToiVF9IVE1MIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIjMDAwMDAwMDAifX0se2tleToiQ01ZS19SR0IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW4odCw0KSxyPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSxyK28pLDEtTWF0aC5taW4oMSxhK28pLDEtTWF0aC5taW4oMSxpK28pXX19LHtrZXk6IkNNWUtfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX19LHtrZXk6IlJHQl9DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj0xLWVbMF0saT0xLWVbMV0sYT0xLWVbMl07cmV0dXJuWyJDTVlLIixyLGksYSxNYXRoLm1pbihyLGksYSldfX1dLG51bGwmJmEoZS5wcm90b3R5cGUsbnVsbCksciYmYShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5Db2xvckNvbnZlcnRlcnM9c30sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlhmYUxheWVyPXZvaWQgMDt2YXIgbj1yKDE0OSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fHModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPXModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2w9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBhfX19fWZ1bmN0aW9uIHModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGwodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBsKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1pKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBlLHI7cmV0dXJuIGU9dCxyPVt7a2V5OiJzZXR1cFN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi5nZXRWYWx1ZShlLHt2YWx1ZTpudWxsfSk7c3dpdGNoKHIubmFtZSl7Y2FzZSJ0ZXh0YXJlYSI6aWYobnVsbCE9PWEudmFsdWUmJih0LnRleHRDb250ZW50PWEudmFsdWUpLCJwcmludCI9PT1pKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChmdW5jdGlvbih0KXtuLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXIuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09ci5hdHRyaWJ1dGVzLnR5cGUpe2lmKGEudmFsdWU9PT1yLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTphLnZhbHVlPT09ci5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSwicHJpbnQiPT09aSlicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQuY2hlY2tlZD90LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIik6dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKX0pfSkpfWVsc2V7aWYobnVsbCE9PWEudmFsdWUmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYS52YWx1ZSksInByaW50Ij09PWkpYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQudmFsdWV9KX0pKX1icmVhaztjYXNlInNlbGVjdCI6aWYobnVsbCE9PWEudmFsdWUpe3ZhciBzLGw9byhyLmNoaWxkcmVuKTt0cnl7Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7dS5hdHRyaWJ1dGVzLnZhbHVlPT09YS52YWx1ZSYmKHUuYXR0cmlidXRlcy5zZWxlY3RlZD0hMCl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX10LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24odCl7dmFyIHI9dC50YXJnZXQub3B0aW9ucyxpPS0xPT09ci5zZWxlY3RlZEluZGV4PyIiOnJbci5zZWxlY3RlZEluZGV4XS52YWx1ZTtuLnNldFZhbHVlKGUse3ZhbHVlOml9KX0pKX19fSx7a2V5OiJzZXRBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10Lmh0bWwscj10LmVsZW1lbnQsbj10LnN0b3JhZ2UsaT12b2lkIDA9PT1uP251bGw6bixvPXQuaW50ZW50LHM9dC5saW5rU2VydmljZSxsPXIuYXR0cmlidXRlcyx1PWUgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudDsicmFkaW8iPT09bC50eXBlJiYobC5uYW1lPSIiLmNvbmNhdChsLm5hbWUsIi0iKS5jb25jYXQobykpO2Zvcih2YXIgYz0wLGg9T2JqZWN0LmVudHJpZXMobCk7YzxoLmxlbmd0aDtjKyspe3ZhciBmPWEoaFtjXSwyKSxkPWZbMF0scD1mWzFdO2lmKG51bGwhPXApc3dpdGNoKGQpe2Nhc2UiY2xhc3MiOnAubGVuZ3RoJiZlLnNldEF0dHJpYnV0ZShkLHAuam9pbigiICIpKTticmVhaztjYXNlImRhdGFJZCI6YnJlYWs7Y2FzZSJpZCI6ZS5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscCk7YnJlYWs7Y2FzZSJzdHlsZSI6T2JqZWN0LmFzc2lnbihlLnN0eWxlLHApO2JyZWFrO2Nhc2UidGV4dENvbnRlbnQiOmUudGV4dENvbnRlbnQ9cDticmVhaztkZWZhdWx0OighdXx8ImhyZWYiIT09ZCYmIm5ld1dpbmRvdyIhPT1kKSYmZS5zZXRBdHRyaWJ1dGUoZCxwKX19dSYmcy5hZGRMaW5rQXR0cmlidXRlcyhlLGwuaHJlZixsLm5ld1dpbmRvdyksaSYmbC5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKGUsbC5kYXRhSWQscixpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxyPXQubGlua1NlcnZpY2UsaT10LnhmYUh0bWwscz10LmludGVudHx8ImRpc3BsYXkiLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2kuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmwsZWxlbWVudDppLGludGVudDpzLGxpbmtTZXJ2aWNlOnJ9KTt2YXIgdT1bW2ksLTEsbF1dLGM9dC5kaXY7aWYoYy5hcHBlbmQobCksdC52aWV3cG9ydCl7dmFyIGg9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTtjLnN0eWxlLnRyYW5zZm9ybT1ofSJyaWNoVGV4dCIhPT1zJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ4ZmFMYXllciB4ZmFGb250Iik7Zm9yKHZhciBmPVtdO3UubGVuZ3RoPjA7KXt2YXIgZCxwLHY9YSh1LmF0KC0xKSwzKSx5PXZbMF0sbT12WzFdLGc9dlsyXTtpZihtKzEhPT15LmNoaWxkcmVuLmxlbmd0aCl7dmFyIGI9eS5jaGlsZHJlblsrK3UuYXQoLTEpWzFdXTtpZihudWxsIT09Yil7dmFyIF89Yi5uYW1lO2lmKCIjdGV4dCIhPT1fKXt2YXIgdz12b2lkIDA7aWYodz1udWxsIT09KGQ9YikmJnZvaWQgMCE9PWQmJm51bGwhPT0ocD1kLmF0dHJpYnV0ZXMpJiZ2b2lkIDAhPT1wJiZwLnhtbG5zP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiLmF0dHJpYnV0ZXMueG1sbnMsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfKSxnLmFwcGVuZCh3KSxiLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyh7aHRtbDp3LGVsZW1lbnQ6YixzdG9yYWdlOmUsaW50ZW50OnMsbGlua1NlcnZpY2U6cn0pLGIuY2hpbGRyZW4mJmIuY2hpbGRyZW4ubGVuZ3RoPjApdS5wdXNoKFtiLC0xLHddKTtlbHNlIGlmKGIudmFsdWUpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIudmFsdWUpO24uWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoXykmJmYucHVzaChBKSx3LmFwcGVuZChBKX19ZWxzZXt2YXIgaz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLnZhbHVlKTtmLnB1c2goayksZy5hcHBlbmQoayl9fX1lbHNlIHUucG9wKCl9dmFyIFMseD1vKGMucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSk7dHJ5e2Zvcih4LnMoKTshKFM9eC5uKCkpLmRvbmU7KVMudmFsdWUuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsITApfWNhdGNoKHQpe3guZSh0KX1maW5hbGx5e3guZigpfXJldHVybnt0ZXh0RGl2czpmfX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTt0LmRpdi5zdHlsZS50cmFuc2Zvcm09ZSx0LmRpdi5oaWRkZW49ITF9fV0sbnVsbCYmdShlLnByb3RvdHlwZSxudWxsKSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYUxheWVyPWN9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1yKDEzNyksYT1yKDEpLG89cigzKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBoKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Yyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGgodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBoKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBlJiZmKHQucHJvdG90eXBlLGUpLHImJmYodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgdj1kKChmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLCgwLGEudW5yZWFjaGFibGUpKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9KSk7ZS5TVkdHcmFwaGljcz12O3ZhciB5PWZ1bmN0aW9uKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTt2YXIgZT10LnRvRml4ZWQoMTApLHI9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3JdKXJldHVybiBlO2Rve3ItLX13aGlsZSgiMCI9PT1lW3JdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3JdP3I6cisxKX0sbT1mdW5jdGlvbih0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiLmNvbmNhdCh5KHRbMF0pLCIgIikuY29uY2F0KHkodFszXSksIikiKTtpZih0WzBdPT09dFszXSYmdFsxXT09PS10WzJdKXt2YXIgZT0xODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEk7cmV0dXJuInJvdGF0ZSgiLmNvbmNhdCh5KGUpLCIpIil9fWVsc2UgaWYoMT09PXRbMF0mJjA9PT10WzFdJiYwPT09dFsyXSYmMT09PXRbM10pcmV0dXJuInRyYW5zbGF0ZSgiLmNvbmNhdCh5KHRbNF0pLCIgIikuY29uY2F0KHkodFs1XSksIikiKTtyZXR1cm4ibWF0cml4KCIuY29uY2F0KHkodFswXSksIiAiKS5jb25jYXQoeSh0WzFdKSwiICIpLmNvbmNhdCh5KHRbMl0pLCIgIikuY29uY2F0KHkodFszXSksIiAiKS5jb25jYXQoeSh0WzRdKSwiICIpKyIiLmNvbmNhdCh5KHRbNV0pLCIpIil9LGc9Im5vcm1hbCIsYj0ibm9ybWFsIixfPSIjMDAwMDAwIix3PVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sQT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiFyKXJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTplfSkpO2Zvcih2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGk9ImRhdGE6Ii5jb25jYXQoZSwiO2Jhc2U2NCwiKSxhPTAsbz10Lmxlbmd0aDthPG87YSs9Myl7dmFyIHM9MjU1JnRbYV0sbD0yNTUmdFthKzFdLHU9MjU1JnRbYSsyXTtpKz1uW3M+PjJdK25bKDMmcyk8PDR8bD4+NF0rblthKzE8bz8oMTUmbCk8PDJ8dT4+Njo2NF0rblthKzI8bz82MyZ1OjY0XX1yZXR1cm4gaX0sUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksZT1uZXcgSW50MzJBcnJheSgyNTYpLHI9MDtyPDI1NjtyKyspe2Zvcih2YXIgbj1yLGk9MDtpPDg7aSsrKW49MSZuPzM5ODgyOTIzODRebj4+MSYyMTQ3NDgzNjQ3Om4+PjEmMjE0NzQ4MzY0NztlW3JdPW59ZnVuY3Rpb24gcyh0LHIsbixpKXt2YXIgYT1pLG89ci5sZW5ndGg7blthXT1vPj4yNCYyNTUsblthKzFdPW8+PjE2JjI1NSxuW2ErMl09bz4+OCYyNTUsblthKzNdPTI1NSZvLG5bYSs9NF09MjU1JnQuY2hhckNvZGVBdCgwKSxuW2ErMV09MjU1JnQuY2hhckNvZGVBdCgxKSxuW2ErMl09MjU1JnQuY2hhckNvZGVBdCgyKSxuW2ErM109MjU1JnQuY2hhckNvZGVBdCgzKSxhKz00LG4uc2V0KHIsYSk7dmFyIHM9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxhPXI7YTxuO2ErKyl7dmFyIG89MjU1JihpXnRbYV0pO2k9aT4+PjheZVtvXX1yZXR1cm4tMV5pfShuLGkrNCxhKz1yLmxlbmd0aCk7blthXT1zPj4yNCYyNTUsblthKzFdPXM+PjE2JjI1NSxuW2ErMl09cz4+OCYyNTUsblthKzNdPTI1NSZzfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgscj02NTUzNSxuPU1hdGguY2VpbChlL3IpLGk9bmV3IFVpbnQ4QXJyYXkoMitlKzUqbis0KSxhPTA7aVthKytdPTEyMCxpW2ErK109MTU2O2Zvcih2YXIgbz0wO2U+cjspaVthKytdPTAsaVthKytdPTI1NSxpW2ErK109MjU1LGlbYSsrXT0wLGlbYSsrXT0wLGkuc2V0KHQuc3ViYXJyYXkobyxvK3IpLGEpLGErPXIsbys9cixlLT1yO2lbYSsrXT0xLGlbYSsrXT0yNTUmZSxpW2ErK109ZT4+OCYyNTUsaVthKytdPTI1NSZ+ZSxpW2ErK109KDY1NTM1Jn5lKT4+OCYyNTUsaS5zZXQodC5zdWJhcnJheShvKSxhKSxhKz10Lmxlbmd0aC1vO3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MSxpPTAsYT0wO2E8cjsrK2EpaT0oaSsobj0obisoMjU1JnRbYV0pKSU2NTUyMSkpJTY1NTIxO3JldHVybiBpPDwxNnxufSh0LDAsdC5sZW5ndGgpO3JldHVybiBpW2ErK109cz4+MjQmMjU1LGlbYSsrXT1zPj4xNiYyNTUsaVthKytdPXM+PjgmMjU1LGlbYSsrXT0yNTUmcyxpfXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZhciB1LGMsaCxmPWUud2lkdGgsZD1lLmhlaWdodCxwPWUuZGF0YTtzd2l0Y2gocil7Y2FzZSBhLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpjPTAsdT0xLGg9Zis3Pj4zO2JyZWFrO2Nhc2UgYS5JbWFnZUtpbmQuUkdCXzI0QlBQOmM9Mix1PTgsaD0zKmY7YnJlYWs7Y2FzZSBhLkltYWdlS2luZC5SR0JBXzMyQlBQOmM9Nix1PTgsaD00KmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9Zm9yKHZhciB2PW5ldyBVaW50OEFycmF5KCgxK2gpKmQpLHk9MCxtPTAsZz0wO2c8ZDsrK2cpdlt5KytdPTAsdi5zZXQocC5zdWJhcnJheShtLG0raCkseSksbSs9aCx5Kz1oO2lmKHI9PT1hLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmaSl7eT0wO2Zvcih2YXIgYj0wO2I8ZDtiKyspe3krKztmb3IodmFyIF89MDtfPGg7XysrKXZbeSsrXV49MjU1fX12YXIgdz1uZXcgVWludDhBcnJheShbZj4+MjQmMjU1LGY+PjE2JjI1NSxmPj44JjI1NSwyNTUmZixkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHUsYywwLDAsMF0pLEE9ZnVuY3Rpb24odCl7aWYoIW8uaXNOb2RlSlMpcmV0dXJuIGwodCk7dHJ5e3ZhciBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO3ZhciByPXJlcXVpcmUoInpsaWIiKS5kZWZsYXRlU3luYyhlLHtsZXZlbDo5fSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBVaW50OEFycmF5P3I6bmV3IFVpbnQ4QXJyYXkocil9Y2F0Y2godCl7KDAsYS53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrdCl9cmV0dXJuIGwodCl9KHYpLFM9dC5sZW5ndGgrMzYrdy5sZW5ndGgrQS5sZW5ndGgseD1uZXcgVWludDhBcnJheShTKSxFPTA7cmV0dXJuIHguc2V0KHQsRSkscygiSUhEUiIsdyx4LEUrPXQubGVuZ3RoKSxzKCJJREFUQSIsQSx4LEUrPTEyK3cubGVuZ3RoKSxFKz0xMitBLmxlbmd0aCxzKCJJRU5EIixuZXcgVWludDhBcnJheSgwKSx4LEUpLGsoeCwiaW1hZ2UvcG5nIixuKX0oZSx2b2lkIDA9PT1lLmtpbmQ/YS5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHIsbil9fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLHRoaXMuZm9udFNpemVTY2FsZT0xLHRoaXMuZm9udFdlaWdodD1iLHRoaXMuZm9udFNpemU9MCx0aGlzLnRleHRNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPV8sdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGQodCxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSx7a2V5OiJzZXRDdXJyZW50UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9fV0pLHR9KCksRT0wLFA9MCxUPTA7ZS5TVkdHcmFwaGljcz12PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Zm9yKHZhciBvIGluIHAodGhpcyx0KSwoMCxpLmRlcHJlY2F0ZWQpKCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5zdmdGYWN0b3J5PW5ldyBpLkRPTVNWR0ZhY3RvcnksdGhpcy5jdXJyZW50PW5ldyB4LHRoaXMudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHRoaXMudHJhbnNmb3JtU3RhY2s9W10sdGhpcy5leHRyYVN0YWNrPVtdLHRoaXMuY29tbW9uT2Jqcz1lLHRoaXMub2Jqcz1yLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5lbWJlZEZvbnRzPSExLHRoaXMuZW1iZWRkZWRGb250cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY3NzU3R5bGU9bnVsbCx0aGlzLmZvcmNlRGF0YVNjaGVtYT0hIW4sdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc9W10sYS5PUFMpdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbYS5PUFNbb11dPW99cmV0dXJuIGQodCxbe2tleToiZ2V0T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqcy5nZXQodCk6dGhpcy5vYmpzLmdldCh0KTplfX0se2tleToic2F2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO3ZhciB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KSx0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfX0se2tleToicmVzdG9yZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMudGdycD1udWxsfX0se2tleToiZ3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZSh0KSx0aGlzLnJlc3RvcmUoKX19LHtrZXk6ImxvYWREZXBlbmRlbmNpZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dC5mbkFycmF5LG49dC5hcmdzQXJyYXksaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldPT09YS5PUFMuZGVwZW5kZW5jeSl7dmFyIHMsbD11KG5baV0pO3RyeXt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PXMudmFsdWUscj10LnN0YXJ0c1dpdGgoImdfIik/ZS5jb21tb25PYmpzOmUub2JqcyxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyLmdldCh0LGUpfSkpO2UuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChuKX07Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspYygpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX1yZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyl9fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcz1bdCxlLHIsbixpLG9dO3RoaXMudHJhbnNmb3JtTWF0cml4PWEuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgscyksdGhpcy50Z3JwPW51bGx9fSx7a2V5OiJnZXRTVkciLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLnZpZXdwb3J0PWU7dmFyIG49dGhpcy5faW5pdGlhbGl6ZShlKTtyZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHIuZXhlY3V0ZU9wVHJlZShyLmNvbnZlcnRPcExpc3QodCkpLG59KSl9fSx7a2V5OiJjb252ZXJ0T3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcscj10LmFyZ3NBcnJheSxuPXQuZm5BcnJheSxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspe3ZhciBzPW5bYV07aS5wdXNoKHtmbklkOnMsZm46ZVtzXSxhcmdzOnJbYV19KX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPVtdLGk9dSh0KTt0cnl7Zm9yKGkucygpOyEoZT1pLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWU7InNhdmUiIT09YS5mbj8icmVzdG9yZSI9PT1hLmZuP3I9bi5wb3AoKTpyLnB1c2goYSk6KHIucHVzaCh7Zm5JZDo5MixmbjoiZ3JvdXAiLGl0ZW1zOltdfSksbi5wdXNoKHIpLHI9ci5hdCgtMSkuaXRlbXMpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oaSl9fSx7a2V5OiJleGVjdXRlT3BUcmVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlLGk9bi5mbixvPW4uZm5JZCxzPW4uYXJncztzd2l0Y2goMHxvKXtjYXNlIGEuT1BTLmJlZ2luVGV4dDp0aGlzLmJlZ2luVGV4dCgpO2JyZWFrO2Nhc2UgYS5PUFMuZGVwZW5kZW5jeTpicmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6dGhpcy5zZXRMZWFkaW5nKHMpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OnRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGb250OnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmNhc2UgYS5PUFMuc2hvd1NwYWNlZFRleHQ6dGhpcy5zaG93VGV4dChzWzBdKTticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6dGhpcy5lbmRUZXh0KCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDp0aGlzLm1vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRDaGFyU3BhY2luZzp0aGlzLnNldENoYXJTcGFjaW5nKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6dGhpcy5zZXRXb3JkU3BhY2luZyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEhTY2FsZTp0aGlzLnNldEhTY2FsZShzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRNYXRyaXg6dGhpcy5zZXRUZXh0TWF0cml4KHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRSaXNlOnRoaXMuc2V0VGV4dFJpc2Uoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTp0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZVdpZHRoOnRoaXMuc2V0TGluZVdpZHRoKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZUpvaW46dGhpcy5zZXRMaW5lSm9pbihzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldExpbmVDYXA6dGhpcy5zZXRMaW5lQ2FwKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TWl0ZXJMaW1pdDp0aGlzLnNldE1pdGVyTGltaXQoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsUkdCQ29sb3I6dGhpcy5zZXRGaWxsUkdCQ29sb3Ioc1swXSxzWzFdLHNbMl0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6dGhpcy5zZXRTdHJva2VSR0JDb2xvcihzWzBdLHNbMV0sc1syXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvck46dGhpcy5zZXRTdHJva2VDb2xvck4ocyk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOnRoaXMuc2V0RmlsbENvbG9yTihzKTticmVhaztjYXNlIGEuT1BTLnNoYWRpbmdGaWxsOnRoaXMuc2hhZGluZ0ZpbGwoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXREYXNoOnRoaXMuc2V0RGFzaChzWzBdLHNbMV0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0RmxhdG5lc3M6dGhpcy5zZXRGbGF0bmVzcyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShzWzBdKTticmVhaztjYXNlIGEuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBhLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIGEuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIGEuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIGEuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2UgYS5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChzWzBdKTticmVhaztjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oc1swXSxzWzFdKTticmVhaztjYXNlIGEuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBhLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChuLml0ZW1zKTticmVhaztkZWZhdWx0OigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIi5jb25jYXQoaSkpfX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX0se2tleToic2V0V29yZFNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC53b3JkU3BhY2luZz10fX0se2tleToic2V0Q2hhclNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz10fX0se2tleToibmV4dExpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX19LHtrZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmN1cnJlbnQ7by50ZXh0TWF0cml4PW8ubGluZU1hdHJpeD1bdCxlLHIsbixpLGFdLG8udGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSxvLng9by5saW5lWD0wLG8ueT1vLmxpbmVZPTAsby54Y29vcmRzPVtdLG8ueWNvb3Jkcz1bXSxvLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSxvLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixvLmZvbnRGYW1pbHkpLG8udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIiwiIi5jb25jYXQoeShvLmZvbnRTaXplKSwicHgiKSksby50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1vLnkpKSxvLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iiksby50eHRFbGVtZW50LmFwcGVuZChvLnRzcGFuKX19LHtrZXk6ImJlZ2luVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC54PXQubGluZVg9MCx0Lnk9dC5saW5lWT0wLHQudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWCx0LmxpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdC50ZXh0TWF0cml4U2NhbGU9MSx0LnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSx0LnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0IiksdC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdC54Y29vcmRzPVtdLHQueWNvb3Jkcz1bXX19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3VycmVudDtyLng9ci5saW5lWCs9dCxyLnk9ci5saW5lWSs9ZSxyLnhjb29yZHM9W10sci55Y29vcmRzPVtdLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHIuZm9udEZhbWlseSksci50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLCIiLmNvbmNhdCh5KHIuZm9udFNpemUpLCJweCIpKSxyLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLXIueSkpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udCxuPWUuZm9udFNpemU7aWYoMCE9PW4pe3ZhciBpLG89ZS5mb250U2l6ZVNjYWxlLHM9ZS5jaGFyU3BhY2luZyxsPWUud29yZFNwYWNpbmcsYz1lLmZvbnREaXJlY3Rpb24saD1lLnRleHRIU2NhbGUqYyxmPXIudmVydGljYWwsZD1mPzE6LTEscD1yLmRlZmF1bHRWTWV0cmljcyx2PW4qZS5mb250TWF0cml4WzBdLHc9MCxBPXUodCk7dHJ5e2ZvcihBLnMoKTshKGk9QS5uKCkpLmRvbmU7KXt2YXIgaz1pLnZhbHVlO2lmKG51bGwhPT1rKWlmKCJudW1iZXIiIT10eXBlb2Ygayl7dmFyIFM9KGsuaXNTcGFjZT9sOjApK3MseD1rLmZvbnRDaGFyLEU9dm9pZCAwLFA9dm9pZCAwLFQ9ay53aWR0aDtpZihmKXt2YXIgQz12b2lkIDAsTz1rLnZtZXRyaWN8fHA7Qz0tKEM9ay52bWV0cmljP09bMV06LjUqVCkqdjt2YXIgRj1PWzJdKnY7VD1PPy1PWzBdOlQsRT1DL28sUD0odytGKS9vfWVsc2UgRT13L28sUD0wOyhrLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKGUueGNvb3Jkcy5wdXNoKGUueCtFKSxmJiZlLnljb29yZHMucHVzaCgtZS55K1ApLGUudHNwYW4udGV4dENvbnRlbnQrPXgpLHcrPWY/VCp2LVMqYzpUKnYrUypjfWVsc2Ugdys9ZCprKm4vMWUzO2Vsc2Ugdys9YypsfX1jYXRjaCh0KXtBLmUodCl9ZmluYWxseXtBLmYoKX1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAoeSkuam9pbigiICIpKSxmP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZS55Y29vcmRzLm1hcCh5KS5qb2luKCIgIikpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIseSgtZS55KSksZj9lLnktPXc6ZS54Kz13KmgsZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsIiIuY29uY2F0KHkoZS5mb250U2l6ZSksInB4IikpLGUuZm9udFN0eWxlIT09ZyYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXN0eWxlIixlLmZvbnRTdHlsZSksZS5mb250V2VpZ2h0IT09YiYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KTt2YXIgTT1lLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8oZS5maWxsQ29sb3IhPT1fJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSxlLmZpbGxBbHBoYTwxJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpKTplLnRleHRSZW5kZXJpbmdNb2RlPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSD9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJ0cmFuc3BhcmVudCIpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0V8fE09PT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKXt2YXIgUj0xLyhlLnRleHRNYXRyaXhTY2FsZXx8MSk7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLFIpfXZhciBJPWUudGV4dE1hdHJpeDswIT09ZS50ZXh0UmlzZSYmKChJPUkuc2xpY2UoKSlbNV0rPWUudGV4dFJpc2UpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCIiLmNvbmNhdChtKEkpLCIgc2NhbGUoIikuY29uY2F0KHkoaCksIiwgLTEpIikpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pLGUudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9fX0se2tleToic2V0TGVhZGluZ01vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0TGVhZGluZygtZSksdGhpcy5tb3ZlVGV4dCh0LGUpfX0se2tleToiYWRkRm9udFN0eWxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5kYXRhKXRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgImZvbnRFeHRyYVByb3BlcnRpZXMiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO3RoaXMuY3NzU3R5bGV8fCh0aGlzLmNzc1N0eWxlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6c3R5bGUiKSx0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInR5cGUiLCJ0ZXh0L2NzcyIpLHRoaXMuZGVmcy5hcHBlbmQodGhpcy5jc3NTdHlsZSkpO3ZhciBlPWsodC5kYXRhLHQubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInLmNvbmNhdCh0LmxvYWRlZE5hbWUsJyI7JykrIiBzcmM6IHVybCgiLmNvbmNhdChlLCIpOyB9XG4iKX19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksbj10WzFdO2UuZm9udD1yLCF0aGlzLmVtYmVkRm9udHN8fHIubWlzc2luZ0ZpbGV8fHRoaXMuZW1iZWRkZWRGb250c1tyLmxvYWRlZE5hbWVdfHwodGhpcy5hZGRGb250U3R5bGUociksdGhpcy5lbWJlZGRlZEZvbnRzW3IubG9hZGVkTmFtZV09ciksZS5mb250TWF0cml4PXIuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWDt2YXIgaT0ibm9ybWFsIjtyLmJsYWNrP2k9IjkwMCI6ci5ib2xkJiYoaT0iYm9sZCIpO3ZhciBvPXIuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO248MD8obj0tbixlLmZvbnREaXJlY3Rpb249LTEpOmUuZm9udERpcmVjdGlvbj0xLGUuZm9udFNpemU9bixlLmZvbnRGYW1pbHk9ci5sb2FkZWROYW1lLGUuZm9udFdlaWdodD1pLGUuZm9udFN0eWxlPW8sZS50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1lLnkpKSxlLnhjb29yZHM9W10sZS55Y29vcmRzPVtdfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuY3VycmVudDtlLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyYmbnVsbCE9PSh0PWUudHh0RWxlbWVudCkmJnZvaWQgMCE9PXQmJnQuaGFzQ2hpbGROb2RlcygpJiYoZS5lbGVtZW50PWUudHh0RWxlbWVudCx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKSl9fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGluZUNhcD13W3RdfX0se2tleToic2V0TGluZUpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1BW3RdfX0se2tleToic2V0TWl0ZXJMaW1pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldFN0cm9rZUFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH19LHtrZXk6InNldFN0cm9rZVJHQkNvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpfX0se2tleToic2V0RmlsbEFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpLHRoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W10sdGhpcy5jdXJyZW50Lnljb29yZHM9W119fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9fSx7a2V5OiJzZXRGaWxsQ29sb3JOIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LndpZHRoLHI9dGhpcy52aWV3cG9ydC5oZWlnaHQsbj1hLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCksaT1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbiksbz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAscl0sbikscz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2UsMF0sbiksbD1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Uscl0sbiksdT1NYXRoLm1pbihpWzBdLG9bMF0sc1swXSxsWzBdKSxjPU1hdGgubWluKGlbMV0sb1sxXSxzWzFdLGxbMV0pLGg9TWF0aC5tYXgoaVswXSxvWzBdLHNbMF0sbFswXSksZj1NYXRoLm1heChpWzFdLG9bMV0sc1sxXSxsWzFdKSxkPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixjKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixoLXUpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixmLWMpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpKSx0aGlzLmN1cnJlbnQuZmlsbEFscGhhPDEmJmQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0aGlzLmN1cnJlbnQuZmlsbEFscGhhKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChkKX19LHtrZXk6Il9tYWtlQ29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJUaWxpbmdQYXR0ZXJuIj09PXRbMF0/dGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCk6dGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpfX0se2tleToiX21ha2VUaWxpbmdQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10WzFdLHI9dFsyXSxuPXRbM118fGEuSURFTlRJVFlfTUFUUklYLGk9bCh0WzRdLDQpLG89aVswXSx1PWlbMV0sYz1pWzJdLGg9aVszXSxmPXRbNV0sZD10WzZdLHA9dFs3XSx2PSJzaGFkaW5nIi5jb25jYXQoVCsrKSx5PWwoYS5VdGlsLm5vcm1hbGl6ZVJlY3QoW10uY29uY2F0KHMoYS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLHVdLG4pKSxzKGEuVXRpbC5hcHBseVRyYW5zZm9ybShbYyxoXSxuKSkpKSw0KSxtPXlbMF0sZz15WzFdLGI9eVsyXSxfPXlbM10sdz1sKGEuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShuKSwyKSxBPWYqd1swXSxrPWQqd1sxXSxTPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0dGVybiIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLHYpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwicGF0dGVyblVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixBKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsayksUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiIi5jb25jYXQobSkpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIiIuY29uY2F0KGcpKTt2YXIgeD10aGlzLnN2ZyxFPXRoaXMudHJhbnNmb3JtTWF0cml4LFA9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixDPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcixPPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoYi1tLF8tZyk7aWYodGhpcy5zdmc9Tyx0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLDI9PT1wKXt2YXIgRj1hLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGEuVXRpbCxzKGUpKTt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPUYsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUZ9cmV0dXJuIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QocikpLHRoaXMuc3ZnPXgsdGhpcy50cmFuc2Zvcm1NYXRyaXg9RSx0aGlzLmN1cnJlbnQuZmlsbENvbG9yPVAsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUMsUy5hcHBlbmQoTy5jaGlsZE5vZGVzWzBdKSx0aGlzLmRlZnMuYXBwZW5kKFMpLCJ1cmwoIyIuY29uY2F0KHYsIikiKX19LHtrZXk6Il9tYWtlU2hhZGluZ1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpLHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnZhciBlLHI9InNoYWRpbmciLmNvbmNhdChUKyspLG49dFszXTtzd2l0Y2godFsxXSl7Y2FzZSJheGlhbCI6dmFyIGk9dFs0XSxvPXRbNV07KGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpKS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsciksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngxIixpWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkxIixpWzFdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngyIixvWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkyIixvWzFdKTticmVhaztjYXNlInJhZGlhbCI6dmFyIHM9dFs0XSxsPXRbNV0sYz10WzZdLGg9dFs3XTsoZT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJhZGlhbEdyYWRpZW50IikpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGxbMF0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGxbMV0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsaCksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsc1swXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsc1sxXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogIi5jb25jYXQodFsxXSkpfXZhciBmLGQ9dShuKTt0cnl7Zm9yKGQucygpOyEoZj1kLm4oKSkuZG9uZTspe3ZhciBwPWYudmFsdWUsdj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnN0b3AiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9mZnNldCIscFswXSksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdG9wLWNvbG9yIixwWzFdKSxlLmFwcGVuZCh2KX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHRoaXMuZGVmcy5hcHBlbmQoZSksInVybCgjIi5jb25jYXQociwiKSIpO2Nhc2UiTWVzaCI6cmV0dXJuKDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2giKSxudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBJUiB0eXBlOiAiLmNvbmNhdCh0WzBdKSl9fX0se2tleToic2V0RGFzaCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQsdGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfX0se2tleToiY29uc3RydWN0UGF0aCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuY3VycmVudCxpPW4ueCxvPW4ueSxzPVtdLGw9MCxjPXUodCk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXN3aXRjaCgwfHIudmFsdWUpe2Nhc2UgYS5PUFMucmVjdGFuZ2xlOmk9ZVtsKytdLG89ZVtsKytdO3ZhciBoPWVbbCsrXSxmPWVbbCsrXSxkPWkraCxwPW8rZjtzLnB1c2goIk0iLHkoaSkseShvKSwiTCIseShkKSx5KG8pLCJMIix5KGQpLHkocCksIkwiLHkoaSkseShwKSwiWiIpO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmk9ZVtsKytdLG89ZVtsKytdLHMucHVzaCgiTSIseShpKSx5KG8pKTticmVhaztjYXNlIGEuT1BTLmxpbmVUbzppPWVbbCsrXSxvPWVbbCsrXSxzLnB1c2goIkwiLHkoaSkseShvKSk7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvOmk9ZVtsKzRdLG89ZVtsKzVdLHMucHVzaCgiQyIseShlW2xdKSx5KGVbbCsxXSkseShlW2wrMl0pLHkoZVtsKzNdKSx5KGkpLHkobykpLGwrPTY7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvMjpzLnB1c2goIkMiLHkoaSkseShvKSx5KGVbbF0pLHkoZVtsKzFdKSx5KGVbbCsyXSkseShlW2wrM10pKSxpPWVbbCsyXSxvPWVbbCszXSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY3VydmVUbzM6aT1lW2wrMl0sbz1lW2wrM10scy5wdXNoKCJDIix5KGVbbF0pLHkoZVtsKzFdKSx5KGkpLHkobykseShpKSx5KG8pKSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VQYXRoOnMucHVzaCgiWiIpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX1zPXMuam9pbigiICIpLG4ucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PWEuT1BTLnJlY3RhbmdsZSYmdFswXSE9PWEuT1BTLm1vdmVUbz9zPW4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrczoobi5wYXRoPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0aCIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCkpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixzKSxuLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGksbyl9fSx7a2V5OiJlbmRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudDtpZih0LnBhdGg9bnVsbCx0aGlzLnBlbmRpbmdDbGlwKWlmKHQuZWxlbWVudCl7dmFyIGU9ImNsaXBwYXRoIi5jb25jYXQoRSsrKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBuPXQuZWxlbWVudC5jbG9uZU5vZGUoITApO2lmKCJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHIuYXBwZW5kKG4pLHRoaXMuZGVmcy5hcHBlbmQociksdC5hY3RpdmVDbGlwVXJsKXt0LmNsaXBHcm91cD1udWxsO3ZhciBpLGE9dSh0aGlzLmV4dHJhU3RhY2spO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOylpLnZhbHVlLmNsaXBHcm91cD1udWxsfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXIuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0LmFjdGl2ZUNsaXBVcmwpfXQuYWN0aXZlQ2xpcFVybD0idXJsKCMiLmNvbmNhdChlLCIpIiksdGhpcy50Z3JwPW51bGx9ZWxzZSB0aGlzLnBlbmRpbmdDbGlwPW51bGx9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmdDbGlwPXR9fSx7a2V5OiJjbG9zZVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7dmFyIGU9IiIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiksIloiKTt0LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsZSl9fX0se2tleToic2V0TGVhZGluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9fSx7a2V5OiJzZXRUZXh0UmlzZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSaXNlPXR9fSx7a2V5OiJzZXRUZXh0UmVuZGVyaW5nTW9kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPXR9fSx7a2V5OiJzZXRIU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfX0se2tleToic2V0UmVuZGVyaW5nSW50ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJzZXRGbGF0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1sKGUudmFsdWUsMiksaT1uWzBdLG89blsxXTtzd2l0Y2goaSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgobyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKG8pO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4obyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KG8pO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKG9bMF0sb1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhvKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChvKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKG8pO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKG8pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIuY29uY2F0KGkpKX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX19LHtrZXk6ImZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O3QuZWxlbWVudCYmKHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0LmZpbGxDb2xvciksdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsdC5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6InN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC5lbGVtZW50JiYodGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpLHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6Il9zZXRTdHJva2VBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPXRoaXMuY3VycmVudCxuPXIuZGFzaEFycmF5OzEhPT1lJiZuLmxlbmd0aD4wJiYobj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUqdH0pKSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLHIuc3Ryb2tlQ29sb3IpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW9wYWNpdHkiLHIuc3Ryb2tlQWxwaGEpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW1pdGVybGltaXQiLHkoci5taXRlckxpbWl0KSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIsci5saW5lQ2FwKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIsci5saW5lSm9pbiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHkoZSpyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixuLm1hcCh5KS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hvZmZzZXQiLHkoZSpyLmRhc2hQaGFzZSkrInB4Iil9fSx7a2V5OiJlb0ZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9fSx7a2V5OiJlb0ZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX19LHtrZXk6InBhaW50U29saWRDb2xvckltYWdlTWFzayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvciksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9fSx7a2V5OiJwYWludEltYWdlWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodCk7ZT90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpOigwLGEud2FybikoIkRlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAiLmNvbmNhdCh0LCIgaXMgbm90IHJlYWR5IHlldCIpKX19LHtrZXk6InBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPVModCx0aGlzLmZvcmNlRGF0YVNjaGVtYSwhIWUpLGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIseShuKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9YSx0aGlzLmNsaXAoIm5vbnplcm8iKTt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmltYWdlIik7by5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGkpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLW4pKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwic2NhbGUoIi5jb25jYXQoeSgxL3IpLCIgIikuY29uY2F0KHkoLTEvbiksIikiKSksZT9lLmFwcGVuZChvKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChvKX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodC5kYXRhLHQpO2lmKGUuYml0bWFwKSgwLGEud2FybikoInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuIik7ZWxzZXt2YXIgcj10aGlzLmN1cnJlbnQsbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1yLmZpbGxDb2xvcjtyLm1hc2tJZD0ibWFzayIuY29uY2F0KFArKyk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsci5tYXNrSWQpO3ZhciBsPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIseShuKSksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHkoaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJtYXNrIiwidXJsKCMiLmNvbmNhdChyLm1hc2tJZCwiKSIpKSx0aGlzLmRlZnMuYXBwZW5kKHMpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGwpLHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSxzKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSksZSl7dmFyIHI9ZVsyXS1lWzBdLG49ZVszXS1lWzFdLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlWzBdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGVbMV0pLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHkocikpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKSx0aGlzLmN1cnJlbnQuZWxlbWVudD1pLHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpfX19LHtrZXk6InBhaW50Rm9ybVhPYmplY3RFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChyKSx0aGlzLmRlZnM9cjt2YXIgbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLG0odC50cmFuc2Zvcm0pKSxlLmFwcGVuZChuKSx0aGlzLnN2Zz1uLGV9fSx7a2V5OiJfZW5zdXJlQ2xpcEdyb3VwIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpLHRoaXMuc3ZnLmFwcGVuZCh0KSx0aGlzLmN1cnJlbnQuY2xpcEdyb3VwPXR9cmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXB9fSx7a2V5OiJfZW5zdXJlVHJhbnNmb3JtR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGdycHx8KHRoaXMudGdycD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKSx0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixtKHRoaXMudHJhbnNmb3JtTWF0cml4KSksdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmw/dGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kKHRoaXMudGdycCk6dGhpcy5zdmcuYXBwZW5kKHRoaXMudGdycCkpLHRoaXMudGdycH19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERk5vZGVTdHJlYW09dm9pZCAwO3ZhciBuPXIoMSksaT1yKDE2Mik7ZnVuY3Rpb24gYSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZvKHQsZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbyh0LGUpfWZ1bmN0aW9uIHModCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49bCh0KTtpZihlKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PWYoZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGwodCl9ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxhPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtsKHt9LCIiKX1jYXRjaCh0KXtsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9Yzt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtsKG0sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsYSkmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wodCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8scyl7dmFyIGw9aCh0W25dLHQsYSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIHU9bC5hcmcsYz11LnZhbHVlO3JldHVybiBjJiYib2JqZWN0Ij09ZihjKSYmci5jYWxsKGMsIl9fYXdhaXQiKT9lLnJlc29sdmUoYy5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8scyl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxzKX0pKTplLnJlc29sdmUoYykudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LG8odSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8scyl9KSl9cyhsLmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWgodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1oKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W2FdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWwoeSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksbCh0LHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksbChBLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShjKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksbChfLHMsIkdlbmVyYXRvciIpLGwoXyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGYodCl7cmV0dXJuIGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGYodCl9ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWYodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09ZihpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIG09cmVxdWlyZSgiZnMiKSxnPXJlcXVpcmUoImh0dHAiKSxiPXJlcXVpcmUoImh0dHBzIiksXz1yZXF1aXJlKCJ1cmwiKSx3PS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbjtwKHRoaXMsdCksdGhpcy5zb3VyY2U9ZSx0aGlzLnVybD0ocj1lLnVybCwiZmlsZToiPT09KG49Xy5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP18ucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZlLmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHkodCxbe2tleToiX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuX2xvYWRlZCkmJnZvaWQgMCE9PXQ/dDowfX0se2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcy5pc0ZzVXJsP25ldyBUKHRoaXMpOm5ldyBFKHRoaXMpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfX0se2tleToiZ2V0UmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO3ZhciByPXRoaXMuaXNGc1VybD9uZXcgQyh0aGlzLHQsZSk6bmV3IFAodGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZOb2RlU3RyZWFtPUE7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3AodGhpcyx0KSx0aGlzLl91cmw9ZS51cmwsdGhpcy5fZG9uZT0hMSx0aGlzLl9zdG9yZWRFcnJvcj1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciByPWUuc291cmNlO3RoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fbG9hZGVkPTAsdGhpcy5fZmlsZW5hbWU9bnVsbCx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX3JhbmdlQ2h1bmtTaXplPXIucmFuZ2VDaHVua1NpemUsdGhpcy5fcmFuZ2VDaHVua1NpemV8fHRoaXMuX2Rpc2FibGVSYW5nZXx8KHRoaXMuX2Rpc2FibGVSYW5nZT0hMCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSFyLmRpc2FibGVSYW5nZSx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faGVhZGVyc0NhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQsdC5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe2UuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlbmQiLChmdW5jdGlvbigpe3QuZGVzdHJveSgpLGUuX2RvbmU9ITAsZS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24odCl7ZS5fZXJyb3IodCl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgbi5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtwKHRoaXMsdCksdGhpcy5fdXJsPWUudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHI9ZS5zb3VyY2U7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLGk9bmV3IFVpbnQ4QXJyYXkocikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTppLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpOnRoaXMuX2Vycm9yKHQpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9zdG9yZWRFcnJvcj10LHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT10LHQub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXtlLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksdC5vbigiZW5kIiwoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKSxlLl9kb25lPSEwLGUuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UuX2Vycm9yKHQpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fXZhciBFPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGE7cCh0aGlzLHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKDQwND09PWUuc3RhdHVzQ29kZSl7dmFyIHI9bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicuY29uY2F0KGEuX3VybCwnIi4nKSk7cmV0dXJuIGEuX3N0b3JlZEVycm9yPXIsdm9pZCBhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3Qocil9YS5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3NldFJlYWRhYmxlU3RyZWFtKGUpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBhLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV19LHM9KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOm8saXNIdHRwOnQuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOmEuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTphLl9kaXNhYmxlUmFuZ2V9KSxsPXMuYWxsb3dSYW5nZVJlcXVlc3RzLHU9cy5zdWdnZXN0ZWRMZW5ndGg7YS5faXNSYW5nZVN1cHBvcnRlZD1sLGEuX2NvbnRlbnRMZW5ndGg9dXx8YS5fY29udGVudExlbmd0aCxhLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKG8pfTtyZXR1cm4oYT1lLmNhbGwodGhpcyx0KSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09YS5fdXJsLnByb3RvY29sP2EuX3JlcXVlc3Q9Zy5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pOmEuX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pLGEuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24odCl7YS5fc3RvcmVkRXJyb3I9dCxhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiB5KHIpfShrKSxQPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxpLGEpe3ZhciBvO2Zvcih2YXIgcyBpbiBwKHRoaXMsciksKG89ZS5jYWxsKHRoaXMsdCkpLl9odHRwSGVhZGVycz17fSx0Lmh0dHBIZWFkZXJzKXt2YXIgbD10Lmh0dHBIZWFkZXJzW3NdO3ZvaWQgMCE9PWwmJihvLl9odHRwSGVhZGVyc1tzXT1sKX1vLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQoaSwiLSIpLmNvbmNhdChhLTEpO3ZhciB1PWZ1bmN0aW9uKHQpe2lmKDQwNCE9PXQuc3RhdHVzQ29kZSlvLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNle3ZhciBlPW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChvLl91cmwsJyIuJykpO28uX3N0b3JlZEVycm9yPWV9fTtyZXR1cm4gby5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1vLl91cmwucHJvdG9jb2w/by5fcmVxdWVzdD1nLnJlcXVlc3QoeChvLl91cmwsby5faHR0cEhlYWRlcnMpLHUpOm8uX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoby5fdXJsLG8uX2h0dHBIZWFkZXJzKSx1KSxvLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe28uX3N0b3JlZEVycm9yPXR9KSksby5fcmVxdWVzdC5lbmQoKSxvfXJldHVybiB5KHIpfShTKSxUPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGk7cCh0aGlzLHIpLGk9ZS5jYWxsKHRoaXMsdCk7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KGkuX3VybC5wYXRoKTtyZXR1cm4gdy50ZXN0KGkuX3VybC5ocmVmKSYmKGE9YS5yZXBsYWNlKC9eXC8vLCIiKSksbS5sc3RhdChhLChmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLCciLicpKSksaS5fc3RvcmVkRXJyb3I9dCx2b2lkIGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtpLl9jb250ZW50TGVuZ3RoPWUuc2l6ZSxpLl9zZXRSZWFkYWJsZVN0cmVhbShtLmNyZWF0ZVJlYWRTdHJlYW0oYSkpLGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxpfXJldHVybiB5KHIpfShrKSxDPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxuLGkpe3ZhciBhO3AodGhpcyxyKSxhPWUuY2FsbCh0aGlzLHQpO3ZhciBvPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIHcudGVzdChhLl91cmwuaHJlZikmJihvPW8ucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKG0uY3JlYXRlUmVhZFN0cmVhbShvLHtzdGFydDpuLGVuZDppLTF9KSksYX1yZXR1cm4geShyKX0oUyl9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6Iik/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrZSsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiLmNvbmNhdCh0LCcpIHdoaWxlIHJldHJpZXZpbmcgUERGICInKS5jb25jYXQoZSwnIi4nKSx0KX0sZS5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXt2YXIgcj0oMCxpLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYoci5pbmNsdWRlcygiJSIpKXRyeXtyPWRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaCh0KXt9aWYoKDAsYS5pc1BkZkZpbGUpKHIpKXJldHVybiByfXJldHVybiBudWxsfSxlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVzcG9uc2VIZWFkZXIscj10LmlzSHR0cCxuPXQucmFuZ2VDaHVua1NpemUsaT10LmRpc2FibGVSYW5nZSxhPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0sbz1wYXJzZUludChlKCJDb250ZW50LUxlbmd0aCIpLDEwKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihvKT8oYS5zdWdnZXN0ZWRMZW5ndGg9byxvPD0yKm58fGl8fCFyfHwiYnl0ZXMiIT09ZSgiQWNjZXB0LVJhbmdlcyIpfHwiaWRlbnRpdHkiIT09KGUoIkNvbnRlbnQtRW5jb2RpbmciKXx8ImlkZW50aXR5Iil8fChhLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMCksYSk6YX0sZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiAyMDA9PT10fHwyMDY9PT10fTt2YXIgbj1yKDEpLGk9cigxNjMpLGE9cigxMzcpfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPSEwLHI9cygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIHUoYT1mKGE9aChhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1zKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KGU9bi5leGVjKHQpKTspe3ZhciBhPWkoZSw0KSxvPWFbMV0sbD1hWzJdLHU9YVszXTtpZigobz1wYXJzZUludChvLDEwKSlpbiByKXtpZigwPT09bylicmVha31lbHNlIHJbb109W2wsdV19Zm9yKHZhciBmPVtdLGQ9MDtkPHIubGVuZ3RoJiZkIGluIHI7KytkKXt2YXIgcD1pKHJbZF0sMiksdj1wWzBdLHk9cFsxXTt5PWMoeSksdiYmKHk9dW5lc2NhcGUoeSksMD09PWQmJih5PWgoeSkpKSxmLnB1c2goeSl9cmV0dXJuIGYuam9pbigiIil9KHQpKXJldHVybiB1KGYocikpO2lmKHI9cygiZmlsZW5hbWUiLCJpIikuZXhlYyh0KSl7dmFyIG89YyhyPXJbMV0pO3JldHVybiB1KG89ZihvKSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiBsKHQscil7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChyKSlyZXR1cm4gcjt0cnl7dmFyIGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT0oMCxuLnN0cmluZ1RvQnl0ZXMpKHIpO3I9aS5kZWNvZGUoYSksZT0hMX1jYXRjaCh0KXt9fXJldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGUmJi9bXHg4MC1ceGZmXS8udGVzdCh0KSYmKHQ9bCgidXRmLTgiLHQpLGUmJih0PWwoImlzby04ODU5LTEiLHQpKSksdH1mdW5jdGlvbiBjKHQpe2lmKHQuc3RhcnRzV2l0aCgnIicpKXtmb3IodmFyIGU9dC5zbGljZSgxKS5zcGxpdCgnXFwiJykscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLmluZGV4T2YoJyInKTstMSE9PW4mJihlW3JdPWVbcl0uc2xpY2UoMCxuKSxlLmxlbmd0aD1yKzEpLGVbcl09ZVtyXS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpfXQ9ZS5qb2luKCciJyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIiciKTtyZXR1cm4tMT09PWU/dDpsKHQuc2xpY2UoMCxlKSx0LnNsaWNlKGUrMSkucmVwbGFjZSgvXlteJ10qJy8sIiIpKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LnN0YXJ0c1dpdGgoIj0/Iil8fC9bXHgwMC1ceDE5XHg4MC1ceGZmXS8udGVzdCh0KT90OnQucmVwbGFjZSgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJxIj09PXJ8fCJRIj09PXIpcmV0dXJuIGwoZSxuPShuPW4ucmVwbGFjZSgvXy9nLCIgIikpLnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSwxNikpfSkpKTt0cnl7bj1hdG9iKG4pfWNhdGNoKHQpe31yZXR1cm4gbChlLG4pfSkpfXJldHVybiIifTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGEodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9hKHQsZSk6dm9pZCAwfX0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7dSh7fSwiIil9Y2F0Y2godCl7dT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307dShtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciBsPWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxvKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXMobC5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT11KHksbCwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LHUodCxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLHUoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLHUoXyxsLCJHZW5lcmF0b3IiKSx1KF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx1KF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGModCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09Yyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1jKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2godGhpcyx0KSx0aGlzLnVybD1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmci5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndpdGhDcmVkZW50aWFscz1yLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5nZXRYaHI9ci5nZXRYaHJ8fGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdGhpcy5jdXJyWGhySWQ9MCx0aGlzLnBlbmRpbmdSZXF1ZXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBkKHQsW3trZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtiZWdpbjp0LGVuZDplfTtmb3IodmFyIGkgaW4gciluW2ldPXJbaV07cmV0dXJuIHRoaXMucmVxdWVzdChuKX19LHtrZXk6InJlcXVlc3RGdWxsIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQpfX0se2tleToicmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRYaHIoKSxyPXRoaXMuY3VyclhocklkKyssbj10aGlzLnBlbmRpbmdSZXF1ZXN0c1tyXT17eGhyOmV9O2Zvcih2YXIgaSBpbiBlLm9wZW4oIkdFVCIsdGhpcy51cmwsICEwKSxlLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgYT10aGlzLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PWEmJmUuc2V0UmVxdWVzdEhlYWRlcihpLGEpfXJldHVybiB0aGlzLmlzSHR0cCYmImJlZ2luImluIHQmJiJlbmQiaW4gdD8oZS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIuY29uY2F0KHQuYmVnaW4sIi0iKS5jb25jYXQodC5lbmQtMSkpLG4uZXhwZWN0ZWRTdGF0dXM9MjA2KTpuLmV4cGVjdGVkU3RhdHVzPTIwMCxlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihyKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSxlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9dC5vbkRvbmUsbi5vbkVycm9yPXQub25FcnJvcixuLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzLGUuc2VuZChudWxsKSxyfX0se2tleToib25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO24mJihudWxsPT09KHI9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4sZSkpfX0se2tleToib25TdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZihyKXt2YXIgaT1yLnhocjtpZihpLnJlYWR5U3RhdGU+PTImJnIub25IZWFkZXJzUmVjZWl2ZWQmJihyLm9uSGVhZGVyc1JlY2VpdmVkKCksZGVsZXRlIHIub25IZWFkZXJzUmVjZWl2ZWQpLDQ9PT1pLnJlYWR5U3RhdGUmJnQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpaWYoZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLDA9PT1pLnN0YXR1cyYmdGhpcy5pc0h0dHApe3ZhciBhO251bGw9PT0oYT1yLm9uRXJyb3IpfHx2b2lkIDA9PT1hfHxhLmNhbGwocixpLnN0YXR1cyl9ZWxzZXt2YXIgbz1pLnN0YXR1c3x8MjAwO2lmKDIwMD09PW8mJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fG89PT1yLmV4cGVjdGVkU3RhdHVzKXt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOigwLG4uc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyfShpKTtpZigyMDY9PT1vKXt2YXIgbD1pLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVJhbmdlIiksdT0vYnl0ZXMgKFxkKyktKFxkKylcLyhcZCspLy5leGVjKGwpO3Iub25Eb25lKHtiZWdpbjpwYXJzZUludCh1WzFdLDEwKSxjaHVuazpzfSl9ZWxzZSBpZihzKXIub25Eb25lKHtiZWdpbjowLGNodW5rOnN9KTtlbHNle3ZhciBjO251bGw9PT0oYz1yLm9uRXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwocixpLnN0YXR1cyl9fWVsc2V7dmFyIGg7bnVsbD09PShoPXIub25FcnJvcil8fHZvaWQgMD09PWh8fGguY2FsbChyLGkuc3RhdHVzKX19fX19LHtrZXk6ImdldFJlcXVlc3RYaHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHJ9fSx7a2V5OiJpc1BlbmRpbmdSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c319LHtrZXk6ImFib3J0UmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO2RlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XSxlLmFib3J0KCl9fV0pLHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX21hbmFnZXI9bmV3IHAoZS51cmwse2h0dHBIZWFkZXJzOmUuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSksdGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGQodCxbe2tleToiX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB5KHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHRoaXMuX21hbmFnZXIsdCxlKTtyZXR1cm4gci5vbkNsb3NlZD10aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpO3ZhciByLG49bCh0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5jYW5jZWwodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX1dKSx0fSgpO2UuUERGTmV0d29ya1N0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2godGhpcyx0KSx0aGlzLl9tYW5hZ2VyPWU7dmFyIGk9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ci51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKGkpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9vbkhlYWRlcnNSZWNlaXZlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mdWxsUmVxdWVzdElkLGU9dGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0UmVzcG9uc2VIZWFkZXIodCl9LG49KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOnIsaXNIdHRwOnRoaXMuX21hbmFnZXIuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnRoaXMuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTp0aGlzLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLG89bi5zdWdnZXN0ZWRMZW5ndGg7YSYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApLHRoaXMuX2NvbnRlbnRMZW5ndGg9b3x8dGhpcy5fY29udGVudExlbmd0aCx0aGlzLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHIpLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHQpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX29uRG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodCYmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2godC5jaHVuaykpLHRoaXMuX2RvbmU9ITAsISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9fX0se2tleToiX29uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLGkuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcil9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD0wfX0se2tleToiX29uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt0Lm5leHQ9NTticmVha31yZXR1cm4gZT10aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKSx0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6ZSxkb25lOiExfSk7Y2FzZSA1OmlmKCF0aGlzLl9kb25lKXt0Lm5leHQ9NzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiByPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSx0LmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX21hbmFnZXI9ZTt2YXIgaT17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmwsdGhpcy5fcmVxdWVzdElkPWUucmVxdWVzdFJhbmdlKHIsbixpKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMub25DbG9zZWQ9bnVsbH12YXIgZTtyZXR1cm4gZCh0LFt7a2V5OiJfY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMub25DbG9zZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyx0aGlzKX19LHtrZXk6Il9vbkRvbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz1lLHRoaXMuX2RvbmU9ITA7dmFyIHIsbj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX2Nsb3NlKCl9fSx7a2V5OiJfb25FcnJvciIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fc3RvcmVkRXJyb3I9KDAsaS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LHRoaXMuX3VybCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX3F1ZXVlZENodW5rPW51bGx9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dC5sb2FkZWR9KX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NjticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDY6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDg6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fZG9uZT0hMDt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxpPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1sKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWwoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiBlJiZoKHQucHJvdG90eXBlLGUpLHImJmgodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczp0LHNpZ25hbDpyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczplPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX1mdW5jdGlvbiBwKHQpe3ZhciBlPW5ldyBIZWFkZXJzO2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO3ZvaWQgMCE9PW4mJmUuYXBwZW5kKHIsbil9cmV0dXJuIGV9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2ModGhpcyx0KSx0aGlzLnNvdXJjZT1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZS51cmwpLHRoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJmUuaHR0cEhlYWRlcnN8fHt9LHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1yZXR1cm4gZih0LFt7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJnZXRGdWxsUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHkodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IG0odGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZGZXRjaFN0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9maWxlbmFtZT1udWxsO3ZhciBhPWUuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1hLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5fY29udGVudExlbmd0aD1hLmxlbmd0aCx0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2Rpc2FibGVSYW5nZT1hLmRpc2FibGVSYW5nZXx8ITEsdGhpcy5fcmFuZ2VDaHVua1NpemU9YS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hYS5kaXNhYmxlU3RyZWFtLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWEuZGlzYWJsZVJhbmdlLHRoaXMuX2hlYWRlcnM9cCh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO3ZhciBvPWEudXJsO2ZldGNoKG8sZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLG8pO3IuX3JlYWRlcj10LmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhlYWRlcnMuZ2V0KGUpfSxhPSgwLGkudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjplLGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxzPWEuYWxsb3dSYW5nZVJlcXVlc3RzLGw9YS5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1zLHIuX2NvbnRlbnRMZW5ndGg9bHx8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGUpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IG4uQWJvcnRFeGNlcHRpb24oIlN0cmVhbWluZyBpcyBkaXNhYmxlZC4iKSl9KSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgZTtyZXR1cm4gZih0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9cyhhKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsbixpLG87cmV0dXJuIGEoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSA0OmlmKHI9dC5zZW50LG49ci52YWx1ZSwhKGk9ci5kb25lKSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpuLGRvbmU6aX0pO2Nhc2UgOTpyZXR1cm4gdGhpcy5fbG9hZGVkKz1uLmJ5dGVMZW5ndGgsbnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dGhpcy5fbG9hZGVkLHRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KSxvPW5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcix0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6byxkb25lOiExfSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpLHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX1dKSx0fSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixhKXt2YXIgbz10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MDt2YXIgcz1lLnNvdXJjZTt0aGlzLl93aXRoQ3JlZGVudGlhbHM9cy53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXMuZGlzYWJsZVN0cmVhbSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9oZWFkZXJzPXAodGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKSx0aGlzLl9oZWFkZXJzLmFwcGVuZCgiUmFuZ2UiLCJieXRlcz0iLmNvbmNhdChyLCItIikuY29uY2F0KGEtMSkpO3ZhciBsPXMudXJsO2ZldGNoKGwsZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGwpO28uX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKSxvLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIGYodCxbe2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxvO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZihyPXQuc2VudCxuPXIudmFsdWUsIShpPXIuZG9uZSkpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6bixkb25lOml9KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9bi5ieXRlTGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLG89bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpvLGRvbmU6ITF9KTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCksdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fV0pLHR9KCl9XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdF0ocixyLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyksci5leHBvcnRzfXZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9Pnt2YXIgdD1fX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFib3J0RXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5BYm9ydEV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvckxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkFubm90YXRpb25MYXllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbk1vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25Nb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDTWFwQ29tcHJlc3Npb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5DTWFwQ29tcHJlc3Npb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHbG9iYWxXb3JrZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnZhbGlkUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNaXNzaW5nUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5NaXNzaW5nUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPUFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk9QU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0YVJhbmdlVHJhbnNwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QREZEYXRhUmFuZ2VUcmFuc3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERkRhdGVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBERkRhdGVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERldvcmtlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUERGV29ya2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXNzd29yZFJlc3BvbnNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBlcm1pc3Npb25GbGFnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QZXJtaXNzaW9uRmxhZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGl4ZWxzUGVySW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUGl4ZWxzUGVySW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNWR0dyYXBoaWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5TVkdHcmFwaGljc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVU5TVVBQT1JURURfRkVBVFVSRVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXRpbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVXRpbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmVyYm9zaXR5TGV2ZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlZlcmJvc2l0eUxldmVsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJYZmFMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguWGZhTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5idWlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVWYWxpZEFic29sdXRlVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREb2N1bWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0RG9jdW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RmlsZW5hbWVGcm9tVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRQZGZGaWxlbmFtZUZyb21VcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFBkZkZpbGVuYW1lRnJvbVVybH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0WGZhUGFnZVZpZXdwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRYZmFQYWdlVmlld3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRGF0YVNjaGVtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNEYXRhU2NoZW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1BkZkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzUGRmRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZFNjcmlwdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZFNjcmlwdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVuZGVyVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5yZW5kZXJUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldExheWVyRGltZW5zaW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0TGF5ZXJEaW1lbnNpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51cGRhdGVUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZlcnNpb259fSk7dmFyIGU9X193X3BkZmpzX3JlcXVpcmVfXygxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oMTMzKSxuPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxpPV9fd19wZGZqc19yZXF1aXJlX18oMTUxKSxhPV9fd19wZGZqc19yZXF1aXJlX18oMTUyKSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTM2KSxzPV9fd19wZGZqc19yZXF1aXJlX18oMTU3KSxsPV9fd19wZGZqc19yZXF1aXJlX18oMTQ0KSx1PV9fd19wZGZqc19yZXF1aXJlX18oMyksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDE2MCksaD1fX3dfcGRmanNfcmVxdWlyZV9fKDE1OSk7aWYodS5pc05vZGVKUyl7dmFyIGY9X193X3BkZmpzX3JlcXVpcmVfXygxNjEpLlBERk5vZGVTdHJlYW07KDAsci5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0KX0pKX1lbHNle3ZhciBkPV9fd19wZGZqc19yZXF1aXJlX18oMTY0KS5QREZOZXR3b3JrU3RyZWFtLHA9X193X3BkZmpzX3JlcXVpcmVfXygxNjUpLlBERkZldGNoU3RyZWFtOygwLHIuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmlzVmFsaWRGZXRjaFVybCkodC51cmwpP25ldyBwKHQpOm5ldyBkKHQpfSkpfX0pKCksX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwZGZqcy1kaXN0L2J1aWxkL3BkZiIsW10sZmFjdG9yeSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09ZmFjdG9yeSgpOnJvb3RbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09cm9vdC5wZGZqc0xpYj1mYWN0b3J5KCk7",C=`data:text/javascript;base64,${T}`,H=`data:text/javascript;base64,${a}`;let y=!1,V=!1;class w{constructor(Z,l={},d={}){i(this,"container",null);i(this,"wrapper",null);i(this,"wrapperMain",null);i(this,"options",{});i(this,"requestOptions",{});i(this,"pdfDocument",null);i(this,"loopCheckTimer",null);i(this,"totalItems",0);i(this,"pageWidth",0);i(this,"pageHeight",0);i(this,"containerHeight",0);i(this,"visibleItems",6);i(this,"canvasWidth",0);i(this,"canvasHeight",0);i(this,"onScroll",S.debounce(Z=>{const{scrollTop:l}=Z.target;let d=parseInt(getComputedStyle(this.wrapperMain).paddingTop);const m=this.options.gap||10,G=Math.max(Math.floor(Math.max(l-d,0)/(this.pageHeight+m))-1,1),X=Math.min(G+this.visibleItems-1,this.totalItems);this.renderList(G,X)},60));this.container=Z,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...l},this.requestOptions=d,this.createWrapper(),this.createWrapperMain()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;position: relative;height:100%"),this.container.appendChild(this.wrapper),this.wrapper.addEventListener("scroll",this.onScroll)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;box-sizing: content-box"),this.wrapper.appendChild(this.wrapperMain)}installPdfScript(){return u(C).then(()=>{if(window.pdfjsLib&&!V)V=!0,window.pdfjsLib.GlobalWorkerOptions.workerSrc=H;else return Promise.reject("window.pdfjsLib未找到")})}waitPdfjsLoad(){return new Promise(Z=>{const l=()=>{window.pdfjsLib?Z():this.loopCheckTimer=setTimeout(l,10)};l()})}checkPdfLib(){return window.pdfjsLib?Promise.resolve():y?this.waitPdfjsLoad():(y=!0,this.installPdfScript())}getDocument(Z){return window.pdfjsLib.getDocument({url:p(Z),httpHeaders:this.requestOptions&&this.requestOptions.headers,withCredentials:this.requestOptions&&this.requestOptions.withCredentials,cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...R(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(Z,l){return this.pdfDocument.getPage(Z).then(d=>{const m=d.getViewport({scale:2});let G=window.devicePixelRatio>2?1.5:2;if(this.canvasWidth*m.height!==this.canvasHeight*m.width){let c=Math.floor(m.width*G),I=Math.floor(m.height*G),L=this.canvasHeight/I;G=G*L,l.width=c*L,l.style.width=parseInt(l.style.width)*L+"px"}const X=l.getContext("2d"),W=G!==1?[G,0,0,G,0,0]:null;return d.render({canvasContext:X,transform:W,viewport:m}).promise})}getPageSize(Z){return Z.getPage(1).then(l=>{const d=l.getViewport({scale:2}),m=window.devicePixelRatio>2?1.5:2;let G=Math.floor(d.width*m),X=Math.floor(d.height*m),W=Math.floor(d.width),b=Math.floor(d.height);if(this.options.width){let I=this.options.width/W;W=Math.floor(this.options.width),b=Math.floor(b*I)}let c=this.wrapper.getBoundingClientRect().width-20;if(W>c){let I=c/W;W=Math.floor(c),b=Math.floor(b*I)}return{width:W,height:b,canvasWidth:G,canvasHeight:X}})}createCanvas(Z){let l=parseInt(getComputedStyle(this.wrapperMain).paddingTop),d=this.options.gap||10;const m=document.createElement("canvas");return m.style.position="absolute",m.style.top=(Z-1)*(this.pageHeight+d)+l+"px",m.style.left="50%",m.style.transform="translate(-50%)",m.style.backgroundColor="#fff",m.setAttribute("data-id",Z),m.width=this.canvasWidth,m.height=this.canvasHeight,m.style.width=`${this.pageWidth}px`,m.style.height=`${this.pageHeight}px`,m}clearAllCanvas(){this.wrapperMain&&(this.wrapperMain.innerHTML="")}setOptions(Z){this.options=Z}setRequestOptions(Z){this.requestOptions=Z}preview(Z){if(!Z){this.clearAllCanvas(),this.options.onError&&this.options.onError(new Error("预览地址不能为空"));return}this.checkPdfLib().then(l=>{this.getDocument(Z).then(d=>{this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=d,this.getPageSize(d).then(m=>{this.totalItems=d.numPages,this.containerHeight=this.wrapper.getBoundingClientRect().height,this.pageWidth=m.width,this.pageHeight=m.height,this.canvasWidth=m.canvasWidth,this.canvasHeight=m.canvasHeight;let G=this.options.gap||10;this.visibleItems=Math.ceil(this.containerHeight/(this.pageHeight+G))+4;let X=(this.pageHeight+G)*this.totalItems-G;this.wrapperMain.style.height=X+"px",this.clearAllCanvas(),this.renderList(1,Math.min(this.totalItems,this.visibleItems))}).catch(m=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(m)})}).catch(d=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(d)})}).catch(l=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(l)})}renderList(Z,l){let d=this.wrapperMain,m=[...d.childNodes],G=[];if(d.childNodes.length===0)for(let X=Z;X<=l;X++){let W=this.createCanvas(X);d.appendChild(W),G.push(this.renderSinglePage(X,W))}else{let X=+m[0].getAttribute("data-id"),W=+m[m.length-1].getAttribute("data-id");if(lW)for(let b=Z;b<=l;b++){let c=this.createCanvas(b);d.appendChild(c),G.push(this.renderSinglePage(b,c))}if(Z=X){let b=m[0];for(let c=X-1;c>=Z;c--){let I=this.createCanvas(c);d.insertBefore(I,b),b=I,G.push(this.renderSinglePage(c,I))}}for(let b=0;b<=W-X;b++){let c=+m[b].getAttribute("data-id");(cl)&&d.removeChild(m[b])}if(l>W&&Z<=W)for(let b=W+1;b<=l;b++){let c=this.createCanvas(b);d.appendChild(c),G.push(this.renderSinglePage(b,c))}}Promise.all(G).then(X=>{this.options.onRendered&&this.options.onRendered()}).catch(X=>{this.options.onError&&this.options.onError(X)})}rerender(){this.renderList(1,Math.min(this.totalItems,this.visibleItems))}save(Z){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then(l=>{J(Z||`js-preview-pdf-${new Date().getTime()}.pdf`,l.buffer)})}destroy(){this.wrapper.removeEventListener("scroll",this.onScroll),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=null,this.loopCheckTimer&&clearTimeout(this.loopCheckTimer)}}function F(Y,Z,l){return new w(Y,Z,l)}const k={init:F},g={__name:"JsPdfDemo",setup(Y){const Z=N(null);return x(()=>{window.myPdfPreview=k.init(Z.value,{onError:l=>{console.log("发生错误",l)},onRendered:()=>{console.log("渲染完成")}}),window.myPdfPreview.preview("/vue-office/examples/dist/static/test-files/test.pdf")}),(l,d)=>(K(),M("div",{ref_key:"dom",ref:Z,style:{height:"calc(100vh - 50px)"}},null,512))}};export{g as default}; diff --git a/examples/dist/assets/PdfDemo-df05b657.js b/examples/dist/assets/PdfDemo-df05b657.js new file mode 100644 index 0000000..fbbf685 --- /dev/null +++ b/examples/dist/assets/PdfDemo-df05b657.js @@ -0,0 +1,3 @@ +import{g as z,d as V,l as Y}from"./url-de9b02cf.js";import{_ as K,o as J}from"./function-411940b9.js";import{d as Z,_ as Q,r as w,h as ee,o as te,w as re,a as B,c as ne,b as ae,k as ie,e as oe,f as se,g as ce,u as ue}from"./index-bf0149c5.js";import{P as le,u as L}from"./PreviewWrapper-079442e3.js";const fe=`/*! For license information please see worker.js.LICENSE.txt */ +var e,t;e=globalThis,t=()=>(()=>{var e=[,(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WorkerTask=t.WorkerMessageHandler=void 0;var n=r(2),a=r(134),i=r(135),o=r(137),s=r(200),c=r(194),u=r(4),l=r(231),f=r(232);function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function d(){}function p(){}function g(){}var v={};c(v,i,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(P([])));m&&m!==t&&r.call(m,i)&&(v=m);var w=g.prototype=d.prototype=Object.create(v);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==b(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function d(e,t){return y(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||g(e,t)||p()}function p(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(e,t){if(e){if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(f);try{var m=function(){var e=d(h.value,2),t=e[0],n=e[1];l.push(r.getPage(t).then((function(e){var r=new x("Save (editor): page ".concat(t));return e.saveNewAnnotations(E,r,n).finally((function(){_(r)}))})))};for(v.s();!(h=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}}if(t)l.push(r.serializeXfaData(s));else for(var b=function(e){l.push(r.getPage(e).then((function(t){var r=new x("Save: page ".concat(e));return t.save(E,r,s).finally((function(){_(r)}))})))},w=0;w=n.VerbosityLevel.INFOS?Date.now():0;r.getOperatorList({handler:E,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage}).then((function(e){_(i),o&&(0,n.info)("page=".concat(a+1," - getOperatorList: time=")+"".concat(Date.now()-o,"ms, len=").concat(e.length)),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetTextContent",(function(e,t){var a=e.pageIndex;r.getPage(a).then((function(r){var i=new x("GetTextContent: page "+a);M(i);var o=k>=n.VerbosityLevel.INFOS?Date.now():0;r.extractTextContent({handler:E,task:i,sink:t,includeMarkedContent:e.includeMarkedContent,combineTextItems:e.combineTextItems}).then((function(){_(i),o&&(0,n.info)("page=".concat(a+1," - getTextContent: time=")+"".concat(Date.now()-o,"ms")),t.close()}),(function(e){_(i),i.terminated||t.error(e)}))}))})),E.on("GetStructTree",(function(e){return r.getPage(e.pageIndex).then((function(e){return r.ensure(e,"getStructTree")}))})),E.on("FontFallback",(function(e){return r.fontFallback(e.id,E)})),E.on("Cleanup",(function(e){return r.cleanup(!0)})),E.on("Terminate",(function(e){v=!0;var t=[];if(r){r.terminate(new n.AbortException("Worker was terminated."));var a=r.cleanup();t.push(a),r=null}else(0,s.clearGlobalCaches)();b&&b(new n.AbortException("Worker was terminated."));for(var i=0,o=w;i{function n(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!e)return null;try{if(r&&"string"==typeof e){if(r.addDefaultProtocol&&e.startsWith("www.")){var n=e.match(/\\./g);n&&n.length>=2&&(e="http://".concat(e))}if(r.tryConvertEncoding)try{e=M(e)}catch(e){}}var a=t?new URL(e,t):new URL(e);if(function(e){if(!e)return!1;switch(e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch(e){}return null},t.getModificationDate=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")},t.getVerbosityLevel=function(){return g},t.info=function(e){g>=p.INFOS&&console.log("Info: ".concat(e))},t.isArrayBuffer=function(e){return"object"===o(e)&&null!==e&&void 0!==e.byteLength},t.isArrayEqual=function(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(i.s();!(t=i.n()).done;){var o=(r=t.value,2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next,0;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(r)||a(r,2)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=o[0],c=o[1];n[s]=c}}catch(e){i.e(e)}finally{i.f()}return n},t.objectSize=function(e){return Object.keys(e).length},t.setVerbosityLevel=function(e){Number.isInteger(e)&&(g=e)},t.shadow=m,t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},t.stringToBytes=F,t.stringToPDFString=function(e){var t;if(e[0]>="ï"&&("þ"===e[0]&&"ÿ"===e[1]?t="utf-16be":"ÿ"===e[0]&&"þ"===e[1]?t="utf-16le":"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8"),t))try{var r=new TextDecoder(t,{fatal:!0}),n=F(e);return r.decode(n)}catch(e){v('stringToPDFString: "'.concat(e,'".'))}for(var a=[],i=0,o=e.length;i=p.WARNINGS&&console.log("Warning: ".concat(e))}function y(e){throw new Error(e)}function m(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function e(t,r){this.constructor===e&&y("Cannot initialize BaseException."),this.message=t,this.name=r}return e.prototype=new Error,e.constructor=e,e}();t.BaseException=b;var w=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"PasswordException")).code=n,a}return c(r)}(b);t.PasswordException=w;var k=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnknownErrorException")).details=n,a}return c(r)}(b);t.UnknownErrorException=k;var S=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"InvalidPDFException")}return c(r)}(b);t.InvalidPDFException=S;var x=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"MissingPDFException")}return c(r)}(b);t.MissingPDFException=x;var O=function(e){l(r,e);var t=h(r);function r(e,n){var a;return u(this,r),(a=t.call(this,e,"UnexpectedResponseException")).status=n,a}return c(r)}(b);t.UnexpectedResponseException=O;var A=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"FormatError")}return c(r)}(b);t.FormatError=A;var C=function(e){l(r,e);var t=h(r);function r(e){return u(this,r),t.call(this,e,"AbortException")}return c(r)}(b);function F(e){"string"!=typeof e&&y("Invalid argument for stringToBytes");for(var t=e.length,r=new Uint8Array(t),n=0;ne[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}},{key:"intersect",value:function(e,t){var r=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),n=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(r>n)return null;var a=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),i=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return a>i?null:[r,a,n,i]}},{key:"bezierBoundingBox",value:function(e,t,r,a,i,o,s,c){for(var u,l,f,h,d,p,g,v,y=[],m=[[],[]],b=0;b<2;++b)if(0===b?(l=6*e-12*r+6*i,u=-3*e+9*r-9*i+3*s,f=3*r-3*e):(l=6*t-12*a+6*o,u=-3*t+9*a-9*o+3*c,f=3*a-3*t),Math.abs(u)<1e-12){if(Math.abs(l)<1e-12)continue;0<(h=-f/l)&&h<1&&y.push(h)}else g=l*l-4*f*u,v=Math.sqrt(g),g<0||(0<(d=(-l+v)/(2*u))&&d<1&&y.push(d),0<(p=(-l-v)/(2*u))&&p<1&&y.push(p));for(var w,k=y.length,S=k;k--;)w=1-(h=y[k]),m[0][k]=w*w*w*e+3*w*w*h*r+3*w*h*h*i+h*h*h*s,m[1][k]=w*w*w*t+3*w*w*h*a+3*w*h*h*o+h*h*h*c;return m[0][S]=e,m[1][S]=t,m[0][S+1]=s,m[1][S+1]=c,m[0].length=m[1].length=S+2,[Math.min.apply(Math,n(m[0])),Math.min.apply(Math,n(m[1])),Math.max.apply(Math,n(m[0])),Math.max.apply(Math,n(m[1]))]}}]),e}();t.Util=E;var j=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function M(e){return decodeURIComponent(escape(e))}},(e,t,r)=>{var n=r(4);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(e){return Buffer.from(e,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(e){return Buffer.from(e,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(5),Uint8Array.prototype.at||r(79),globalThis.structuredClone||r(89)},(e,t)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);t.isNodeJS=n},(e,t,r)=>{r(6);var n=r(78);e.exports=n("Array","at")},(e,t,r)=>{var n=r(7),a=r(44),i=r(68),o=r(66),s=r(73);n({target:"Array",proto:!0},{at:function(e){var t=a(this),r=i(t),n=o(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}}),s("at")},(e,t,r)=>{var n=r(8),a=r(9).f,i=r(48),o=r(52),s=r(42),c=r(60),u=r(72);e.exports=function(e,t){var r,l,f,h,d,p=e.target,g=e.global,v=e.stat;if(r=g?n:v?n[p]||s(p,{}):(n[p]||{}).prototype)for(l in t){if(h=t[l],f=e.dontCallGetSet?(d=a(r,l))&&d.value:r[l],!u(g?l:p+(v?".":"#")+l,e.forced)&&void 0!==f){if(typeof h==typeof f)continue;c(h,f)}(e.sham||f&&f.sham)&&i(h,"sham",!0),o(r,l,h,e)}}},e=>{var t=function(e){return e&&e.Math==Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(e,t,r)=>{var n=r(10),a=r(12),i=r(14),o=r(15),s=r(16),c=r(22),u=r(43),l=r(46),f=Object.getOwnPropertyDescriptor;t.f=n?f:function(e,t){if(e=s(e),t=c(t),l)try{return f(e,t)}catch(e){}if(u(e,t))return o(!a(i.f,e,t),e[t])}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},(e,t,r)=>{var n=r(13),a=Function.prototype.call;e.exports=n?a.bind(a):function(){return a.apply(a,arguments)}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},(e,t)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,a=n&&!r.call({1:2},1);t.f=a?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},(e,t,r)=>{var n=r(17),a=r(20);e.exports=function(e){return n(a(e))}},(e,t,r)=>{var n=r(18),a=r(11),i=r(19),o=Object,s=n("".split);e.exports=a((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?s(e,""):o(e)}:o},(e,t,r)=>{var n=r(13),a=Function.prototype,i=a.call,o=n&&a.bind.bind(i,i);e.exports=n?o:function(e){return function(){return i.apply(e,arguments)}}},(e,t,r)=>{var n=r(18),a=n({}.toString),i=n("".slice);e.exports=function(e){return i(a(e),8,-1)}},(e,t,r)=>{var n=r(21),a=TypeError;e.exports=function(e){if(n(e))throw a("Can't call method on "+e);return e}},e=>{e.exports=function(e){return null==e}},(e,t,r)=>{var n=r(23),a=r(27);e.exports=function(e){var t=n(e,"string");return a(t)?t:t+""}},(e,t,r)=>{var n=r(12),a=r(24),i=r(27),o=r(34),s=r(37),c=r(38),u=TypeError,l=c("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var r,c=o(e,l);if(c){if(void 0===t&&(t="default"),r=n(c,e,t),!a(r)||i(r))return r;throw u("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},(e,t,r)=>{var n=r(25),a=r(26),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===i}:function(e){return"object"==typeof e?null!==e:n(e)}},(e,t,r)=>{var n=r(26),a=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},(e,t,r)=>{var n=r(28),a=r(25),i=r(29),o=r(30),s=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return a(t)&&i(t.prototype,s(e))}},(e,t,r)=>{var n=r(8),a=r(25);e.exports=function(e,t){return arguments.length<2?(r=n[e],a(r)?r:void 0):n[e]&&n[e][t];var r}},(e,t,r)=>{var n=r(18);e.exports=n({}.isPrototypeOf)},(e,t,r)=>{var n=r(31);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(e,t,r)=>{var n=r(32),a=r(11);e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(e,t,r)=>{var n,a,i=r(8),o=r(33),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(a=(n=l.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!a&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(a=+n[1]),e.exports=a},(e,t,r)=>{var n=r(28);e.exports=n("navigator","userAgent")||""},(e,t,r)=>{var n=r(35),a=r(21);e.exports=function(e,t){var r=e[t];return a(r)?void 0:n(r)}},(e,t,r)=>{var n=r(25),a=r(36),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a function")}},e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},(e,t,r)=>{var n=r(12),a=r(25),i=r(24),o=TypeError;e.exports=function(e,t){var r,s;if("string"===t&&a(r=e.toString)&&!i(s=n(r,e)))return s;if(a(r=e.valueOf)&&!i(s=n(r,e)))return s;if("string"!==t&&a(r=e.toString)&&!i(s=n(r,e)))return s;throw o("Can't convert object to primitive value")}},(e,t,r)=>{var n=r(8),a=r(39),i=r(43),o=r(45),s=r(31),c=r(30),u=a("wks"),l=n.Symbol,f=l&&l.for,h=c?l:l&&l.withoutSetter||o;e.exports=function(e){if(!i(u,e)||!s&&"string"!=typeof u[e]){var t="Symbol."+e;s&&i(l,e)?u[e]=l[e]:u[e]=c&&f?f(t):h(t)}return u[e]}},(e,t,r)=>{var n=r(40),a=r(41);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},e=>{e.exports=!1},(e,t,r)=>{var n=r(8),a=r(42),i="__core-js_shared__",o=n[i]||a(i,{});e.exports=o},(e,t,r)=>{var n=r(8),a=Object.defineProperty;e.exports=function(e,t){try{a(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},(e,t,r)=>{var n=r(18),a=r(44),i=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},(e,t,r)=>{var n=r(20),a=Object;e.exports=function(e){return a(n(e))}},(e,t,r)=>{var n=r(18),a=0,i=Math.random(),o=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++a+i,36)}},(e,t,r)=>{var n=r(10),a=r(11),i=r(47);e.exports=!n&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},(e,t,r)=>{var n=r(8),a=r(24),i=n.document,o=a(i)&&a(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},(e,t,r)=>{var n=r(10),a=r(49),i=r(15);e.exports=n?function(e,t,r){return a.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},(e,t,r)=>{var n=r(10),a=r(46),i=r(50),o=r(51),s=r(22),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",h="configurable",d="writable";t.f=n?i?function(e,t,r){if(o(e),t=s(t),o(r),"function"==typeof e&&"prototype"===t&&"value"in r&&d in r&&!r[d]){var n=l(e,t);n&&n[d]&&(e[t]=r.value,r={configurable:h in r?r[h]:n[h],enumerable:f in r?r[f]:n[f],writable:!1})}return u(e,t,r)}:u:function(e,t,r){if(o(e),t=s(t),o(r),a)try{return u(e,t,r)}catch(e){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},(e,t,r)=>{var n=r(10),a=r(11);e.exports=n&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(e,t,r)=>{var n=r(24),a=String,i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not an object")}},(e,t,r)=>{var n=r(25),a=r(49),i=r(53),o=r(42);e.exports=function(e,t,r,s){s||(s={});var c=s.enumerable,u=void 0!==s.name?s.name:t;if(n(r)&&i(r,u,s),s.global)c?e[t]=r:o(t,r);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(e){}c?e[t]=r:a.f(e,t,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},(e,t,r)=>{var n=r(11),a=r(25),i=r(43),o=r(10),s=r(54).CONFIGURABLE,c=r(55),u=r(56),l=u.enforce,f=u.get,h=Object.defineProperty,d=o&&!n((function(){return 8!==h((function(){}),"length",{value:8}).length})),p=String(String).split("String"),g=e.exports=function(e,t,r){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!i(e,"name")||s&&e.name!==t)&&(o?h(e,"name",{value:t,configurable:!0}):e.name=t),d&&r&&i(r,"arity")&&e.length!==r.arity&&h(e,"length",{value:r.arity});try{r&&i(r,"constructor")&&r.constructor?o&&h(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=l(e);return i(n,"source")||(n.source=p.join("string"==typeof t?t:"")),e};Function.prototype.toString=g((function(){return a(this)&&f(this).source||c(this)}),"toString")},(e,t,r)=>{var n=r(10),a=r(43),i=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=a(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!n||n&&o(i,"name").configurable);e.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},(e,t,r)=>{var n=r(18),a=r(25),i=r(41),o=n(Function.toString);a(i.inspectSource)||(i.inspectSource=function(e){return o(e)}),e.exports=i.inspectSource},(e,t,r)=>{var n,a,i,o=r(57),s=r(8),c=r(24),u=r(48),l=r(43),f=r(41),h=r(58),d=r(59),p="Object already initialized",g=s.TypeError,v=s.WeakMap;if(o||f.state){var y=f.state||(f.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw g(p);return t.facade=e,y.set(e,t),t},a=function(e){return y.get(e)||{}},i=function(e){return y.has(e)}}else{var m=h("state");d[m]=!0,n=function(e,t){if(l(e,m))throw g(p);return t.facade=e,u(e,m,t),t},a=function(e){return l(e,m)?e[m]:{}},i=function(e){return l(e,m)}}e.exports={set:n,get:a,has:i,enforce:function(e){return i(e)?a(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!c(t)||(r=a(t)).type!==e)throw g("Incompatible receiver, "+e+" required");return r}}}},(e,t,r)=>{var n=r(8),a=r(25),i=n.WeakMap;e.exports=a(i)&&/native code/.test(String(i))},(e,t,r)=>{var n=r(39),a=r(45),i=n("keys");e.exports=function(e){return i[e]||(i[e]=a(e))}},e=>{e.exports={}},(e,t,r)=>{var n=r(43),a=r(61),i=r(9),o=r(49);e.exports=function(e,t,r){for(var s=a(t),c=o.f,u=i.f,l=0;l{var n=r(28),a=r(18),i=r(62),o=r(71),s=r(51),c=a([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=i.f(s(e)),r=o.f;return r?c(t,r(e)):t}},(e,t,r)=>{var n=r(63),a=r(70).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,a)}},(e,t,r)=>{var n=r(18),a=r(43),i=r(16),o=r(64).indexOf,s=r(59),c=n([].push);e.exports=function(e,t){var r,n=i(e),u=0,l=[];for(r in n)!a(s,r)&&a(n,r)&&c(l,r);for(;t.length>u;)a(n,r=t[u++])&&(~o(l,r)||c(l,r));return l}},(e,t,r)=>{var n=r(16),a=r(65),i=r(68),o=function(e){return function(t,r,o){var s,c=n(t),u=i(c),l=a(o,u);if(e&&r!=r){for(;u>l;)if((s=c[l++])!=s)return!0}else for(;u>l;l++)if((e||l in c)&&c[l]===r)return e||l||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},(e,t,r)=>{var n=r(66),a=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?a(r+t,0):i(r,t)}},(e,t,r)=>{var n=r(67);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},(e,t,r)=>{var n=r(69);e.exports=function(e){return n(e.length)}},(e,t,r)=>{var n=r(66),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(e,t)=>{t.f=Object.getOwnPropertySymbols},(e,t,r)=>{var n=r(11),a=r(25),i=/#|\\.prototype\\./,o=function(e,t){var r=c[s(e)];return r==l||r!=u&&(a(t)?n(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=o.data={},u=o.NATIVE="N",l=o.POLYFILL="P";e.exports=o},(e,t,r)=>{var n=r(38),a=r(74),i=r(49).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&i(s,o,{configurable:!0,value:a(null)}),e.exports=function(e){s[o][e]=!0}},(e,t,r)=>{var n,a=r(51),i=r(75),o=r(70),s=r(59),c=r(77),u=r(47),l=r(58),f="prototype",h="script",d=l("IE_PROTO"),p=function(){},g=function(e){return"<"+h+">"+e+""},v=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;y="undefined"!=typeof document?document.domain&&n?v(n):(t=u("iframe"),r="java"+h+":",t.style.display="none",c.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F):v(n);for(var a=o.length;a--;)delete y[f][o[a]];return y()};s[d]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(p[f]=a(e),r=new p,p[f]=null,r[d]=e):r=y(),void 0===t?r:i.f(r,t)}},(e,t,r)=>{var n=r(10),a=r(50),i=r(49),o=r(51),s=r(16),c=r(76);t.f=n&&!a?Object.defineProperties:function(e,t){o(e);for(var r,n=s(t),a=c(t),u=a.length,l=0;u>l;)i.f(e,r=a[l++],n[r]);return e}},(e,t,r)=>{var n=r(63),a=r(70);e.exports=Object.keys||function(e){return n(e,a)}},(e,t,r)=>{var n=r(28);e.exports=n("document","documentElement")},(e,t,r)=>{var n=r(8),a=r(18);e.exports=function(e,t){return a(n[e].prototype[t])}},(e,t,r)=>{r(80)},(e,t,r)=>{var n=r(81),a=r(68),i=r(66),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(e){var t=o(this),r=a(t),n=i(e),s=n>=0?n:r+n;return s<0||s>=r?void 0:t[s]}))},(e,t,r)=>{var n,a,i,o=r(82),s=r(10),c=r(8),u=r(25),l=r(24),f=r(43),h=r(83),d=r(36),p=r(48),g=r(52),v=r(49).f,y=r(29),m=r(85),b=r(87),w=r(38),k=r(45),S=r(56),x=S.enforce,O=S.get,A=c.Int8Array,C=A&&A.prototype,F=c.Uint8ClampedArray,P=F&&F.prototype,T=A&&m(A),I=C&&m(C),E=Object.prototype,j=c.TypeError,M=w("toStringTag"),_=k("TYPED_ARRAY_TAG"),L="TypedArrayConstructor",R=o&&!!b&&"Opera"!==h(c.opera),N=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},B={BigInt64Array:8,BigUint64Array:8},U=function(e){var t=m(e);if(l(t)){var r=O(t);return r&&f(r,L)?r[L]:U(t)}},$=function(e){if(!l(e))return!1;var t=h(e);return f(D,t)||f(B,t)};for(n in D)(i=(a=c[n])&&a.prototype)?x(i)[L]=a:R=!1;for(n in B)(i=(a=c[n])&&a.prototype)&&(x(i)[L]=a);if((!R||!u(T)||T===Function.prototype)&&(T=function(){throw j("Incorrect invocation")},R))for(n in D)c[n]&&b(c[n],T);if((!R||!I||I===E)&&(I=T.prototype,R))for(n in D)c[n]&&b(c[n].prototype,I);if(R&&m(P)!==I&&b(P,I),s&&!f(I,M))for(n in N=!0,v(I,M,{get:function(){return l(this)?this[_]:void 0}}),D)c[n]&&p(c[n],_,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:R,TYPED_ARRAY_TAG:N&&_,aTypedArray:function(e){if($(e))return e;throw j("Target is not a typed array")},aTypedArrayConstructor:function(e){if(u(e)&&(!b||y(T,e)))return e;throw j(d(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r,n){if(s){if(r)for(var a in D){var i=c[a];if(i&&f(i.prototype,e))try{delete i.prototype[e]}catch(r){try{i.prototype[e]=t}catch(e){}}}I[e]&&!r||g(I,e,r?t:R&&C[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,r){var n,a;if(s){if(b){if(r)for(n in D)if((a=c[n])&&f(a,e))try{delete a[e]}catch(e){}if(T[e]&&!r)return;try{return g(T,e,r?t:R&&T[e]||t)}catch(e){}}for(n in D)!(a=c[n])||a[e]&&!r||g(a,e,t)}},getTypedArrayConstructor:U,isView:function(e){if(!l(e))return!1;var t=h(e);return"DataView"===t||f(D,t)||f(B,t)},isTypedArray:$,TypedArray:T,TypedArrayPrototype:I}},e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(e,t,r)=>{var n=r(84),a=r(25),i=r(19),o=r(38)("toStringTag"),s=Object,c="Arguments"==i(function(){return arguments}());e.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=s(e),o))?r:c?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},(e,t,r)=>{var n={};n[r(38)("toStringTag")]="z",e.exports="[object z]"===String(n)},(e,t,r)=>{var n=r(43),a=r(25),i=r(44),o=r(58),s=r(86),c=o("IE_PROTO"),u=Object,l=u.prototype;e.exports=s?u.getPrototypeOf:function(e){var t=i(e);if(n(t,c))return t[c];var r=t.constructor;return a(r)&&t instanceof r?r.prototype:t instanceof u?l:null}},(e,t,r)=>{var n=r(11);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},(e,t,r)=>{var n=r(18),a=r(51),i=r(88);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},(e,t,r)=>{var n=r(25),a=String,i=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},(e,t,r)=>{r(90),r(97),r(99),r(122),r(124);var n=r(133);e.exports=n.structuredClone},(e,t,r)=>{var n=r(16),a=r(73),i=r(91),o=r(56),s=r(49).f,c=r(92),u=r(96),l=r(40),f=r(10),h="Array Iterator",d=o.set,p=o.getterFor(h);e.exports=c(Array,"Array",(function(e,t){d(this,{type:h,target:n(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?t[n]:[n,t[n]],!1)}),"values");var g=i.Arguments=i.Array;if(a("keys"),a("values"),a("entries"),!l&&f&&"values"!==g.name)try{s(g,"name",{value:"values"})}catch(e){}},e=>{e.exports={}},(e,t,r)=>{var n=r(7),a=r(12),i=r(40),o=r(54),s=r(25),c=r(93),u=r(85),l=r(87),f=r(95),h=r(48),d=r(52),p=r(38),g=r(91),v=r(94),y=o.PROPER,m=o.CONFIGURABLE,b=v.IteratorPrototype,w=v.BUGGY_SAFARI_ITERATORS,k=p("iterator"),S="keys",x="values",O="entries",A=function(){return this};e.exports=function(e,t,r,o,p,v,C){c(r,t,o);var F,P,T,I=function(e){if(e===p&&L)return L;if(!w&&e in M)return M[e];switch(e){case S:case x:case O:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+" Iterator",j=!1,M=e.prototype,_=M[k]||M["@@iterator"]||p&&M[p],L=!w&&_||I(p),R="Array"==t&&M.entries||_;if(R&&(F=u(R.call(new e)))!==Object.prototype&&F.next&&(i||u(F)===b||(l?l(F,b):s(F[k])||d(F,k,A)),f(F,E,!0,!0),i&&(g[E]=A)),y&&p==x&&_&&_.name!==x&&(!i&&m?h(M,"name",x):(j=!0,L=function(){return a(_,this)})),p)if(P={values:I(x),keys:v?L:I(S),entries:I(O)},C)for(T in P)(w||j||!(T in M))&&d(M,T,P[T]);else n({target:t,proto:!0,forced:w||j},P);return i&&!C||M[k]===L||d(M,k,L,{name:p}),g[t]=L,P}},(e,t,r)=>{var n=r(94).IteratorPrototype,a=r(74),i=r(15),o=r(95),s=r(91),c=function(){return this};e.exports=function(e,t,r,u){var l=t+" Iterator";return e.prototype=a(n,{next:i(+!u,r)}),o(e,l,!1,!0),s[l]=c,e}},(e,t,r)=>{var n,a,i,o=r(11),s=r(25),c=r(24),u=r(74),l=r(85),f=r(52),h=r(38),d=r(40),p=h("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(a=l(l(i)))!==Object.prototype&&(n=a):g=!0),!c(n)||o((function(){var e={};return n[p].call(e)!==e}))?n={}:d&&(n=u(n)),s(n[p])||f(n,p,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:g}},(e,t,r)=>{var n=r(49).f,a=r(43),i=r(38)("toStringTag");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!a(e,i)&&n(e,i,{configurable:!0,value:t})}},e=>{e.exports=function(e,t){return{value:e,done:t}}},(e,t,r)=>{var n=r(84),a=r(52),i=r(98);n||a(Object.prototype,"toString",i,{unsafe:!0})},(e,t,r)=>{var n=r(84),a=r(83);e.exports=n?{}.toString:function(){return"[object "+a(this)+"]"}},(e,t,r)=>{r(100)},(e,t,r)=>{r(101)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n=r(7),a=r(8),i=r(18),o=r(72),s=r(52),c=r(102),u=r(109),l=r(116),f=r(25),h=r(21),d=r(24),p=r(11),g=r(117),v=r(95),y=r(118);e.exports=function(e,t,r){var m=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),w=m?"set":"add",k=a[e],S=k&&k.prototype,x=k,O={},A=function(e){var t=i(S[e]);s(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return b&&!d(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!d(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(o(e,!f(k)||!(b||S.forEach&&!p((function(){(new k).entries().next()})))))x=r.getConstructor(t,e,m,w),c.enable();else if(o(e,!0)){var C=new x,F=C[w](b?{}:-0,1)!=C,P=p((function(){C.has(1)})),T=g((function(e){new k(e)})),I=!b&&p((function(){for(var e=new k,t=5;t--;)e[w](t,t);return!e.has(-0)}));T||((x=t((function(e,t){l(e,S);var r=y(new k,e,x);return h(t)||u(t,r[w],{that:r,AS_ENTRIES:m}),r}))).prototype=S,S.constructor=x),(P||I)&&(A("delete"),A("has"),m&&A("get")),(I||F)&&A(w),b&&S.clear&&delete S.clear}return O[e]=x,n({global:!0,constructor:!0,forced:x!=k},O),v(x,e),b||r.setStrong(x,e,m),x}},(e,t,r)=>{var n=r(7),a=r(18),i=r(59),o=r(24),s=r(43),c=r(49).f,u=r(62),l=r(103),f=r(106),h=r(45),d=r(108),p=!1,g=h("meta"),v=0,y=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},m=e.exports={enable:function(){m.enable=function(){},p=!0;var e=u.f,t=a([].splice),r={};r[g]=1,e(r).length&&(u.f=function(r){for(var n=e(r),a=0,i=n.length;a{var n=r(19),a=r(16),i=r(62).f,o=r(104),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"Window"==n(e)?function(e){try{return i(e)}catch(e){return o(s)}}(e):i(a(e))}},(e,t,r)=>{var n=r(65),a=r(68),i=r(105),o=Array,s=Math.max;e.exports=function(e,t,r){for(var c=a(e),u=n(t,c),l=n(void 0===r?c:r,c),f=o(s(l-u,0)),h=0;u{var n=r(22),a=r(49),i=r(15);e.exports=function(e,t,r){var o=n(t);o in e?a.f(e,o,i(0,r)):e[o]=r}},(e,t,r)=>{var n=r(11),a=r(24),i=r(19),o=r(107),s=Object.isExtensible,c=n((function(){s(1)}));e.exports=c||o?function(e){return!!a(e)&&(!o||"ArrayBuffer"!=i(e))&&(!s||s(e))}:s},(e,t,r)=>{var n=r(11);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},(e,t,r)=>{var n=r(11);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(e,t,r)=>{var n=r(110),a=r(12),i=r(51),o=r(36),s=r(112),c=r(68),u=r(29),l=r(113),f=r(114),h=r(115),d=TypeError,p=function(e,t){this.stopped=e,this.result=t},g=p.prototype;e.exports=function(e,t,r){var v,y,m,b,w,k,S,x=r&&r.that,O=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_RECORD),C=!(!r||!r.IS_ITERATOR),F=!(!r||!r.INTERRUPTED),P=n(t,x),T=function(e){return v&&h(v,"normal",e),new p(!0,e)},I=function(e){return O?(i(e),F?P(e[0],e[1],T):P(e[0],e[1])):F?P(e,T):P(e)};if(A)v=e.iterator;else if(C)v=e;else{if(!(y=f(e)))throw d(o(e)+" is not iterable");if(s(y)){for(m=0,b=c(e);b>m;m++)if((w=I(e[m]))&&u(g,w))return w;return new p(!1)}v=l(e,y)}for(k=A?e.next:v.next;!(S=a(k,v)).done;){try{w=I(S.value)}catch(e){h(v,"throw",e)}if("object"==typeof w&&w&&u(g,w))return w}return new p(!1)}},(e,t,r)=>{var n=r(111),a=r(35),i=r(13),o=n(n.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?o(e,t):function(){return e.apply(t,arguments)}}},(e,t,r)=>{var n=r(19),a=r(18);e.exports=function(e){if("Function"===n(e))return a(e)}},(e,t,r)=>{var n=r(38),a=r(91),i=n("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(a.Array===e||o[i]===e)}},(e,t,r)=>{var n=r(12),a=r(35),i=r(51),o=r(36),s=r(114),c=TypeError;e.exports=function(e,t){var r=arguments.length<2?s(e):t;if(a(r))return i(n(r,e));throw c(o(e)+" is not iterable")}},(e,t,r)=>{var n=r(83),a=r(34),i=r(21),o=r(91),s=r(38)("iterator");e.exports=function(e){if(!i(e))return a(e,s)||a(e,"@@iterator")||o[n(e)]}},(e,t,r)=>{var n=r(12),a=r(51),i=r(34);e.exports=function(e,t,r){var o,s;a(e);try{if(!(o=i(e,"return"))){if("throw"===t)throw r;return r}o=n(o,e)}catch(e){s=!0,o=e}if("throw"===t)throw r;if(s)throw o;return a(o),r}},(e,t,r)=>{var n=r(29),a=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw a("Incorrect invocation")}},(e,t,r)=>{var n=r(38)("iterator"),a=!1;try{var i=0,o={next:function(){return{done:!!i++}},return:function(){a=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},(e,t,r)=>{var n=r(25),a=r(24),i=r(87);e.exports=function(e,t,r){var o,s;return i&&n(o=t.constructor)&&o!==r&&a(s=o.prototype)&&s!==r.prototype&&i(e,s),e}},(e,t,r)=>{var n=r(49).f,a=r(74),i=r(120),o=r(110),s=r(116),c=r(21),u=r(109),l=r(92),f=r(96),h=r(121),d=r(10),p=r(102).fastKey,g=r(56),v=g.set,y=g.getterFor;e.exports={getConstructor:function(e,t,r,l){var f=e((function(e,n){s(e,h),v(e,{type:t,index:a(null),first:void 0,last:void 0,size:0}),d||(e.size=0),c(n)||u(n,e[l],{that:e,AS_ENTRIES:r})})),h=f.prototype,g=y(t),m=function(e,t,r){var n,a,i=g(e),o=b(e,t);return o?o.value=r:(i.last=o={index:a=p(t,!0),key:t,value:r,previous:n=i.last,next:void 0,removed:!1},i.first||(i.first=o),n&&(n.next=o),d?i.size++:e.size++,"F"!==a&&(i.index[a]=o)),e},b=function(e,t){var r,n=g(e),a=p(t);if("F"!==a)return n.index[a];for(r=n.first;r;r=r.next)if(r.key==t)return r};return i(h,{clear:function(){for(var e=g(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,d?e.size=0:this.size=0},delete:function(e){var t=this,r=g(t),n=b(t,e);if(n){var a=n.next,i=n.previous;delete r.index[n.index],n.removed=!0,i&&(i.next=a),a&&(a.previous=i),r.first==n&&(r.first=a),r.last==n&&(r.last=i),d?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=g(this),n=o(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),i(h,r?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),d&&n(h,"size",{get:function(){return g(this).size}}),f},setStrong:function(e,t,r){var n=t+" Iterator",a=y(t),i=y(n);l(e,t,(function(e,t){v(this,{type:n,target:e,state:a(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?f("keys"==t?r.key:"values"==t?r.value:[r.key,r.value],!1):(e.target=void 0,f(void 0,!0))}),r?"entries":"values",!r,!0),h(t)}}},(e,t,r)=>{var n=r(52);e.exports=function(e,t,r){for(var a in t)n(e,a,t[a],r);return e}},(e,t,r)=>{var n=r(28),a=r(49),i=r(38),o=r(10),s=i("species");e.exports=function(e){var t=n(e),r=a.f;o&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},(e,t,r)=>{r(123)},(e,t,r)=>{r(101)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(119))},(e,t,r)=>{var n,a=r(40),i=r(7),o=r(8),s=r(28),c=r(18),u=r(11),l=r(45),f=r(25),h=r(125),d=r(21),p=r(24),g=r(27),v=r(109),y=r(51),m=r(83),b=r(43),w=r(105),k=r(48),S=r(68),x=r(126),O=r(127),A=r(129),C=r(32),F=r(130),P=r(131),T=r(132),I=o.Object,E=o.Date,j=o.Error,M=o.EvalError,_=o.RangeError,L=o.ReferenceError,R=o.SyntaxError,N=o.TypeError,D=o.URIError,B=o.PerformanceMark,U=o.WebAssembly,$=U&&U.CompileError||j,X=U&&U.LinkError||j,H=U&&U.RuntimeError||j,q=s("DOMException"),G=s("Set"),z=s("Map"),W=z.prototype,V=c(W.has),Y=c(W.get),K=c(W.set),J=c(G.prototype.add),Z=s("Object","keys"),Q=c([].push),ee=c((!0).valueOf),te=c(1..valueOf),re=c("".valueOf),ne=c(E.prototype.getTime),ae=l("structuredClone"),ie="DataCloneError",oe="Transferring",se=function(e){return!u((function(){var t=new o.Set([7]),r=e(t),n=e(I(7));return r==t||!r.has(7)||"object"!=typeof n||7!=n}))&&e},ce=function(e,t){return!u((function(){var r=new t,n=e({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof t&&n.a.stack===r.stack)}))},ue=o.structuredClone,le=a||!ce(ue,j)||!ce(ue,q)||(n=ue,!!u((function(){var e=n(new o.AggregateError([1],ae,{cause:3}));return"AggregateError"!=e.name||1!=e.errors[0]||e.message!=ae||3!=e.cause}))),fe=!ue&&se((function(e){return new B(ae,{detail:e}).detail})),he=se(ue)||fe,de=function(e){throw new q("Uncloneable type: "+e,ie)},pe=function(e,t){throw new q((t||"Cloning")+" of "+e+" cannot be properly polyfilled in this engine",ie)},ge=function(e,t){if(g(e)&&de("Symbol"),!p(e))return e;if(t){if(V(t,e))return Y(t,e)}else t=new z;var r,n,a,i,c,u,l,h,d,v,y=m(e),x=!1;switch(y){case"Array":a=[],x=!0;break;case"Object":a={},x=!0;break;case"Map":a=new z,x=!0;break;case"Set":a=new G,x=!0;break;case"RegExp":a=new RegExp(e.source,O(e));break;case"Error":switch(n=e.name){case"AggregateError":a=s("AggregateError")([]);break;case"EvalError":a=M();break;case"RangeError":a=_();break;case"ReferenceError":a=L();break;case"SyntaxError":a=R();break;case"TypeError":a=N();break;case"URIError":a=D();break;case"CompileError":a=$();break;case"LinkError":a=X();break;case"RuntimeError":a=H();break;default:a=j()}x=!0;break;case"DOMException":a=new q(e.message,e.name),x=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[y],p(r)||pe(y),a=new r(ge(e.buffer,t),e.byteOffset,"DataView"===y?e.byteLength:e.length);break;case"DOMQuad":try{a=new DOMQuad(ge(e.p1,t),ge(e.p2,t),ge(e.p3,t),ge(e.p4,t))}catch(t){he?a=he(e):pe(y)}break;case"FileList":if(i=function(){var e;try{e=new o.DataTransfer}catch(t){try{e=new o.ClipboardEvent("").clipboardData}catch(e){}}return e&&e.items&&e.files?e:null}()){for(c=0,u=S(e);c92||T&&C>94||F&&C>97)return!1;var e=new ArrayBuffer(8),t=ue(e,{transfer:[e]});return 0!=e.byteLength||8!=t.byteLength}));i({global:!0,enumerable:!0,sham:!ve,forced:le},{structuredClone:function(e){var t,r=x(arguments.length,1)>1&&!d(arguments[1])?y(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(e,t){if(!p(e))throw N("Transfer option cannot be converted to a sequence");var r=[];v(e,(function(e){Q(r,y(e))}));var n,a,i,s,c,u,l=0,d=S(r);if(ve)for(s=ue(r,{transfer:r});l{var n=r(18),a=r(11),i=r(25),o=r(83),s=r(28),c=r(55),u=function(){},l=[],f=s("Reflect","construct"),h=/^\\s*(?:class|function)\\b/,d=n(h.exec),p=!h.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,l,e),!0}catch(e){return!1}},v=function(e){if(!i(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(h,c(e))}catch(e){return!0}};v.sham=!0,e.exports=!f||a((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?v:g},e=>{var t=TypeError;e.exports=function(e,r){if(e{var n=r(12),a=r(43),i=r(29),o=r(128),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||a(e,"flags")||!i(s,e)?t:n(o,e)}},(e,t,r)=>{var n=r(51);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},(e,t,r)=>{var n=r(11),a=r(15);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",a(1,7)),7!==e.stack)}))},(e,t,r)=>{var n=r(131),a=r(132);e.exports=!n&&!a&&"object"==typeof window&&"object"==typeof document},e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(e,t,r)=>{var n=r(19),a=r(8);e.exports="process"==n(a.process)},(e,t,r)=>{var n=r(8);e.exports=n},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RefSetCache=t.RefSet=t.Ref=t.Name=t.EOF=t.Dict=t.Cmd=t.CIRCULAR_REF=void 0,t.clearPrimitiveCaches=function(){b._clearCache(),y._clearCache(),x._clearCache()},t.isCmd=function(e,t){return e instanceof b&&(void 0===t||e.cmd===t)},t.isDict=function(e,t){return e instanceof k&&(void 0===t||C(e.get("Type"),t))},t.isName=C,t.isRefsEqual=function(e,t){return e.num===t.num&&e.gen===t.gen};var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null;f(this,e),this._map=Object.create(null),this.xref=t,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=w}var t,r;return d(e,[{key:"assignXref",value:function(e){this.xref=e}},{key:"size",get:function(){return Object.keys(this._map).length}},{key:"get",value:function(e,t,r){var n=this._map[e];return void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref?this.xref.fetch(n,this.suppressEncryption):n}},{key:"getAsync",value:(t=u().mark((function e(t,r,n){var a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===(a=this._map[t])&&void 0!==r&&void 0===(a=this._map[r])&&void 0!==n&&(a=this._map[n]),!(a instanceof x&&this.xref)){e.next=4;break}return e.abrupt("return",this.xref.fetchAsync(a,this.suppressEncryption));case 4:return e.abrupt("return",a);case 5:case"end":return e.stop()}}),e,this)})),r=function(){var e=this,r=arguments;return new Promise((function(n,a){var i=t.apply(e,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))},function(e,t,n){return r.apply(this,arguments)})},{key:"getArray",value:function(e,t,r){var n=this._map[e];if(void 0===n&&void 0!==t&&void 0===(n=this._map[t])&&void 0!==r&&(n=this._map[r]),n instanceof x&&this.xref&&(n=this.xref.fetch(n,this.suppressEncryption)),Array.isArray(n))for(var a=0,i=(n=n.slice()).length;a0&&(u._map[S]=A)}else u._map[S]=x[0]}}catch(e){w.e(e)}finally{w.f()}return l.clear(),u.size>0?u:e.empty}}]),e}();t.Dict=k;var S,x=(S=Object.create(null),function(){function e(t,r){f(this,e),this.num=t,this.gen=r}return d(e,[{key:"toString",value:function(){return 0===this.gen?"".concat(this.num,"R"):"".concat(this.num,"R").concat(this.gen)}}],[{key:"get",value:function(t,r){var n=0===r?"".concat(t,"R"):"".concat(t,"R").concat(r);return S[n]||(S[n]=new e(t,r))}},{key:"_clearCache",value:function(){S=Object.create(null)}}]),e}());t.Ref=x;var O=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;f(this,t),this._set=new Set(e&&e._set)}return d(t,[{key:"has",value:function(e){return this._set.has(e.toString())}},{key:"put",value:function(e){this._set.add(e.toString())}},{key:"remove",value:function(e){this._set.delete(e.toString())}},{key:Symbol.iterator,value:function(){return this._set.values()}},{key:"clear",value:function(){this._set.clear()}}]),t}();t.RefSet=O;var A=function(e){function t(){f(this,t),this._map=new Map}return d(t,[{key:"size",get:function(){return this._map.size}},{key:"get",value:function(e){return this._map.get(e.toString())}},{key:"has",value:function(e){return this._map.has(e.toString())}},{key:"put",value:function(e,t){this._map.set(e.toString(),t)}},{key:"putAlias",value:function(e,t){this._map.set(e.toString(),this.get(t))}},{key:Symbol.iterator,value:function(){return this._map.values()}},{key:"clear",value:function(){this._map.clear()}}]),t}();function C(e,t){return e instanceof y&&(void 0===t||e.name===t)}t.RefSetCache=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XRefParseException=t.XRefEntryException=t.ParserEOFException=t.PDF_VERSION_REGEXP=t.MissingDataException=t.DocStats=void 0,t.collectActions=function(e,t,r){var n=Object.create(null),o=S({dict:t,key:"AA",stopWhenFound:!1});if(o)for(var c=o.length-1;c>=0;c--){var u=o[c];if(u instanceof i.Dict){var l,f=s(u.getKeys());try{for(f.s();!(l=f.n()).done;){var h=l.value,d=r[h];if(d){var p=u.getRaw(h),g=new i.RefSet,v=[];O(p,e,v,g),v.length>0&&(n[d]=v)}}}catch(e){f.e(e)}finally{f.f()}}}if(t.has("A")){var y=[];O(t.get("A"),e,y,new i.RefSet),y.length>0&&(n.Action=y)}return(0,a.objectSize)(n)>0?n:null},t.encodeToXmlString=function(e){for(var t=[],r=0,n=0,a=e.length;n55295&&(i<57344||i>65533)&&n++,r=n+1}return 0===t.length?e:(r126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i)&&(r0?n:null},t.getRotationMatrix=function(e,t,r){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,r];case 270:return[0,-1,1,0,0,r];default:throw new Error("Invalid rotation")}},t.isAscii=function(e){return/^[\\x00-\\x7F]*$/.test(e)},t.isWhiteSpace=function(e){return 32===e||9===e||13===e||10===e},t.log2=function(e){return e<=0?0:Math.ceil(Math.log2(e))},t.numberToString=function(e){if(Number.isInteger(e))return e.toString();var t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)},t.parseXFAPath=function(e){var t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((function(e){var r=e.match(t);return r?{name:r[1],pos:parseInt(r[2],10)}:{name:e,pos:0}}))},t.readInt8=function(e,t){return e[t]<<24>>24},t.readUint16=function(e,t){return e[t]<<8|e[t+1]},t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0},t.recoverJsURL=function(e){var t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").split(".").join("\\\\.")+")\\\\((?:'|\\")([^'\\"]*)(?:'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);if(t&&t[2]){var r=t[2],n=!1;return"true"===t[3]&&"app.launchURL"===t[1]&&(n=!0),{url:r,newWindow:n}}return null},t.stringToUTF16HexString=function(e){for(var t=[],r=0,n=e.length;r>8&255).toString(16).padStart(2,"0"),(255&a).toString(16).padStart(2,"0"))}return t.join("")},t.stringToUTF16String=function(e){var t=[];arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&t.push("þÿ");for(var r=0,n=e.length;r>8&255),String.fromCharCode(255&a))}return t.join("")},t.toRomanNumerals=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(Number.isInteger(e)&&e>0,"The number should be a positive integer.");for(var r,n=[];e>=1e3;)e-=1e3,n.push("M");r=e/100|0,e%=100,n.push(x[r]),r=e/10|0,e%=10,n.push(x[10+r]),n.push(x[20+e]);var i=n.join("");return t?i.toLowerCase():i},t.validateCSSFont=function(e){var t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),r=e.fontFamily,n=e.fontWeight,i=e.italicAngle;if(/^".*"$/.test(r)){if(/[^\\\\]"/.test(r.slice(1,r.length-1)))return(0,a.warn)('XFA - FontFamily contains some unescaped ": '.concat(r,".")),!1}else if(/^'.*'$/.test(r)){if(/[^\\\\]'/.test(r.slice(1,r.length-1)))return(0,a.warn)("XFA - FontFamily contains some unescaped ': ".concat(r,".")),!1}else{var o,c=s(r.split(/[ \\t]+/));try{for(c.s();!(o=c.n()).done;){var u=o.value;if(/^(\\d|(-(\\d|-)))/.test(u)||!/^[\\w-\\\\]+$/.test(u))return(0,a.warn)("XFA - FontFamily contains some invalid : ".concat(r,".")),!1}}catch(e){c.e(e)}finally{c.f()}}var l=n?n.toString():"";e.fontWeight=t.has(l)?l:"400";var f=parseFloat(i);return e.italicAngle=isNaN(f)||f<-90||f>90?"14":i.toString(),!0};var a=r(2),i=r(134),o=r(136);function s(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStream=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.NetworkPdfManager=t.LocalPdfManager=void 0;var n=r(2),a=r(138),i=r(135),o=r(140),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=h(e);if(t){var a=h(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===d(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return f(e)}(this,r)}}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(){p=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==d(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function g(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function v(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){g(i,n,a,o,s,"next",e)}function s(e){g(i,n,a,o,s,"throw",e)}o(void 0)}))}}function y(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return this.pdfDocument.cleanup(e)}},{key:"ensure",value:(t=v(p().mark((function e(t,r,a){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(0,n.unreachable)("Abstract method \`ensure\` called");case 1:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){(0,n.unreachable)("Abstract method \`requestRange\` called")}},{key:"requestLoadedStream",value:function(){(0,n.unreachable)("Abstract method \`requestLoadedStream\` called")}},{key:"sendProgressiveData",value:function(e){(0,n.unreachable)("Abstract method \`sendProgressiveData\` called")}},{key:"updatePassword",value:function(e){this._password=e}},{key:"terminate",value:function(e){(0,n.unreachable)("Abstract method \`terminate\` called")}}]),e}(),S=function(e){c(n,e);var t,r=l(n);function n(e,t,a,i,c,u,l){var h;y(this,n),(h=r.call(this))._docId=e,h._password=a,h._docBaseUrl=w(l),h.msgHandler=i,h.evaluatorOptions=c,h.enableXfa=u;var d=new s.Stream(t);return h.pdfDocument=new o.PDFDocument(f(h),d),h._loadedStreamPromise=Promise.resolve(d),h}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("function"!=typeof(a=t[r])){e.next=3;break}return e.abrupt("return",a.apply(t,n));case 3:return e.abrupt("return",a);case 4:case"end":return e.stop()}}),e)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return Promise.resolve()}},{key:"requestLoadedStream",value:function(){return this._loadedStreamPromise}},{key:"terminate",value:function(e){}}]),n}(k);t.LocalPdfManager=S;var x=function(e){c(n,e);var t,r=l(n);function n(e,t,i,s,c,u){var l;return y(this,n),(l=r.call(this))._docId=e,l._password=i.password,l._docBaseUrl=w(u),l.msgHandler=i.msgHandler,l.evaluatorOptions=s,l.enableXfa=c,l.streamManager=new a.ChunkedStreamManager(t,{msgHandler:i.msgHandler,length:i.length,disableAutoFetch:i.disableAutoFetch,rangeChunkSize:i.rangeChunkSize}),l.pdfDocument=new o.PDFDocument(f(l),l.streamManager.getStream()),l}return b(n,[{key:"ensure",value:(t=v(p().mark((function e(t,r,n){var a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,"function"!=typeof(a=t[r])){e.next=4;break}return e.abrupt("return",a.apply(t,n));case 4:return e.abrupt("return",a);case 7:if(e.prev=7,e.t0=e.catch(0),e.t0 instanceof i.MissingDataException){e.next=11;break}throw e.t0;case 11:return e.next=13,this.requestRange(e.t0.begin,e.t0.end);case 13:return e.abrupt("return",this.ensure(t,r,n));case 14:case"end":return e.stop()}}),e,this,[[0,7]])}))),function(e,r,n){return t.apply(this,arguments)})},{key:"requestRange",value:function(e,t){return this.streamManager.requestRange(e,t)}},{key:"requestLoadedStream",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.streamManager.requestAllChunks(e)}},{key:"sendProgressiveData",value:function(e){this.streamManager.onReceiveData({chunk:e})}},{key:"terminate",value:function(e){this.streamManager.abort(e)}}]),n}(k);t.NetworkPdfManager=x},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ChunkedStreamManager=t.ChunkedStream=void 0;var a=r(2),i=r(135);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.end?this.numChunks:Math.floor(t/this.chunkSize),a=r;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new i.MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}}},{key:"ensureRange",value:function(e,t){if(!(e>=t||t<=this.progressiveDataLength)){var r=Math.floor(e/this.chunkSize);if(!(r>this.numChunks))for(var n=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks),a=r;a=this.end?-1:(e>=this.progressiveDataLength&&this.ensureByte(e),this.bytes[this.pos++])}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return n>this.progressiveDataLength&&this.ensureRange(r,n),t.subarray(r,n);var a=r+e;return a>n&&(a=n),a>this.progressiveDataLength&&this.ensureRange(r,a),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(e,t),this.bytes.subarray(e,t)}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;function n(){}t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e),n.prototype=Object.create(this),n.prototype.getMissingChunks=function(){for(var e=this.chunkSize,t=Math.floor(this.start/e),r=Math.floor((this.end-1)/e)+1,n=[],a=t;a0&&void 0!==arguments[0]&&arguments[0])){var e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}},{key:"_requestChunks",value:function(e){var t=this,r=this.currRequestId++,n=new Set;this._chunksNeededByRequest.set(r,n);var i,s=o(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;this.stream.hasChunk(c)||n.add(c)}}catch(e){s.e(e)}finally{s.f()}if(0===n.size)return Promise.resolve();var u=(0,a.createPromiseCapability)();this._promisesByRequest.set(r,u);var l,f=[],h=o(n);try{for(h.s();!(l=h.n()).done;){var d=l.value,p=this._requestsByChunk.get(d);p||(p=[],this._requestsByChunk.set(d,p),f.push(d)),p.push(r)}}catch(e){h.e(e)}finally{h.f()}if(f.length>0){var g,v=o(this.groupChunks(f));try{for(v.s();!(g=v.n()).done;){var y=g.value,m=y.beginChunk*this.chunkSize,b=Math.min(y.endChunk*this.chunkSize,this.length);this.sendRequest(m,b).catch(u.reject)}}catch(e){v.e(e)}finally{v.f()}}return u.promise.catch((function(e){if(!t.aborted)throw e}))}},{key:"getStream",value:function(){return this.stream}},{key:"requestRange",value:function(e,t){t=Math.min(t,this.length);for(var r=this.getBeginChunk(e),n=this.getEndChunk(t),a=[],i=r;i0&&void 0!==arguments[0]?arguments[0]:[]);try{for(r.s();!(e=r.n()).done;)for(var n=e.value,a=this.getBeginChunk(n.begin),i=this.getEndChunk(n.end),s=a;s=0&&n+1!==o&&(t.push({beginChunk:r,endChunk:n+1}),r=o),a+1===e.length&&t.push({beginChunk:r,endChunk:o+1}),n=o}return t}},{key:"onProgress",value:function(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}},{key:"onReceiveData",value:function(e){var t=e.chunk,r=void 0===e.begin,n=r?this.progressiveDataLength:e.begin,a=n+t.byteLength,i=Math.floor(n/this.chunkSize),s=a0||c.push(d)}}catch(e){h.e(e)}finally{h.f()}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){var g;if(1===this.stream.numChunksLoaded){var v=this.stream.numChunks-1;this.stream.hasChunk(v)||(g=v)}else g=this.stream.nextEmptyChunk(s);Number.isInteger(g)&&this._requestChunks([g])}for(var y=0,m=c;y{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StringStream=t.Stream=t.NullStream=void 0;var a=r(136),i=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r=this.end?-1:this.bytes[this.pos++]}},{key:"getBytes",value:function(e){var t=this.bytes,r=this.pos,n=this.end;if(!e)return t.subarray(r,n);var a=r+e;return a>n&&(a=n),this.pos=a,t.subarray(r,a)}},{key:"getByteRange",value:function(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),this.bytes.subarray(e,t)}},{key:"reset",value:function(){this.pos=this.start}},{key:"moveStart",value:function(){this.start=this.pos}},{key:"makeSubStream",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return new r(this.bytes.buffer,e,t,n)}}]),r}(a.BaseStream);t.Stream=d;var p=function(e){u(r,e);var t=f(r);function r(e){return o(this,r),t.call(this,(0,i.stringToBytes)(e))}return c(r)}(d);t.StringStream=p;var g=function(e){u(r,e);var t=f(r);function r(){return o(this,r),t.call(this,new Uint8Array(0))}return c(r)}(d);t.NullStream=g},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Page=t.PDFDocument=void 0;var n=r(141),a=r(2),i=r(135),o=r(134),s=r(180),c=r(136),u=r(196),l=r(198),f=r(200),h=r(229),d=r(146),p=r(139),g=r(204),v=r(191),y=r(144),m=r(148),b=r(203),w=r(194),k=r(205),S=r(230);function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||P(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(){A=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==x(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function C(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||P(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=P(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function P(e,t){if(e){if("string"==typeof e)return T(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?T(e,t):void 0}}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1],r=(0,i.getInheritableProperty)({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(r)?1!==r.length&&r[0]instanceof o.Dict?o.Dict.merge({xref:this.xref,dictArray:r}):r[0]:r}},{key:"content",get:function(){return this.pageDict.getArray("Contents")}},{key:"resources",get:function(){var e=this._getInheritableProperty("Resources");return(0,a.shadow)(this,"resources",e instanceof o.Dict?e:o.Dict.empty)}},{key:"_getBoundingBox",value:function(e){if(this.xfaData)return this.xfaData.bbox;var t=this._getInheritableProperty(e,!0);if(Array.isArray(t)&&4===t.length){if((t=a.Util.normalizeRect(t))[2]-t[0]>0&&t[3]-t[1]>0)return t;(0,a.warn)("Empty, or invalid, /".concat(e," entry."))}return null}},{key:"mediaBox",get:function(){return(0,a.shadow)(this,"mediaBox",this._getBoundingBox("MediaBox")||N)}},{key:"cropBox",get:function(){return(0,a.shadow)(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}},{key:"userUnit",get:function(){var e=this.pageDict.get("UserUnit");return("number"!=typeof e||e<=0)&&(e=1),(0,a.shadow)(this,"userUnit",e)}},{key:"view",get:function(){var e=this.cropBox,t=this.mediaBox;if(e!==t&&!(0,a.isArrayEqual)(e,t)){var r=a.Util.intersect(e,t);if(r&&r[2]-r[0]>0&&r[3]-r[1]>0)return(0,a.shadow)(this,"view",r);(0,a.warn)("Empty /CropBox and /MediaBox intersection.")}return(0,a.shadow)(this,"view",t)}},{key:"rotate",get:function(){var e=this._getInheritableProperty("Rotate")||0;return e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360),(0,a.shadow)(this,"rotate",e)}},{key:"_onSubStreamError",value:function(e,t,r){if(this.evaluatorOptions.ignoreErrors)return e.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorContentSubStream}),void(0,a.warn)("getContentStream - ignoring sub-stream (".concat(r,'): "').concat(t,'".'));throw t}},{key:"getContentStream",value:function(e){var t=this;return this.pdfManager.ensure(this,"content").then((function(r){return r instanceof c.BaseStream?r:Array.isArray(r)?new m.StreamsSequenceStream(r,t._onSubStreamError.bind(t,e)):new p.NullStream}))}},{key:"xfaData",get:function(){return(0,a.shadow)(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}},{key:"saveNewAnnotations",value:(s=E(A().mark((function e(t,r,a){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.xfaFactory){e.next=2;break}throw new Error("XFA: Cannot save new annotations.");case 2:return i=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),o=this.pageDict,s=this.annotations.slice(),e.next=7,n.AnnotationFactory.saveNewAnnotations(i,r,a);case 7:c=e.sent,u=F(c.annotations);try{for(u.s();!(l=u.n()).done;)f=l.value.ref,s.push(f)}catch(e){u.e(e)}finally{u.f()}return h=o.get("Annots"),o.set("Annots",s),d=[],p=null,this.xref.encrypt&&(p=this.xref.encrypt.createCipherTransform(this.ref.num,this.ref.gen)),(0,w.writeObject)(this.ref,o,d,p),h&&o.set("Annots",h),(g=c.dependencies).push.apply(g,[{ref:this.ref,data:d.join("")}].concat(C(c.annotations))),e.abrupt("return",g);case 20:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return s.apply(this,arguments)})},{key:"save",value:function(e,t,r){var n=new y.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){var i,o=[],s=F(e);try{for(s.s();!(i=s.n()).done;){var c=i.value;c.mustBePrinted(r)&&o.push(c.save(n,t,r).catch((function(e){return(0,a.warn)("save - ignoring annotation data during "+'"'.concat(t.name,'" task: "').concat(e,'".')),null})))}}catch(e){s.e(e)}finally{s.f()}return Promise.all(o).then((function(e){return e.filter((function(e){return!!e}))}))}))}},{key:"loadResources",value:function(e){var t=this;return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then((function(){return new g.ObjectLoader(t.resources,e,t.xref).load()}))}},{key:"getOperatorList",value:function(e){var t=this,r=e.handler,o=e.sink,s=e.task,c=e.intent,u=e.cacheKey,l=e.annotationStorage,f=void 0===l?null:l,h=this.getContentStream(r),d=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),p=new y.PartialEvaluator({xref:this.xref,handler:r,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions}),g=this.xfaFactory?null:(0,i.getNewAnnotationsMap)(f),m=Promise.resolve(null);if(g){var b=g.get(this.pageIndex);b&&(m=n.AnnotationFactory.printNewAnnotations(p,s,b))}var w=Promise.all([h,d]).then((function(e){var n=O(e,1)[0],a=new v.OperatorList(c,o);return r.send("StartRenderPage",{transparency:p.hasBlendModes(t.resources,t.nonBlendModesSet),pageIndex:t.pageIndex,cacheKey:u}),p.getOperatorList({stream:n,task:s,resources:t.resources,operatorList:a}).then((function(){return a}))}));return Promise.all([w,this._parsedAnnotations,m]).then((function(e){var t=O(e,3),r=t[0],n=t[1],i=t[2];if(i&&(n=n.concat(i)),0===n.length||c&a.RenderingIntentFlag.ANNOTATIONS_DISABLE)return r.flush(!0),{length:r.totalLength};var o,u=!!(c&a.RenderingIntentFlag.ANNOTATIONS_FORMS),l=!!(c&a.RenderingIntentFlag.ANY),h=!!(c&a.RenderingIntentFlag.DISPLAY),d=!!(c&a.RenderingIntentFlag.PRINT),g=[],v=F(n);try{for(v.s();!(o=v.n()).done;){var y=o.value;(l||h&&y.mustBeViewed(f)||d&&y.mustBePrinted(f))&&g.push(y.getOperatorList(p,s,c,u,f).catch((function(e){return(0,a.warn)("getOperatorList - ignoring annotation data during "+'"'.concat(s.name,'" task: "').concat(e,'".')),{opList:null,separateForm:!1,separateCanvas:!1}})))}}catch(e){v.e(e)}finally{v.f()}return Promise.all(g).then((function(e){var t,n=!1,a=!1,i=F(e);try{for(i.s();!(t=i.n()).done;){var o=t.value,s=o.opList,c=o.separateForm,u=o.separateCanvas;r.addOpList(s),c&&(n=c),u&&(a=u)}}catch(e){i.e(e)}finally{i.f()}return r.flush(!0,{form:n,canvas:a}),{length:r.totalLength}}))}))}},{key:"extractTextContent",value:function(e){var t=this,r=e.handler,n=e.task,a=e.includeMarkedContent,i=e.sink,o=e.combineTextItems,s=this.getContentStream(r),c=this.loadResources(["ExtGState","Font","Properties","XObject"]);return Promise.all([s,c]).then((function(e){var s=O(e,1)[0];return new y.PartialEvaluator({xref:t.xref,handler:r,pageIndex:t.pageIndex,idFactory:t._localIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,options:t.evaluatorOptions}).getTextContent({stream:s,task:n,resources:t.resources,includeMarkedContent:a,combineTextItems:o,sink:i,viewBox:t.view})}))}},{key:"getStructTree",value:(r=E(A().mark((function e(){var t,r;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.pdfManager.ensureCatalog("structTreeRoot");case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",null);case 5:return e.next=7,this.pdfManager.ensure(this,"_parseStructTree",[t]);case 7:return r=e.sent,e.abrupt("return",r.serializable);case 9:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_parseStructTree",value:function(e){var t=new b.StructTreePage(e,this.pageDict);return t.parse(),t}},{key:"getAnnotationsData",value:(t=E(A().mark((function e(t,r,n){var i,o,s,c,u,l,f,h,d,p,g;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._parsedAnnotations;case 2:if(0!==(i=e.sent).length){e.next=5;break}return e.abrupt("return",[]);case 5:o=[],s=[],u=!!(n&a.RenderingIntentFlag.ANY),l=!!(n&a.RenderingIntentFlag.DISPLAY),f=!!(n&a.RenderingIntentFlag.PRINT),h=F(i);try{for(h.s();!(d=h.n()).done;)p=d.value,((g=u||l&&p.viewable)||f&&p.printable)&&s.push(p.data),p.hasTextContent&&g&&(c||(c=new y.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,options:this.evaluatorOptions})),o.push(p.extractTextContent(c,r,this.view).catch((function(e){(0,a.warn)('getAnnotationsData - ignoring textContent during "'.concat(r.name,'" task: "').concat(e,'".'))}))))}catch(e){h.e(e)}finally{h.f()}return e.next=12,Promise.all(o);case 12:return e.abrupt("return",s);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"annotations",get:function(){var e=this._getInheritableProperty("Annots");return(0,a.shadow)(this,"annotations",Array.isArray(e)?e:[])}},{key:"_parsedAnnotations",get:function(){var e=this,t=this.pdfManager.ensure(this,"annotations").then((function(){var t,r=[],i=F(e.annotations);try{for(i.s();!(t=i.n()).done;){var o=t.value;r.push(n.AnnotationFactory.create(e.xref,o,e.pdfManager,e._localIdFactory,!1).catch((function(e){return(0,a.warn)('_parsedAnnotations: "'.concat(e,'".')),null})))}}catch(e){i.e(e)}finally{i.f()}return Promise.all(r).then((function(e){if(0===e.length)return e;var t,r,a=[],i=F(e);try{for(i.s();!(r=i.n()).done;){var o=r.value;o&&(o instanceof n.PopupAnnotation?(t||(t=[]),t.push(o)):a.push(o))}}catch(e){i.e(e)}finally{i.f()}return t&&a.push.apply(a,C(t)),a}))}));return(0,a.shadow)(this,"_parsedAnnotations",t)}},{key:"jsActions",get:function(){var e=(0,i.collectActions)(this.xref,this.pageDict,a.PageActionEventType);return(0,a.shadow)(this,"jsActions",e)}}]),e}();t.Page=D;var B=new Uint8Array([37,80,68,70,45]),U=new Uint8Array([115,116,97,114,116,120,114,101,102]),$=new Uint8Array([101,110,100,111,98,106]);function X(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1024,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=t.length,i=e.peekBytes(r),o=i.length-a;if(o<=0)return!1;if(n)for(var s=a-1,c=i.length-1;c>=s;){for(var u=0;u=a)return e.pos+=c-s,!0;c--}else for(var l=0;l<=o;){for(var f=0;f=a)return e.pos+=l,!0;l++}return!1}var H=function(){function e(t,r){if(_(this,e),r.length<=0)throw new a.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=t,this.stream=r,this.xref=new S.XRef(r,t),this._pagePromises=new Map,this._version=null;var n={font:0};this._globalIdFactory=function(){function e(){_(this,e)}return R(e,null,[{key:"getDocId",value:function(){return"g_".concat(t.docId)}},{key:"createFontId",value:function(){return"f".concat(++n.font)}},{key:"createObjId",value:function(){(0,a.unreachable)("Abstract method \`createObjId\` called.")}},{key:"getPageObjId",value:function(){(0,a.unreachable)("Abstract method \`getPageObjId\` called.")}}]),e}()}var t,r,p,m,b,w,C,P;return R(e,[{key:"parse",value:function(e){this.xref.parse(e),this.catalog=new l.Catalog(this.pdfManager,this.xref)}},{key:"linearization",get:function(){var e=null;try{e=d.Linearization.create(this.stream)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)(e)}return(0,a.shadow)(this,"linearization",e)}},{key:"startXRef",get:function(){var e=this.stream,t=0;if(this.linearization)e.reset(),X(e,$)&&(t=e.pos+6-e.start);else{for(var r=U.length,n=!1,o=e.end;!n&&o>0;)(o-=1024-r)<0&&(o=0),e.pos=o,n=X(e,U,1024,!0);if(n){var s;e.skip(9);do{s=e.getByte()}while((0,i.isWhiteSpace)(s));for(var c="";s>=32&&s<=57;)c+=String.fromCharCode(s),s=e.getByte();t=parseInt(c,10),isNaN(t)&&(t=0)}}return(0,a.shadow)(this,"startXRef",t)}},{key:"checkHeader",value:function(){var e=this.stream;if(e.reset(),X(e,B)){e.moveStart(),e.skip(B.length);for(var t,r="";(t=e.getByte())>32&&r.length<7;)r+=String.fromCharCode(t);i.PDF_VERSION_REGEXP.test(r)?this._version=r:(0,a.warn)("Invalid PDF header version: ".concat(r))}}},{key:"parseStartXRef",value:function(){this.xref.setStartXRef(this.startXRef)}},{key:"numPages",get:function(){var e;return e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages,(0,a.shadow)(this,"numPages",e)}},{key:"_hasOnlyDocumentSignatures",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return!!Array.isArray(e)&&e.every((function(e){if(!((e=t.xref.fetchIfRef(e))instanceof o.Dict))return!1;if(e.has("Kids"))return++r>10?((0,a.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):t._hasOnlyDocumentSignatures(e.get("Kids"),r);var n=(0,o.isName)(e.get("FT"),"Sig"),i=e.get("Rect"),s=Array.isArray(i)&&i.every((function(e){return 0===e}));return n&&s}))}},{key:"_xfaStreams",get:function(){var e=this.catalog.acroForm;if(!e)return null;var t=e.get("XFA"),r={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof c.BaseStream&&!t.isEmpty)return r["xdp:xdp"]=t,r;if(!Array.isArray(t)||0===t.length)return null;for(var n=0,a=t.length;n0;e.hasFields=n;var o=t.get("XFA");e.hasXfa=Array.isArray(o)&&o.length>0||o instanceof c.BaseStream&&!o.isEmpty;var s=!!(1&t.get("SigFlags")),u=s&&this._hasOnlyDocumentSignatures(r);e.hasAcroForm=n&&!u,e.hasSignatures=s}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.warn)('Cannot fetch form information: "'.concat(e,'".'))}return(0,a.shadow)(this,"formInfo",e)}},{key:"documentInfo",get:function(){var e,t={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};try{e=this.xref.trailer.get("Info")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,a.info)("The document information dictionary is invalid.")}if(!(e instanceof o.Dict))return(0,a.shadow)(this,"documentInfo",t);var r,n=F(e.getKeys());try{for(n.s();!(r=n.n()).done;){var s=r.value,c=e.get(s);switch(s){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof c){t[s]=(0,a.stringToPDFString)(c);continue}break;case"Trapped":if(c instanceof o.Name){t[s]=c;continue}break;default:var u=void 0;switch(x(c)){case"string":u=(0,a.stringToPDFString)(c);break;case"number":case"boolean":u=c;break;default:c instanceof o.Name&&(u=c)}if(void 0===u){(0,a.warn)('Bad value, for custom key "'.concat(s,'", in Info: ').concat(c,"."));continue}t.Custom||(t.Custom=Object.create(null)),t.Custom[s]=u;continue}(0,a.warn)('Bad value, for key "'.concat(s,'", in Info: ').concat(c,"."))}}catch(e){n.e(e)}finally{n.f()}return(0,a.shadow)(this,"documentInfo",t)}},{key:"fingerprints",get:function(){function e(e){return"string"==typeof e&&e.length>0&&"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"!==e}function t(e){var t,r=[],n=F(e);try{for(n.s();!(t=n.n()).done;){var a=t.value.toString(16);r.push(a.padStart(2,"0"))}}catch(e){n.e(e)}finally{n.f()}return r.join("")}var r,n,i=this.xref.trailer.get("ID");return Array.isArray(i)&&e(i[0])?(r=(0,a.stringToBytes)(i[0]),i[1]!==i[0]&&e(i[1])&&(n=(0,a.stringToBytes)(i[1]))):r=(0,u.calculateMD5)(this.stream.getByteRange(0,1024),0,1024),(0,a.shadow)(this,"fingerprints",[t(r),n?t(n):null])}},{key:"_getLinearizationPage",value:(b=E(A().mark((function e(t){var r,n,i,s,c,u;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.catalog,n=this.linearization,i=this.xref,s=o.Ref.get(n.objectNumberFirst,0),e.prev=2,e.next=5,i.fetchAsync(s);case 5:if(!((c=e.sent)instanceof o.Dict)){e.next=16;break}if(!((u=c.getRaw("Type"))instanceof o.Ref)){e.next=12;break}return e.next=11,i.fetchAsync(u);case 11:u=e.sent;case 12:if(!(0,o.isName)(u,"Page")&&(c.has("Type")||c.has("Kids"))){e.next=16;break}return r.pageKidsCountCache.has(s)||r.pageKidsCountCache.put(s,1),r.pageIndexCache.has(s)||r.pageIndexCache.put(s,0),e.abrupt("return",[c,s]);case 16:throw new a.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.");case 19:return e.prev=19,e.t0=e.catch(2),(0,a.warn)('_getLinearizationPage: "'.concat(e.t0.message,'".')),e.abrupt("return",r.getPageDict(t));case 23:case"end":return e.stop()}}),e,this,[[2,19]])}))),function(e){return b.apply(this,arguments)})},{key:"getPage",value:function(e){var t=this,r=this._pagePromises.get(e);if(r)return r;var n,a=this.catalog,i=this.linearization,s=this.xfaFactory;return n=(n=s?Promise.resolve([o.Dict.empty,null]):i&&i.pageFirst===e?this._getLinearizationPage(e):a.getPageDict(e)).then((function(r){var n=O(r,2),i=n[0],o=n[1];return new D({pdfManager:t.pdfManager,xref:t.xref,pageIndex:e,pageDict:i,ref:o,globalIdFactory:t._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalImageCache:a.globalImageCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:s})})),this._pagePromises.set(e,n),n}},{key:"checkFirstPage",value:(m=E(A().mark((function e(){var t=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t.length>0&&void 0!==t[0]&&t[0])){e.next=3;break}return e.abrupt("return");case 3:return e.prev=3,e.next=6,this.getPage(0);case 6:e.next=15;break;case 8:if(e.prev=8,e.t0=e.catch(3),!(e.t0 instanceof i.XRefEntryException)){e.next=15;break}return this._pagePromises.delete(0),e.next=14,this.cleanup();case 14:throw new i.XRefParseException;case 15:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return m.apply(this,arguments)})},{key:"checkLastPage",value:(p=E(A().mark((function e(){var t,r,n,o,s,c,u,l,f,h,d,p,g,v=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=v.length>0&&void 0!==v[0]&&v[0],r=this.catalog,n=this.pdfManager,r.setActualNumPages(),e.prev=3,e.next=6,Promise.all([n.ensureDoc("xfaFactory"),n.ensureDoc("linearization"),n.ensureCatalog("numPages")]);case 6:if(!this.xfaFactory){e.next=10;break}return e.abrupt("return");case 10:o=this.linearization?this.linearization.numPages:r.numPages;case 11:if(Number.isInteger(o)){e.next=15;break}throw new a.FormatError("Page count is not an integer.");case 15:if(!(o<=1)){e.next=17;break}return e.abrupt("return");case 17:return e.next=19,this.getPage(o-1);case 19:e.next=44;break;case 21:return e.prev=21,e.t0=e.catch(3),this._pagePromises.delete(o-1),e.next=26,this.cleanup();case 26:if(!(e.t0 instanceof i.XRefEntryException)||t){e.next=28;break}throw new i.XRefParseException;case 28:return(0,a.warn)("checkLastPage - invalid /Pages tree /Count: ".concat(o,".")),e.prev=29,e.next=32,r.getAllPageDicts(t);case 32:s=e.sent,e.next=41;break;case 35:if(e.prev=35,e.t1=e.catch(29),!(e.t1 instanceof i.XRefEntryException)||t){e.next=39;break}throw new i.XRefParseException;case 39:return r.setActualNumPages(1),e.abrupt("return");case 41:c=F(s);try{for(c.s();!(u=c.n()).done;)l=O(u.value,2),f=l[0],h=O(l[1],2),d=h[0],p=h[1],g=void 0,d instanceof Error?(g=Promise.reject(d)).catch((function(){})):g=Promise.resolve(new D({pdfManager:n,xref:this.xref,pageIndex:f,pageDict:d,ref:p,globalIdFactory:this._globalIdFactory,fontCache:r.fontCache,builtInCMapCache:r.builtInCMapCache,standardFontDataCache:r.standardFontDataCache,globalImageCache:r.globalImageCache,nonBlendModesSet:r.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(f,g)}catch(e){c.e(e)}finally{c.f()}r.setActualNumPages(s.size);case 44:case"end":return e.stop()}}),e,this,[[3,21],[29,35]])}))),function(){return p.apply(this,arguments)})},{key:"fontFallback",value:function(e,t){return this.catalog.fontFallback(e,t)}},{key:"cleanup",value:(r=E(A().mark((function e(){var t,r=arguments;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.length>0&&void 0!==r[0]&&r[0],e.abrupt("return",this.catalog?this.catalog.cleanup(t):(0,f.clearGlobalCaches)());case 2:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"_collectFieldObjects",value:function(e,t,r){var i=this.xref.fetchIfRef(t);if(i.has("T")){var o=(0,a.stringToPDFString)(i.get("T"));e=""===e?o:"".concat(e,".").concat(o)}if(r.has(e)||r.set(e,[]),r.get(e).push(n.AnnotationFactory.create(this.xref,t,this.pdfManager,this._localIdFactory,!0).then((function(e){return e&&e.getFieldObject()})).catch((function(e){return(0,a.warn)('_collectFieldObjects: "'.concat(e,'".')),null}))),i.has("Kids")){var s,c=F(i.get("Kids"));try{for(c.s();!(s=c.n()).done;){var u=s.value;this._collectFieldObjects(e,u,r)}}catch(e){c.e(e)}finally{c.f()}}}},{key:"fieldObjects",get:function(){if(!this.formInfo.hasFields)return(0,a.shadow)(this,"fieldObjects",Promise.resolve(null));var e,t=Object.create(null),r=new Map,n=F(this.catalog.acroForm.get("Fields"));try{for(n.s();!(e=n.n()).done;){var i=e.value;this._collectFieldObjects("",i,r)}}catch(e){n.e(e)}finally{n.f()}var o,s=[],c=F(r);try{var u=function(){var e=O(o.value,2),r=e[0],n=e[1];s.push(Promise.all(n).then((function(e){(e=e.filter((function(e){return!!e}))).length>0&&(t[r]=e)})))};for(c.s();!(o=c.n()).done;)u()}catch(e){c.e(e)}finally{c.f()}return(0,a.shadow)(this,"fieldObjects",Promise.all(s).then((function(){return t})))}},{key:"hasJSActions",get:function(){var e=this.pdfManager.ensureDoc("_parseHasJSActions");return(0,a.shadow)(this,"hasJSActions",e)}},{key:"_parseHasJSActions",value:(t=E(A().mark((function e(){var t,r,n,a;return A().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);case 2:if(t=e.sent,r=O(t,2),n=r[0],a=r[1],!n){e.next=8;break}return e.abrupt("return",!0);case 8:if(!a){e.next=10;break}return e.abrupt("return",Object.values(a).some((function(e){return e.some((function(e){return null!==e.actions}))})));case 10:return e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"calculationOrderIds",get:function(){var e=this.catalog.acroForm;if(!e||!e.has("CO"))return(0,a.shadow)(this,"calculationOrderIds",null);var t=e.get("CO");if(!Array.isArray(t)||0===t.length)return(0,a.shadow)(this,"calculationOrderIds",null);var r,n=[],i=F(t);try{for(i.s();!(r=i.n()).done;){var s=r.value;s instanceof o.Ref&&n.push(s.toString())}}catch(e){i.e(e)}finally{i.f()}return 0===n.length?(0,a.shadow)(this,"calculationOrderIds",null):(0,a.shadow)(this,"calculationOrderIds",n)}}]),e}();t.PDFDocument=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PopupAnnotation=t.MarkupAnnotation=t.AnnotationFactory=t.AnnotationBorderStyle=t.Annotation=void 0,t.getQuadPoints=D;var n=r(2),a=r(135),i=r(142),o=r(134),s=r(194),c=r(136),u=r(189),l=r(198),f=r(143),h=r(201),d=r(204),p=r(191),g=r(139),v=r(205);function y(){return y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},y.apply(this,arguments)}function m(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&b(e,t)}function b(e,t){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},b(e,t)}function w(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=x(e);if(t){var a=x(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return k(this,r)}}function k(e,t){if(t&&("object"===O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return S(e)}function S(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function x(e){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},x(e)}function O(e){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},O(e)}function A(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=I(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function C(){C=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:k(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var g={};c(g,i,(function(){return this}));var v=Object.getPrototypeOf,y=v&&v(v(P([])));y&&y!==t&&r.call(y,i)&&(g=y);var m=p.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==O(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function F(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function P(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){F(i,n,a,o,s,"next",e)}function s(e){F(i,n,a,o,s,"throw",e)}o(void 0)}))}}function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||I(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(e,t):void 0}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r5&&void 0!==arguments[5]?arguments[5]:null,u=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,f=arguments.length>8&&void 0!==arguments[8]?arguments[8]:-1,h=e.fetchIfRef(t);if(h instanceof o.Dict){var d=t instanceof o.Ref?t.toString():"annot_".concat(i.createObjId()),p=h.get("Subtype");p=p instanceof o.Name?p.name:null;var g=s instanceof o.Dict?s:o.Dict.empty,v={xref:e,ref:t,dict:h,subtype:p,id:d,pdfManager:r,acroForm:g,attachments:c,xfaDatasets:u,collectFields:l,needAppearances:!l&&!0===g.get("NeedAppearances"),pageIndex:f,isOffscreenCanvasSupported:n.FeatureTest.isOffscreenCanvasSupported&&r.evaluatorOptions.isOffscreenCanvasSupported};switch(p){case"Link":return new Y(v);case"Text":return new V(v);case"Widget":var y=(0,a.getInheritableProperty)({dict:h,key:"FT"});switch(y=y instanceof o.Name?y.name:null){case"Tx":return new q(v);case"Btn":return new G(v);case"Ch":return new z(v);case"Sig":return new W(v)}return(0,n.warn)('Unimplemented widget field type "'.concat(y,'", ')+"falling back to base field type."),new H(v);case"Popup":return new K(v);case"FreeText":return new J(v);case"Line":return new Z(v);case"Square":return new Q(v);case"Circle":return new ee(v);case"PolyLine":return new te(v);case"Polygon":return new re(v);case"Caret":return new ne(v);case"Ink":return new ae(v);case"Highlight":return new ie(v);case"Underline":return new oe(v);case"Squiggly":return new se(v);case"StrikeOut":return new ce(v);case"Stamp":return new ue(v);case"FileAttachment":return new le(v);default:return l||(p?(0,n.warn)('Unimplemented annotation type "'.concat(p,'", ')+"falling back to base annotation."):(0,n.warn)("Annotation is missing the required /Subtype.")),new U(v)}}}},{key:"_getPageIndex",value:(i=P(C().mark((function e(t,r,a){var i,s,c;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.fetchIfRefAsync(r);case 3:if((i=e.sent)instanceof o.Dict){e.next=6;break}return e.abrupt("return",-1);case 6:if((s=i.getRaw("P"))instanceof o.Ref){e.next=9;break}return e.abrupt("return",-1);case 9:return e.next=11,a.ensureCatalog("getPageIndex",[s]);case 11:return c=e.sent,e.abrupt("return",c);case 15:return e.prev=15,e.t0=e.catch(0),(0,n.warn)('_getPageIndex: "'.concat(e.t0,'".')),e.abrupt("return",-1);case 19:case"end":return e.stop()}}),e,null,[[0,15]])}))),function(e,t,r){return i.apply(this,arguments)})},{key:"saveNewAnnotations",value:(r=P(C().mark((function e(t,r,a){var i,c,u,l,f,h,d,p,g;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=t.xref,u=[],l=[],f=A(a),e.prev=4,f.s();case 6:if((h=f.n()).done){e.next=17;break}d=h.value,e.t0=d.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?11:e.t0===n.AnnotationEditorType.INK?14:15;break;case 11:return c||((p=new o.Dict(i)).set("BaseFont",o.Name.get("Helvetica")),p.set("Type",o.Name.get("Font")),p.set("Subtype",o.Name.get("Type1")),p.set("Encoding",o.Name.get("WinAnsiEncoding")),g=[],c=i.getNewTemporaryRef(),(0,s.writeObject)(c,p,g,null),u.push({ref:c,data:g.join("")})),l.push(J.createNewAnnotation(i,d,u,{evaluator:t,task:r,baseFontRef:c})),e.abrupt("break",15);case 14:l.push(ae.createNewAnnotation(i,d,u));case 15:e.next=6;break;case 17:e.next=22;break;case 19:e.prev=19,e.t1=e.catch(4),f.e(e.t1);case 22:return e.prev=22,f.f(),e.finish(22);case 25:return e.next=27,Promise.all(l);case 27:return e.t2=e.sent,e.t3=u,e.abrupt("return",{annotations:e.t2,dependencies:e.t3});case 30:case"end":return e.stop()}}),e,null,[[4,19,22,25]])}))),function(e,t,n){return r.apply(this,arguments)})},{key:"printNewAnnotations",value:(t=P(C().mark((function e(t,r,a){var i,o,s,c,u,l;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a){e.next=2;break}return e.abrupt("return",null);case 2:i=t.xref,o=[],s=n.FeatureTest.isOffscreenCanvasSupported&&t.options.isOffscreenCanvasSupported,c=A(a),e.prev=6,c.s();case 8:if((u=c.n()).done){e.next=19;break}l=u.value,e.t0=l.annotationType,e.next=e.t0===n.AnnotationEditorType.FREETEXT?13:e.t0===n.AnnotationEditorType.INK?15:17;break;case 13:return o.push(J.createNewPrintAnnotation(i,l,{evaluator:t,task:r,isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 15:return o.push(ae.createNewPrintAnnotation(i,l,{isOffscreenCanvasSupported:s})),e.abrupt("break",17);case 17:e.next=8;break;case 19:e.next=24;break;case 21:e.prev=21,e.t1=e.catch(6),c.e(e.t1);case 24:return e.prev=24,c.f(),e.finish(24);case 27:return e.abrupt("return",Promise.all(o));case 28:case"end":return e.stop()}}),e,null,[[6,21,24,27]])}))),function(e,r,n){return t.apply(this,arguments)})}]),e}();function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Uint8ClampedArray(3);if(!Array.isArray(e))return t;var r=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:return f.ColorSpace.singletons.gray.getRgbItem(e,0,r,0),r;case 3:return f.ColorSpace.singletons.rgb.getRgbItem(e,0,r,0),r;case 4:return f.ColorSpace.singletons.cmyk.getRgbItem(e,0,r,0),r;default:return t}}function N(e){return Array.from(e,(function(e){return e/255}))}function D(e,t){var r=e.getArray("QuadPoints");if(!Array.isArray(r)||0===r.length||r.length%8>0)return null;for(var n=[],a=0,i=r.length/8;at[2]||ct[3]))return null;n.push([{x:o,y:u},{x:s,y:u},{x:o,y:c},{x:s,y:c}])}return n}function B(e,t,r){var a=T(n.Util.getAxialAlignedBoundingBox(t,r),4),i=a[0],o=a[1],s=a[2],c=a[3];if(i===s||o===c)return[1,0,0,1,e[0],e[1]];var u=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(c-o);return[u,0,0,l,e[0]-i*u,e[1]-o*l]}t.AnnotationFactory=L;var U=function(){function e(t){j(this,e);var r=t.dict,i=t.xref;this.setTitle(r.get("T")),this.setContents(r.get("Contents")),this.setModificationDate(r.get("M")),this.setFlags(r.get("F")),this.setRectangle(r.getArray("Rect")),this.setColor(r.getArray("C")),this.setBorderStyle(r),this.setAppearance(r),this.setOptionalContent(r);var s=r.get("MK");if(this.setBorderAndBackgroundColors(s),this.setRotation(s),this._streams=[],this.appearance&&this._streams.push(this.appearance),this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:t.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:t.subtype,hasOwnCanvas:!1},t.collectFields){var c=r.get("Kids");if(Array.isArray(c)){var u,l=[],f=A(c);try{for(f.s();!(u=f.n()).done;){var h=u.value;h instanceof o.Ref&&l.push(h.toString())}}catch(e){f.e(e)}finally{f.f()}0!==l.length&&(this.data.kidIds=l)}this.data.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType),this.data.fieldName=this._constructFieldName(r),this.data.pageIndex=t.pageIndex}this._isOffscreenCanvasSupported=t.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}var t,r,s;return _(e,[{key:"_hasFlag",value:function(e,t){return!!(e&t)}},{key:"_isViewable",value:function(e){return!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,n.AnnotationFlag.NOVIEW)}},{key:"_isPrintable",value:function(e){return this._hasFlag(e,n.AnnotationFlag.PRINT)&&!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)}},{key:"mustBeViewed",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.hidden?!t.hidden:this.viewable&&!this._hasFlag(this.flags,n.AnnotationFlag.HIDDEN)}},{key:"mustBePrinted",value:function(e){var t=e&&e.get(this.data.id);return t&&void 0!==t.print?t.print:this.printable}},{key:"viewable",get:function(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}},{key:"printable",get:function(){return null!==this.data.quadPoints&&0!==this.flags&&this._isPrintable(this.flags)}},{key:"_parseStringHelper",value:function(e){var t="string"==typeof e?(0,n.stringToPDFString)(e):"";return{str:t,dir:t&&"rtl"===(0,u.bidi)(t).dir?"rtl":"ltr"}}},{key:"setDefaultAppearance",value:function(e){var t=(0,a.getInheritableProperty)({dict:e.dict,key:"DA"})||e.acroForm.get("DA");this._defaultAppearance="string"==typeof t?t:"",this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance)}},{key:"setTitle",value:function(e){this._title=this._parseStringHelper(e)}},{key:"setContents",value:function(e){this._contents=this._parseStringHelper(e)}},{key:"setModificationDate",value:function(e){this.modificationDate="string"==typeof e?e:null}},{key:"setFlags",value:function(e){this.flags=Number.isInteger(e)&&e>0?e:0}},{key:"hasFlag",value:function(e){return this._hasFlag(this.flags,e)}},{key:"setRectangle",value:function(e){Array.isArray(e)&&4===e.length?this.rectangle=n.Util.normalizeRect(e):this.rectangle=[0,0,0,0]}},{key:"setColor",value:function(e){this.color=R(e)}},{key:"setLineEndings",value:function(e){if(this.lineEndings=["None","None"],Array.isArray(e)&&2===e.length)for(var t=0;t<2;t++){var r=e[t];if(r instanceof o.Name)switch(r.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=r.name;continue}(0,n.warn)("Ignoring invalid lineEnding: ".concat(r))}}},{key:"setRotation",value:function(e){if(this.rotation=0,e instanceof o.Dict){var t=e.get("R")||0;Number.isInteger(t)&&0!==t&&((t%=360)<0&&(t+=360),t%90==0&&(this.rotation=t))}}},{key:"setBorderAndBackgroundColors",value:function(e){e instanceof o.Dict?(this.borderColor=R(e.getArray("BC"),null),this.backgroundColor=R(e.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}},{key:"setBorderStyle",value:function(e){if(this.borderStyle=new $,e instanceof o.Dict)if(e.has("BS")){var t=e.get("BS"),r=t.get("Type");r&&!(0,o.isName)(r,"Border")||(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}else if(e.has("Border")){var n=e.getArray("Border");Array.isArray(n)&&n.length>=3&&(this.borderStyle.setHorizontalCornerRadius(n[0]),this.borderStyle.setVerticalCornerRadius(n[1]),this.borderStyle.setWidth(n[2],this.rectangle),4===n.length&&this.borderStyle.setDashArray(n[3],!0))}else this.borderStyle.setWidth(0)}},{key:"setAppearance",value:function(e){this.appearance=null;var t=e.get("AP");if(t instanceof o.Dict){var r=t.get("N");if(r instanceof c.BaseStream)this.appearance=r;else if(r instanceof o.Dict){var n=e.get("AS");n instanceof o.Name&&r.has(n.name)&&(this.appearance=r.get(n.name))}}}},{key:"setOptionalContent",value:function(e){this.oc=null;var t=e.get("OC");t instanceof o.Name?(0,n.warn)("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof o.Dict&&(this.oc=t)}},{key:"loadResources",value:function(e,t){return t.dict.getAsync("Resources").then((function(t){if(t)return new d.ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}},{key:"getOperatorList",value:(s=P(C().mark((function e(t,r,a,i,s){var c,u,l,f,h,d,v,y,m,b;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=this.data,u=this.appearance,l=!!(this.data.hasOwnCanvas&&a&n.RenderingIntentFlag.DISPLAY),u){e.next=8;break}if(l){e.next=6;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!1,separateCanvas:!1});case 6:(u=new g.StringStream("")).dict=new o.Dict;case 8:return f=u.dict,e.next=11,this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],u);case 11:if(h=e.sent,d=f.getArray("BBox")||[0,0,1,1],v=f.getArray("Matrix")||[1,0,0,1,0,0],y=B(c.rect,d,v),m=new p.OperatorList,!this.oc){e.next=20;break}return e.next=19,t.parseMarkedContentProps(this.oc,null);case 19:b=e.sent;case 20:return void 0!==b&&m.addOp(n.OPS.beginMarkedContentProps,["OC",b]),m.addOp(n.OPS.beginAnnotation,[c.id,c.rect,y,v,l]),e.next=24,t.getOperatorList({stream:u,task:r,resources:h,operatorList:m,fallbackFontDict:this._fallbackFontDict});case 24:return m.addOp(n.OPS.endAnnotation,[]),void 0!==b&&m.addOp(n.OPS.endMarkedContent,[]),this.reset(),e.abrupt("return",{opList:m,separateForm:!1,separateCanvas:l});case 28:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return s.apply(this,arguments)})},{key:"save",value:(r=P(C().mark((function e(t,r,n){return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",null);case 1:case"end":return e.stop()}}),e)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"hasTextContent",get:function(){return!1}},{key:"extractTextContent",value:(t=P(C().mark((function e(t,r,n){var a,i,o,s;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.appearance){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance);case 4:return a=e.sent,i=[],o=[],s={desiredSize:Math.Infinity,ready:!0,enqueue:function(e,t){var r,n=A(e.items);try{for(n.s();!(r=n.n()).done;){var a=r.value;o.push(a.str),a.hasEOL&&(i.push(o.join("")),o.length=0)}}catch(e){n.e(e)}finally{n.f()}}},e.next=10,t.getTextContent({stream:this.appearance,task:r,resources:a,includeMarkedContent:!0,combineTextItems:!0,sink:s,viewBox:n});case 10:this.reset(),o.length&&i.push(o.join("")),i.length>0&&(this.data.textContent=i);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"getFieldObject",value:function(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}},{key:"reset",value:function(){var e,t=A(this._streams);try{for(t.s();!(e=t.n()).done;)e.value.reset()}catch(e){t.e(e)}finally{t.f()}}},{key:"_constructFieldName",value:function(e){if(!e.has("T")&&!e.has("Parent"))return(0,n.warn)("Unknown field name, falling back to empty field name."),"";if(!e.has("Parent"))return(0,n.stringToPDFString)(e.get("T"));var t=[];e.has("T")&&t.unshift((0,n.stringToPDFString)(e.get("T")));var r=e,a=new o.RefSet;for(e.objId&&a.put(e.objId);r.has("Parent")&&(r=r.get("Parent"))instanceof o.Dict&&(!r.objId||!a.has(r.objId));)r.objId&&a.put(r.objId),r.has("T")&&t.unshift((0,n.stringToPDFString)(r.get("T")));return t.join(".")}}]),e}();t.Annotation=U;var $=function(){function e(){j(this,e),this.width=1,this.style=n.AnnotationBorderStyleType.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}return _(e,[{key:"setWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0,0];if(e instanceof o.Name)this.width=0;else if("number"==typeof e){if(e>0){var r=(t[2]-t[0])/2,a=(t[3]-t[1])/2;r>0&&a>0&&(e>r||e>a)&&((0,n.warn)("AnnotationBorderStyle.setWidth - ignoring width: ".concat(e)),e=1)}this.width=e}}},{key:"setStyle",value:function(e){if(e instanceof o.Name)switch(e.name){case"S":this.style=n.AnnotationBorderStyleType.SOLID;break;case"D":this.style=n.AnnotationBorderStyleType.DASHED;break;case"B":this.style=n.AnnotationBorderStyleType.BEVELED;break;case"I":this.style=n.AnnotationBorderStyleType.INSET;break;case"U":this.style=n.AnnotationBorderStyleType.UNDERLINE}}},{key:"setDashArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)&&e.length>0){var r,n=!0,a=!0,i=A(e);try{for(i.s();!(r=i.n()).done;){var s=r.value;if(!(+s>=0)){n=!1;break}s>0&&(a=!1)}}catch(e){i.e(e)}finally{i.f()}n&&!a?(this.dashArray=e,t&&this.setStyle(o.Name.get("D"))):this.width=0}else e&&(this.width=0)}},{key:"setHorizontalCornerRadius",value:function(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}},{key:"setVerticalCornerRadius",value:function(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}]),e}();t.AnnotationBorderStyle=$;var X=function(e){m(i,e);var t,r,a=w(i);function i(e){var t;j(this,i),t=a.call(this,e);var r=e.dict;if(r.has("IRT")){var s=r.getRaw("IRT");t.data.inReplyTo=s instanceof o.Ref?s.toString():null;var c=r.get("RT");t.data.replyType=c instanceof o.Name?c.name:n.AnnotationReplyType.REPLY}if(t.data.replyType===n.AnnotationReplyType.GROUP){var u=r.get("IRT");t.setTitle(u.get("T")),t.data.titleObj=t._title,t.setContents(u.get("Contents")),t.data.contentsObj=t._contents,u.has("CreationDate")?(t.setCreationDate(u.get("CreationDate")),t.data.creationDate=t.creationDate):t.data.creationDate=null,u.has("M")?(t.setModificationDate(u.get("M")),t.data.modificationDate=t.modificationDate):t.data.modificationDate=null,t.data.hasPopup=u.has("Popup"),u.has("C")?(t.setColor(u.getArray("C")),t.data.color=t.color):t.data.color=null}else t.data.titleObj=t._title,t.setCreationDate(r.get("CreationDate")),t.data.creationDate=t.creationDate,t.data.hasPopup=r.has("Popup"),r.has("C")||(t.data.color=null);return r.has("RC")&&(t.data.richText=v.XFAFactory.getRichTextAsHtml(r.get("RC"))),t}return _(i,[{key:"setCreationDate",value:function(e){this.creationDate="string"==typeof e?e:null}},{key:"_setDefaultAppearance",value:function(e){var t=e.xref,r=e.extra,n=e.strokeColor,a=e.fillColor,i=e.blendMode,s=e.strokeAlpha,c=e.fillAlpha,u=e.pointsCallback,l=Number.MAX_VALUE,f=Number.MAX_VALUE,h=Number.MIN_VALUE,d=Number.MIN_VALUE,p=["q"];r&&p.push(r),n&&p.push("".concat(n[0]," ").concat(n[1]," ").concat(n[2]," RG")),a&&p.push("".concat(a[0]," ").concat(a[1]," ").concat(a[2]," rg"));var v=this.data.quadPoints;v||(v=[[{x:this.rectangle[0],y:this.rectangle[3]},{x:this.rectangle[2],y:this.rectangle[3]},{x:this.rectangle[0],y:this.rectangle[1]},{x:this.rectangle[2],y:this.rectangle[1]}]]);var y,m=A(v);try{for(m.s();!(y=m.n()).done;){var b=T(u(p,y.value),4),w=b[0],k=b[1],S=b[2],x=b[3];l=Math.min(l,w),h=Math.max(h,k),f=Math.min(f,S),d=Math.max(d,x)}}catch(e){m.e(e)}finally{m.f()}p.push("Q");var O=new o.Dict(t),C=new o.Dict(t);C.set("Subtype",o.Name.get("Form"));var F=new g.StringStream(p.join(" "));F.dict=C,O.set("Fm0",F);var P=new o.Dict(t);i&&P.set("BM",o.Name.get(i)),"number"==typeof s&&P.set("CA",s),"number"==typeof c&&P.set("ca",c);var I=new o.Dict(t);I.set("GS0",P);var E=new o.Dict(t);E.set("ExtGState",I),E.set("XObject",O);var j=new o.Dict(t);j.set("Resources",E);var M=this.data.rect=[l,f,h,d];j.set("BBox",M),this.appearance=new g.StringStream("/GS0 gs /Fm0 Do"),this.appearance.dict=j,this._streams.push(this.appearance,F)}}],[{key:"createNewAnnotation",value:(r=P(C().mark((function e(t,r,n,a){var i,o,c,u,l,f,h;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.getNewTemporaryRef(),e.next=3,this.createNewAppearanceStream(r,t,a);case 3:return o=e.sent,c=[],o?(l=t.getNewTemporaryRef(),u=this.createNewDict(r,t,{apRef:l}),f=t.encrypt?t.encrypt.createCipherTransform(l.num,l.gen):null,(0,s.writeObject)(l,o,c,f),n.push({ref:l,data:c.join("")})):u=this.createNewDict(r,t,{}),c.length=0,h=t.encrypt?t.encrypt.createCipherTransform(i.num,i.gen):null,(0,s.writeObject)(i,u,c,h),e.abrupt("return",{ref:i,data:c.join("")});case 10:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"createNewPrintAnnotation",value:(t=P(C().mark((function e(t,r,n){var a,i;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.createNewAppearanceStream(r,t,n);case 2:return a=e.sent,i=this.createNewDict(r,t,{ap:a}),e.abrupt("return",new this.prototype.constructor({dict:i,xref:t,isOffscreenCanvasSupported:n.isOffscreenCanvasSupported}));case 5:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})}]),i}(U);t.MarkupAnnotation=X;var H=function(e){m(f,e);var t,r,c,u,l=w(f);function f(e){var t;j(this,f),t=l.call(this,e);var r=e.dict,i=e.xref,s=t.data;t.ref=e.ref,t._needAppearances=e.needAppearances,s.annotationType=n.AnnotationType.WIDGET,void 0===s.fieldName&&(s.fieldName=t._constructFieldName(r)),void 0===s.actions&&(s.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType));var c=(0,a.getInheritableProperty)({dict:r,key:"V",getArray:!0});s.fieldValue=t._decodeFormValue(c);var u=(0,a.getInheritableProperty)({dict:r,key:"DV",getArray:!0});if(s.defaultFieldValue=t._decodeFormValue(u),void 0===c&&e.xfaDatasets){var h=t._title.str;h&&(t._hasValueFromXFA=!0,s.fieldValue=c=e.xfaDatasets.getValue(h))}void 0===c&&null!==s.defaultFieldValue&&(s.fieldValue=s.defaultFieldValue),s.alternativeText=(0,n.stringToPDFString)(r.get("TU")||""),t.setDefaultAppearance(e),s.hasAppearance=t._needAppearances&&void 0!==s.fieldValue&&null!==s.fieldValue||s.hasAppearance;var d=(0,a.getInheritableProperty)({dict:r,key:"FT"});s.fieldType=d instanceof o.Name?d.name:null;var p=(0,a.getInheritableProperty)({dict:r,key:"DR"}),g=e.acroForm.get("DR"),v=t.appearance&&t.appearance.dict.get("Resources");return t._fieldResources={localResources:p,acroFormResources:g,appearanceResources:v,mergedResources:o.Dict.merge({xref:i,dictArray:[p,v,g],mergeSubDicts:!0})},s.fieldFlags=(0,a.getInheritableProperty)({dict:r,key:"Ff"}),(!Number.isInteger(s.fieldFlags)||s.fieldFlags<0)&&(s.fieldFlags=0),s.readOnly=t.hasFieldFlag(n.AnnotationFieldFlag.READONLY),s.required=t.hasFieldFlag(n.AnnotationFieldFlag.REQUIRED),s.hidden=t._hasFlag(s.annotationFlags,n.AnnotationFlag.HIDDEN),t}return _(f,[{key:"_decodeFormValue",value:function(e){return Array.isArray(e)?e.filter((function(e){return"string"==typeof e})).map((function(e){return(0,n.stringToPDFString)(e)})):e instanceof o.Name?(0,n.stringToPDFString)(e.name):"string"==typeof e?(0,n.stringToPDFString)(e):null}},{key:"hasFieldFlag",value:function(e){return!!(this.data.fieldFlags&e)}},{key:"getRotationMatrix",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),0===r)return n.IDENTITY_MATRIX;var i=this.data.rect[2]-this.data.rect[0],o=this.data.rect[3]-this.data.rect[1];return(0,a.getRotationMatrix)(r,i,o)}},{key:"getBorderAndBackgroundAppearances",value:function(e){var t=e?e.get(this.data.id):void 0,r=t&&t.rotation;if(void 0===r&&(r=this.rotation),!this.backgroundColor&&!this.borderColor)return"";var n=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],o=0===r||180===r?"0 0 ".concat(n," ").concat(a," re"):"0 0 ".concat(a," ").concat(n," re"),s="";if(this.backgroundColor&&(s="".concat((0,i.getPdfColor)(this.backgroundColor,!0)," ").concat(o," f ")),this.borderColor){var c=this.borderStyle.width||1;s+="".concat(c," w ").concat((0,i.getPdfColor)(this.borderColor,!1)," ").concat(o," S ")}return s}},{key:"getOperatorList",value:(u=P(C().mark((function e(t,r,a,i,o){var s,c,u,l,h,d,v;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!i||this instanceof W){e.next=2;break}return e.abrupt("return",{opList:new p.OperatorList,separateForm:!0,separateCanvas:!1});case 2:if(this._hasText){e.next=4;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 4:return e.next=6,this._getAppearance(t,r,a,o);case 6:if(s=e.sent,!this.appearance||null!==s){e.next=9;break}return e.abrupt("return",y(x(f.prototype),"getOperatorList",this).call(this,t,r,a,i,o));case 9:if(c=new p.OperatorList,this._defaultAppearance&&null!==s){e.next=12;break}return e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 12:if(u=[1,0,0,1,0,0],l=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],h=B(this.data.rect,l,u),!this.oc){e.next=19;break}return e.next=18,t.parseMarkedContentProps(this.oc,null);case 18:d=e.sent;case 19:return void 0!==d&&c.addOp(n.OPS.beginMarkedContentProps,["OC",d]),c.addOp(n.OPS.beginAnnotation,[this.data.id,this.data.rect,h,this.getRotationMatrix(o),!1]),v=new g.StringStream(s),e.next=24,t.getOperatorList({stream:v,task:r,resources:this._fieldResources.mergedResources,operatorList:c});case 24:return c.addOp(n.OPS.endAnnotation,[]),void 0!==d&&c.addOp(n.OPS.endMarkedContent,[]),e.abrupt("return",{opList:c,separateForm:!1,separateCanvas:!1});case 27:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a){return u.apply(this,arguments)})},{key:"_getMKDict",value:function(e){var t=new o.Dict(null);return e&&t.set("R",e),this.borderColor&&t.set("BC",N(this.borderColor)),this.backgroundColor&&t.set("BG",N(this.backgroundColor)),t.size>0?t:null}},{key:"save",value:(c=P(C().mark((function e(t,r,i){var c,u,l,f,h,d,p,v,y,m,b,w,k,S,x,O,F,P,T,I,E,j,M,_,L,R=this;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=i?i.get(this.data.id):void 0,u=c&&c.value,l=c&&c.rotation,u!==this.data.fieldValue&&void 0!==u){e.next=7;break}if(this._hasValueFromXFA||void 0!==l){e.next=6;break}return e.abrupt("return",null);case 6:u=u||this.data.fieldValue;case 7:if(void 0!==l||this._hasValueFromXFA||!Array.isArray(u)||!Array.isArray(this.data.fieldValue)||u.length!==this.data.fieldValue.length||!u.every((function(e,t){return e===R.data.fieldValue[t]}))){e.next=9;break}return e.abrupt("return",null);case 9:if(void 0===l&&(l=this.rotation),f=null,this._needAppearances){e.next=19;break}return e.next=14,this._getAppearance(t,r,n.RenderingIntentFlag.SAVE,i);case 14:if(null!==(f=e.sent)){e.next=17;break}return e.abrupt("return",null);case 17:e.next=19;break;case 19:if(h=!1,f&&f.needAppearances&&(h=!0,f=null),d=t.xref,(p=d.fetchIfRef(this.ref))instanceof o.Dict){e.next=25;break}return e.abrupt("return",null);case 25:v=new o.Dict(d),y=A(p.getKeys());try{for(y.s();!(m=y.n()).done;)"AP"!==(b=m.value)&&v.set(b,p.getRaw(b))}catch(e){y.e(e)}finally{y.f()}return w={path:(0,n.stringToPDFString)(v.get("T")||""),value:u},k=function(e){return(0,a.isAscii)(e)?e:(0,a.stringToUTF16String)(e,!0)},v.set("V",Array.isArray(u)?u.map(k):k(u)),(S=this._getMKDict(l))&&v.set("MK",S),x=d.encrypt,O=x?x.createCipherTransform(this.ref.num,this.ref.gen):null,F=[],P=[{ref:this.ref,data:"",xfa:w,needAppearances:h}],null!==f&&(T=d.getNewTemporaryRef(),I=new o.Dict(d),v.set("AP",I),I.set("N",T),E=null,x&&(E=x.createCipherTransform(T.num,T.gen),f=E.encryptString(f)),j=this._getSaveFieldResources(d),M=new g.StringStream(f),(_=M.dict=new o.Dict(d)).set("Length",f.length),_.set("Subtype",o.Name.get("Form")),_.set("Resources",j),_.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]),(L=this.getRotationMatrix(i))!==n.IDENTITY_MATRIX&&_.set("Matrix",L),(0,s.writeObject)(T,M,F,E),P.push({ref:T,data:F.join(""),xfa:null,needAppearances:!1}),F.length=0),v.set("M","D:".concat((0,n.getModificationDate)())),(0,s.writeObject)(this.ref,v,F,O),P[0].data=F.join(""),e.abrupt("return",P);case 42:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return c.apply(this,arguments)})},{key:"_getAppearance",value:(r=P(C().mark((function e(t,r,o,s){var c,u,l,h,d,p,g,v,y,m,b,w,k,S,x,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,H,q,G,z,W,V,Y,K,J,Z,Q,ee,te;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)){e.next=3;break}return e.abrupt("return",null);case 3:if((c=s?s.get(this.data.id):void 0)&&(u=c.formattedValue||c.value,l=c.rotation),void 0!==l||void 0!==u||this._needAppearances){e.next=8;break}if(this._hasValueFromXFA&&!this.appearance){e.next=8;break}return e.abrupt("return",null);case 8:if(h=this.getBorderAndBackgroundAppearances(s),void 0!==u){e.next=13;break}if(u=this.data.fieldValue){e.next=13;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 13:if(Array.isArray(u)&&1===u.length&&(u=u[0]),(0,n.assert)("string"==typeof u,"Expected \`value\` to be a string."),this.data.combo?(d=this.data.options.find((function(e){var t=e.exportValue;return u===t}))||this.data.options[0],u=d&&d.displayValue||""):u=u.trim(),""!==u){e.next=18;break}return e.abrupt("return","/Tx BMC q ".concat(h,"Q EMC"));case 18:return void 0===l&&(l=this.rotation),p=-1,this.data.multiLine?(g=u.split(/\\r\\n?|\\n/).map((function(e){return e.normalize("NFC")})),p=g.length):g=[u.replace(/\\r\\n?|\\n/,"").normalize("NFC")],v=1,y=2,m=this.data.rect[3]-this.data.rect[1],b=this.data.rect[2]-this.data.rect[0],90!==l&&270!==l||(b=(w=[m,b])[0],m=w[1]),this._defaultAppearance||(this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance="/Helvetica 0 Tf 0 g")),e.next=29,f._getFontData(t,r,this.data.defaultAppearanceData,this._fieldResources.mergedResources);case 29:k=e.sent,F=[],P=!1,I=A(g);try{for(I.s();!(E=I.n()).done;)j=E.value,(M=k.encodeString(j)).length>1&&(P=!0),F.push(M.join(""))}catch(e){I.e(e)}finally{I.f()}if(!(P&&o&n.RenderingIntentFlag.SAVE)){e.next=36;break}return e.abrupt("return",{needAppearances:!0});case 36:if(!P||!this._isOffscreenCanvasSupported){e.next=58;break}if(_=this.data.comb?"monospace":"sans-serif",L=new i.FakeUnicodeFont(t.xref,_),R=L.createFontResources(g.join("")),N=R.getRaw("Font"),this._fieldResources.mergedResources.has("Font")){D=this._fieldResources.mergedResources.get("Font"),B=A(N.getKeys());try{for(B.s();!(U=B.n()).done;)$=U.value,D.set($,N.getRaw($))}catch(e){B.e(e)}finally{B.f()}}else this._fieldResources.mergedResources.set("Font",N);return X=L.fontName.name,e.next=45,f._getFontData(t,r,{fontName:X,fontSize:0},R);case 45:for(k=e.sent,H=0,q=F.length;H2)){e.next=75;break}return e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 ".concat((0,a.numberToString)(y)," ").concat((0,a.numberToString)(Q)," Tm (").concat((0,a.escapeString)(F[0]),") Tj")+" ET Q EMC");case 75:return ee={shift:0},te=this._renderText(F[0],k,x,b,Z,ee,y,Q),e.abrupt("return","/Tx BMC q ".concat(h,"BT ")+S+" 1 0 0 1 0 0 Tm ".concat(te)+" ET Q EMC");case 78:case"end":return e.stop()}}),e,this)}))),function(e,t,n,a){return r.apply(this,arguments)})},{key:"_getTextWidth",value:function(e,t){return t.charsToGlyphs(e).reduce((function(e,t){return e+t.width}),0)/1e3}},{key:"_computeFontSize",value:function(e,t,r,a,o){var s=this,c=this.data.defaultAppearanceData.fontSize,u=(c||12)*n.LINE_FACTOR,l=Math.round(e/u);if(!c){var f=function(e){return Math.floor(100*e)/100};if(-1===o){var h=this._getTextWidth(r,a);c=f(Math.min(e/n.LINE_FACTOR,h>t?t/h:1/0)),l=1}else{var d,p=r.split(/\\r\\n?|\\n/),g=[],v=A(p);try{for(v.s();!(d=v.n()).done;){var y=d.value,m=a.encodeString(y).join(""),b=a.charsToGlyphs(m),w=a.getCharPositions(m);g.push({line:m,glyphs:b,positions:w})}}catch(e){v.e(e)}finally{v.f()}var k=function(r){for(var n=0,i=0,o=g;ie)return!0}return!1};for(l=Math.max(l,o);k(c=f((u=e/l)/n.LINE_FACTOR));)l++}var S=this.data.defaultAppearanceData,x=S.fontName,O=S.fontColor;this._defaultAppearance=(0,i.createDefaultAppearance)({fontSize:c,fontName:x,fontColor:O})}return[this._defaultAppearance,c,e/l]}},{key:"_renderText",value:function(e,t,r,n,i,o,s,c){var u;u=1===i?(n-this._getTextWidth(e,t)*r)/2:2===i?n-this._getTextWidth(e,t)*r-s:s;var l=(0,a.numberToString)(u-o.shift);return o.shift=u,c=(0,a.numberToString)(c),"".concat(l," ").concat(c," Td (").concat((0,a.escapeString)(e),") Tj")}},{key:"_getSaveFieldResources",value:function(e){var t=this._fieldResources,r=t.localResources,n=t.appearanceResources,a=t.acroFormResources,i=this.data.defaultAppearanceData&&this.data.defaultAppearanceData.fontName;if(!i)return r||o.Dict.empty;for(var s=0,c=[r,n];s2)&&(s=null),i.data.textAlignment=s;var c=(0,a.getInheritableProperty)({dict:o,key:"MaxLen"});return(!Number.isInteger(c)||c<0)&&(c=0),i.data.maxLen=c,i.data.multiLine=i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE),i.data.comb=i.hasFieldFlag(n.AnnotationFieldFlag.COMB)&&!i.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE)&&!i.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)&&!i.hasFieldFlag(n.AnnotationFieldFlag.FILESELECT)&&0!==i.data.maxLen,i.data.doNotScroll=i.hasFieldFlag(n.AnnotationFieldFlag.DONOTSCROLL),i}return _(r,[{key:"_getCombAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f){var h,d=i/this.data.maxLen,p=this.getBorderAndBackgroundAppearances(f),g=[],v=A(t.getCharPositions(r));try{for(v.s();!(h=v.n()).done;){var y=T(h.value,2),m=y[0],b=y[1];g.push("(".concat((0,a.escapeString)(r.substring(m,b)),") Tj"))}}catch(e){v.e(e)}finally{v.f()}var w=g.join(" ".concat((0,a.numberToString)(d)," 0 Td "));return"/Tx BMC q ".concat(p,"BT ")+e+" 1 0 0 1 ".concat((0,a.numberToString)(s)," ").concat((0,a.numberToString)(c+u)," Tm ").concat(w)+" ET Q EMC"}},{key:"_getMultilineAppearance",value:function(e,t,r,n,i,o,s,c,u,l,f,h){for(var d=[],p=i-2*c,g={shift:0},v=0,y=t.length;v4&&void 0!==arguments[4]?arguments[4]:{};e=a.line||e;var i=a.glyphs||t.charsToGlyphs(e);if(i.length<=1)return[e];for(var o=a.positions||t.getCharPositions(e),s=r/1e3,c=[],u=-1,l=-1,f=-1,h=0,d=0,p=0,g=i.length;pn?(c.push(e.substring(h,y)),h=y,d=w,u=-1,f=-1):(d+=w,u=y,l=m,f=p):d+w>n?-1!==u?(c.push(e.substring(h,l)),h=l,p=f+1,u=-1,d=0):(c.push(e.substring(h,y)),h=y,d=w):d+=w}return h0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}},{key:"_getAppearance",value:(t=P(C().mark((function e(t,r,a,s){var c,u,l,f,h,d,p,g,v,m,b,w,k,S,O,F,P,I,E,j,M,_,L,R,N,D,B,U,$,X,q,G,z,W,V,Y,K;return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.data.combo){e.next=2;break}return e.abrupt("return",y(x(o.prototype),"_getAppearance",this).call(this,t,r,a,s));case 2:if((l=s?s.get(this.data.id):void 0)&&(u=l.rotation,c=l.value),void 0!==u||void 0!==c||this._needAppearances){e.next=6;break}return e.abrupt("return",null);case 6:for(void 0===c?c=this.data.fieldValue:Array.isArray(c)||(c=[c]),f=1,h=2,d=this.data.rect[3]-this.data.rect[1],p=this.data.rect[2]-this.data.rect[0],90!==u&&270!==u||(p=(g=[d,p])[0],d=g[1]),v=this.data.options.length,m=[],b=0;bP&&(P=_,I=M)}catch(e){E.e(e)}finally{E.f()}L=this._computeFontSize(F,p-2*h,I,k,-1),R=T(L,2),S=R[0],O=R[1]}if(N=O*n.LINE_FACTOR,D=(N-O)/2,B=Math.floor(d/N),1===m.length?($=m[0],U=$-$%B):U=m.length?m[0]:0,X=Math.min(U+B+1,v),q=["/Tx BMC q","1 1 ".concat(p," ").concat(d," re W n")],m.length){q.push("0.600006 0.756866 0.854904 rg"),G=A(m);try{for(G.s();!(z=G.n()).done;)W=z.value,U<=W&&W1)){e.next=25;break}return e.abrupt("return",null);case 25:D=B.join(""),L.push(D),U=0,$=w.charsToGlyphs(D),X=A($);try{for(X.s();!(q=X.n()).done;)G=q.value,U+=G.width*M}catch(e){X.e(e)}finally{X.f()}_=Math.max(_,U);case 32:e.next=20;break;case 34:e.next=39;break;case 36:e.prev=36,e.t0=e.catch(18),R.e(e.t0);case 39:return e.prev=39,R.f(),e.finish(39);case 42:for(z=1,_>P&&(z=P/_),W=1,V=n.LINE_FACTOR*h,Y=n.LINE_DESCENT_FACTOR*h,(K=V*j.length)>I&&(W=I/K),J=Math.min(z,W),Z=h*J,Q=["q","0 0 ".concat((0,a.numberToString)(P)," ").concat((0,a.numberToString)(I)," re W n"),"BT","1 0 0 1 0 ".concat((0,a.numberToString)(I+Y)," Tm 0 Tc ").concat((0,i.getPdfColor)(f,!0)),"/Helv ".concat((0,a.numberToString)(Z)," Tf")],ee=(0,a.numberToString)(V),te=0,re=L;te{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FakeUnicodeFont=void 0,t.createDefaultAppearance=function(e){var t=e.fontSize,r=e.fontName,n=e.fontColor;return"/".concat((0,i.escapePDFName)(r)," ").concat(t," Tf ").concat(w(n,!0))},t.getPdfColor=w,t.parseDefaultAppearance=function(e){return new b(e).parse()};var a=r(134),i=r(135),o=r(2),s=r(143),c=r(144),u=r(139);function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(t.fontSize=u);break;case o.OPS.setFillRGBColor:s.ColorSpace.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillGray:s.ColorSpace.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case o.OPS.setFillColorSpace:s.ColorSpace.singletons.cmyk.getRgbItem(n,0,t.fontColor,0)}}}catch(e){(0,o.warn)('parseDefaultAppearance - ignoring errors: "'.concat(e,'".'))}return t}}]),c}(c.EvaluatorPreprocessor);function w(e,t){if(e[0]===e[1]&&e[1]===e[2]){var r=e[0]/255;return"".concat((0,i.numberToString)(r)," ").concat(t?"g":"G")}return Array.from(e,(function(e){return(0,i.numberToString)(e/255)})).join(" ")+" ".concat(t?"rg":"RG")}var k=function(){function e(t,r){p(this,e),this.xref=t,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=r;var n=new OffscreenCanvas(1,1);this.ctxMeasure=n.getContext("2d"),e._fontNameId||(e._fontNameId=1),this.fontName=a.Name.get("InvalidPDFjsFont_".concat(r,"_").concat(e._fontNameId++))}return v(e,[{key:"toUnicodeRef",get:function(){if(!e._toUnicodeRef){var t=e.toUnicodeStream=new u.StringStream("/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo\\n<< /Registry (Adobe)\\n/Ordering (UCS) /Supplement 0 >> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000> \\nendcodespacerange\\n1 beginbfrange\\n<0000> <0000>\\nendbfrange\\nendcmap CMapName currentdict /CMap defineresource pop end end"),r=new a.Dict(this.xref);t.dict=r,r.set("Length",346),e._toUnicodeRef=this.xref.getNewPersistentRef(t)}return e._toUnicodeRef}},{key:"fontDescriptorRef",get:function(){if(!e._fontDescriptorRef){var t=new a.Dict(this.xref);t.set("Type",a.Name.get("FontDescriptor")),t.set("FontName",this.fontName),t.set("FontFamily","MyriadPro Regular"),t.set("FontBBox",[0,0,0,0]),t.set("FontStretch",a.Name.get("Normal")),t.set("FontWeight",400),t.set("ItalicAngle",0),e._fontDescriptorRef=this.xref.getNewPersistentRef(t)}return e._fontDescriptorRef}},{key:"descendantFontRef",get:function(){var e=new a.Dict(this.xref);e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("CIDFontType0")),e.set("CIDToGIDMap",a.Name.get("Identity")),e.set("FirstChar",this.firstChar),e.set("LastChar",this.lastChar),e.set("FontDescriptor",this.fontDescriptorRef),e.set("DW",1e3);var t,r,n=[],i=null,o=null,s=l((r=this.widths.entries(),function(e){if(Array.isArray(e))return d(e)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||h(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort());try{for(s.s();!(t=s.n()).done;){var c=f(t.value,2),u=c[0],p=c[1];i?u===i+o.length?o.push(p):(n.push(i,o),i=u,o=[p]):(i=u,o=[p])}}catch(e){s.e(e)}finally{s.f()}i&&n.push(i,o),e.set("W",n);var g=new a.Dict(this.xref);return g.set("Ordering","Identity"),g.set("Registry","Adobe"),g.set("Supplement",0),e.set("CIDSystemInfo",g),this.xref.getNewPersistentRef(e)}},{key:"baseFontRef",get:function(){var e=new a.Dict(this.xref);return e.set("BaseFont",this.fontName),e.set("Type",a.Name.get("Font")),e.set("Subtype",a.Name.get("Type0")),e.set("Encoding",a.Name.get("Identity-H")),e.set("DescendantFonts",[this.descendantFontRef]),e.set("ToUnicode",this.toUnicodeRef),this.xref.getNewPersistentRef(e)}},{key:"resources",get:function(){var e=new a.Dict(this.xref),t=new a.Dict(this.xref);return t.set(this.fontName.name,this.baseFontRef),e.set("Font",t),e}},{key:"_createContext",value:function(){return this.widths=new Map,this.ctxMeasure.font="1000px ".concat(this.fontFamily),this.ctxMeasure}},{key:"createFontResources",value:function(e){var t,r=this._createContext(),n=l(e.split(/\\r\\n?|\\n/));try{for(n.s();!(t=n.n()).done;){var a,i=l(t.value.split(""));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=o.charCodeAt(0);if(!this.widths.has(s)){var c=r.measureText(o),u=Math.ceil(c.width);this.widths.set(s,u),this.firstChar=Math.min(s,this.firstChar),this.lastChar=Math.max(s,this.lastChar)}}}catch(e){i.e(e)}finally{i.f()}}}catch(e){n.e(e)}finally{n.f()}return this.resources}},{key:"createAppearance",value:function(e,t,r,n,s){var c,h=this._createContext(),d=[],p=-1/0,g=l(e.split(/\\r\\n?|\\n/));try{for(g.s();!(c=g.n()).done;){var v=c.value;d.push(v);var y=h.measureText(v).width;p=Math.max(p,y);var m,b=l(v.split(""));try{for(b.s();!(m=b.n()).done;){var k=m.value,S=k.charCodeAt(0),x=this.widths.get(S);if(void 0===x){var O=h.measureText(k);x=Math.ceil(O.width),this.widths.set(S,x),this.firstChar=Math.min(S,this.firstChar),this.lastChar=Math.max(S,this.lastChar)}}}catch(e){b.e(e)}finally{b.f()}}}catch(e){g.e(e)}finally{g.f()}p*=n/1e3;var A=f(t,4),C=A[0],F=A[1],P=A[2]-C,T=A[3]-F;if(r%180!=0){var I=[T,P];P=I[0],T=I[1]}var E=1;p>P&&(E=P/p);var j=1,M=o.LINE_FACTOR*n,_=o.LINE_DESCENT_FACTOR*n,L=M*d.length;L>T&&(j=T/L);for(var R=n*Math.min(E,j),N=["q","0 0 ".concat((0,i.numberToString)(P)," ").concat((0,i.numberToString)(T)," re W n"),"BT","1 0 0 1 0 ".concat((0,i.numberToString)(T+_)," Tm 0 Tc ").concat(w(s,!0)),"/".concat(this.fontName.name," ").concat((0,i.numberToString)(R)," Tf")],D=(0,i.numberToString)(M),B=0,U=d;B Tj"))}N.push("ET","Q");var X=N.join("\\n"),H=new a.Dict(this.xref);if(H.set("Subtype",a.Name.get("Form")),H.set("Type",a.Name.get("XObject")),H.set("BBox",[0,0,P,T]),H.set("Length",X.length),H.set("Resources",this.resources),r){var q=(0,i.getRotationMatrix)(r,P,T);H.set("Matrix",q)}var G=new u.StringStream(X);return G.dict=H,G}}]),e}();t.FakeUnicodeFont=k},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSpace=void 0;var n=r(2),a=r(134),i=r(136),o=r(135);function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var r=0;rf&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){for(var d=o<=8?new Uint8Array(f):new Uint16Array(f),p=0;p2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3?arguments[3]:void 0;if((e=t.fetchIfRef(e))instanceof a.Name)switch(e.name){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"Pattern":return new b(null);default:if(r instanceof a.Dict){var o=r.get("ColorSpace");if(o instanceof a.Dict){var s=o.get(e.name);if(s){if(s instanceof a.Name)return this._parse(s,t,r,i);e=s;break}}}throw new n.FormatError("Unrecognized ColorSpace: ".concat(e.name))}if(Array.isArray(e)){var c,u,l,f,h,d,p=t.fetchIfRef(e[0]).name;switch(p){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"CalGray":return f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.get("Gamma"),new O(f,h,d);case"CalRGB":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint"),d=c.getArray("Gamma");var g=c.getArray("Matrix");return new A(f,h,d,g);case"ICCBased":var v=t.fetchIfRef(e[1]).dict;u=v.get("N");var y=v.get("Alternate");if(y){var k=this._parse(y,t,r,i);if(k.numComps===u)return k;(0,n.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===u)return this.singletons.gray;if(3===u)return this.singletons.rgb;if(4===u)return this.singletons.cmyk;break;case"Pattern":return(l=e[1]||null)&&(l=this._parse(l,t,r,i)),new b(l);case"I":case"Indexed":l=this._parse(e[1],t,r,i);var S=t.fetchIfRef(e[2])+1,x=t.fetchIfRef(e[3]);return new w(l,S,x);case"Separation":case"DeviceN":var F=t.fetchIfRef(e[1]);u=Array.isArray(F)?F.length:1,l=this._parse(e[2],t,r,i);var P=i.create(e[3]);return new m(u,l,P);case"Lab":f=(c=t.fetchIfRef(e[1])).getArray("WhitePoint"),h=c.getArray("BlackPoint");var T=c.getArray("Range");return new C(f,h,T);default:throw new n.FormatError("Unimplemented ColorSpace object: ".concat(p))}}throw new n.FormatError("Unrecognized ColorSpace object: ".concat(e))}},{key:"isDefaultDecode",value:function(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length)return(0,n.warn)("The decode map is not the correct length"),!0;for(var r=0,a=e.length;r=.99554525?1:d(0,1,1.055*Math.pow(e,1/2.4)-.055)}function d(e,t,r){return Math.max(e,Math.min(t,r))}function g(e){return e<0?-g(-e):e>8?Math.pow((e+16)/116,3):e*l}function m(n,s,u,l,p,v){var y=d(0,1,s[u]*v),m=d(0,1,s[u+1]*v),b=d(0,1,s[u+2]*v),w=1===y?1:Math.pow(y,n.GR),k=1===m?1:Math.pow(m,n.GG),S=1===b?1:Math.pow(b,n.GB),x=n.MXA*w+n.MXB*k+n.MXC*S,O=n.MYA*w+n.MYB*k+n.MYC*S,A=n.MZA*w+n.MZB*k+n.MZC*S,C=o;C[0]=x,C[1]=O,C[2]=A;var F=c;!function(r,n,a){if(1===r[0]&&1===r[2])return a[0]=n[0],a[1]=n[1],void(a[2]=n[2]);var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=1*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1*t[2]/e[2]}(r,o,s),f(t,s,a)}(n.whitePoint,C,F);var P=o;!function(e,t,r){if(0===e[0]&&0===e[1]&&0===e[2])return r[0]=t[0],r[1]=t[1],void(r[2]=t[2]);var n=g(0),a=(1-n)/(1-g(e[0])),i=1-a,o=(1-n)/(1-g(e[1])),s=1-o,c=(1-n)/(1-g(e[2])),u=1-c;r[0]=t[0]*a+i,r[1]=t[1]*o+s,r[2]=t[2]*c+u}(n.blackPoint,F,P);var T=c;!function(r,n,a){var o=a;f(e,n,o);var s=i;!function(e,t,r){r[0]=.95047*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1.08883*t[2]/e[2]}(r,o,s),f(t,s,a)}(a,P,T);var I=o;f(r,T,I),l[p]=255*h(I[0]),l[p+1]=255*h(I[1]),l[p+2]=255*h(I[2])}return function(e){s(r,e);var t=u(r);function r(e,a,i,o){var s;if(p(this,r),s=t.call(this,"CalRGB",3),!e)throw new n.FormatError("WhitePoint missing - required for color space CalRGB");a=a||new Float32Array(3),i=i||new Float32Array([1,1,1]),o=o||new Float32Array([1,0,0,0,1,0,0,0,1]);var c=e[0],u=e[1],l=e[2];s.whitePoint=e;var f=a[0],h=a[1],d=a[2];if(s.blackPoint=a,s.GR=i[0],s.GG=i[1],s.GB=i[2],s.MXA=o[0],s.MYA=o[1],s.MZA=o[2],s.MXB=o[3],s.MYB=o[4],s.MZB=o[5],s.MXC=o[6],s.MYC=o[7],s.MZC=o[8],c<0||l<0||1!==u)throw new n.FormatError("Invalid WhitePoint components for ".concat(s.name)+", no fallback available");return(f<0||h<0||d<0)&&((0,n.info)("Invalid BlackPoint for ".concat(s.name," [").concat(f,", ").concat(h,", ").concat(d,"], ")+"falling back to default."),s.blackPoint=new Float32Array(3)),(s.GR<0||s.GG<0||s.GB<0)&&((0,n.info)("Invalid Gamma [".concat(s.GR,", ").concat(s.GG,", ").concat(s.GB,"] for ")+"".concat(s.name,", falling back to default.")),s.GR=s.GG=s.GB=1),s}return v(r,[{key:"getRgbItem",value:function(e,t,r,n){m(this,e,t,r,n,1)}},{key:"getRgbBuffer",value:function(e,t,r,n,a,i,o){for(var s=1/((1<=6/29?Math.pow(e,3):108/841*(e-4/29)}function t(e,t,r,n){return r+e*(n-r)/t}function r(r,n,a,i,o,s){var c=n[a],u=n[a+1],l=n[a+2];!1!==i&&(c=t(c,i,0,100),u=t(u,i,r.amin,r.amax),l=t(l,i,r.bmin,r.bmax)),u>r.amax?u=r.amax:ur.bmax?l=r.bmax:lo.amax||o.bmin>o.bmax)&&((0,n.info)("Invalid Range, falling back to defaults"),o.amin=-100,o.amax=100,o.bmin=-100,o.bmax=100),o}return v(a,[{key:"getRgbItem",value:function(e,t,n,a){r(this,e,t,!1,n,a)}},{key:"getRgbBuffer",value:function(e,t,n,a,i,o,s){for(var c=(1<{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PartialEvaluator=t.EvaluatorPreprocessor=void 0;var a=r(2),i=r(145),o=r(134),s=r(163),c=r(167),u=r(166),l=r(170),f=r(179),h=r(180),d=r(171),p=r(186),g=r(146),v=r(188),y=r(139),m=r(136),b=r(189),w=r(143),k=r(148),S=r(168),x=r(135),O=r(174),A=r(169),C=r(190),F=r(191),P=r(192);function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||D(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||D(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(){E=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new C(n||[]);return a(o,"_invoke",{value:S(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function p(){}function g(){}var v={};u(v,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(F([])));m&&m!==t&&r.call(m,o)&&(v=m);var b=g.prototype=d.prototype=Object.create(v);function w(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function k(e,t){function i(a,o,s,c){var u=f(e[a],e,o);if("throw"!==u.type){var l=u.arg,h=l.value;return h&&"object"==n(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(h).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function S(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=x(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function x(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function F(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;A(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:F(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function j(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function M(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){j(i,n,a,o,s,"next",e)}function s(e){j(i,n,a,o,s,"throw",e)}o(void 0)}))}}function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function D(e,t){if(e){if("string"==typeof e)return B(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)){var r,n=N(e);try{for(n.s();!(r=n.n()).done;){var i=X(r.value,!0);if(i)return i}}catch(e){n.e(e)}finally{n.f()}return(0,a.warn)("Unsupported blend mode Array: ".concat(e)),"source-over"}if(!(e instanceof o.Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}return t?null:((0,a.warn)("Unsupported blend mode: ".concat(e.name)),"source-over")}function H(e){e.fn===a.OPS.paintImageMaskXObject&&e.args[0]&&e.args[0].count>0&&e.args[0].count++}var q=function(){function e(){_(this,e),this.reset()}return R(e,[{key:"check",value:function(){return!(++this.checked0&&void 0!==arguments[0]?arguments[0]:null,t=Object.create(this);return t.options=Object.assign(Object.create(null),this.options,e),t}},{key:"hasBlendModes",value:function(e,t){if(!(e instanceof o.Dict))return!1;if(e.objId&&t.has(e.objId))return!1;var r=new o.RefSet(t);e.objId&&r.put(e.objId);for(var n=[e],i=this.xref;n.length;){var s=n.shift(),c=s.get("ExtGState");if(c instanceof o.Dict){var u,l=N(c.getRawValues());try{for(l.s();!(u=l.n()).done;){var f=u.value;if(f instanceof o.Ref){if(r.has(f))continue;try{f=i.fetch(f)}catch(e){r.put(f),(0,a.info)('hasBlendModes - ignoring ExtGState: "'.concat(e,'".'));continue}}if(f instanceof o.Dict){f.objId&&r.put(f.objId);var h=f.get("BM");if(h instanceof o.Name){if("Normal"!==h.name)return!0}else if(void 0!==h&&Array.isArray(h)){var d,p=N(h);try{for(p.s();!(d=p.n()).done;){var g=d.value;if(g instanceof o.Name&&"Normal"!==g.name)return!0}}catch(e){p.e(e)}finally{p.f()}}}}}catch(e){l.e(e)}finally{l.f()}}var v=s.get("XObject");if(v instanceof o.Dict){var y,b=N(v.getRawValues());try{for(b.s();!(y=b.n()).done;){var w=y.value;if(w instanceof o.Ref){if(r.has(w))continue;try{w=i.fetch(w)}catch(e){r.put(w),(0,a.info)('hasBlendModes - ignoring XObject: "'.concat(e,'".'));continue}}if(w instanceof m.BaseStream){w.dict.objId&&r.put(w.dict.objId);var k=w.dict.get("Resources");k instanceof o.Dict&&(k.objId&&r.has(k.objId)||(n.push(k),k.objId&&r.put(k.objId)))}}}catch(e){b.e(e)}finally{b.f()}}}var S,x=N(r);try{for(x.s();!(S=x.n()).done;){var O=S.value;t.put(O)}}catch(e){x.e(e)}finally{x.f()}return!1}},{key:"fetchBuiltInCMap",value:(D=M(E().mark((function e(t){var r,n,i,o;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.builtInCMapCache.get(t))){e.next=3;break}return e.abrupt("return",r);case 3:if(null===this.options.cMapUrl){e.next=19;break}return i="".concat(this.options.cMapUrl).concat(t,".bcmap"),e.next=7,fetch(i);case 7:if((o=e.sent).ok){e.next=10;break}throw new Error('fetchBuiltInCMap: failed to fetch file "'.concat(i,'" with "').concat(o.statusText,'".'));case 10:return e.t0=Uint8Array,e.next=13,o.arrayBuffer();case 13:e.t1=e.sent,e.t2=new e.t0(e.t1),e.t3=a.CMapCompressionType.BINARY,n={cMapData:e.t2,compressionType:e.t3},e.next=22;break;case 19:return e.next=21,this.handler.sendWithPromise("FetchBuiltInCMap",{name:t});case 21:n=e.sent;case 22:return n.compressionType!==a.CMapCompressionType.NONE&&this.builtInCMapCache.set(t,n),e.abrupt("return",n);case 24:case"end":return e.stop()}}),e,this)}))),function(e){return D.apply(this,arguments)})},{key:"fetchStandardFontData",value:(L=M(E().mark((function e(t){var r,n,i,o,s,c;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this.standardFontDataCache.get(t))){e.next=3;break}return e.abrupt("return",new y.Stream(r));case 3:if(!this.options.useSystemFonts||"Symbol"===t||"ZapfDingbats"===t){e.next=5;break}return e.abrupt("return",null);case 5:if(n=(0,l.getFontNameToFileMap)(),i=n[t],null===this.options.standardFontDataUrl){e.next=20;break}return s="".concat(this.options.standardFontDataUrl).concat(i),e.next=10,fetch(s);case 10:if((c=e.sent).ok){e.next=15;break}(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(s,'" with "').concat(c.statusText,'".')),e.next=18;break;case 15:return e.next=17,c.arrayBuffer();case 17:o=e.sent;case 18:e.next=29;break;case 20:return e.prev=20,e.next=23,this.handler.sendWithPromise("FetchStandardFontData",{filename:i});case 23:o=e.sent,e.next=29;break;case 26:e.prev=26,e.t0=e.catch(20),(0,a.warn)('fetchStandardFontData: failed to fetch file "'.concat(i,'" with "').concat(e.t0,'".'));case 29:if(o){e.next=31;break}return e.abrupt("return",null);case 31:return this.standardFontDataCache.set(t,o),e.abrupt("return",new y.Stream(o));case 33:case"end":return e.stop()}}),e,this,[[20,26]])}))),function(e){return L.apply(this,arguments)})},{key:"buildFormXObject",value:(j=M(E().mark((function e(t,r,n,i,s,c,u){var l,f,h,d,p,g,v,y,m,b,k;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l=r.dict,f=l.getArray("Matrix"),h=l.getArray("BBox"),h=Array.isArray(h)&&4===h.length?a.Util.normalizeRect(h):null,!l.has("OC")){e.next=8;break}return e.next=7,this.parseMarkedContentProps(l.get("OC"),t);case 7:d=e.sent;case 8:if(void 0!==d&&i.addOp(a.OPS.beginMarkedContentProps,["OC",d]),!(g=l.get("Group"))){e.next=29;break}if(p={matrix:f,bbox:h,smask:n,isolated:!1,knockout:!1},v=g.get("S"),y=null,!(0,o.isName)(v,"Transparency")){e.next=27;break}if(p.isolated=g.get("I")||!1,p.knockout=g.get("K")||!1,!g.has("CS")){e.next=27;break}if(m=g.getRaw("CS"),!(b=w.ColorSpace.getCached(m,this.xref,u))){e.next=24;break}y=b,e.next=27;break;case 24:return e.next=26,this.parseColorSpace({cs:m,resources:t,localColorSpaceCache:u});case 26:y=e.sent;case 27:n&&n.backdrop&&(y=y||w.ColorSpace.singletons.rgb,n.backdrop=y.getRgb(n.backdrop,0)),i.addOp(a.OPS.beginGroup,[p]);case 29:return k=g?[f,null]:[f,h],i.addOp(a.OPS.paintFormXObjectBegin,k),e.abrupt("return",this.getOperatorList({stream:r,task:s,resources:l.get("Resources")||t,operatorList:i,initialState:c}).then((function(){i.addOp(a.OPS.paintFormXObjectEnd,[]),g&&i.addOp(a.OPS.endGroup,[p]),void 0!==d&&i.addOp(a.OPS.endMarkedContent,[])})));case 32:case"end":return e.stop()}}),e,this)}))),function(e,t,r,n,a,i,o){return j.apply(this,arguments)})},{key:"_sendImgData",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||r?this.handler.send("commonobj",[e,"Image",t],n):this.handler.send("obj",[e,this.pageIndex,"Image",t],n)}},{key:"buildPaintImageXObject",value:(x=M(E().mark((function e(t){var r,n,i,o,s,c,u,l,f,h,d,p,g,v,y,m,b,w,S,x,O,A,C,F,T,I,j,M=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.resources,n=t.image,i=t.isInline,o=void 0!==i&&i,s=t.operatorList,c=t.cacheKey,u=t.localImageCache,l=t.localColorSpaceCache,f=n.dict,h=f.objId,d=f.get("W","Width"),p=f.get("H","Height"),d&&"number"==typeof d&&p&&"number"==typeof p){e.next=8;break}return(0,a.warn)("Image dimensions are missing, or not numbers."),e.abrupt("return");case 8:if(!(-1!==(g=this.options.maxImageSize)&&d*p>g)){e.next=15;break}if(v="Image exceeded maximum allowed size and was removed.",!this.options.ignoreErrors){e.next=14;break}return(0,a.warn)(v),e.abrupt("return");case 14:throw new Error(v);case 15:if(!f.has("OC")){e.next=19;break}return e.next=18,this.parseMarkedContentProps(f.get("OC"),r);case 18:y=e.sent;case 19:if(!f.get("IM","ImageMask")){e.next=44;break}if(w=f.get("I","Interpolate"),S=d+7>>3,x=n.getBytes(S*p),O=f.getArray("D","Decode"),!this.parsingType3Font){e.next=32;break}return(m=P.PDFImage.createRawMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w})).cached=!!c,b=[m],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 32:if(!(m=P.PDFImage.createMask({imgArray:x,width:d,height:p,imageIsFromDecodeStream:n instanceof k.DecodeStream,inverseDecode:!!O&&O[0]>0,interpolate:w,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported})).isSingleOpaquePixel){e.next=37;break}return s.addImageOps(a.OPS.paintSolidColorImageMask,[],y),c&&u.set(c,h,{fn:a.OPS.paintSolidColorImageMask,args:[],optionalContent:y}),e.abrupt("return");case 37:return A="mask_".concat(this.idFactory.createObjId()),s.addDependency(A),this._sendImgData(A,m),b=[{data:A,width:m.width,height:m.height,interpolate:m.interpolate,count:1}],s.addImageOps(a.OPS.paintImageMaskXObject,b,y),c&&u.set(c,h,{fn:a.OPS.paintImageMaskXObject,args:b,optionalContent:y}),e.abrupt("return");case 44:if(C=f.get("SM","SMask")||!1,F=f.get("Mask")||!1,!o||C||F||!(d+p<200)){e.next=52;break}return T=new P.PDFImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}),m=T.createImageData(!0),s.addImageOps(a.OPS.paintInlineImageXObject,[m],y),e.abrupt("return");case 52:I="img_".concat(this.idFactory.createObjId()),j=!1,this.parsingType3Font?I="".concat(this.idFactory.getDocId(),"_type3_").concat(I):h&&(j=this.globalImageCache.shouldCache(h,this.pageIndex))&&(I="".concat(this.idFactory.getDocId(),"_").concat(I)),s.addDependency(I),b=[I,d,p],P.PDFImage.buildImage({xref:this.xref,res:r,image:n,isInline:o,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:l}).then((function(e){return m=e.createImageData(!1),c&&h&&j&&M.globalImageCache.addByteSize(h,m.data.length),M._sendImgData(I,m,j)})).catch((function(e){return(0,a.warn)('Unable to decode image "'.concat(I,'": "').concat(e,'".')),M._sendImgData(I,null,j)})),s.addImageOps(a.OPS.paintImageXObject,b,y),c&&(u.set(c,h,{fn:a.OPS.paintImageXObject,args:b,optionalContent:y}),h&&((0,a.assert)(!o,"Cannot cache an inline image globally."),this.globalImageCache.addPageIndex(h,this.pageIndex),j&&this.globalImageCache.setData(h,{objId:I,fn:a.OPS.paintImageXObject,args:b,optionalContent:y,byteSize:0})));case 59:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"handleSMask",value:function(e,t,r,n,a,i){var o=e.get("G"),s={subtype:e.get("S").name,backdrop:e.get("BC")},c=e.get("TR");if((0,p.isPDFFunction)(c)){for(var u=this._pdfFunctionFactory.create(c),l=new Uint8Array(256),f=new Float32Array(1),h=0;h<256;h++)f[0]=h/255,u(f,0,f,0),l[h]=255*f[0]|0;s.transferMap=l}return this.buildFormXObject(t,o,s,r,n,a.state.clone(),i)}},{key:"handleTransferFunction",value:function(e){var t;if(Array.isArray(e))t=e;else{if(!(0,p.isPDFFunction)(e))return null;t=[e]}var r,n=[],a=0,i=0,s=N(t);try{for(s.s();!(r=s.n()).done;){var c=r.value,u=this.xref.fetchIfRef(c);if(a++,(0,o.isName)(u,"Identity"))n.push(null);else{if(!(0,p.isPDFFunction)(u))return null;for(var l=this._pdfFunctionFactory.create(u),f=new Uint8Array(256),h=new Float32Array(1),d=0;d<256;d++)h[0]=d/255,l(h,0,h,0),f[d]=255*h[0]|0;n.push(f),i++}}}catch(e){s.e(e)}finally{s.f()}return 1!==a&&4!==a||0===i?null:n}},{key:"handleTilingType",value:function(e,t,r,n,i,s,c,u){var l=this,h=new F.OperatorList,d=o.Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),r]});return this.getOperatorList({stream:n,task:c,resources:d,operatorList:h}).then((function(){var r=h.getIR(),n=(0,f.getTilingPatternIR)(r,i,t);s.addDependencies(h.dependencies),s.addOp(e,n),i.objId&&u.set(null,i.objId,{operatorListIR:r,dict:i})})).catch((function(e){if(!(e instanceof a.AbortException)){if(l.options.ignoreErrors)return l.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorTilingPattern}),void(0,a.warn)('handleTilingType - ignoring pattern: "'.concat(e,'".'));throw e}}))}},{key:"handleSetFont",value:function(e,t,r,n,i,c){var u=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,f=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=t&&t[0]instanceof o.Name?t[0].name:null;return this.loadFont(h,r,e,l,f).then((function(t){return t.font.isType3Font?t.loadType3Data(u,e,i).then((function(){return n.addDependencies(t.type3Dependencies),t})).catch((function(e){return u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontLoadType3}),new z({loadedName:"g_font_error",font:new s.ErrorFont("Type3 font load error: ".concat(e)),dict:t.font,evaluatorOptions:u.options})})):t})).then((function(e){return c.font=e.font,e.send(u.handler),e.loadedName}))}},{key:"handleText",value:function(t,r){var n=r.font,i=n.charsToGlyphs(t);return n.data&&(r.textRenderingMode&a.TextRenderingMode.ADD_TO_PATH_FLAG||"Pattern"===r.fillColorSpace.name||n.disableFontFace||this.options.disableFontFace)&&e.buildFontPaths(n,i,this.handler,this.options),i}},{key:"ensureStateFont",value:function(e){if(!e.font){var t=new a.FormatError("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors)return this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontState}),void(0,a.warn)('ensureStateFont: "'.concat(t,'".'));throw t}}},{key:"setGState",value:(g=M(E().mark((function e(t){var r,n,i,s,c,u,l,f,h,d,p,g,v,y,m,b=this;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.resources,n=t.gState,i=t.operatorList,s=t.cacheKey,c=t.task,u=t.stateManager,l=t.localGStateCache,f=t.localColorSpaceCache,h=n.objId,d=!0,p=[],g=Promise.resolve(),v=N(n.getKeys());try{for(m=function(){var e=y.value,t=n.get(e);switch(e){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":p.push([e,t]);break;case"Font":d=!1,g=g.then((function(){return b.handleSetFont(r,null,t[0],i,c,u.state).then((function(r){i.addDependency(r),p.push([e,[r,t[1]]])}))}));break;case"BM":p.push([e,X(t)]);break;case"SMask":if((0,o.isName)(t,"None")){p.push([e,!1]);break}t instanceof o.Dict?(d=!1,g=g.then((function(){return b.handleSMask(t,r,i,c,u,f)})),p.push([e,!0])):(0,a.warn)("Unsupported SMask type");break;case"TR":var s=b.handleTransferFunction(t);p.push([e,s]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":(0,a.info)("graphic state operator "+e);break;default:(0,a.info)("Unknown graphic state operator "+e)}},v.s();!(y=v.n()).done;)m()}catch(e){v.e(e)}finally{v.f()}return e.abrupt("return",g.then((function(){p.length>0&&i.addOp(a.OPS.setGState,[p]),d&&l.set(s,h,p)})));case 8:case"end":return e.stop()}}),e)}))),function(e){return g.apply(this,arguments)})},{key:"loadFont",value:function(t,r,n){var i,u=this,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,h=function(){var e=M(E().mark((function e(){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new z({loadedName:"g_font_error",font:new s.ErrorFont('Font "'.concat(t,'" is not available.')),dict:r,evaluatorOptions:u.options}));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=this.xref;if(r)r instanceof o.Ref&&(i=r);else{var p=n.get("Font");p&&(i=p.getRaw(t))}if(!i){var g='Font "'.concat(t||r&&r.toString(),'" is not available');if(!this.options.ignoreErrors&&!this.parsingType3Font)return(0,a.warn)("".concat(g,".")),h();this.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontMissing}),(0,a.warn)("".concat(g," -- attempting to fallback to a default font.")),i=l||e.fallbackFontDict}if(this.parsingType3Font&&this.type3FontRefs.has(i))return h();if(this.fontCache.has(i))return this.fontCache.get(i);if(!((r=d.fetchIfRef(i))instanceof o.Dict))return h();if(r.cacheKey&&this.fontCache.has(r.cacheKey))return this.fontCache.get(r.cacheKey);var v,y=(0,a.createPromiseCapability)();try{(v=this.preEvaluateFont(r)).cssFontInfo=f}catch(e){return(0,a.warn)('loadFont - preEvaluateFont failed: "'.concat(e,'".')),h()}var m,b=v,w=b.descriptor,k=b.hash,S=i instanceof o.Ref;if(S&&(m="f".concat(i.toString())),k&&w instanceof o.Dict){w.fontAliases||(w.fontAliases=Object.create(null));var x=w.fontAliases;if(x[k]){var O=x[k].aliasRef;if(S&&O&&this.fontCache.has(O))return this.fontCache.putAlias(i,O),this.fontCache.get(i)}else x[k]={fontID:this.idFactory.createFontId()};S&&(x[k].aliasRef=i),m=x[k].fontID}return S?this.fontCache.put(i,y.promise):(m||(m=this.idFactory.createFontId()),r.cacheKey="cacheKey_".concat(m),this.fontCache.put(r.cacheKey,y.promise)),(0,a.assert)(m&&m.startsWith("f"),'The "fontID" must be (correctly) defined.'),r.loadedName="".concat(this.idFactory.getDocId(),"_").concat(m),this.translateFont(v).then((function(e){void 0!==e.fontType&&d.stats.addFontType(e.fontType),y.resolve(new z({loadedName:r.loadedName,font:e,dict:r,evaluatorOptions:u.options}))})).catch((function(e){u.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorFontTranslate}),(0,a.warn)('loadFont - translateFont failed: "'.concat(e,'".'));try{var t=w&&w.get("FontFile3"),n=t&&t.get("Subtype"),i=(0,c.getFontType)(v.type,n&&n.name);void 0!==i&&d.stats.addFontType(i)}catch(e){}y.resolve(new z({loadedName:r.loadedName,font:new s.ErrorFont(e instanceof Error?e.message:e),dict:r,evaluatorOptions:u.options}))})),y.promise}},{key:"buildPath",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=e.length-1;if(r||(r=[]),i<0||e.fnArray[i]!==a.OPS.constructPath){var o;switch(n&&((0,a.warn)('Encountered path operator "'.concat(t,'" inside of a text object.')),e.addOp(a.OPS.save,null)),t){case a.OPS.rectangle:var s=r[0]+r[2],c=r[1]+r[3];o=[Math.min(r[0],s),Math.max(r[0],s),Math.min(r[1],c),Math.max(r[1],c)];break;case a.OPS.moveTo:case a.OPS.lineTo:o=[r[0],r[0],r[1],r[1]];break;default:o=[1/0,-1/0,1/0,-1/0]}e.addOp(a.OPS.constructPath,[[t],r,o]),n&&e.addOp(a.OPS.restore,null)}else{var u,l=e.argsArray[i];l[0].push(t),(u=l[1]).push.apply(u,I(r));var f=l[2];switch(t){case a.OPS.rectangle:var h=r[0]+r[2],d=r[1]+r[3];f[0]=Math.min(f[0],r[0],h),f[1]=Math.max(f[1],r[0],h),f[2]=Math.min(f[2],r[1],d),f[3]=Math.max(f[3],r[1],d);break;case a.OPS.moveTo:case a.OPS.lineTo:f[0]=Math.min(f[0],r[0]),f[1]=Math.max(f[1],r[0]),f[2]=Math.min(f[2],r[1]),f[3]=Math.max(f[3],r[1])}}}},{key:"parseColorSpace",value:function(e){var t=this,r=e.cs,n=e.resources,i=e.localColorSpaceCache;return w.ColorSpace.parseAsync({cs:r,xref:this.xref,resources:n,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch((function(e){if(e instanceof a.AbortException)return null;if(t.options.ignoreErrors)return t.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorColorSpace}),(0,a.warn)('parseColorSpace - ignoring ColorSpace: "'.concat(e,'".')),null;throw e}))}},{key:"parseShading",value:function(e){var t=e.shading,r=e.resources,n=e.localColorSpaceCache,a=e.localShadingPatternCache,i=a.get(t);if(!i){var o=f.Pattern.parseShading(t,this.xref,r,this.handler,this._pdfFunctionFactory,n).getIR();i="pattern_".concat(this.idFactory.createObjId()),a.set(t,i),this.handler.send("obj",[i,this.pageIndex,"Pattern",o])}return i}},{key:"handleColorN",value:function(e,t,r,n,i,s,c,u,l,h){var d=r.pop();if(d instanceof o.Name){var p=i.getRaw(d.name),g=p instanceof o.Ref&&l.getByRef(p);if(g)try{var v=n.base?n.base.getRgb(r,0):null,y=(0,f.getTilingPatternIR)(g.operatorListIR,g.dict,v);return void e.addOp(t,y)}catch(e){}var b=this.xref.fetchIfRef(p);if(b){var w=b instanceof m.BaseStream?b.dict:b,k=w.get("PatternType");if(1===k){var S=n.base?n.base.getRgb(r,0):null;return this.handleTilingType(t,S,s,b,w,e,c,l)}if(2===k){var x=w.get("Shading"),O=w.getArray("Matrix"),A=this.parseShading({shading:x,resources:s,localColorSpaceCache:u,localShadingPatternCache:h});return void e.addOp(t,["Shading",A,O])}throw new a.FormatError("Unknown PatternType: ".concat(k))}}throw new a.FormatError("Unknown PatternName: ".concat(d))}},{key:"_parseVisibilityExpression",value:function(e,t,r){if(++t>10)(0,a.warn)("Visibility expression is too deeply nested");else{var n=e.length,i=this.xref.fetchIfRef(e[0]);if(!(n<2)&&i instanceof o.Name){switch(i.name){case"And":case"Or":case"Not":r.push(i.name);break;default:return void(0,a.warn)("Invalid operator ".concat(i.name," in visibility expression"))}for(var s=1;s0)){e.next=22;break}return e.abrupt("return",{type:"OCMD",expression:u});case 22:if(l=n.get("OCGs"),!(Array.isArray(l)||l instanceof o.Dict)){e.next=29;break}if(f=[],Array.isArray(l)){h=N(l);try{for(h.s();!(d=h.n()).done;)p=d.value,f.push(p.toString())}catch(e){h.e(e)}finally{h.f()}}else f.push(l.objId);return e.abrupt("return",{type:s,ids:f,policy:n.get("P")instanceof o.Name?n.get("P").name:null,expression:null});case 29:if(!(l instanceof o.Ref)){e.next=31;break}return e.abrupt("return",{type:s,id:l.toString()});case 31:return e.abrupt("return",null);case 32:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"getOperatorList",value:function(e){var t=this,r=e.stream,n=e.task,i=e.resources,s=e.operatorList,c=e.initialState,u=void 0===c?null:c,l=e.fallbackFontDict,f=void 0===l?null:l;if(i=i||o.Dict.empty,u=u||new Y,!s)throw new Error('getOperatorList: missing "operatorList" parameter');var h=this,d=this.xref,p=!1,g=new v.LocalImageCache,y=new v.LocalColorSpaceCache,b=new v.LocalGStateCache,k=new v.LocalTilingPatternCache,S=new Map,x=i.get("XObject")||o.Dict.empty,O=i.get("Pattern")||o.Dict.empty,A=new W(u),C=new K(r,d,A),F=new q;function P(e){for(var t=0,r=C.savedStatesDepth;t0&&s.addOp(a.OPS.setGState,[Q]),_=null;continue}}return void c(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var c=r.get(E);if(!(c instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");h.setGState({resources:i,gState:c,operatorList:s,cacheKey:E,task:n,stateManager:A,localGStateCache:b,localColorSpaceCache:y}).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorExtGState}),void(0,a.warn)('getOperatorList - ignoring ExtGState: "'.concat(e,'".'));throw e}})));case a.OPS.moveTo:case a.OPS.lineTo:case a.OPS.curveTo:case a.OPS.curveTo2:case a.OPS.curveTo3:case a.OPS.closePath:case a.OPS.rectangle:h.buildPath(s,L,_,p);continue;case a.OPS.markPoint:case a.OPS.markPointProps:case a.OPS.beginCompat:case a.OPS.endCompat:continue;case a.OPS.beginMarkedContentProps:if(!(_[0]instanceof o.Name)){(0,a.warn)("Expected name for beginMarkedContentProps arg0=".concat(_[0]));continue}if("OC"===_[0].name)return void c(h.parseMarkedContentProps(_[1],i).then((function(e){s.addOp(a.OPS.beginMarkedContentProps,["OC",e])})).catch((function(e){if(!(e instanceof a.AbortException)){if(h.options.ignoreErrors)return h.handler.send("UnsupportedFeature",{featureId:a.UNSUPPORTED_FEATURES.errorMarkedContent}),void(0,a.warn)('getOperatorList - ignoring beginMarkedContentProps: "'.concat(e,'".'));throw e}})));_=[_[0].name,_[1]instanceof o.Dict?_[1].get("MCID"):null];break;case a.OPS.beginMarkedContent:case a.OPS.endMarkedContent:default:if(null!==_){for(l=0,v=_.length;l0&&(t[3]*=r*P.fontMatrix[3])}return a.Util.transform(P.ctm,a.Util.transform(P.textMatrix,t))}function G(){if(x.initialized)return x;var e=P,t=e.font,r=e.loadedName;g.has(r)||(g.add(r),S.styles[r]={fontFamily:t.fallbackName,ascent:t.ascent,descent:t.descent,vertical:t.vertical}),x.fontName=r;var n=x.transform=H();t.vertical?(x.width=x.totalWidth=Math.hypot(n[0],n[1]),x.height=x.totalHeight=0,x.vertical=!0):(x.width=x.totalWidth=0,x.height=x.totalHeight=Math.hypot(n[2],n[3]),x.vertical=!1);var a=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),i=Math.hypot(P.ctm[0],P.ctm[1]);return x.textAdvanceScale=i*a,x.trackingSpaceMin=P.fontSize*I,x.notASpace=P.fontSize*E,x.negativeSpaceMax=P.fontSize*j,x.spaceInFlowMin=P.fontSize*M,x.spaceInFlowMax=P.fontSize*_,x.hasEOL=!1,x.initialized=!0,x}function z(){if(x.initialized){var e=Math.hypot(P.textLineMatrix[0],P.textLineMatrix[1]),t=Math.hypot(P.ctm[0],P.ctm[1])*e;t!==x.textAdvanceScale&&(x.vertical?(x.totalHeight+=x.height*x.textAdvanceScale,x.height=0):(x.totalWidth+=x.width*x.textAdvanceScale,x.width=0),x.textAdvanceScale=t)}}function Y(e,t){return L.loadFont(e,t,i).then((function(e){return e.font.isType3Font?e.loadType3Data(L,i,n).catch((function(){})).then((function(){return e})):e})).then((function(e){P.loadedName=e.loadedName,P.font=e.font,P.fontMatrix=e.font.fontMatrix||a.FONT_IDENTITY_MATRIX}))}function J(e,t,r){var n=Math.hypot(r[0],r[1]);return[(r[0]*e+r[1]*t)/n,(r[2]*e+r[3]*t)/n]}function Z(){var e=H(),t=e[4],r=e[5],n=t-y[0],a=r-y[1];if(n<0||n>y[2]||a<0||a>y[3])return!1;if(!l||!P.font||!x.prevTransform)return!0;var i=x.prevTransform[4],o=x.prevTransform[5];if(i===t&&o===r)return!0;var s=-1;switch(e[0]&&0===e[1]&&0===e[2]?s=e[0]>0?0:180:e[1]&&0===e[0]&&0===e[3]&&(s=e[1]>0?90:270),s){case 0:break;case 90:var c=[r,t];t=c[0],r=c[1];var u=[o,i];i=u[0],o=u[1];break;case 180:var f=[-t,-r,-i,-o];t=f[0],r=f[1],i=f[2],o=f[3];break;case 270:var h=[-r,-t];t=h[0],r=h[1];var d=[-o,-i];i=d[0],o=d[1];break;default:var p=T(J(t,r,e),2);t=p[0],r=p[1];var g=T(J(i,o,x.prevTransform),2);i=g[0],o=g[1]}if(P.font.vertical){var v=(o-r)/x.textAdvanceScale,m=t-i,b=Math.sign(x.height);return v.5*x.width?(ee(),!0):(F(),re(),!0):Math.abs(m)>x.width?(ee(),!0):(v<=b*x.notASpace&&F(),v<=b*x.trackingSpaceMin?x.height+=v:te(v,x.prevTransform,b)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:0,height:Math.abs(v),transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.height+=v),!0)}var w=(t-i)/x.textAdvanceScale,k=r-o,O=Math.sign(x.width);return w.5*x.height?(ee(),!0):(F(),re(),!0):Math.abs(k)>x.height?(ee(),!0):(w<=O*x.notASpace&&F(),w<=O*x.trackingSpaceMin?x.width+=w:te(w,x.prevTransform,O)||(0===x.str.length?(F(),S.items.push({str:" ",dir:"ltr",width:Math.abs(w),height:0,transform:x.prevTransform,fontName:x.fontName,hasEOL:!1})):x.width+=w),!0)}function Q(e){var t=e.chars,r=e.extraSpacing,n=P.font;if(t)for(var a=n.charsToGlyphs(t),i=P.fontMatrix[0]*P.fontSize,o=0,s=a.length;o0&&void 0!==arguments[0]&&arguments[0],t=S.items.length;0!==t&&(e&&t<10||(d.enqueue(S,t),S.items=[],S.styles=Object.create(null)))}var ae=new q;return new Promise((function e(t,r){var s=function(n){ne(!0),Promise.all([n,d.ready]).then((function(){try{e(t,r)}catch(e){r(e)}}),r)};n.ensureNotTerminated(),ae.reset();for(var u,f={},p=[];!(u=ae.check())&&(p.length=0,f.args=p,X.read(f));){P=c.state;var v=f.fn;switch(p=f.args,0|v){case a.OPS.setFont:var b=p[0].name,w=p[1];if(P.font&&b===P.fontName&&w===P.fontSize)break;return re(),P.fontName=b,P.fontSize=w,void s(Y(b,null));case a.OPS.setTextRise:P.textRise=p[0];break;case a.OPS.setHScale:P.textHScale=p[0]/100;break;case a.OPS.setLeading:P.leading=p[0];break;case a.OPS.moveText:P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.setLeadingMoveText:P.leading=-p[1],P.translateTextLineMatrix(p[0],p[1]),P.textMatrix=P.textLineMatrix.slice();break;case a.OPS.nextLine:P.carriageReturn();break;case a.OPS.setTextMatrix:P.setTextMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),P.setTextLineMatrix(p[0],p[1],p[2],p[3],p[4],p[5]),z();break;case a.OPS.setCharSpacing:P.charSpacing=p[0];break;case a.OPS.setWordSpacing:P.wordSpacing=p[0];break;case a.OPS.beginText:P.textMatrix=a.IDENTITY_MATRIX.slice(),P.textLineMatrix=a.IDENTITY_MATRIX.slice();break;case a.OPS.showSpacedText:if(!c.state.font){L.ensureStateFont(c.state);continue}for(var x=(P.font.vertical?1:-1)*P.fontSize/1e3,O=p[0],A=0,C=O.length;A0){var E=N.join("");N.length=0,Q({chars:E,extraSpacing:0})}break;case a.OPS.showText:if(!c.state.font){L.ensureStateFont(c.state);continue}Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.carriageReturn(),Q({chars:p[0],extraSpacing:0});break;case a.OPS.nextLineSetSpacingShowText:if(!c.state.font){L.ensureStateFont(c.state);continue}P.wordSpacing=p[0],P.charSpacing=p[1],P.carriageReturn(),Q({chars:p[2],extraSpacing:0});break;case a.OPS.paintXObject:re(),D||(D=i.get("XObject")||o.Dict.empty);var j=p[0]instanceof o.Name,M=p[0].name;if(j&&B.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("XObject must be referred to by name.");var r=D.getRaw(M);if(r instanceof o.Ref){if(B.getByRef(r))return void e();if(L.globalImageCache.getData(r,L.pageIndex))return void e();r=R.fetch(r)}if(!(r instanceof m.BaseStream))throw new a.FormatError("XObject should be a stream");var s=r.dict.get("Subtype");if(!(s instanceof o.Name))throw new a.FormatError("XObject should have a Name subtype");if("Form"!==s.name)return B.set(M,r.dict.objId,!0),void e();var u=c.state.clone(),f=new W(u),p=r.dict.getArray("Matrix");Array.isArray(p)&&6===p.length&&f.transform(p),ne();var v={enqueueInvoked:!1,enqueue:function(e,t){this.enqueueInvoked=!0,d.enqueue(e,t)},get desiredSize(){return d.desiredSize},get ready(){return d.ready}};L.getTextContent({stream:r,task:n,resources:r.dict.get("Resources")||i,stateManager:f,combineTextItems:l,includeMarkedContent:h,sink:v,seenStyles:g,viewBox:y,markedContentData:k}).then((function(){v.enqueueInvoked||B.set(M,r.dict.objId,!0),e()}),t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring XObject: "'.concat(e,'".'))}})));case a.OPS.setGState:if(j=p[0]instanceof o.Name,M=p[0].name,j&&U.getByName(M))break;return void s(new Promise((function(e,t){if(!j)throw new a.FormatError("GState must be referred to by name.");var r=i.get("ExtGState");if(!(r instanceof o.Dict))throw new a.FormatError("ExtGState should be a dictionary.");var n=r.get(M);if(!(n instanceof o.Dict))throw new a.FormatError("GState should be a dictionary.");var s=n.get("Font");if(!s)return U.set(M,n.objId,!0),void e();re(),P.fontName=null,P.fontSize=s[1],Y(null,s[0]).then(e,t)})).catch((function(e){if(!(e instanceof a.AbortException)){if(!L.options.ignoreErrors)throw e;(0,a.warn)('getTextContent - ignoring ExtGState: "'.concat(e,'".'))}})));case a.OPS.beginMarkedContent:re(),h&&(k.level++,S.items.push({type:"beginMarkedContent",tag:p[0]instanceof o.Name?p[0].name:null}));break;case a.OPS.beginMarkedContentProps:if(re(),h){k.level++;var _=null;p[1]instanceof o.Dict&&(_=p[1].get("MCID")),S.items.push({type:"beginMarkedContentProps",id:Number.isInteger(_)?"".concat(L.idFactory.getPageObjId(),"_mcid").concat(_):null,tag:p[0]instanceof o.Name?p[0].name:null})}break;case a.OPS.endMarkedContent:if(re(),h){if(0===k.level)break;k.level--,S.items.push({type:"endMarkedContent"})}}if(S.items.length>=d.desiredSize){u=!0;break}}u?s($):(re(),ne(),t())})).catch((function(e){if(!(e instanceof a.AbortException)){if(t.options.ignoreErrors)return(0,a.warn)('getTextContent - ignoring errors during "'.concat(n.name,'" ')+'task: "'.concat(e,'".')),re(),void ne();throw e}}))}},{key:"extractDataStructures",value:function(e,t,r){var n,i=this,s=this.xref,l=this.readToUnicode(r.toUnicode||e.get("ToUnicode")||t.get("ToUnicode"));if(r.composite){var f=e.get("CIDSystemInfo");f instanceof o.Dict&&(r.cidSystemInfo={registry:(0,a.stringToPDFString)(f.get("Registry")),ordering:(0,a.stringToPDFString)(f.get("Ordering")),supplement:f.get("Supplement")});try{var h=e.get("CIDToGIDMap");h instanceof m.BaseStream&&(n=h.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;(0,a.warn)('extractDataStructures - ignoring CIDToGIDMap data: "'.concat(e,'".'))}}var d,p=[],g=null;if(e.has("Encoding")){if((d=e.get("Encoding"))instanceof o.Dict){if(g=(g=d.get("BaseEncoding"))instanceof o.Name?g.name:null,d.has("Differences")){var v,y=0,b=N(d.get("Differences"));try{for(b.s();!(v=b.n()).done;){var w=v.value,k=s.fetchIfRef(w);if("number"==typeof k)y=k;else{if(!(k instanceof o.Name))throw new a.FormatError("Invalid entry in 'Differences' array: ".concat(k));p[y++]=k.name}}}catch(e){b.e(e)}finally{b.f()}}}else if(d instanceof o.Name)g=d.name;else{var S="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new a.FormatError(S);(0,a.warn)(S)}"MacRomanEncoding"!==g&&"MacExpertEncoding"!==g&&"WinAnsiEncoding"!==g&&(g=null)}if(g)r.defaultEncoding=(0,u.getEncoding)(g);else{var x=!!(r.flags&c.FontFlags.Symbolic),O=!!(r.flags&c.FontFlags.Nonsymbolic);d=u.StandardEncoding,"TrueType"!==r.type||O||(d=u.WinAnsiEncoding),x&&(d=u.MacRomanEncoding,r.file&&!r.isInternalFont||(/Symbol/i.test(r.name)?d=u.SymbolSetEncoding:/Dingbats|Wingdings/i.test(r.name)&&(d=u.ZapfDingbatsEncoding))),r.defaultEncoding=d}return r.differences=p,r.baseEncodingName=g,r.hasEncoding=!!g||p.length>0,r.dict=e,l.then((function(e){return r.toUnicode=e,i.buildToUnicode(r)})).then((function(e){return r.toUnicode=e,n&&(r.cidToGidMap=i.readCidToGidMap(n,e)),r}))}},{key:"_simpleFontToUnicode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,a.assert)(!e.composite,"Must be a simple font.");var r=[],n=e.defaultEncoding.slice(),i=e.baseEncodingName,o=e.differences;for(var s in o){var c=o[s];".notdef"!==c&&(n[s]=c)}var l=(0,S.getGlyphsUnicode)();for(var f in n){var h=n[f];if(""!==h){var d=l[h];if(void 0===d){var p=0;switch(h[0]){case"G":3===h.length&&(p=parseInt(h.substring(1),16));break;case"g":5===h.length&&(p=parseInt(h.substring(1),16));break;case"C":case"c":if(h.length>=3&&h.length<=4){var g=h.substring(1);if(t){p=parseInt(g,16);break}if(p=+g,Number.isNaN(p)&&Number.isInteger(parseInt(g,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":-1!==(d=(0,A.getUnicodeForGlyph)(h,l))&&(p=d)}if(p>0&&p<=1114111&&Number.isInteger(p)){if(i&&p===+f){var v=(0,u.getEncoding)(i);if(v&&(h=v[f])){r[f]=String.fromCharCode(l[h]);continue}}r[f]=String.fromCodePoint(p)}}else r[f]=String.fromCharCode(d)}}return r}},{key:"buildToUnicode",value:(r=M(E().mark((function e(t){var r,n,s,c,u,l;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.hasIncludedToUnicodeMap=!!t.toUnicode&&t.toUnicode.length>0,!t.hasIncludedToUnicodeMap){e.next=4;break}return!t.composite&&t.hasEncoding&&(t.fallbackToUnicode=this._simpleFontToUnicode(t)),e.abrupt("return",t.toUnicode);case 4:if(t.composite){e.next=6;break}return e.abrupt("return",new d.ToUnicodeMap(this._simpleFontToUnicode(t)));case 6:if(!t.composite||(!t.cMap.builtInCMap||t.cMap instanceof i.IdentityCMap)&&("Adobe"!==t.cidSystemInfo.registry||"GB1"!==t.cidSystemInfo.ordering&&"CNS1"!==t.cidSystemInfo.ordering&&"Japan1"!==t.cidSystemInfo.ordering&&"Korea1"!==t.cidSystemInfo.ordering)){e.next=15;break}return r=t.cidSystemInfo,n=r.registry,s=r.ordering,c=o.Name.get("".concat(n,"-").concat(s,"-UCS2")),e.next=11,i.CMapFactory.create({encoding:c,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});case 11:return u=e.sent,l=[],t.cMap.forEach((function(e,t){if(t>65535)throw new a.FormatError("Max size of CID is 65,535");var r=u.lookup(t);r&&(l[e]=String.fromCharCode((r.charCodeAt(0)<<8)+r.charCodeAt(1)))})),e.abrupt("return",new d.ToUnicodeMap(l));case 15:return e.abrupt("return",new d.IdentityToUnicodeMap(t.firstChar,t.lastChar));case 16:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"readToUnicode",value:function(e){var t=this;return e?e instanceof o.Name?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){return e instanceof i.IdentityCMap?new d.IdentityToUnicodeMap(0,65535):new d.ToUnicodeMap(e.getMap())})):e instanceof m.BaseStream?i.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}).then((function(e){if(e instanceof i.IdentityCMap)return new d.IdentityToUnicodeMap(0,65535);var t=new Array(e.length);return e.forEach((function(e,r){if("number"!=typeof r){for(var n=[],a=0;a>1;(0!==i||t.has(o))&&(r[o]=i)}return r}},{key:"extractWidths",value:function(e,t,r){var n,a,i,s,u,l,f,h,d=this.xref,p=[],g=0,v=[];if(r.composite){if(g=e.has("DW")?e.get("DW"):1e3,h=e.get("W"))for(a=0,i=h.length;a1&&void 0!==arguments[1]?arguments[1]:NaN,r=a.Util.normalizeRect(e.argsArray[0].slice(2)),n=r[2]-r[0],i=r[3]-r[1],o=Math.hypot(n,i);0===n||0===i?(e.fnArray.splice(0,1),e.argsArray.splice(0,1)):(0===t||Math.round(o/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],r[0]),this._bbox[1]=Math.min(this._bbox[1],r[1]),this._bbox[2]=Math.max(this._bbox[2],r[2]),this._bbox[3]=Math.max(this._bbox[3],r[3]));for(var s=0,c=e.length;s0&&void 0!==arguments[0]?arguments[0]:new Y;_(this,e),this.state=t,this.stateStack=[]}return R(e,[{key:"save",value:function(){var e=this.state;this.stateStack.push(this.state),this.state=e.clone()}},{key:"restore",value:function(){var e=this.stateStack.pop();e&&(this.state=e)}},{key:"transform",value:function(e){this.state.ctm=a.Util.transform(this.state.ctm,e)}}]),e}(),V=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.fontName=null,this.fontSize=0,this.loadedName=null,this.font=null,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.textMatrix=a.IDENTITY_MATRIX.slice(),this.textLineMatrix=a.IDENTITY_MATRIX.slice(),this.charSpacing=0,this.wordSpacing=0,this.leading=0,this.textHScale=1,this.textRise=0}return R(e,[{key:"setTextMatrix",value:function(e,t,r,n,a,i){var o=this.textMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"setTextLineMatrix",value:function(e,t,r,n,a,i){var o=this.textLineMatrix;o[0]=e,o[1]=t,o[2]=r,o[3]=n,o[4]=a,o[5]=i}},{key:"translateTextMatrix",value:function(e,t){var r=this.textMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"translateTextLineMatrix",value:function(e,t){var r=this.textLineMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}},{key:"carriageReturn",value:function(){this.translateTextLineMatrix(0,-this.leading),this.textMatrix=this.textLineMatrix.slice()}},{key:"clone",value:function(){var e=Object.create(this);return e.textMatrix=this.textMatrix.slice(),e.textLineMatrix=this.textLineMatrix.slice(),e.fontMatrix=this.fontMatrix.slice(),e}}]),e}(),Y=function(){function e(){_(this,e),this.ctm=new Float32Array(a.IDENTITY_MATRIX),this.font=null,this.textRenderingMode=a.TextRenderingMode.FILL,this.fillColorSpace=w.ColorSpace.singletons.gray,this.strokeColorSpace=w.ColorSpace.singletons.gray}return R(e,[{key:"clone",value:function(){return Object.create(this)}}]),e}(),K=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new W;_(this,e),this.parser=new g.Parser({lexer:new g.Lexer(t,e.opMap),xref:r}),this.stateManager=n,this.nonProcessedArgs=[],this._isPathOp=!1,this._numInvalidPathOPS=0}return R(e,[{key:"savedStatesDepth",get:function(){return this.stateManager.stateStack.length}},{key:"read",value:function(t){for(var r=t.args;;){var n=this.parser.getObj();if(n instanceof o.Cmd){var i=n.cmd,s=e.opMap[i];if(!s){(0,a.warn)('Unknown command "'.concat(i,'".'));continue}var c=s.id,u=s.numArgs,l=null!==r?r.length:0;if(this._isPathOp||(this._numInvalidPathOPS=0),this._isPathOp=c>=a.OPS.moveTo&&c<=a.OPS.endPath,s.variableArgs)l>u&&(0,a.info)("Command ".concat(i,": expected [0, ").concat(u,"] args, ")+"but received ".concat(l," args."));else{if(l!==u){for(var f=this.nonProcessedArgs;l>u;)f.push(r.shift()),l--;for(;le.MAX_INVALID_PATH_OPS)throw new a.FormatError("Invalid ".concat(h));(0,a.warn)("Skipping ".concat(h)),null!==r&&(r.length=0);continue}}return this.preprocessCommand(c,r),t.fn=c,t.args=r,!0}if(n===o.EOF)return!1;if(null!==n&&(null===r&&(r=[]),r.push(n),r.length>33))throw new a.FormatError("Too many arguments")}}},{key:"preprocessCommand",value:function(e,t){switch(0|e){case a.OPS.save:this.stateManager.save();break;case a.OPS.restore:this.stateManager.restore();break;case a.OPS.transform:this.stateManager.transform(t)}}}],[{key:"opMap",get:function(){var e=(0,x.getLookupTableFactory)((function(e){e.w={id:a.OPS.setLineWidth,numArgs:1,variableArgs:!1},e.J={id:a.OPS.setLineCap,numArgs:1,variableArgs:!1},e.j={id:a.OPS.setLineJoin,numArgs:1,variableArgs:!1},e.M={id:a.OPS.setMiterLimit,numArgs:1,variableArgs:!1},e.d={id:a.OPS.setDash,numArgs:2,variableArgs:!1},e.ri={id:a.OPS.setRenderingIntent,numArgs:1,variableArgs:!1},e.i={id:a.OPS.setFlatness,numArgs:1,variableArgs:!1},e.gs={id:a.OPS.setGState,numArgs:1,variableArgs:!1},e.q={id:a.OPS.save,numArgs:0,variableArgs:!1},e.Q={id:a.OPS.restore,numArgs:0,variableArgs:!1},e.cm={id:a.OPS.transform,numArgs:6,variableArgs:!1},e.m={id:a.OPS.moveTo,numArgs:2,variableArgs:!1},e.l={id:a.OPS.lineTo,numArgs:2,variableArgs:!1},e.c={id:a.OPS.curveTo,numArgs:6,variableArgs:!1},e.v={id:a.OPS.curveTo2,numArgs:4,variableArgs:!1},e.y={id:a.OPS.curveTo3,numArgs:4,variableArgs:!1},e.h={id:a.OPS.closePath,numArgs:0,variableArgs:!1},e.re={id:a.OPS.rectangle,numArgs:4,variableArgs:!1},e.S={id:a.OPS.stroke,numArgs:0,variableArgs:!1},e.s={id:a.OPS.closeStroke,numArgs:0,variableArgs:!1},e.f={id:a.OPS.fill,numArgs:0,variableArgs:!1},e.F={id:a.OPS.fill,numArgs:0,variableArgs:!1},e["f*"]={id:a.OPS.eoFill,numArgs:0,variableArgs:!1},e.B={id:a.OPS.fillStroke,numArgs:0,variableArgs:!1},e["B*"]={id:a.OPS.eoFillStroke,numArgs:0,variableArgs:!1},e.b={id:a.OPS.closeFillStroke,numArgs:0,variableArgs:!1},e["b*"]={id:a.OPS.closeEOFillStroke,numArgs:0,variableArgs:!1},e.n={id:a.OPS.endPath,numArgs:0,variableArgs:!1},e.W={id:a.OPS.clip,numArgs:0,variableArgs:!1},e["W*"]={id:a.OPS.eoClip,numArgs:0,variableArgs:!1},e.BT={id:a.OPS.beginText,numArgs:0,variableArgs:!1},e.ET={id:a.OPS.endText,numArgs:0,variableArgs:!1},e.Tc={id:a.OPS.setCharSpacing,numArgs:1,variableArgs:!1},e.Tw={id:a.OPS.setWordSpacing,numArgs:1,variableArgs:!1},e.Tz={id:a.OPS.setHScale,numArgs:1,variableArgs:!1},e.TL={id:a.OPS.setLeading,numArgs:1,variableArgs:!1},e.Tf={id:a.OPS.setFont,numArgs:2,variableArgs:!1},e.Tr={id:a.OPS.setTextRenderingMode,numArgs:1,variableArgs:!1},e.Ts={id:a.OPS.setTextRise,numArgs:1,variableArgs:!1},e.Td={id:a.OPS.moveText,numArgs:2,variableArgs:!1},e.TD={id:a.OPS.setLeadingMoveText,numArgs:2,variableArgs:!1},e.Tm={id:a.OPS.setTextMatrix,numArgs:6,variableArgs:!1},e["T*"]={id:a.OPS.nextLine,numArgs:0,variableArgs:!1},e.Tj={id:a.OPS.showText,numArgs:1,variableArgs:!1},e.TJ={id:a.OPS.showSpacedText,numArgs:1,variableArgs:!1},e["'"]={id:a.OPS.nextLineShowText,numArgs:1,variableArgs:!1},e['"']={id:a.OPS.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1},e.d0={id:a.OPS.setCharWidth,numArgs:2,variableArgs:!1},e.d1={id:a.OPS.setCharWidthAndBounds,numArgs:6,variableArgs:!1},e.CS={id:a.OPS.setStrokeColorSpace,numArgs:1,variableArgs:!1},e.cs={id:a.OPS.setFillColorSpace,numArgs:1,variableArgs:!1},e.SC={id:a.OPS.setStrokeColor,numArgs:4,variableArgs:!0},e.SCN={id:a.OPS.setStrokeColorN,numArgs:33,variableArgs:!0},e.sc={id:a.OPS.setFillColor,numArgs:4,variableArgs:!0},e.scn={id:a.OPS.setFillColorN,numArgs:33,variableArgs:!0},e.G={id:a.OPS.setStrokeGray,numArgs:1,variableArgs:!1},e.g={id:a.OPS.setFillGray,numArgs:1,variableArgs:!1},e.RG={id:a.OPS.setStrokeRGBColor,numArgs:3,variableArgs:!1},e.rg={id:a.OPS.setFillRGBColor,numArgs:3,variableArgs:!1},e.K={id:a.OPS.setStrokeCMYKColor,numArgs:4,variableArgs:!1},e.k={id:a.OPS.setFillCMYKColor,numArgs:4,variableArgs:!1},e.sh={id:a.OPS.shadingFill,numArgs:1,variableArgs:!1},e.BI={id:a.OPS.beginInlineImage,numArgs:0,variableArgs:!1},e.ID={id:a.OPS.beginImageData,numArgs:0,variableArgs:!1},e.EI={id:a.OPS.endInlineImage,numArgs:1,variableArgs:!1},e.Do={id:a.OPS.paintXObject,numArgs:1,variableArgs:!1},e.MP={id:a.OPS.markPoint,numArgs:1,variableArgs:!1},e.DP={id:a.OPS.markPointProps,numArgs:2,variableArgs:!1},e.BMC={id:a.OPS.beginMarkedContent,numArgs:1,variableArgs:!1},e.BDC={id:a.OPS.beginMarkedContentProps,numArgs:2,variableArgs:!1},e.EMC={id:a.OPS.endMarkedContent,numArgs:0,variableArgs:!1},e.BX={id:a.OPS.beginCompat,numArgs:0,variableArgs:!1},e.EX={id:a.OPS.endCompat,numArgs:0,variableArgs:!1},e.BM=null,e.BD=null,e.true=null,e.fa=null,e.fal=null,e.fals=null,e.false=null,e.nu=null,e.nul=null,e.null=null}));return(0,a.shadow)(this,"opMap",e())}},{key:"MAX_INVALID_PATH_OPS",get:function(){return(0,a.shadow)(this,"MAX_INVALID_PATH_OPS",10)}}]),e}();t.EvaluatorPreprocessor=K},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IdentityCMap=t.CMapFactory=t.CMap=void 0;var n=r(2),a=r(134),i=r(136),o=r(146),s=r(135),c=r(139);function u(){u=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function l(e,t,r,a){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var h={};function d(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=d.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=f(e[n],e,i);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==p(l)&&r.call(l,"__await")?t.resolve(l.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(l).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=f(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===h)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,h;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function l(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function f(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){l(i,n,a,o,s,"next",e)}function s(e){l(i,n,a,o,s,"throw",e)}o(void 0)}))}}function h(e,t){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},h(e,t)}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];g(this,e),this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=t}return y(e,[{key:"addCodespaceRange",value:function(e,t,r){this.codespaceRanges[e-1].push(t,r),this.numCodespaceRanges++}},{key:"mapCidRange",value:function(e,t,r){if(t-e>b)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=r++}},{key:"mapBfRange",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");for(var n=r.length-1;e<=t;){this._map[e++]=r;var a=r.charCodeAt(n)+1;r=a>255?r.substring(0,n-1)+String.fromCharCode(r.charCodeAt(n-1)+1)+"\\0":r.substring(0,n)+String.fromCharCode(a)}}},{key:"mapBfRangeToArray",value:function(e,t,r){if(t-e>b)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");for(var n=r.length,a=0;e<=t&&a>>0;for(var s=a[i],c=0,u=s.length;c=l&&n<=f)return r.charcode=n,void(r.length=i+1)}}r.charcode=0,r.length=1}},{key:"getCharCodeLength",value:function(e){for(var t=this.codespaceRanges,r=0,n=t.length;r=s&&e<=c)return r+1}return 1}},{key:"length",get:function(){return this._map.length}},{key:"isIdentityCMap",get:function(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(var e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}]),e}();t.CMap=w;var k=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(i,e);var t,r,a=(t=i,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=d(t);if(r){var a=d(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function i(e,t){var r;return g(this,i),(r=a.call(this)).vertical=e,r.addCodespaceRange(t,0,65535),r}return y(i,[{key:"mapCidRange",value:function(e,t,r){(0,n.unreachable)("should not call mapCidRange")}},{key:"mapBfRange",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRange")}},{key:"mapBfRangeToArray",value:function(e,t,r){(0,n.unreachable)("should not call mapBfRangeToArray")}},{key:"mapOne",value:function(e,t){(0,n.unreachable)("should not call mapCidOne")}},{key:"lookup",value:function(e){return Number.isInteger(e)&&e<=65535?e:void 0}},{key:"contains",value:function(e){return Number.isInteger(e)&&e<=65535}},{key:"forEach",value:function(e){for(var t=0;t<=65535;t++)e(t,t)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e<=65535?e:-1}},{key:"getMap",value:function(){for(var e=new Array(65536),t=0;t<=65535;t++)e[t]=t;return e}},{key:"length",get:function(){return 65536}},{key:"isIdentityCMap",get:function(){(0,n.unreachable)("should not access .isIdentityCMap")}}]),i}(w);t.IdentityCMap=k;var S=function(){function e(e,t){for(var r=0,n=0;n<=t;n++)r=r<<8|e[n];return r>>>0}function t(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode.apply(null,e.subarray(0,t+1))}function r(e,t,r){for(var n=0,a=r;a>=0;a--)n+=e[a]+t[a],e[a]=255&n,n>>=8}function a(e,t){for(var r=1,n=t;n>=0&&r>0;n--)r+=e[n],e[n]=255&r,r>>=8}var i=16,o=function(){function e(t){g(this,e),this.buffer=t,this.pos=0,this.end=t.length,this.tmpBuf=new Uint8Array(19)}return y(e,[{key:"readByte",value:function(){return this.pos>=this.end?-1:this.buffer[this.pos++]}},{key:"readNumber",value:function(){var e,t=0;do{var r=this.readByte();if(r<0)throw new n.FormatError("unexpected EOF in bcmap");e=!(128&r),t=t<<7|127&r}while(!e);return t}},{key:"readSigned",value:function(){var e=this.readNumber();return 1&e?~(e>>>1):e>>>1}},{key:"readHex",value:function(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}},{key:"readHexNumber",value:function(e,t){var r,a=this.tmpBuf,i=0;do{var o=this.readByte();if(o<0)throw new n.FormatError("unexpected EOF in bcmap");r=!(128&o),a[i++]=127&o}while(!r);for(var s=t,c=0,u=0;s>=0;){for(;u<8&&a.length>0;)c|=a[--i]<>=8,u-=8}}},{key:"readHexSigned",value:function(e,t){this.readHexNumber(e,t);for(var r=1&e[t]?255:0,n=0,a=0;a<=t;a++)n=(1&n)<<8|e[a],e[a]=n>>1^r}},{key:"readString",value:function(){for(var e=this.readNumber(),t="",r=0;r=0)){n.next=68;break}if(7!=(k=w>>5)){n.next=20;break}n.t0=31&w,n.next=0===n.t0?15:1===n.t0?17:19;break;case 15:return f.readString(),n.abrupt("break",19);case 17:return d=f.readString(),n.abrupt("break",19);case 19:return n.abrupt("continue",9);case 20:if(S=!!(16&w),!(1+(x=15&w)>i)){n.next=24;break}throw new Error("BinaryCMapReader.process: Invalid dataSize.");case 24:O=1,A=f.readNumber(),n.t1=k,n.next=0===n.t1?29:1===n.t1?35:2===n.t1?41:3===n.t1?46:4===n.t1?53:5===n.t1?58:65;break;case 29:for(f.readHex(p,x),f.readHexNumber(g,x),r(g,p,x),c.addCodespaceRange(x+1,e(p,x),e(g,x)),C=1;C>>0}function t(e){if("string"!=typeof e)throw new n.FormatError("Malformed CMap: expected string.")}function r(e){if(!Number.isInteger(e))throw new n.FormatError("Malformed CMap: expected int.")}function l(r,n){for(;;){var i=n.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endbfchar"))return;t(i);var o=e(i);t(i=n.getObj());var s=i;r.mapOne(o,s)}}function h(r,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endbfrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);if(o=i.getObj(),Number.isInteger(o)||"string"==typeof o){var u=Number.isInteger(o)?String.fromCharCode(o):o;r.mapBfRange(s,c,u)}else{if(!(0,a.isCmd)(o,"["))break;o=i.getObj();for(var l=[];!(0,a.isCmd)(o,"]")&&o!==a.EOF;)l.push(o),o=i.getObj();r.mapBfRangeToArray(s,c,l)}}throw new n.FormatError("Invalid bf range.")}function d(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidchar"))return;t(o);var s=e(o);r(o=i.getObj());var c=o;n.mapOne(s,c)}}function p(n,i){for(;;){var o=i.getObj();if(o===a.EOF)break;if((0,a.isCmd)(o,"endcidrange"))return;t(o);var s=e(o);t(o=i.getObj());var c=e(o);r(o=i.getObj());var u=o;n.mapCidRange(s,c,u)}}function g(t,r){for(;;){var i=r.getObj();if(i===a.EOF)break;if((0,a.isCmd)(i,"endcodespacerange"))return;if("string"!=typeof i)break;var o=e(i);if("string"!=typeof(i=r.getObj()))break;var s=e(i);t.addCodespaceRange(i.length,o,s)}throw new n.FormatError("Invalid codespace range.")}function v(e,t){var r=t.getObj();Number.isInteger(r)&&(e.vertical=!!r)}function y(e,t){var r=t.getObj();r instanceof a.Name&&(e.name=r.name)}function b(e,t,r,n){return x.apply(this,arguments)}function x(){return(x=f(u().mark((function e(t,r,i,o){var c,f,m;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=1,(m=r.getObj())!==a.EOF){e.next=7;break}return e.abrupt("break",39);case 7:if(!(m instanceof a.Name)){e.next=12;break}"WMode"===m.name?v(t,r):"CMapName"===m.name&&y(t,r),c=m,e.next=29;break;case 12:if(!(m instanceof a.Cmd)){e.next=29;break}e.t0=m.cmd,e.next="endcmap"===e.t0?16:"usecmap"===e.t0?17:"begincodespacerange"===e.t0?19:"beginbfchar"===e.t0?21:"begincidchar"===e.t0?23:"beginbfrange"===e.t0?25:"begincidrange"===e.t0?27:29;break;case 16:return e.abrupt("break",39);case 17:return c instanceof a.Name&&(f=c.name),e.abrupt("break",29);case 19:return g(t,r),e.abrupt("break",29);case 21:return l(t,r),e.abrupt("break",29);case 23:return d(t,r),e.abrupt("break",29);case 25:return h(t,r),e.abrupt("break",29);case 27:return p(t,r),e.abrupt("break",29);case 29:e.next=37;break;case 31:if(e.prev=31,e.t1=e.catch(1),!(e.t1 instanceof s.MissingDataException)){e.next=35;break}throw e.t1;case 35:return(0,n.warn)("Invalid cMap data: "+e.t1),e.abrupt("continue",0);case 37:e.next=0;break;case 39:if(!o&&f&&(o=f),!o){e.next=42;break}return e.abrupt("return",O(t,i,o));case 42:return e.abrupt("return",t);case 43:case"end":return e.stop()}}),e,null,[[1,31]])})))).apply(this,arguments)}function O(e,t,r){return A.apply(this,arguments)}function A(){return(A=f(u().mark((function e(t,r,n){var a,i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C(n,r);case 2:if(t.useCMap=e.sent,0===t.numCodespaceRanges){for(a=t.useCMap.codespaceRanges,i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=t.Linearization=t.Lexer=void 0;var n=r(2),a=r(134),i=r(135),o=r(147),s=r(149),c=r(150),u=r(152),l=r(153),f=r(156),h=r(158),d=r(160),p=r(139),g=r(161),v=r(162);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:null,t=this.buf1;if(this.shift(),t instanceof a.Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":for(var r=[];!(0,a.isCmd)(this.buf1,"]")&&this.buf1!==a.EOF;)r.push(this.getObj(e));if(this.buf1===a.EOF){if(this.recoveryMode)return r;throw new i.ParserEOFException("End of file inside array.")}return this.shift(),r;case"<<":for(var o=new a.Dict(this.xref);!(0,a.isCmd)(this.buf1,">>")&&this.buf1!==a.EOF;)if(this.buf1 instanceof a.Name){var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o.set(s,this.getObj(e))}else(0,n.info)("Malformed dictionary: key must be a name object"),this.shift();if(this.buf1===a.EOF){if(this.recoveryMode)return o;throw new i.ParserEOFException("End of file inside dictionary.")}return(0,a.isCmd)(this.buf2,"stream")?this.allowStreams?this.makeStream(o,e):o:(this.shift(),o);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&(0,a.isCmd)(this.buf2,"R")){var c=a.Ref.get(t,this.buf1);return this.shift(),this.shift(),c}return t}return"string"==typeof t&&e?e.decryptString(t):t}},{key:"findDefaultInlineStreamEnd",value:function(e){for(var t,r,o=this.lexer,s=e.pos,c=0;-1!==(t=e.getByte());)if(0===c)c=69===t?1:0;else if(1===c)c=73===t?2:0;else if(32===t||10===t||13===t){r=e.pos;for(var u=e.peekBytes(10),l=0,f=u.length;l127)){c=0;break}if(2!==c)continue;if(o.knownCommands){var h=o.peekObj();h instanceof a.Cmd&&!o.knownCommands[h.cmd]&&(c=0)}else(0,n.warn)("findDefaultInlineStreamEnd - \`lexer.knownCommands\` is undefined.");if(2===c)break}else c=0;-1===t&&((0,n.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),r&&((0,n.warn)('... trying to recover by using the last "EI" occurrence.'),e.skip(-(e.pos-r))));var d=4;return e.skip(-d),t=e.peekByte(),e.skip(d),(0,i.isWhiteSpace)(t)||d--,e.pos-d-s}},{key:"findDCTDecodeInlineStreamEnd",value:function(e){for(var t,r,a=e.pos,i=!1;-1!==(t=e.getByte());)if(255===t){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:(r=e.getUint16())>2?e.skip(r-2):e.skip(-2)}if(i)break}var o=e.pos-a;return-1===t?((0,n.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),e.skip(-o),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),o)}},{key:"findASCII85DecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte());)if(126===t){var a=e.pos;for(t=e.peekByte();(0,i.isWhiteSpace)(t);)e.skip(),t=e.peekByte();if(62===t){e.skip();break}if(e.pos>a){var o=e.peekBytes(2);if(69===o[0]&&73===o[1])break}}var s=e.pos-r;return-1===t?((0,n.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-s),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),s)}},{key:"findASCIIHexDecodeInlineStreamEnd",value:function(e){for(var t,r=e.pos;-1!==(t=e.getByte())&&62!==t;);var a=e.pos-r;return-1===t?((0,n.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-a),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),a)}},{key:"inlineStreamSkipEI",value:function(e){for(var t,r=0;-1!==(t=e.getByte());)if(0===r)r=69===t?1:0;else if(1===r)r=73===t?2:0;else if(2===r)break}},{key:"makeInlineImage",value:function(e){for(var t,r=this.lexer,i=r.stream,o=Object.create(null);!(0,a.isCmd)(this.buf1,"ID")&&this.buf1!==a.EOF;){if(!(this.buf1 instanceof a.Name))throw new n.FormatError("Dictionary key must be a name object");var s=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;o[s]=this.getObj(e)}-1!==r.beginInlineImagePos&&(t=i.pos-r.beginInlineImagePos);var c,u=this.xref.fetchIfRef(o.F||o.Filter);if(u instanceof a.Name)c=u.name;else if(Array.isArray(u)){var l=this.xref.fetchIfRef(u[0]);l instanceof a.Name&&(c=l.name)}var f,h,d=i.pos;switch(c){case"DCT":case"DCTDecode":f=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":f=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":f=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:f=this.findDefaultInlineStreamEnd(i)}if(f<1e3&&t>0){var p=i.pos;i.pos=r.beginInlineImagePos,h=function(e){for(var t=[],r=e.length,n=0;n=n)return r.pos+=o,r.pos-e;o++}r.pos+=i}return-1}},{key:"makeStream",value:function(e,t){var r=this.lexer,o=r.stream;r.skipToNextLine();var s=o.pos-1,c=e.get("Length");if(Number.isInteger(c)||((0,n.info)('Bad length "'.concat(c&&c.toString(),'" in stream.')),c=0),o.pos=s+c,r.nextChar(),this.tryShift()&&(0,a.isCmd)(this.buf2,"endstream"))this.shift();else{var u=new Uint8Array([101,110,100,115,116,114,101,97,109]),l=this._findStreamLength(s,u);if(l<0){for(var f=1;f<=1;f++){var h=u.length-f,d=u.slice(0,h),p=this._findStreamLength(s,d);if(p>=0){var g=o.peekBytes(h+1)[h];if(!(0,i.isWhiteSpace)(g))break;(0,n.info)('Found "'.concat((0,n.bytesToString)(d),'" when ')+"searching for endstream command."),l=p;break}}if(l<0)throw new n.FormatError("Missing endstream command.")}c=l,r.nextChar(),this.shift(),this.shift()}return this.shift(),o=o.makeSubStream(s,c,e),t&&(o=t.createStream(o,c)),(o=this.filter(o,e,c)).dict=e,o}},{key:"filter",value:function(e,t,r){var i=t.get("F","Filter"),o=t.get("DP","DecodeParms");if(i instanceof a.Name)return Array.isArray(o)&&(0,n.warn)("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(e,i.name,r,o);var s=r;if(Array.isArray(i))for(var c=i,u=o,l=0,f=c.length;l=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}var O=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;m(this,e),this.stream=t,this.nextChar(),this.strBuf=[],this.knownCommands=r,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}return w(e,[{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"peekChar",value:function(){return this.stream.peekByte()}},{key:"getNumber",value:function(){var e=this.currentChar,t=!1,r=0,a=0;if(45===e?(a=-1,45===(e=this.nextChar())&&(e=this.nextChar())):43===e&&(a=1,e=this.nextChar()),10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e&&(r=10,e=this.nextChar()),e<48||e>57){var o="Invalid number: ".concat(String.fromCharCode(e)," (charCode ").concat(e,")");if((0,i.isWhiteSpace)(e)||-1===e)return(0,n.info)('Lexer.getNumber - "'.concat(o,'".')),0;throw new n.FormatError(o)}a=a||1;for(var s=e-48,c=0,u=1;(e=this.nextChar())>=0;)if(e>=48&&e<=57){var l=e-48;t?c=10*c+l:(0!==r&&(r*=10),s=10*s+l)}else if(46===e){if(0!==r)break;r=1}else if(45===e)(0,n.warn)("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;if(43===(e=this.peekChar())||45===e)u=45===e?-1:1,this.nextChar();else if(e<48||e>57)break;t=!0}return 0!==r&&(s/=r),t&&(s*=Math.pow(10,u*c)),a*s}},{key:"getString",value:function(){var e=1,t=!1,r=this.strBuf;r.length=0;for(var a=this.nextChar();;){var i=!1;switch(0|a){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 40:++e,r.push("(");break;case 41:0==--e?(this.nextChar(),t=!0):r.push(")");break;case 92:switch(a=this.nextChar()){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 110:r.push("\\n");break;case 114:r.push("\\r");break;case 116:r.push("\\t");break;case 98:r.push("\\b");break;case 102:r.push("\\f");break;case 92:case 40:case 41:r.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:var o=15&a;i=!0,(a=this.nextChar())>=48&&a<=55&&(o=(o<<3)+(15&a),(a=this.nextChar())>=48&&a<=55&&(i=!1,o=(o<<3)+(15&a))),r.push(String.fromCharCode(o));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:r.push(String.fromCharCode(a))}break;default:r.push(String.fromCharCode(a))}if(t)break;i||(a=this.nextChar())}return r.join("")}},{key:"getName",value:function(){var e,t,r=this.strBuf;for(r.length=0;(e=this.nextChar())>=0&&!S[e];)if(35===e){if(e=this.nextChar(),S[e]){(0,n.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),r.push("#");break}var i=x(e);if(-1!==i){t=e;var o=x(e=this.nextChar());if(-1===o){if((0,n.warn)("Lexer_getName: Illegal digit (".concat(String.fromCharCode(e),") ")+"in hexadecimal number."),r.push("#",String.fromCharCode(t)),S[e])break;r.push(String.fromCharCode(e));continue}r.push(String.fromCharCode(i<<4|o))}else r.push("#",String.fromCharCode(e))}else r.push(String.fromCharCode(e));return r.length>127&&(0,n.warn)("Name token is longer than allowed by the spec: ".concat(r.length)),a.Name.get(r.join(""))}},{key:"_hexStringWarn",value:function(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||(0,n.warn)("getHexString - ignoring invalid character: ".concat(e)):(0,n.warn)("getHexString - ignoring additional invalid characters.")}},{key:"getHexString",value:function(){var e=this.strBuf;e.length=0;var t,r,a=this.currentChar,i=!0;for(this._hexStringNumWarn=0;;){if(a<0){(0,n.warn)("Unterminated hex string");break}if(62===a){this.nextChar();break}if(1!==S[a]){if(i){if(-1===(t=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}}else{if(-1===(r=x(a))){this._hexStringWarn(a),a=this.nextChar();continue}e.push(String.fromCharCode(t<<4|r))}i=!i,a=this.nextChar()}else a=this.nextChar()}return e.join("")}},{key:"getObj",value:function(){for(var e=!1,t=this.currentChar;;){if(t<0)return a.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==S[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),a.Cmd.get("[");case 93:return this.nextChar(),a.Cmd.get("]");case 60:return 60===(t=this.nextChar())?(this.nextChar(),a.Cmd.get("<<")):this.getHexString();case 62:return 62===(t=this.nextChar())?(this.nextChar(),a.Cmd.get(">>")):a.Cmd.get(">");case 123:return this.nextChar(),a.Cmd.get("{");case 125:return this.nextChar(),a.Cmd.get("}");case 41:throw this.nextChar(),new n.FormatError("Illegal character: ".concat(t))}var r=String.fromCharCode(t);if(t<32||t>127){var i=this.peekChar();if(i>=32&&i<=127)return this.nextChar(),a.Cmd.get(r)}for(var o=this.knownCommands,s=o&&void 0!==o[r];(t=this.nextChar())>=0&&!S[t];){var c=r+String.fromCharCode(t);if(s&&void 0===o[c])break;if(128===r.length)throw new n.FormatError("Command token too long: ".concat(r.length));r=c,s=o&&void 0!==o[r]}return"true"===r||"false"!==r&&("null"===r?null:("BI"===r&&(this.beginInlineImagePos=this.stream.pos),a.Cmd.get(r)))}},{key:"peekObj",value:function(){var e,t=this.stream.pos,r=this.currentChar,a=this.beginInlineImagePos;try{e=this.getObj()}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)("peekObj: ".concat(e))}return this.stream.pos=t,this.currentChar=r,this.beginInlineImagePos=a,e}},{key:"skipToNextLine",value:function(){for(var e=this.currentChar;e>=0;){if(13===e){10===(e=this.nextChar())&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}]),e}();t.Lexer=O;var A=function(){function e(){m(this,e)}return w(e,null,[{key:"create",value:function(e){function t(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.get(t);if(Number.isInteger(n)&&(r?n>=0:n>0))return n;throw new Error('The "'.concat(t,'" parameter in the linearization ')+"dictionary is invalid.")}var r,n,i=new k({lexer:new O(e),xref:null}),o=i.getObj(),s=i.getObj(),c=i.getObj(),u=i.getObj();if(!(Number.isInteger(o)&&Number.isInteger(s)&&(0,a.isCmd)(c,"obj")&&u instanceof a.Dict&&"number"==typeof(r=u.get("Linearized"))&&r>0))return null;if((n=t(u,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:n,hints:function(e){var t,r=e.get("H");if(Array.isArray(r)&&(2===(t=r.length)||4===t)){for(var n=0;n0))throw new Error("Hint (".concat(n,") in the linearization dictionary is invalid."))}return r}throw new Error("Hint array in the linearization dictionary is invalid.")}(u),objectNumberFirst:t(u,"O"),endFirst:t(u,"E"),numPages:t(u,"N"),mainXRefEntriesOffset:t(u,"T"),pageFirst:u.has("P")?t(u,"P",!0):0}}}]),e}();t.Linearization=A},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Ascii85Stream=void 0;var a=r(148),i=r(135);function o(e,t){for(var r=0;r=0;--n)r[a+n]=255&s,s>>=8}}else this.eof=!0}}])&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(a.DecodeStream);t.Ascii85Stream=u},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StreamsSequenceStream=t.DecodeStream=void 0;var a=r(136),i=r(139);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rn&&(t=n)}else{for(;!this.eof;)this.readBlock();t=this.bufferLength}return this.pos=t,this.buffer.subarray(r,t)}},{key:"reset",value:function(){this.pos=0}},{key:"makeSubStream",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(void 0===t)for(;!this.eof;)this.readBlock();else for(var n=e+t;this.bufferLength<=n&&!this.eof;)this.readBlock();return new i.Stream(this.buffer,e,t,r)}},{key:"getBaseStreams",value:function(){return this.str?this.str.getBaseStreams():null}}]),r}(a.BaseStream);t.DecodeStream=y;var m=function(e){h(r,e);var t=p(r);function r(e){var n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,r);var i,s=0,c=o(e);try{for(c.s();!(i=c.n()).done;){var l=i.value;s+=l instanceof y?l._rawMinBufferLength:l.length}}catch(e){c.e(e)}finally{c.f()}return(n=t.call(this,s)).streams=e,n._onError=a,n}return f(r,[{key:"readBlock",value:function(){var e=this.streams;if(0!==e.length){var t,r=e.shift();try{t=r.getBytes()}catch(e){if(this._onError)return void this._onError(e,r.dict&&r.dict.objId);throw e}var n=this.bufferLength,a=n+t.length;this.ensureBuffer(a).set(t,n),this.bufferLength=a}else this.eof=!0}},{key:"getBaseStreams",value:function(){var e,t,r=[],n=o(this.streams);try{for(n.s();!(e=n.n()).done;){var a=e.value.getBaseStreams();a&&r.push.apply(r,function(e){if(Array.isArray(e))return c(e)}(t=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}}catch(e){n.e(e)}finally{n.f()}return r.length>0?r:null}}]),r}(y);t.StreamsSequenceStream=m},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>1,n=this.ensureBuffer(this.bufferLength+r),i=this.bufferLength,o=this.firstDigit,s=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return a(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(e);try{for(s.s();!(t=s.n()).done;){var c=t.value,u=void 0;if(c>=48&&c<=57)u=15&c;else{if(!(c>=65&&c<=70||c>=97&&c<=102)){if(62===c){this.eof=!0;break}continue}u=9+(15&c)}o<0?o=u:(n[i++]=o<<4|u,o=-1)}}catch(e){s.e(e)}finally{s.f()}o>=0&&this.eof&&(n[i++]=o<<4,o=-1),this.firstDigit=o,this.bufferLength=i}else this.eof=!0}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),f}(r(148).DecodeStream);t.AsciiHexStream=c},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxStream=void 0;var a=r(151),i=r(148),o=r(134);function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxDecoder=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t||"function"!=typeof t.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=t,this.eof=!1,this.encoding=r.K||0,this.eoline=r.EndOfLine||!1,this.byteAlign=r.EncodedByteAlign||!1,this.columns=r.Columns||1728,this.rows=r.Rows||0;var n,a=r.EndOfBlock;for(null==a&&(a=!0),this.eoblock=a,this.black=r.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;0===(n=this._lookBits(12));)this._eatBits(1);1===n&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}var t,r;return t=e,(r=[{key:"readNextChar",value:function(){if(this.eof)return-1;var e,t,r,a,i,s=this.refLine,c=this.codingLine,u=this.columns;if(0===this.outputBits){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;var l,f,h;if(this.err=!1,this.nextLine2D){for(a=0;c[a]=64);do{f+=h=this._getWhiteCode()}while(h>=64)}else{do{l+=h=this._getWhiteCode()}while(h>=64);do{f+=h=this._getBlackCode()}while(h>=64)}for(this._addPixels(c[this.codingPos]+l,t),c[this.codingPos]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]0?--e:++e;s[e]<=c[this.codingPos]&&s[e]=64);else do{l+=h=this._getWhiteCode()}while(h>=64);this._addPixels(c[this.codingPos]+l,t),t^=1}var d=!1;if(this.byteAlign&&(this.inputBits&=-8),this.eoblock||this.row!==this.rows-1){if(l=this._lookBits(12),this.eoline)for(;l!==o&&1!==l;)this._eatBits(1),l=this._lookBits(12);else for(;0===l;)this._eatBits(1),l=this._lookBits(12);1===l?(this._eatBits(12),d=!0):l===o&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&d&&this.byteAlign){if(1===(l=this._lookBits(12))){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(a=0;a<4;++a)1!==(l=this._lookBits(12))&&(0,n.info)("bad rtc code: "+l),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if((l=this._lookBits(13))===o)return this.eof=!0,-1;if(l>>1==1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(1&l))}c[0]>0?this.outputBits=c[this.codingPos=0]:this.outputBits=c[this.codingPos=1],this.row++}if(this.outputBits>=8)i=1&this.codingPos?0:255,this.outputBits-=8,0===this.outputBits&&c[this.codingPos]r?(i<<=r,1&this.codingPos||(i|=255>>8-r),this.outputBits-=r,r=0):(i<<=this.outputBits,1&this.codingPos||(i|=255>>8-this.outputBits),r-=this.outputBits,this.outputBits=0,c[this.codingPos]0&&(i<<=r,r=0))}while(r)}return this.black&&(i^=255),i}},{key:"_addPixels",value:function(e,t){var r=this.codingLine,a=this.codingPos;e>r[a]&&(e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e),this.codingPos=a}},{key:"_addPixelsNeg",value:function(e,t){var r=this.codingLine,a=this.codingPos;if(e>r[a])e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e;else if(e0&&e=a){var c=r[s-a];if(c[0]===i)return this._eatBits(i),[!0,c[1],!0]}}return[!1,0,!1]}},{key:"_getTwoDimCode",value:function(){var e,t=0;if(this.eoblock){if(t=this._lookBits(7),(e=s[t])&&e[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,7,s);if(r[0]&&r[2])return r[1]}return(0,n.info)("Bad two dim code"),o}},{key:"_getWhiteCode",value:function(){var e,t=0;if(this.eoblock){if((t=this._lookBits(12))===o)return 1;if((e=t>>5==0?c[t]:u[t>>3])[0]>0)return this._eatBits(e[0]),e[1]}else{var r=this._findTableCode(1,9,u);if(r[0])return r[1];if((r=this._findTableCode(11,12,c))[0])return r[1]}return(0,n.info)("bad white code"),this._eatBits(1),1}},{key:"_getBlackCode",value:function(){var e,t;if(this.eoblock){if((e=this._lookBits(13))===o)return 1;if((t=e>>7==0?l[e]:e>>9==0&&e>>7!=0?f[(e>>1)-64]:h[e>>7])[0]>0)return this._eatBits(t[0]),t[1]}else{var r=this._findTableCode(2,6,h);if(r[0])return r[1];if((r=this._findTableCode(7,12,f,64))[0])return r[1];if((r=this._findTableCode(10,13,l))[0])return r[1]}return(0,n.info)("bad black code"),this._eatBits(1),1}},{key:"_lookBits",value:function(e){for(var t;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}},{key:"_eatBits",value:function(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CCITTFaxDecoder=d},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.FlateStream=void 0;var a=r(148),i=r(2);function o(e,t){for(var r=0;r>e,this.codeSize=n-=e,t}},{key:"getCode",value:function(e){for(var t,r=this.str,n=e[0],a=e[1],o=this.codeSize,s=this.codeBuf;o>16,l=65535&c;if(u<1||o>u,this.codeSize=o-u,l}},{key:"generateHuffmanTable",value:function(e){var t,r=e.length,n=0;for(t=0;tn&&(n=e[t]);for(var a=1<>=1;for(t=l;t>=1)){var a,o;if(1===n)a=h,o=d;else{if(2!==n)throw new i.FormatError("Unknown block type in flate stream");var s,c=this.getBits(5)+257,p=this.getBits(5)+1,g=this.getBits(4)+4,v=new Uint8Array(u.length);for(s=0;s0;)S[s++]=w}a=this.generateHuffmanTable(S.subarray(0,c)),o=this.generateHuffmanTable(S.subarray(c,k))}for(var A=(e=this.buffer)?e.length:0,C=this.bufferLength;;){var F=this.getCode(a);if(F<256)C+1>=A&&(A=(e=this.ensureBuffer(C+1)).length),e[C++]=F;else{if(256===F)return void(this.bufferLength=C);var P=(F=l[F-=257])>>16;P>0&&(P=this.getBits(P)),t=(65535&F)+P,F=this.getCode(o),(P=(F=f[F])>>16)>0&&(P=this.getBits(P));var T=(65535&F)+P;C+t>=A&&(A=(e=this.ensureBuffer(C+t)).length);for(var I=0;I{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Stream=void 0;var a=r(136),i=r(148),o=r(134),s=r(154),c=r(2);function u(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Image=void 0;var a=r(2),i=r(135),o=r(155),s=r(151);function c(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=l(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function l(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>>0}var o=i(1),s=i(1)?i(1)?i(1)?i(1)?i(1)?i(32)+4436:i(12)+340:i(8)+84:i(6)+20:i(4)+4:i(2);return 0===o?s:s>0?-s:null}function k(e,t,r){for(var n=e.getContexts("IAID"),a=1,i=0;i=E&&C=j)for(U=U<<1&v,f=0;f=0&&P=0&&(T=R[F][P])&&(U|=T<=e?M<<=1:M=M<<1|S[E][j];for(l=0;l=w||j<0||j>=b?M<<=1:M=M<<1|n[E][j];var _=x.readBit(A,M);T[I]=_}}return S}function T(e,t,r,n,a,i,o,s,c,u,l,f,h,d,p,g,v,m,b){if(e&&t)throw new y("refinement with Huffman is not supported");var S,x,O=[];for(S=0;S1&&(j=e?b.readBits(m):w(F,"IAIT",C));var M=o*T+j,_=e?d.symbolIDTable.decode(b):k(F,C,c),L=t&&(e?b.readBit():w(F,"IARI",C)),R=s[_],N=R[0].length,D=R.length;if(L){var B=w(F,"IARDW",C),U=w(F,"IARDH",C);R=P(N+=B,D+=U,p,R,(B>>1)+w(F,"IARDX",C),(U>>1)+w(F,"IARDY",C),!1,g,v)}var $=M-(1&f?0:D-1),X=E-(2&f?N-1:0),H=void 0,q=void 0,G=void 0;if(u){for(H=0;H>5&7,u=[31&s],l=t+6;if(7===s){c=536870911&(0,i.readUint32)(e,l-1),l+=3;var f=c+7>>3;for(u[0]=e[l++];--f>0;)u.push(e[l++])}else if(5===s||6===s)throw new y("invalid referred-to flags");r.retainBits=u;var h=4;r.number<=256?h=1:r.number<=65536&&(h=2);var d,p,g=[];for(d=0;d>>24&255,w[3]=m.height>>16&255,w[4]=m.height>>8&255,w[5]=255&m.height,d=l,p=e.length;d>2&3,f.huffmanDWSelector=h>>4&3,f.bitmapSizeSelector=h>>6&1,f.aggregationInstancesSelector=h>>7&1,f.bitmapCodingContextUsed=!!(256&h),f.bitmapCodingContextRetained=!!(512&h),f.template=h>>10&3,f.refinementTemplate=h>>12&1,l+=2,!f.huffman){for(o=0===f.template?4:1,n=[],a=0;a>2&3,d.stripSize=1<>4&3,d.transposed=!!(64&p),d.combinationOperator=p>>7&3,d.defaultPixelValue=p>>9&1,d.dsOffset=p<<17>>27,d.refinementTemplate=p>>15&1,d.huffman){var g=(0,i.readUint16)(c,l);l+=2,d.huffmanFS=3&g,d.huffmanDS=g>>2&3,d.huffmanDT=g>>4&3,d.huffmanRefinementDW=g>>6&3,d.huffmanRefinementDH=g>>8&3,d.huffmanRefinementDX=g>>10&3,d.huffmanRefinementDY=g>>12&3,d.huffmanRefinementSizeSelector=!!(16384&g)}if(d.refinement&&!d.refinementTemplate){for(n=[],a=0;a<2;a++)n.push({x:(0,i.readInt8)(c,l),y:(0,i.readInt8)(c,l+1)}),l+=2;d.refinementAt=n}d.numberOfSymbolInstances=(0,i.readUint32)(c,l),l+=4,r=[d,s.referredTo,c,l,u];break;case 16:var v={},m=c[l++];v.mmr=!!(1&m),v.template=m>>1&3,v.patternWidth=c[l++],v.patternHeight=c[l++],v.maxPatternIndex=(0,i.readUint32)(c,l),l+=4,r=[v,s.number,c,l,u];break;case 22:case 23:var b={};b.info=j(c,l),l+=M;var w=c[l++];b.mmr=!!(1&w),b.template=w>>1&3,b.enableSkip=!!(8&w),b.combinationOperator=w>>4&7,b.defaultPixelValue=w>>7&1,b.gridWidth=(0,i.readUint32)(c,l),l+=4,b.gridHeight=(0,i.readUint32)(c,l),l+=4,b.gridOffsetX=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridOffsetY=4294967295&(0,i.readUint32)(c,l),l+=4,b.gridVectorX=(0,i.readUint16)(c,l),l+=2,b.gridVectorY=(0,i.readUint16)(c,l),l+=2,r=[b,s.referredTo,c,l,u];break;case 38:case 39:var k={};k.info=j(c,l),l+=M;var S=c[l++];if(k.mmr=!!(1&S),k.template=S>>1&3,k.prediction=!!(8&S),!k.mmr){for(o=0===k.template?4:1,n=[],a=0;a>2&1,x.combinationOperator=O>>3&3,x.requiresBuffer=!!(32&O),x.combinationOperatorOverride=!!(64&O),r=[x];break;case 49:case 50:case 51:case 62:break;case 53:r=[s.number,c,l,u];break;default:throw new y("segment type ".concat(s.typeName,"(").concat(s.type,") is not implemented"))}var A="on"+s.typeName;A in t&&t[A].apply(t,r)}function L(e,t){for(var r=0,n=e.length;r>3,r=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&r.fill(255),this.buffer=r}},{key:"drawBitmap",value:function(e,t){var r,n,a,i,o=this.currentPageInfo,s=e.width,c=e.height,u=o.width+7>>3,l=o.combinationOperatorOverride?e.combinationOperator:o.combinationOperator,f=this.buffer,h=128>>(7&e.x),d=e.y*u+(e.x>>3);switch(l){case 0:for(r=0;r>=1)||(a=128,i++);d+=u}break;case 2:for(r=0;r>=1)||(a=128,i++);d+=u}break;default:throw new y("operator ".concat(l," is not supported"))}}},{key:"onImmediateGenericRegion",value:function(e,t,r,n){var a=e.info,i=new b(t,r,n),o=F(e.mmr,a.width,a.height,e.template,e.prediction,null,e.at,i);this.drawBitmap(a,o)}},{key:"onImmediateLosslessGenericRegion",value:function(){this.onImmediateGenericRegion.apply(this,arguments)}},{key:"onSymbolDictionary",value:function(e,t,r,n,a,o){var s,l;e.huffman&&(s=function(e,t,r){var n,a,i,o=0;switch(e.huffmanDHSelector){case 0:case 1:n=$(e.huffmanDHSelector+4);break;case 3:n=H(o,t,r),o++;break;default:throw new y("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:a=$(e.huffmanDWSelector+2);break;case 3:a=H(o,t,r),o++;break;default:throw new y("invalid Huffman DW selector")}return e.bitmapSizeSelector?(i=H(o,t,r),o++):i=$(1),{tableDeltaHeight:n,tableDeltaWidth:a,tableBitmapSize:i,tableAggregateInstances:e.aggregationInstancesSelector?H(o,t,r):$(1)}}(e,r,this.customTables),l=new X(n,a,o));var f=this.symbols;f||(this.symbols=f={});var h,d=[],p=u(r);try{for(p.s();!(h=p.n()).done;){var g=f[h.value];g&&d.push.apply(d,c(g))}}catch(e){p.e(e)}finally{p.f()}var v=new b(n,a,o);f[t]=function(e,t,r,n,a,o,s,c,u,l,f,h){if(e&&t)throw new y("symbol refinement with Huffman is not supported");var d,p,g=[],v=0,m=(0,i.log2)(r.length+n),b=f.decoder,S=f.contextCache;for(e&&(d=$(1),p=[],m=Math.max(m,1));g.length1)I=T(e,t,x,v,0,E,1,r.concat(g),m,0,0,1,0,o,u,l,f,0,h);else{var j=k(S,b,m),M=w(S,"IARDX",b),_=w(S,"IARDY",b);I=P(x,v,u,j=32){var f=void 0,h=void 0,d=void 0;switch(l){case 32:if(0===u)throw new y("no previous value in symbol ID table");h=a.readBits(2)+3,f=i[u-1].prefixLength;break;case 33:h=a.readBits(3)+3,f=0;break;case 34:h=a.readBits(7)+11,f=0;break;default:throw new y("invalid code length in symbol ID table")}for(d=0;d=0;v--)T=e?G(P,u,l,!0):F(!1,u,l,r,!1,null,C,g),B[v]=T;for(I=0;I=0;m--)M|=(j^=B[m][I][E])<>8,(L=f+I*p+E*d>>8)>=0&&L+x<=n&&R>=0&&R+O<=a)for(v=0;v=a))for(D=w[$],N=_[v],m=0;m=0&&U>1&7),f=1+(o>>4&7),h=[],d=s;do{n=u.readBits(l),a=u.readBits(f),h.push(new N([d,n,a,0])),d+=1<>r&1;if(r<=0)this.children[n]=new e(t);else{var a=this.children[n];a||(this.children[n]=a=new e(null)),a.buildTree(t,r-1)}}},{key:"decodeNode",value:function(e){if(this.isLeaf){if(this.isOOB)return null;var t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}var r=this.children[e.readBit()];if(!r)throw new y("invalid Huffman data");return r.decodeNode(e)}}]),e}(),B=function(){function e(t,r){p(this,e),r||this.assignPrefixCodes(t),this.rootNode=new D(null);for(var n=0,a=t.length;n0&&this.rootNode.buildTree(i,i.prefixLength-1)}}return d(e,[{key:"decode",value:function(e){return this.rootNode.decodeNode(e)}},{key:"assignPrefixCodes",value:function(e){for(var t=e.length,r=0,n=0;n=this.end)throw new y("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}var e=this.currentByte>>this.shift&1;return this.shift--,e}},{key:"readBits",value:function(e){var t,r=0;for(t=e-1;t>=0;t--)r|=this.readBit()<=this.end?-1:this.data[this.position++]}}]),e}();function H(e,t,r){for(var n=0,a=0,i=t.length;a>h&1,h--}if(n&&!u)for(var p=0;p<5&&-1!==o.readNextChar();p++);return c}var z=function(){function e(){p(this,e)}return d(e,[{key:"parseChunks",value:function(e){return function(e){for(var t=new R,r=0,n=e.length;r{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e,t){for(var n=0;n>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var t,r;return t=e,(r=[{key:"byteIn",value:function(){var e=this.data,t=this.bp;255===e[t]?e[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=e[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}},{key:"readBit",value:function(e,t){var r,n=e[t]>>1,i=1&e[t],o=a[n],s=o.qe,c=this.a-s;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--}while(0==(32768&c));return this.a=c,e[t]=n<<1|i,r}}])&&n(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.ArithmeticDecoder=i},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpegStream=void 0;var a=r(148),i=r(134),o=r(157),s=r(2);function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.JpegImage=void 0;var n=r(2),a=r(135);function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e[i-1];)i--;var o,s=[{children:[],index:0}],c=s[0];for(r=0;r0;)c=s.pop();for(c.index++,s.push(c);s.length<=r;)s.push(o={children:[],index:0}),c.children[c.index]=o.children,c=o;a++}r+19&&void 0!==arguments[9]&&arguments[9],d=r.mcusPerLine,p=r.progressive,b=t,w=0,k=0;function S(){if(k>0)return k--,w>>k&1;if(255===(w=e[t++])){var n=e[t++];if(n){if(220===n&&h){t+=2;var i=(0,a.readUint16)(e,t);if(t+=2,i>0&&i!==r.scanLines)throw new v("Found DNL marker (0xFFDC) while parsing scan data",i)}else if(217===n){if(h){var o=I*(8===r.precision?8:0);if(o>0&&Math.round(r.scanLines/o)>=5)throw new v("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect \`scanLines\` parameter",o)}throw new y("Found EOI marker (0xFFD9) while parsing scan data")}throw new g("unexpected marker ".concat((w<<8|n).toString(16)))}}return k=7,w>>>7}function x(e){for(var t=e;;){switch(s(t=t[S()])){case"number":return t;case"object":continue}throw new g("invalid huffman sequence")}}function O(e){for(var t=0;e>0;)t=t<<1|S(),e--;return t}function A(e){if(1===e)return 1===S()?1:-1;var t=O(e);return t>=1<0)F--;else for(var r=c,n=u;r<=n;){var a=x(e.huffmanTableAC),i=15&a,o=a>>4;if(0!==i){var s=m[r+=o];e.blockData[t+s]=A(i)*(1<>4,0==(r=15&n))o<15?(F=O(o)+(1<>4;if(0!==o){var c=m[a+=s];e.blockData[t+c]=A(o),a++}else{if(s<15)break;a+=16}}};var $,X,H,q,G=0;for(X=1===U?i[0].blocksPerLine*i[0].blocksPerColumn:d*r.mcusPerColumn;G<=X;){var z=o?Math.min(X-G,o):X;if(z>0){for(L=0;L0?"unexpected":"excessive";(0,n.warn)("decodeScan - ".concat(W," MCU data, current marker is: ").concat($.invalid)),t=$.offset}if(!($.marker>=65488&&$.marker<=65495))break;t+=2}return t-b}function I(e,t,r){var n,a,i,o,s,c,u,l,f,h,d,p,v,y,m,F,P,T=e.quantizationTable,I=e.blockData;if(!T)throw new g("missing required Quantization Table.");for(var E=0;E<64;E+=8)f=I[t+E],h=I[t+E+1],d=I[t+E+2],p=I[t+E+3],v=I[t+E+4],y=I[t+E+5],m=I[t+E+6],F=I[t+E+7],f*=T[E],0!=(h|d|p|v|y|m|F)?(h*=T[E+1],d*=T[E+2],p*=T[E+3],v*=T[E+4],y*=T[E+5],m*=T[E+6],F*=T[E+7],a=(n=(n=A*f+128>>8)+(a=A*v+128>>8)+1>>1)-a,P=(i=d)*O+(o=m)*x+128>>8,i=i*x-o*O+128>>8,u=(s=(s=C*(h-F)+128>>8)+(u=y<<4)+1>>1)-u,c=(l=(l=C*(h+F)+128>>8)+(c=p<<4)+1>>1)-c,o=(n=n+(o=P)+1>>1)-o,i=(a=a+i+1>>1)-i,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,u=P,r[E]=n+l,r[E+7]=n-l,r[E+1]=a+u,r[E+6]=a-u,r[E+2]=i+c,r[E+5]=i-c,r[E+3]=o+s,r[E+4]=o-s):(P=A*f+512>>10,r[E]=P,r[E+1]=P,r[E+2]=P,r[E+3]=P,r[E+4]=P,r[E+5]=P,r[E+6]=P,r[E+7]=P);for(var j=0;j<8;++j)f=r[j],0!=((h=r[j+8])|(d=r[j+16])|(p=r[j+24])|(v=r[j+32])|(y=r[j+40])|(m=r[j+48])|(F=r[j+56]))?(a=(n=4112+((n=A*f+2048>>12)+(a=A*v+2048>>12)+1>>1))-a,P=(i=d)*O+(o=m)*x+2048>>12,i=i*x-o*O+2048>>12,o=P,u=(s=(s=C*(h-F)+2048>>12)+(u=y)+1>>1)-u,c=(l=(l=C*(h+F)+2048>>12)+(c=p)+1>>1)-c,P=s*S+l*k+2048>>12,s=s*k-l*S+2048>>12,l=P,P=c*w+u*b+2048>>12,c=c*b-u*w+2048>>12,(f=(n=n+o+1>>1)+l)<16?f=0:f>=4080?f=255:f>>=4,(h=(a=a+i+1>>1)+(u=P))<16?h=0:h>=4080?h=255:h>>=4,(d=(i=a-i)+c)<16?d=0:d>=4080?d=255:d>>=4,(p=(o=n-o)+s)<16?p=0:p>=4080?p=255:p>>=4,(v=o-s)<16?v=0:v>=4080?v=255:v>>=4,(y=i-c)<16?y=0:y>=4080?y=255:y>>=4,(m=a-u)<16?m=0:m>=4080?m=255:m>>=4,(F=n-l)<16?F=0:F>=4080?F=255:F>>=4,I[t+j]=f,I[t+j+8]=h,I[t+j+16]=d,I[t+j+24]=p,I[t+j+32]=v,I[t+j+40]=y,I[t+j+48]=m,I[t+j+56]=F):(P=(P=A*f+8192>>14)<-2040?0:P>=2024?255:P+2056>>4,I[t+j]=P,I[t+j+8]=P,I[t+j+16]=P,I[t+j+24]=P,I[t+j+32]=P,I[t+j+40]=P,I[t+j+48]=P,I[t+j+56]=P)}function E(e,t){for(var r=t.blocksPerLine,n=t.blocksPerColumn,a=new Int16Array(64),i=0;i2&&void 0!==arguments[2]?arguments[2]:t,n=e.length-1,i=r=n)return null;var o=(0,a.readUint16)(e,t);if(o>=65472&&o<=65534)return{invalid:null,marker:o,offset:t};for(var s=(0,a.readUint16)(e,i);!(s>=65472&&s<=65534);){if(++i>=n)return null;s=(0,a.readUint16)(e,i)}return{invalid:o.toString(16),marker:s,offset:i}}var M=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.decodeTransform,n=void 0===r?null:r,a=t.colorTransform,i=void 0===a?-1:a;l(this,e),this._decodeTransform=n,this._colorTransform=i}return u(e,[{key:"parse",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).dnlScanLines,r=void 0===t?null:t;function o(){var t=(0,a.readUint16)(e,l),r=(l+=2)+t-2,i=j(e,r,l);i&&i.invalid&&((0,n.warn)("readDataBlock - incorrect length, current marker is: "+i.invalid),r=i.offset);var o=e.subarray(l,r);return l+=o.length,o}function s(e){var t,r=Math.ceil(e.samplesPerLine/8/e.maxH),n=Math.ceil(e.scanLines/8/e.maxV),a=i(e.components);try{for(a.s();!(t=a.n()).done;){var o=t.value,s=Math.ceil(Math.ceil(e.samplesPerLine/8)*o.h/e.maxH),c=Math.ceil(Math.ceil(e.scanLines/8)*o.v/e.maxV),u=r*o.h,l=n*o.v*64*(u+1);o.blockData=new Int16Array(l),o.blocksPerLine=s,o.blocksPerColumn=c}}catch(e){a.e(e)}finally{a.f()}e.mcusPerLine=r,e.mcusPerColumn=n}var c,u,l=0,f=null,h=null,d=0,p=[],b=[],w=[],k=(0,a.readUint16)(e,l);if(l+=2,65496!==k)throw new g("SOI not found");k=(0,a.readUint16)(e,l),l+=2;e:for(;65497!==k;){var S=void 0,x=void 0,O=void 0;switch(k){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var A=o();65504===k&&74===A[0]&&70===A[1]&&73===A[2]&&70===A[3]&&0===A[4]&&(f={version:{major:A[5],minor:A[6]},densityUnits:A[7],xDensity:A[8]<<8|A[9],yDensity:A[10]<<8|A[11],thumbWidth:A[12],thumbHeight:A[13],thumbData:A.subarray(14,14+3*A[12]*A[13])}),65518===k&&65===A[0]&&100===A[1]&&111===A[2]&&98===A[3]&&101===A[4]&&(h={version:A[5]<<8|A[6],flags0:A[7]<<8|A[8],flags1:A[9]<<8|A[10],transformCode:A[11]});break;case 65499:for(var C=(0,a.readUint16)(e,l)+(l+=2)-2;l>4==0)for(x=0;x<64;x++)I[m[x]]=e[l++];else{if(P>>4!=1)throw new g("DQT - invalid table spec");for(x=0;x<64;x++)I[m[x]]=(0,a.readUint16)(e,l),l+=2}p[15&P]=I}break;case 65472:case 65473:case 65474:if(c)throw new g("Only single frame JPEGs supported");l+=2,(c={}).extended=65473===k,c.progressive=65474===k,c.precision=e[l++];var M=(0,a.readUint16)(e,l);l+=2,c.scanLines=r||M,c.samplesPerLine=(0,a.readUint16)(e,l),l+=2,c.components=[],c.componentIds={};var _=e[l++],L=0,R=0;for(S=0;S<_;S++){var N=e[l],D=e[l+1]>>4,B=15&e[l+1];L>4==0?w:b)[15&X]=F(H,G)}break;case 65501:l+=2,u=(0,a.readUint16)(e,l),l+=2;break;case 65498:var z=1==++d&&!r;l+=2;var W=e[l++],V=[];for(S=0;S>4],J.huffmanTableAC=b[15&Z],V.push(J)}var Q=e[l++],ee=e[l++],te=e[l++];try{var re=T(e,l,c,V,u,Q,ee,te>>4,15&te,z);l+=re}catch(t){if(t instanceof v)return(0,n.warn)("".concat(t.message," -- attempting to re-parse the JPEG image.")),this.parse(e,{dnlScanLines:t.scanLines});if(t instanceof y){(0,n.warn)("".concat(t.message," -- ignoring the rest of the image data."));break e}throw t}break;case 65500:l+=4;break;case 65535:255!==e[l]&&l--;break;default:var ne=j(e,l-2,l-3);if(ne&&ne.invalid){(0,n.warn)("JpegImage.parse - unexpected data, current marker is: "+ne.invalid),l=ne.offset;break}if(!ne||l>=e.length-1){(0,n.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new g("JpegImage.parse - unknown marker: "+k.toString(16))}k=(0,a.readUint16)(e,l),l+=2}this.width=c.samplesPerLine,this.height=c.scanLines,this.jfif=f,this.adobe=h,this.components=[];var ae,ie=i(c.components);try{for(ie.s();!(ae=ie.n()).done;){var oe=ae.value,se=p[oe.quantizationId];se&&(oe.quantizationTable=se),this.components.push({index:oe.index,output:E(0,oe),scaleX:oe.h/c.maxH,scaleY:oe.v/c.maxV,blocksPerLine:oe.blocksPerLine,blocksPerColumn:oe.blocksPerColumn})}}catch(e){ie.e(e)}finally{ie.f()}this.numComponents=this.components.length}},{key:"_getLinearizedBlockData",value:function(e,t){var r,n,a,i,o,s,c,u,l,f,h,d,p=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=this.width/e,v=this.height/t,y=0,m=this.components.length,b=e*t*m,w=new Uint8ClampedArray(b),k=new Uint32Array(e),S=4294967288;for(c=0;c>8)+x[l+1];return w}},{key:"_isColorConversionNeeded",get:function(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}},{key:"_convertYccToRgb",value:function(e){for(var t,r,n,a=0,i=e.length;a4)throw new g("Unsupported color mode");var c=this._getLinearizedBlockData(t,r,s);if(1===this.numComponents&&a){var u,l=new Uint8ClampedArray(3*c.length),f=0,h=i(c);try{for(h.s();!(u=h.n()).done;){var d=u.value;l[f++]=d,l[f++]=d,l[f++]=d}}catch(e){h.e(e)}finally{h.f()}return l}if(3===this.numComponents&&this._isColorConversionNeeded)return this._convertYccToRgb(c);if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgb(c):this._convertYcckToCmyk(c);if(a)return this._convertCmykToRgb(c)}return c}}]),e}();t.JpegImage=M},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxStream=void 0;var a=r(148),i=r(159),o=r(2);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.JpxImage=void 0;var a=r(2),i=r(135),o=r(155);function s(e,t){for(var r=0;r>24&255,s>>16&255,s>>8&255,255&s);(0,a.warn)("Unsupported header type ".concat(s," (").concat(h,")."))}u&&(r+=c)}else this.parseCodestream(e,0,e.length)}},{key:"parseImageProperties",value:function(e){for(var t=e.getByte();t>=0;)if(65361==(t<<8|(t=e.getByte()))){e.skip(4);var r=e.getInt32()>>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);var o=e.getUint16();return this.width=r-a,this.height=n-i,this.componentsCount=o,void(this.bitsPerComponent=8)}throw new p("No size marker found in JPX stream")}},{key:"parseCodestream",value:function(e,t,r){var n={},o=!1;try{for(var s=t;s+1>5,h=[];l>3,A.mu=0):(A.epsilon=e[l]>>3,A.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(A)}O.SPqcds=h,n.mainHeader?n.QCD=O:(n.currentTile.QCD=O,n.currentTile.QCC=[]);break;case 65373:u=(0,i.readUint16)(e,s);var C={};l=s+2;var F=void 0;switch(n.SIZ.Csiz<257?F=e[l++]:(F=(0,i.readUint16)(e,l),l+=2),31&(f=e[l++])){case 0:d=8,g=!0;break;case 1:d=16,g=!1;break;case 2:d=16,g=!0;break;default:throw new Error("Invalid SQcd value "+f)}for(C.noQuantization=8===d,C.scalarExpounded=g,C.guardBits=f>>5,h=[];l>3,P.mu=0):(P.epsilon=e[l]>>3,P.mu=(7&e[l])<<8|e[l+1],l+=2),h.push(P)}C.SPqcds=h,n.mainHeader?n.QCC[F]=C:n.currentTile.QCC[F]=C;break;case 65362:u=(0,i.readUint16)(e,s);var T={};l=s+2;var j=e[l++];T.entropyCoderWithCustomPrecincts=!!(1&j),T.sopMarkerUsed=!!(2&j),T.ephMarkerUsed=!!(4&j),T.progressionOrder=e[l++],T.layersCount=(0,i.readUint16)(e,l),l+=2,T.multipleComponentTransform=e[l++],T.decompositionLevelsCount=e[l++],T.xcb=2+(15&e[l++]),T.ycb=2+(15&e[l++]);var L=e[l++];if(T.selectiveArithmeticCodingBypass=!!(1&L),T.resetContextProbabilities=!!(2&L),T.terminationOnEachCodingPass=!!(4&L),T.verticallyStripe=!!(8&L),T.predictableTermination=!!(16&L),T.segmentationSymbolUsed=!!(32&L),T.reversibleTransformation=e[l++],T.entropyCoderWithCustomPrecincts){for(var R=[];l>4})}T.precinctsSizes=R}var D=[];T.selectiveArithmeticCodingBypass&&D.push("selectiveArithmeticCodingBypass"),T.terminationOnEachCodingPass&&D.push("terminationOnEachCodingPass"),T.verticallyStripe&&D.push("verticallyStripe"),T.predictableTermination&&D.push("predictableTermination"),D.length>0&&(o=!0,(0,a.warn)("JPX: Unsupported COD options (".concat(D.join(", "),")."))),n.mainHeader?n.COD=T:(n.currentTile.COD=T,n.currentTile.COC=[]);break;case 65424:u=(0,i.readUint16)(e,s),(v={}).index=(0,i.readUint16)(e,s+2),v.length=(0,i.readUint32)(e,s+4),v.dataEnd=v.length+s-2,v.partIndex=e[s+8],v.partsCount=e[s+9],n.mainHeader=!1,0===v.partIndex&&(v.COD=n.COD,v.COC=n.COC.slice(0),v.QCD=n.QCD,v.QCC=n.QCC.slice(0)),n.currentTile=v;break;case 65427:0===(v=n.currentTile).partIndex&&(_(n,v.index),I(n)),E(n,e,s,u=v.dataEnd-s);break;case 65363:(0,a.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");case 65365:case 65367:case 65368:case 65380:u=(0,i.readUint16)(e,s);break;default:throw new Error("Unknown codestream code: "+c.toString(16))}s+=u}}catch(e){if(o||this.failOnCorruptedImage)throw new p(e.message);(0,a.warn)('JPX: Trying to recover from: "'.concat(e.message,'".'))}this.tiles=function(e){for(var t=e.SIZ,r=e.components,n=t.Csiz,a=[],i=0,o=e.tiles.length;i>2);f[g++]=P+w>>d,f[g++]=P>>d,f[g++]=P+b>>d}else for(v=0;v>d,f[g++]=m-.34413*b-.71414*w>>d,f[g++]=m+1.772*b>>d;if(k)for(v=0,g=3;v>d}else for(var T=0;T>d,g+=n}a.push(h)}return a}(n),this.width=n.SIZ.Xsiz-n.SIZ.XOsiz,this.height=n.SIZ.Ysiz-n.SIZ.YOsiz,this.componentsCount=n.SIZ.Csiz}}]),e}();function y(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz),e.x1=Math.ceil(t.Xsiz/e.XRsiz),e.y0=Math.ceil(t.YOsiz/e.YRsiz),e.y1=Math.ceil(t.Ysiz/e.YRsiz),e.width=e.x1-e.x0,e.height=e.y1-e.y0}function m(e,t){for(var r,n=e.SIZ,a=[],i=Math.ceil((n.Xsiz-n.XTOsiz)/n.XTsiz),o=Math.ceil((n.Ysiz-n.YTOsiz)/n.YTsiz),s=0;s0?Math.min(n.xcb,a.PPx-1):Math.min(n.xcb,a.PPx),a.ycb_=r>0?Math.min(n.ycb,a.PPy-1):Math.min(n.ycb,a.PPy),a}function w(e,t,r){var n=1<t.trx0?Math.ceil(t.trx1/n)-Math.floor(t.trx0/n):0,u=t.try1>t.try0?Math.ceil(t.try1/a)-Math.floor(t.try0/a):0,l=c*u;t.precinctParameters={precinctWidth:n,precinctHeight:a,numprecinctswide:c,numprecinctshigh:u,numprecincts:l,precinctWidthInSubband:o,precinctHeightInSubband:s}}function k(e,t,r){var n,a,i,o,s=r.xcb_,c=r.ycb_,u=1<>s,h=t.tby0>>c,d=t.tbx1+u-1>>s,p=t.tby1+l-1>>c,g=t.resolution.precinctParameters,v=[],y=[];for(a=h;am.cbxMax&&(m.cbxMax=n),am.cbyMax&&(m.cbyMax=a)):y[o]=m={cbxMin:n,cbyMin:a,cbxMax:n,cbyMax:a},i.precinct=m}t.codeblockParameters={codeblockWidth:s,codeblockHeight:c,numcodeblockwide:d-f+1,numcodeblockhigh:p-h+1},t.codeblocks=v,t.precincts=y}function S(e,t,r){for(var n=[],a=e.subbands,i=0,o=a.length;ie.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[u],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){for(var t=e.resolutions[c],r=t.precinctParameters.numprecincts;fe.codingStyleParameters.decompositionLevelsCount)){var i=e.resolutions[r],o=i.precinctParameters.numprecincts;if(!(a>=o)){for(;t=0;--v){var y=c.resolutions[v],m=g*y.precinctParameters.precinctWidth,b=g*y.precinctParameters.precinctHeight;f=Math.min(f,m),h=Math.min(h,b),d=Math.max(d,y.precinctParameters.numprecinctswide),p=Math.max(p,y.precinctParameters.numprecinctshigh),l[v]={width:m,height:b},g<<=1}r=Math.min(r,f),n=Math.min(n,h),a=Math.max(a,d),i=Math.max(i,p),o[s]={resolutions:l,minWidth:f,minHeight:h,maxNumWide:d,maxNumHigh:p}}return{components:o,minWidth:r,minHeight:n,maxNumWide:a,maxNumHigh:i}}function I(e){for(var t=e.SIZ,r=e.currentTile.index,n=e.tiles[r],a=t.Csiz,i=0;i>>(s-=e)&(1<0;){var $=S.shift();void 0===(x=$.codeblock).data&&(x.data=[]),x.data.push({data:t,start:r+o,end:r+o+$.dataLength,codingpasses:$.codingpasses}),o+=$.dataLength}}}return o}function j(e,t,r,n,a,i,s,c,u){for(var l=n.tbx0,f=n.tby0,h=n.tbx1-n.tbx0,d=n.codeblocks,p="H"===n.type.charAt(0)?1:0,g="H"===n.type.charAt(1)?t:0,v=0,y=d.length;v=i?B:B*(1<0?1-m:0));var F=b.subbands[x],P=g[F.type];j(S,w,0,F,d?1:Math.pow(2,h+P-C)*(1+A/2048),u+C-1,d,l,f)}v.push({width:w,height:k,items:S})}var T=p.calculate(v,n.tcx0,n.tcy0);return{left:n.tcx0,top:n.tcy0,width:T.width,height:T.height,items:T.items}}function _(e,t){for(var r=e.SIZ.Csiz,n=e.tiles[t],a=0;a>=1,t>>=1,n++}n--,(r=this.levels[n]).items[r.index]=a,this.currentLevel=n,delete this.value}},{key:"incrementValue",value:function(){var e=this.levels[this.currentLevel];e.items[e.index]++}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return--e<0?(this.value=r,!1):(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,!0)}}]),e}(),U=function(){function e(t,r,n){u(this,e);var a=(0,i.log2)(Math.max(t,r))+1;this.levels=[];for(var o=0;or)return this.currentLevel=n,this.propagateValues(),!1;e>>=1,t>>=1,n++}return this.currentLevel=n-1,!0}},{key:"incrementValue",value:function(e){var t=this.levels[this.currentLevel];t.items[t.index]=e+1,this.propagateValues()}},{key:"propagateValues",value:function(){for(var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];--e>=0;)(t=this.levels[e]).items[t.index]=r}},{key:"nextLevel",value:function(){var e=this.currentLevel,t=this.levels[e],r=t.items[t.index];return t.items[t.index]=255,!(--e<0||(this.currentLevel=e,(t=this.levels[e]).items[t.index]=r,0))}}]),e}(),$=(L=17,R=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),N=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),D=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]),function(){function e(t,r,n,a,i){var o;u(this,e),this.width=t,this.height=r,o="HH"===n?D:"HL"===n?N:R,this.contextLabelTable=o;var s,c=t*r;this.neighborsSignificance=new Uint8Array(c),this.coefficentsSign=new Uint8Array(c),s=i>14?new Uint32Array(c):i>6?new Uint16Array(c):new Uint8Array(c),this.coefficentsMagnitude=s,this.processingFlags=new Uint8Array(c);var l=new Uint8Array(c);if(0!==a)for(var f=0;f0,c=t+10&&(n=r-i,s&&(a[n-1]+=16),c&&(a[n+1]+=16),a[n]+=4),e+1=r)break;if(o[h]&=-2,!n[h]&&i[h]){var g=c[i[h]];if(e.readBit(s,g)){var v=this.decodeSignBit(p,f,h);a[h]=v,n[h]=1,this.setNeighborsSignificance(p,f,h),o[h]|=2}u[h]++,o[h]|=1}}}},{key:"decodeSignBit",value:function(e,t,r){var n,a,i,o,s,c,u=this.width,l=this.height,f=this.coefficentsMagnitude,h=this.coefficentsSign;o=t>0&&0!==f[r-1],t+10&&0!==f[r-u],e+1=0?(s=9+n,c=this.decoder.readBit(this.contexts,s)):(s=9-n,c=1^this.decoder.readBit(this.contexts,s)),c}},{key:"runMagnitudeRefinementPass",value:function(){for(var e,t=this.decoder,r=this.width,n=this.height,a=this.coefficentsMagnitude,i=this.neighborsSignificance,o=this.contexts,s=this.bitsDecoded,c=this.processingFlags,u=r*n,l=4*r,f=0;f>1,c=-1.586134342059924,u=-.052980118572961,l=.882911075530934,f=.443506852043971,h=1.230174104914001;for(n=(t|=0)-3,a=s+4;a--;n+=2)e[n]*=.8128930661159609;for(i=f*e[(n=t-2)-1],a=s+3;a--&&(o=f*e[n+1],e[n]=h*e[n]-i-o,a--);n+=2)i=f*e[(n+=2)+1],e[n]=h*e[n]-i-o;for(i=l*e[(n=t-1)-1],a=s+2;a--&&(o=l*e[n+1],e[n]-=i+o,a--);n+=2)i=l*e[(n+=2)+1],e[n]-=i+o;for(i=u*e[(n=t)-1],a=s+1;a--&&(o=u*e[n+1],e[n]-=i+o,a--);n+=2)i=u*e[(n+=2)+1],e[n]-=i+o;if(0!==s)for(i=c*e[(n=t+1)-1],a=s;a--&&(o=c*e[n+1],e[n]-=i+o,a--);n+=2)i=c*e[(n+=2)+1],e[n]-=i+o}}]),r}(X),q=function(e){l(r,e);var t=h(r);function r(){return u(this,r),t.apply(this,arguments)}return c(r,[{key:"filter",value:function(e,t,r){var n,a,i=r>>1;for(n=t|=0,a=i+1;a--;n+=2)e[n]-=e[n-1]+e[n+1]+2>>2;for(n=t+1,a=i;a--;n+=2)e[n]+=e[n-1]+e[n+1]>>1}}]),r}(X)},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r>>t&(1<0;if(y<256)h[0]=y,d=1;else{if(!(y>=258)){if(256===y){l=9,o=258,d=0;continue}this.eof=!0,delete this.lzwState;break}if(y=0;t--)h[t]=s[r],r=u[r];else h[d++]=h[0]}if(m&&(u[o]=f,c[o]=c[f]+1,s[o]=h[0],l=++o+i&o+i-1?l:0|Math.min(Math.log(o+i)/.6931471805599453+1,12)),f=y,n<(p+=d)){do{n+=512}while(n{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.PredictorStream=void 0;var a=r(148),i=r(134),o=r(2);function s(e,t){for(var r=0;r15))throw new o.FormatError("Unsupported predictor: ".concat(a));n.readBlock=2===a?n.readBlockTiff:n.readBlockPng,n.str=e,n.dict=e.dict;var s=n.colors=r.get("Colors")||1,c=n.bits=r.get("BPC","BitsPerComponent")||8,f=n.columns=r.get("Columns")||1;return n.pixBytes=s*c+7>>3,n.rowBytes=f*s*c+7>>3,u(n,l(n))}return t=d,(r=[{key:"readBlockTiff",value:function(){var e=this.rowBytes,t=this.bufferLength,r=this.ensureBuffer(t+e),n=this.bits,a=this.colors,i=this.str.getBytes(e);if(this.eof=!i.length,!this.eof){var o,s=0,c=0,u=0,l=0,f=t;if(1===n&&1===a)for(o=0;o>1,h^=h>>2,s=(1&(h^=h>>4))<<7,r[f++]=h}else if(8===n){for(o=0;o>8&255,r[f++]=255&p}}else{var g=new Uint8Array(a+1),v=(1<>u-n)&v,u-=n,c=c<=8&&(r[m++]=c>>l-8&255,l-=8);l>0&&(r[m++]=(c<<8-l)+(s&(1<<8-l)-1))}this.bufferLength+=e}}},{key:"readBlockPng",value:function(){var e=this.rowBytes,t=this.pixBytes,r=this.str.getByte(),n=this.str.getBytes(e);if(this.eof=!n.length,!this.eof){var a=this.bufferLength,i=this.ensureBuffer(a+e),s=i.subarray(a-e,a);0===s.length&&(s=new Uint8Array(e));var c,u,l,f=a;switch(r){case 0:for(c=0;c>1)+n[c];for(;c>1)+n[c]&255,f++;break;case 4:for(c=0;c{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0){var a=this.str.getBytes(n);t.set(a,r),r+=n}}else{n=257-n;var i=e[1];t=this.ensureBuffer(r+n+1);for(var o=0;o{Object.defineProperty(t,"__esModule",{value:!0}),t.Font=t.ErrorFont=void 0;var n=r(2),a=r(164),i=r(167),o=r(169),s=r(168),c=r(166),u=r(170),l=r(171),f=r(172),h=r(173),d=r(174),p=r(175),g=r(145),v=r(176),y=r(135),m=r(139),b=r(177);function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||S(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function S(e,t){if(e){if("string"==typeof e)return x(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(e,t):void 0}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&e.toUnicode.amend(t)}}var _=function(){function e(t,r,n,a,i,o,s,c,u){A(this,e),this.originalCharCode=t,this.fontChar=r,this.unicode=n,this.accent=a,this.width=i,this.vmetric=o,this.operatorListId=s,this.isSpace=c,this.isInFont=u}return F(e,[{key:"category",get:function(){return(0,n.shadow)(this,"category",(0,o.getCharUnicodeCategory)(this.unicode),!0)}},{key:"normalizedUnicode",get:function(){return(0,n.shadow)(this,"normalizedUnicode",(0,o.reverseIfRtl)(e._NormalizedUnicodes[this.unicode]||this.unicode),!0)}}],[{key:"_NormalizedUnicodes",get:function(){return(0,n.shadow)(this,"_NormalizedUnicodes",(0,o.getNormalizedUnicodes)())}}]),e}();function L(e,t){return(e<<8)+t}function R(e,t,r){e[t+1]=r,e[t]=r>>>8}function N(e,t){var r=(e<<8)+t;return 32768&r?r-65536:r}function D(e){return String.fromCharCode(e>>8&255,255&e)}function B(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,255&e)}function U(e){var t=e.peekBytes(4);return"ttcf"===(0,n.bytesToString)(t)}function $(e,t){for(var r in t)e[+r]=t[r]}function X(e,t,r){for(var n,a=[],i=0,s=e.length;i2&&void 0!==arguments[2]&&arguments[2];switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}var a="Unsupported CID string (charCode ".concat(e,'): "').concat(t,'".');if(r)throw new n.FormatError(a);return(0,n.warn)(a),t}function q(e,t,r,a){var i=Object.create(null),o=new Map,s=[],c=new Set,u=0,l=P[u][0],f=l,h=P[u][1];for(var d in e){var p=e[d|=0];if(t(p)){if(f>h){if(++u>=P.length){(0,n.warn)("Ran out of space in font private use area.");break}f=P[u][0],h=P[u][1]}var g=f++;0===p&&(p=r);var v=a.get(d);"string"==typeof v&&(v=v.codePointAt(0)),v&&v=r||n.push({fontCharCode:0|a,glyphId:e[a]});if(t){var i,o=k(t);try{for(o.s();!(i=o.n()).done;){var s=w(i.value,2),c=s[0],u=s[1];u>=r||n.push({fontCharCode:c,glyphId:u})}}catch(e){o.e(e)}finally{o.f()}}0===n.length&&n.push({fontCharCode:0,glyphId:0}),n.sort((function(e,t){return e.fontCharCode-t.fontCharCode}));for(var l=[],f=n.length,h=0;h65535?2:1,l="\\0\\0"+D(u)+"\\0\\0"+(0,n.string32)(4+8*u);for(a=c.length-1;a>=0&&!(c[a][0]<=65535);--a);var f=a+1;c[a][0]<65535&&65535===c[a][1]&&(c[a][1]=65534);var h,d,p,g,y=c[a][1]<65535?1:0,m=f+y,b=v.OpenTypeFileBuilder.getSearchParams(m,2),S="",x="",O="",A="",C="",F=0;for(a=0,i=f;a0&&(x+="ÿÿ",S+="ÿÿ",O+="\\0",A+="\\0\\0");var I="\\0\\0"+D(2*m)+D(b.range)+D(b.entry)+D(b.rangeShift)+x+"\\0\\0"+S+O+A+C,E="",j="";if(u>1){for(l+="\\0\\0\\n"+(0,n.string32)(4+8*u+4+I.length),E="",a=0,i=c.length;a(f|=0)||!u)&&(u=f),l 123 are reserved for internal usage");c|=1<65535&&(l=65535)}else u=0,l=255;var d=e.bbox||[0,0,0,0],p=r.unitsPerEm||1/(e.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],g=e.ascentScaled?1:p/T,v=r.ascent||Math.round(g*(e.ascent||d[3])),y=r.descent||Math.round(g*(e.descent||d[1]));y>0&&e.descent>0&&d[1]<0&&(y=-y);var m=r.yMax||v,b=-r.yMin||-y;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+(0,n.string32)(a)+(0,n.string32)(i)+(0,n.string32)(s)+(0,n.string32)(c)+"*21*"+D(e.italicAngle?1:0)+D(u||e.firstChar)+D(l||e.lastChar)+D(v)+D(y)+"\\0d"+D(m)+D(b)+"\\0\\0\\0\\0\\0\\0\\0\\0"+D(e.xHeight)+D(e.capHeight)+D(0)+D(u||e.firstChar)+"\\0"}function W(e){var t=Math.floor(e.italicAngle*Math.pow(2,16));return"\\0\\0\\0"+(0,n.string32)(t)+"\\0\\0\\0\\0"+(0,n.string32)(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function V(e){return e.replace(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function Y(e,t){t||(t=[[],[]]);var r,n,a,i,o,s=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||V(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],c=[];for(r=0,n=s.length;r=1&&t[3]>=1&&t[3]<=4}(e)?s?(r="CIDFontType0",a="CIDFontType0C"):(r="MMType1"===i?"MMType1":"Type1",a="Type1C"):((0,n.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."),r=i,a=o),[r,a]}(r,a),2);d=m[0],p=m[1],d===this.type&&p===this.subtype||(0,n.info)("Inconsistent font file Type/SubType, expected: "+"".concat(this.type,"/").concat(this.subtype," but found: ").concat(d,"/").concat(p,"."));try{switch(d){case"MMType1":(0,n.info)("MMType1 font ("+t+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";var S="Type1C"===p||"CIDFontType0C"===p?new f.CFFFont(r,a):new b.Type1Font(t,r,a);j(a),v=this.convert(t,S,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype",v=this.checkAndRepair(t,r,a),this.isOpenType&&(j(a),d="OpenType");break;default:throw new n.FormatError("Font ".concat(d," is not supported"))}}catch(e){return(0,n.warn)(e),void this.fallbackToSystemFont(a)}M(a),this.data=v,this.fontType=(0,i.getFontType)(d,p,a.isStandardFont),this.fontMatrix=a.fontMatrix,this.widths=a.widths,this.defaultWidth=a.defaultWidth,this.toUnicode=a.toUnicode,this.seacMap=a.seacMap}else{for(var x=0;x<256;x++)this.toFontChar[x]=this.differences[x]||a.defaultEncoding[x];this.fontType=n.FontType.TYPE3}}return F(e,[{key:"renderer",get:function(){var e=h.FontRendererFactory.create(this,i.SEAC_ANALYSIS_ENABLED);return(0,n.shadow)(this,"renderer",e)}},{key:"exportData",value:function(){var e,t,r,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[].concat(I,E):I,a=Object.create(null),i=k(n);try{for(i.s();!(r=i.n()).done;)void 0!==(t=this[e=r.value])&&(a[e]=t)}catch(e){i.e(e)}finally{i.f()}return a}},{key:"fallbackToSystemFont",value:function(e){var t=this;this.missingFile=!0;var r=this.name,a=this.type,f=this.subtype,h=(0,i.normalizeFontName)(r),p=(0,u.getStdFontMap)(),g=(0,u.getNonStdFontMap)(),v=!!p[h],y=!(!g[h]||!p[g[h]]);h=p[h]||g[h]||h;var m=(0,d.getFontBasicMetrics)()[h];m&&(isNaN(this.ascent)&&(this.ascent=m.ascent/T),isNaN(this.descent)&&(this.descent=m.descent/T),isNaN(this.capHeight)&&(this.capHeight=m.capHeight/T)),this.bold=/bold/gi.test(h),this.italic=/oblique|italic/gi.test(h),this.black=/Black/g.test(r);var b=/Narrow/g.test(r);if(this.remeasure=(!v||b)&&Object.keys(this.widths).length>0,(v||y)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){var w=e.cidToGidMap,k=[];if($(k,(0,u.getGlyphMapForStandardFonts)()),/Arial-?Black/i.test(r)?$(k,(0,u.getSupplementalGlyphMapForArialBlack)()):/Calibri/i.test(r)&&$(k,(0,u.getSupplementalGlyphMapForCalibri)()),w){for(var S in k){var x=k[S];void 0!==w[x]&&(k[+S]=w[x])}w.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof l.IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){var r=k[e];void 0===w[r]&&(k[+e]=t)}))}this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){k[+e]=t})),this.toFontChar=k,this.toUnicode=new l.ToUnicodeMap(k)}else if(/Symbol/i.test(h))this.toFontChar=X(c.SymbolSetEncoding,(0,s.getGlyphsUnicode)(),this.differences);else if(/Dingbats/i.test(h))/Wingdings/i.test(r)&&(0,n.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."),this.toFontChar=X(c.ZapfDingbatsEncoding,(0,s.getDingbatsGlyphsUnicode)(),this.differences);else if(v){var O=X(this.defaultEncoding,(0,s.getGlyphsUnicode)(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof l.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){O[+e]=t})),this.toFontChar=O}else{var A=(0,s.getGlyphsUnicode)(),C=[];this.toUnicode.forEach((function(e,r){if(!t.composite){var n=t.differences[e]||t.defaultEncoding[e],a=(0,o.getUnicodeForGlyph)(n,A);-1!==a&&(r=a)}C[+e]=r})),this.composite&&this.toUnicode instanceof l.IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(r)&&$(C,(0,u.getGlyphMapForStandardFonts)()),this.toFontChar=C}M(e),this.loadedName=h.split("-")[0],this.fontType=(0,i.getFontType)(a,f,e.isStandardFont)}},{key:"checkAndRepair",value:function(e,t,r){var o=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function u(e,t){var r=Object.create(null);r["OS/2"]=null,r.cmap=null,r.head=null,r.hhea=null,r.hmtx=null,r.maxp=null,r.name=null,r.post=null;for(var n=0;n>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.pos;e.pos=e.start||0,e.skip(n);var o=e.getBytes(a);return e.pos=i,"head"===t&&(o[8]=o[9]=o[10]=o[11]=0,o[17]|=32),{tag:t,checksum:r,length:a,offset:n,data:o}}function d(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function y(e,t,r,n,a,i){var o={length:0,sizeOfInstructions:0};if(r-t<=12)return o;var s=e.subarray(t,r),c=N(s[0],s[1]);if(c<0)return R(s,0,c=-1),n.set(s,a),o.length=s.length,o;var u,l=10,f=0;for(u=0;us.length?o:!i&&d>0?(n.set(s.subarray(0,h),a),n.set([0,0],a+h),n.set(s.subarray(p,k),a+h+2),k-=d,s.length-k>3&&(k=k+3&-4),o.length=k,o):s.length-k>3?(k=k+3&-4,n.set(s.subarray(0,k),a),o.length=k,o):(n.set(s,a),o.length=s.length,o)}function b(e){var r=(t.start||0)+e.offset;t.pos=r;var n=[[],[]],a=e.length,i=r+a;if(0!==t.getUint16()||a<6)return n;var o,s,c=t.getUint16(),u=t.getUint16(),l=[];for(o=0;oi)){t.pos=d;var p=h.name;if(h.encoding){for(var g="",v=0,y=h.length;v0&&(u+=k-1)}}else(v||m)&&((0,n.warn)("TT: nested FDEFs not allowed"),g=!0),v=!0,f=u,o=h.pop(),t.functionsDefined[o]={data:c,i:u};else if(!v&&!m)if(o=h.at(-1),isNaN(o))(0,n.info)("TT: CALL empty stack (or invalid entry).");else if(t.functionsUsed[o]=!0,o in t.functionsStackDeltas){var S=h.length+t.functionsStackDeltas[o];if(S<0)return(0,n.warn)("TT: CALL invalid functions stack delta."),void(t.hintsValid=!1);h.length=S}else if(o in t.functionsDefined&&!p.includes(o)){if(d.push({data:c,i:u,stackTop:h.length-1}),p.push(o),!(s=t.functionsDefined[o]))return(0,n.warn)("TT: CALL non-existent function"),void(t.hintsValid=!1);c=s.data,u=s.i}if(!v&&!m){var x=0;for(w<=142?x=A[w]:w>=192&&w<=223?x=-1:w>=224&&(x=-2),w>=113&&w<=117&&(a=h.pop(),isNaN(a)||(x=2*-a));x<0&&h.length>0;)h.pop(),x++;for(;x>0;)h.push(NaN),x--}}t.tooComplexToFollowFunctions=g;var O=[c];u>c.length&&O.push(new Uint8Array(u-c.length)),f>l&&((0,n.warn)("TT: complementing a missing function tail"),O.push(new Uint8Array([34,45]))),function(e,t){if(t.length>1){var r,n,a=0;for(r=0,n=t.length;r>>0,o=[],s=0;s>>0);var c={ttcTag:t,majorVersion:r,minorVersion:a,numFonts:i,offsetTable:o};switch(r){case 1:return c;case 2:return c.dsigTag=e.getInt32()>>>0,c.dsigLength=e.getInt32()>>>0,c.dsigOffset=e.getInt32()>>>0,c}throw new n.FormatError("Invalid TrueType Collection majorVersion: ".concat(r,"."))}(e),i=a.numFonts,o=a.offsetTable,s=t.split("+"),c=0;c0||!(r.cMap instanceof g.IdentityCMap));if("OTTO"===w.version&&!T||!S.head||!S.hhea||!S.maxp||!S.post)return O=new m.Stream(S["CFF "].data),x=new f.CFFFont(O,r),j(r),this.convert(e,x,r);delete S.glyf,delete S.loca,delete S.fpgm,delete S.prep,delete S["cvt "],this.isOpenType=!0}if(!S.maxp)throw new n.FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+S.maxp.offset;var I=t.getInt32(),E=t.getUint16();if(r.scaleFactors&&r.scaleFactors.length===E&&P){var M=r.scaleFactors,_=L(S.head.data[50],S.head.data[51]),D=new p.GlyfTable({glyfTable:S.glyf.data,isGlyphLocationsLong:_,locaTable:S.loca.data,numGlyphs:E});D.scale(M);var B=D.write(),$=B.glyf,X=B.loca,V=B.isLocationLong;S.glyf.data=$,S.loca.data=X,V!==!!_&&(S.head.data[50]=0,S.head.data[51]=V?1:0);for(var K=S.hmtx.data,J=0;J>8&255,K[Z+1]=255&Q,R(K,Z+2,Math.round(M[J]*N(K[Z+2],K[Z+3])))}}var ee=E+1,te=!0;ee>65535&&(te=!1,ee=E,(0,n.warn)("Not enough space in glyfs to duplicate first glyph."));var re=0,ne=0;I>=65536&&S.maxp.length>=22&&(t.pos+=8,t.getUint16()>2&&(S.maxp.data[14]=0,S.maxp.data[15]=2),t.pos+=4,re=t.getUint16(),t.pos+=4,ne=t.getUint16()),S.maxp.data[4]=ee>>8,S.maxp.data[5]=255ⅇvar ae=function(e,t,r,a){var i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(e&&C(e,i),t&&C(t,i),e&&function(e,t){if(!e.tooComplexToFollowFunctions){if(e.functionsDefined.length>t)return(0,n.warn)("TT: more functions defined than expected"),void(e.hintsValid=!1);for(var r=0,a=e.functionsUsed.length;rt)return(0,n.warn)("TT: invalid function id: "+r),void(e.hintsValid=!1);if(e.functionsUsed[r]&&!e.functionsDefined[r])return(0,n.warn)("TT: undefined function: "+r),void(e.hintsValid=!1)}}}(i,a),r&&1&r.length){var o=new Uint8Array(r.length+1);o.set(r.data),r.data=o}return i.hintsValid}(S.fpgm,S.prep,S["cvt "],re);if(ae||(delete S.fpgm,delete S.prep,delete S["cvt "]),function(e,t,r,a,i,o){if(t){e.pos=(e.start||0)+t.offset,e.pos+=4,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2;var s=e.getUint16();e.pos+=8,e.pos+=2;var c=e.getUint16();0!==s&&(2&L(a.data[44],a.data[45])||(t.data[22]=0,t.data[23]=0)),c>i&&((0,n.info)("The numOfMetrics (".concat(c,") should not be ")+"greater than the numGlyphs (".concat(i,").")),c=i,t.data[34]=(65280&c)>>8,t.data[35]=255&c);var u=i-c-(r.length-4*c>>1);if(u>0){var l=new Uint8Array(r.length+2*u);l.set(r.data),o&&(l[r.length]=r.data[2],l[r.length+1]=r.data[3]),r.data=l}}else r&&(r.data=null)}(t,S.hhea,S.hmtx,S.head,ee,te),!S.head)throw new n.FormatError('Required "head" table is not found');!function(e,t,r){var a=e.data,i=(a[0]<<24)+(a[1]<<16)+(a[2]<<8)+a[3];i>>16!=1&&((0,n.info)("Attempting to fix invalid version in head table: "+i),a[0]=0,a[1]=1,a[2]=0,a[3]=0);var o=L(a[50],a[51]);if(o<0||o>1){(0,n.info)("Attempting to fix invalid indexToLocFormat in head table: "+o);var s=t+1;if(r===s<<1)a[50]=0,a[51]=0;else{if(r!==s<<2)throw new n.FormatError("Could not fix indexToLocFormat: "+o);a[50]=0,a[51]=1}}}(S.head,E,P?S.loca.length:0);var ie=Object.create(null);if(P){var oe=L(S.head.data[50],S.head.data[51]),se=function(e,t,r,n,a,i,o){var s,c,u;n?(s=4,c=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]},u=function(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}):(s=2,c=function(e,t){return e[t]<<9|e[t+1]<<1},u=function(e,t,r){e[t]=r>>9&255,e[t+1]=r>>1&255});var l=i?r+1:r,f=s*(1+l),h=new Uint8Array(f);h.set(e.data.subarray(0,f)),e.data=h;var d,p,g=t.data,v=g.length,m=new Uint8Array(v),b=[];for(d=0,p=0;dv&&(w=v),b.push({index:d,offset:w,endOffset:0})}for(b.sort((function(e,t){return e.offset-t.offset})),d=0;do&&(o=F.sizeOfInstructions),u(h,p,C+=P)}if(0===C){var T=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(d=0,p=s;dI+C?t.data=m.subarray(0,I+C):(t.data=new Uint8Array(I+C),t.data.set(m.subarray(0,C))),t.data.set(m.subarray(0,I),C),u(e.data,h.length-s,C+I)}else t.data=m.subarray(0,C);return{missingGlyphs:A,maxSizeOfInstructions:o}}(S.loca,S.glyf,E,oe,ae,te,ne);ie=se.missingGlyphs,I>=65536&&S.maxp.length>=22&&(S.maxp.data[26]=se.maxSizeOfInstructions>>8,S.maxp.data[27]=255&se.maxSizeOfInstructions)}if(!S.hhea)throw new n.FormatError('Required "hhea" table is not found');0===S.hhea.data[10]&&0===S.hhea.data[11]&&(S.hhea.data[10]=255,S.hhea.data[11]=255);var ce={unitsPerEm:L(S.head.data[18],S.head.data[19]),yMax:L(S.head.data[42],S.head.data[43]),yMin:N(S.head.data[38],S.head.data[39]),ascent:N(S.hhea.data[4],S.hhea.data[5]),descent:N(S.hhea.data[6],S.hhea.data[7]),lineGap:N(S.hhea.data[8],S.hhea.data[9])};this.ascent=ce.ascent/ce.unitsPerEm,this.descent=ce.descent/ce.unitsPerEm,this.lineGap=ce.lineGap/ce.unitsPerEm,this.cssFontInfo&&this.cssFontInfo.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,S.post&&function(e,r,a){var o=(t.start||0)+e.offset;t.pos=o;var s,c=o+e.length,u=t.getInt32();t.skip(28);var l,f=!0;switch(u){case 65536:s=i.MacStandardGlyphOrdering;break;case 131072:var h=t.getUint16();if(h!==a){f=!1;break}var d=[];for(l=0;l=32768){f=!1;break}d.push(p)}if(!f)break;for(var g=[],v=[];t.pos65535)throw new n.FormatError("Max size of CID is 65,535");var r=-1;he?r=t:void 0!==fe[t]&&(r=fe[t]),r>=0&&r>>0,p=!1;if(!s||s.platformId!==f||s.encodingId!==h){if(0!==f||0!==h&&1!==h&&3!==h)if(1===f&&0===h)p=!0;else if(3!==f||1!==h||!a&&s){if(r&&3===f&&0===h){p=!0;var g=!0;if(l>3;x.push(C),O=Math.max(C,O)}for(var F=[],P=0;P<=O;P++)F.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:N(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(var T=0;T<256;T++)if(0===x[T])t.pos=F[0].idRangePos+2*T,m=t.getUint16(),k.push({charCode:T,glyphId:m});else{var I=F[x[T]];for(y=0;y>1;t.skip(6);var M,_=[];for(M=0;M>1)-(j-M),i.offsetIndex=R,D=Math.max(D,R+i.end-i.start+1)):i.offsetIndex=-1}var U=[];for(y=0;y>>0;for(y=0;y>>0,V=t.getInt32()>>>0,Y=t.getInt32()>>>0,K=W;K<=V;K++)k.push({charCode:K,glyphId:Y++})}k.sort((function(e,t){return e.charCode-t.charCode}));for(var J=1;J=61440&&_e<=61695&&(_e&=255),ue[_e]=Me.glyphId}}catch(e){je.e(e)}finally{je.f()}}if(r.glyphNames&&(ye.length||this.differences.length))for(var Le=0;Le<256;++Le)if(me||void 0===ue[Le]){var Re=this.differences[Le]||ye[Le];if(Re){var Ne=r.glyphNames.indexOf(Re);Ne>0&&le(Ne)&&(ue[Le]=Ne)}}}0===ue.length&&(ue[0]=0);var De=ee-1;if(te||(De=0),!r.cssFontInfo){var Be=q(ue,le,De,this.toUnicode);this.toFontChar=Be.toFontChar,S.cmap={tag:"cmap",data:G(Be.charCodeToGlyphId,Be.toUnicodeExtraMap,ee)},S["OS/2"]&&function(e,t){t.pos=(t.start||0)+e.offset;var r=t.getUint16();t.skip(60);var n=t.getUint16();return!(r<4&&768&n||t.getUint16()>t.getUint16()||(t.skip(6),0===t.getUint16()||(e.data[8]=e.data[9]=0,0)))}(S["OS/2"],t)||(S["OS/2"]={tag:"OS/2",data:z(r,Be.charCodeToGlyphId,ce)})}if(!P)try{O=new m.Stream(S["CFF "].data),(x=new a.CFFParser(O,r,i.SEAC_ANALYSIS_ENABLED).parse()).duplicateFirstGlyph();var Ue=new a.CFFCompiler(x);S["CFF "].data=Ue.compile()}catch(e){(0,n.warn)("Failed to compile font "+r.loadedName)}if(S.name){var $e=b(S.name);S.name.data=Y(e,$e),this.psName=$e[0][6]||null}else S.name={tag:"name",data:Y(this.name)};var Xe=new v.OpenTypeFileBuilder(w.version);for(var He in S)Xe.addTable(He,S[He].data);return Xe.toArray()}},{key:"convert",value:function(e,t,r){r.fixedPitch=!1,r.builtInEncoding&&function(e,t){if(!e.isInternalFont&&!(e.hasIncludedToUnicodeMap||t===e.defaultEncoding||e.toUnicode instanceof l.IdentityToUnicodeMap)){var r=[],n=(0,s.getGlyphsUnicode)();for(var a in t)if(!e.hasEncoding||0!==e.differences.length&&void 0===e.differences[a]){var i=t[a],c=(0,o.getUnicodeForGlyph)(i,n);-1!==c&&(r[a]=String.fromCharCode(c))}r.length>0&&e.toUnicode.amend(r)}}(r,r.builtInEncoding);var a=1;t instanceof f.CFFFont&&(a=t.numGlyphs-1);var u=t.getGlyphMapping(r),h=null,d=u,p=null;r.cssFontInfo||(h=q(u,t.hasGlyphId.bind(t),a,this.toUnicode),this.toFontChar=h.toFontChar,d=h.charCodeToGlyphId,p=h.toUnicodeExtraMap);var g=t.numGlyphs;function y(e,t){var r=null;for(var n in e)t===e[n]&&(r||(r=[]),r.push(0|n));return r}function m(e,t){for(var r in e)if(t===e[r])return 0|r;return h.charCodeToGlyphId[h.nextAvailableFontCharCode]=t,h.nextAvailableFontCharCode++}var b=t.seacs;if(h&&i.SEAC_ANALYSIS_ENABLED&&b&&b.length){var w=r.fontMatrix||n.FONT_IDENTITY_MATRIX,S=t.getCharset(),x=Object.create(null);for(var O in b){var A=b[O|=0],C=c.StandardEncoding[A[2]],F=c.StandardEncoding[A[3]],P=S.indexOf(C),T=S.indexOf(F);if(!(P<0||T<0)){var I={x:A[0]*w[0]+A[1]*w[2]+w[4],y:A[0]*w[1]+A[1]*w[3]+w[5]},E=y(u,O);if(E){var j,M=k(E);try{for(M.s();!(j=M.n()).done;){var _=j.value,L=h.charCodeToGlyphId,R=m(L,P),N=m(L,T);x[_]={baseFontCharCode:R,accentFontCharCode:N,accentOffset:I}}}catch(e){M.e(e)}finally{M.f()}}}}r.seacMap=x}var U=1/(r.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],$=new v.OpenTypeFileBuilder("OTTO");return $.addTable("CFF ",t.data),$.addTable("OS/2",z(r,d)),$.addTable("cmap",G(d,p,g)),$.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+B(U)+"\\0\\0\\0\\0ž\\v~'\\0\\0\\0\\0ž\\v~'\\0\\0"+B(r.descent)+"ÿ"+B(r.ascent)+D(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),$.addTable("hhea","\\0\\0\\0"+B(r.ascent)+B(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+B(r.capHeight)+B(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+D(g)),$.addTable("hmtx",function(){for(var e=t.charstrings,r=t.cff?t.cff.widths:null,n="\\0\\0\\0\\0",a=1,i=g;a1&&void 0!==arguments[1]&&arguments[1],s=this._glyphCache[e];if(s&&s.isSpace===i)return s;var c=e;this.cMap&&this.cMap.contains(e)&&"string"==typeof(c=this.cMap.lookup(e))&&(c=H(e,c)),"number"!=typeof(r=this.widths[c])&&(r=this.defaultWidth);var u=this.vmetrics&&this.vmetrics[c],l=this.toUnicode.get(e)||e;"number"==typeof l&&(l=String.fromCharCode(l));var f=void 0!==this.toFontChar[e];if(t=this.toFontChar[e]||e,this.missingFile){var h=this.differences[e]||this.defaultEncoding[e];".notdef"!==h&&""!==h||"Type1"!==this.type||(t=32),t=(0,o.mapSpecialUnicodeValues)(t)}this.isType3Font&&(a=t);var d=null;if(this.seacMap&&this.seacMap[e]){f=!0;var p=this.seacMap[e];t=p.baseFontCharCode,d={fontChar:String.fromCodePoint(p.accentFontCharCode),offset:p.accentOffset}}var g="";return"number"==typeof t&&(t<=1114111?g=String.fromCodePoint(t):(0,n.warn)("charToGlyph - invalid fontCharCode: ".concat(t))),s=new _(e,g,l,d,r,u,a,i,f),this._glyphCache[e]=s}},{key:"charsToGlyphs",value:function(e){var t=this._charsCache[e];if(t)return t;if(t=[],this.cMap)for(var r=Object.create(null),n=e.length,a=0;a55295&&(c<57344||c>65533)&&o++,this.toUnicode){var u=i(c);if(-1!==u){a()&&(r.push(n.join("")),n.length=0);for(var f=(this.cMap?this.cMap.getCharCodeLength(u):1)-1;f>=0;f--)n.push(String.fromCharCode(u>>8*f&255));continue}}a()||(r.push(n.join("")),n.length=0),n.push(String.fromCodePoint(c))}return r.push(n.join("")),r}}]),e}();t.Font=K;var J=function(){function e(t){A(this,e),this.error=t,this.loadedName="g_font_error",this.missingFile=!0}return F(e,[{key:"charsToGlyphs",value:function(){return[]}},{key:"encodeString",value:function(e){return[e]}},{key:"exportData",value:function(){return{error:this.error}}}]),e}();t.ErrorFont=J},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFTopDict=t.CFFStrings=t.CFFStandardStrings=t.CFFPrivateDict=t.CFFParser=t.CFFIndex=t.CFFHeader=t.CFFFDSelect=t.CFFCompiler=t.CFFCharset=t.CFF=void 0;var n=r(2),a=r(165),i=r(166);function o(e){return function(e){if(Array.isArray(e))return p(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||d(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=l(e);if(t){var a=l(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t)throw new n.FormatError("Invalid CFF header");0!==r&&((0,n.info)("cff data is shifted"),e=e.subarray(r),this.bytes=e);var a=e[0],i=e[1],o=e[2],s=e[3];return{obj:new x(a,i,o,s),endPos:o}}},{key:"parseDict",value:function(e){var t=0;var r,a=[],i=[];t=0;for(var o=e.length;t>4,s=15&i;if(15===o)break;if(r+=n[o],15===s)break;r+=n[s]}return parseFloat(r)}():28===r?r=((r=e[t++])<<24|e[t++]<<16)>>16:29===r?r=(r=(r=(r=e[t++])<<8|e[t++])<<8|e[t++])<<8|e[t++]:r>=32&&r<=246?r-139:r>=247&&r<=250?256*(r-247)+e[t++]+108:r>=251&&r<=254?-256*(r-251)-e[t++]-108:((0,n.warn)('CFFParser_parseDict: "'+r+'" is a reserved command.'),NaN)))}return i}},{key:"parseIndex",value:function(e){var t,r,n=new A,a=this.bytes,i=a[e++]<<8|a[e++],o=[],s=e;if(0!==i){var c=a[e++],u=e+(i+1)*c-1;for(t=0,r=i+1;t10)return!1;for(var i=e.stackSize,o=e.stack,s=t.length,c=0;c>16,c+=2,i++;else if(14===u){if(i>=4&&(i-=4,this.seacAnalysisEnabled))return e.seac=o.slice(i,i+4),!1;l=b[u]}else if(u>=32&&u<=246)o[i]=u-139,i++;else if(u>=247&&u<=254)o[i]=u<251?(u-247<<8)+t[c]+108:-(u-251<<8)-t[c]-108,c++,i++;else if(255===u)o[i]=(t[c]<<24|t[c+1]<<16|t[c+2]<<8|t[c+3])/65536,c+=4,i++;else if(19===u||20===u)e.hints+=i>>1,c+=e.hints+7>>3,i%=2,l=b[u];else{if(10===u||29===u){var h=void 0;if(!(h=10===u?r:a))return l=b[u],(0,n.warn)("Missing subrsIndex for "+l.id),!1;var d=32768;h.count<1240?d=107:h.count<33900&&(d=1131);var p=o[--i]+d;if(p<0||p>=h.count||isNaN(p))return l=b[u],(0,n.warn)("Out of bounds subrIndex for "+l.id),!1;if(e.stackSize=i,e.callDepth++,!this.parseCharString(e,h.get(p),r,a))return!1;e.callDepth--,i=e.stackSize;continue}if(11===u)return e.stackSize=i,!0;if(0===u&&c===t.length)t[c-1]=14,l=b[14];else{if(9===u){t.copyWithin(c-1,c,-1),c-=1,s-=1;continue}l=b[u]}}if(l){if(l.stem&&(e.hints+=i>>1,3===u||23===u?e.hasVStems=!0:!e.hasVStems||1!==u&&18!==u||((0,n.warn)("CFF stem hints are in wrong order"),t[c-1]=1===u?3:23)),"min"in l&&!e.undefStack&&i=2&&l.stem?i%=2:i>1&&(0,n.warn)("Found too many parameters for stack-clearing command"),i>0&&(e.width=o[i-1])),"stackDelta"in l?("stackFn"in l&&l.stackFn(o,i),i+=l.stackDelta):l.stackClearing?i=0:l.resetStack?(i=0,e.undefStack=!1):l.undefStack&&(i=0,e.undefStack=!0,e.firstStackClearing=!1)}}return s=o.length&&((0,n.warn)("Invalid fd index for glyph index."),p=!1),p&&(g=(v=o[y].privateDict).subrsIndex)}else r&&(g=r);if(p&&(p=this.parseCharString(d,h,g,a)),null!==d.width){var m=v.getByName("nominalWidthX");u[f]=m+d.width}else{var b=v.getByName("defaultWidthX");u[f]=b}null!==d.seac&&(c[f]=d.seac),p||t.set(f,new Uint8Array([14]))}return{charStrings:t,seacs:c,widths:u}}},{key:"emptyPrivateDictionary",value:function(e){var t=this.createDict(I,[],e.strings);e.setByKey(18,[0,0]),e.privateDict=t}},{key:"parsePrivateDict",value:function(e){if(e.hasName("Private")){var t=e.getByName("Private");if(Array.isArray(t)&&2===t.length){var r=t[0],n=t[1];if(0===r||n>=this.bytes.length)this.emptyPrivateDictionary(e);else{var a=n+r,i=this.bytes.subarray(n,a),o=this.parseDict(i),s=this.createDict(I,o,e.strings);if(e.privateDict=s,s.getByName("Subrs")){var c=s.getByName("Subrs"),u=n+c;if(0===c||u>=this.bytes.length)this.emptyPrivateDictionary(e);else{var l=this.parseIndex(u);s.subrsIndex=l.obj}}}}else e.removeByName("Private")}else this.emptyPrivateDictionary(e)}},{key:"parseCharsets",value:function(e,t,r,i){if(0===e)return new j(!0,E.ISO_ADOBE,a.ISOAdobeCharset);if(1===e)return new j(!0,E.EXPERT,a.ExpertCharset);if(2===e)return new j(!0,E.EXPERT_SUBSET,a.ExpertSubsetCharset);var o,s,c,u=this.bytes,l=e,f=u[e++],h=[i?0:".notdef"];switch(t-=1,f){case 0:for(c=0;c=65535)(0,n.warn)("Not enough space in charstrings to duplicate first glyph.");else{var e=this.charStrings.get(0);this.charStrings.add(e),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.charStrings.count)&&this.charStrings.get(e).length>0}}]),e}();t.CFF=S;var x=y((function e(t,r,n,a){g(this,e),this.major=t,this.minor=r,this.hdrSize=n,this.offSize=a}));t.CFFHeader=x;var O=function(){function e(){g(this,e),this.strings=[]}return y(e,[{key:"get",value:function(e){return e>=0&&e<=390?m[e]:e-391<=this.strings.length?this.strings[e-391]:m[0]}},{key:"getSID",value:function(e){var t=m.indexOf(e);return-1!==t?t:-1!==(t=this.strings.indexOf(e))?t+391:-1}},{key:"add",value:function(e){this.strings.push(e)}},{key:"count",get:function(){return this.strings.length}}]),e}();t.CFFStrings=O;var A=function(){function e(){g(this,e),this.objects=[],this.length=0}return y(e,[{key:"add",value:function(e){this.length+=e.length,this.objects.push(e)}},{key:"set",value:function(e,t){this.length+=t.length-this.objects[e].length,this.objects[e]=t}},{key:"get",value:function(e){return this.objects[e]}},{key:"count",get:function(){return this.objects.length}}]),e}();t.CFFIndex=A;var C=function(){function e(t,r){g(this,e),this.keyToNameMap=t.keyToNameMap,this.nameToKeyMap=t.nameToKeyMap,this.defaults=t.defaults,this.types=t.types,this.opcodes=t.opcodes,this.order=t.order,this.strings=r,this.values=Object.create(null)}return y(e,[{key:"setByKey",value:function(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;var r,a=h(t);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(isNaN(i))return(0,n.warn)('Invalid CFFDict value: "'.concat(t,'" for key "').concat(e,'".')),!0}}catch(e){a.e(e)}finally{a.f()}var o=this.types[e];return"num"!==o&&"sid"!==o&&"offset"!==o||(t=t[0]),this.values[e]=t,!0}},{key:"setByName",value:function(e,t){if(!(e in this.nameToKeyMap))throw new n.FormatError('Invalid dictionary name "'.concat(e,'"'));this.values[this.nameToKeyMap[e]]=t}},{key:"hasName",value:function(e){return this.nameToKeyMap[e]in this.values}},{key:"getByName",value:function(e){if(!(e in this.nameToKeyMap))throw new n.FormatError("Invalid dictionary name ".concat(e,'"'));var t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}},{key:"removeByName",value:function(e){delete this.values[this.nameToKeyMap[e]]}}],[{key:"createTables",value:function(e){var t,r={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},n=h(e);try{for(n.s();!(t=n.n()).done;){var a=t.value,i=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];r.keyToNameMap[i]=a[1],r.nameToKeyMap[a[1]]=i,r.types[i]=a[2],r.defaults[i]=a[3],r.opcodes[i]=Array.isArray(a[0])?a[0]:[a[0]],r.order.push(i)}}catch(e){n.e(e)}finally{n.f()}return r}}]),e}(),F=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],P=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).privateDict=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(F))}}]),r}(C);t.CFFTopDict=P;var T=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],I=function(e){s(r,e);var t=u(r);function r(e){var n;return g(this,r),(n=t.call(this,r.tables,e)).subrsIndex=null,n}return y(r,null,[{key:"tables",get:function(){return(0,n.shadow)(this,"tables",this.createTables(T))}}]),r}(C);t.CFFPrivateDict=I;var E={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},j=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.charset=n,this.raw=a}));t.CFFCharset=j;var M=y((function e(t,r,n,a){g(this,e),this.predefined=t,this.format=r,this.encoding=n,this.raw=a})),_=function(){function e(t,r){g(this,e),this.format=t,this.fdSelect=r}return y(e,[{key:"getFDIndex",value:function(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}]),e}();t.CFFFDSelect=_;var L=function(){function e(){g(this,e),this.offsets=Object.create(null)}return y(e,[{key:"isTracking",value:function(e){return e in this.offsets}},{key:"track",value:function(e,t){if(e in this.offsets)throw new n.FormatError("Already tracking location of ".concat(e));this.offsets[e]=t}},{key:"offset",value:function(e){for(var t in this.offsets)this.offsets[t]+=e}},{key:"setEntryLocation",value:function(e,t,r){if(!(e in this.offsets))throw new n.FormatError("Not tracking location of ".concat(e));for(var a=r.data,i=this.offsets[e],o=0,s=t.length;o>24&255,a[l]=d>>16&255,a[f]=d>>8&255,a[h]=255&d}}}]),e}(),R=function(){function e(t){g(this,e),this.cff=t}return y(e,[{key:"compile",value:function(){var e=this.cff,t={data:[],length:0,add:function(e){this.data=this.data.concat(e),this.length=this.data.length}},r=this.compileHeader(e.header);t.add(r);var a=this.compileNameIndex(e.names);if(t.add(a),e.isCIDFont&&e.topDict.hasName("FontMatrix")){var i=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");var o,s=h(e.fdArray);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=i.slice(0);c.hasName("FontMatrix")&&(u=n.Util.transform(u,c.getByName("FontMatrix"))),c.setByName("FontMatrix",u)}}catch(e){s.e(e)}finally{s.f()}}var l=e.topDict.getByName("XUID");l&&l.length>16&&e.topDict.removeByName("XUID"),e.topDict.setByName("charset",0);var f=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(f.output);var d=f.trackers[0],p=this.compileStringIndex(e.strings.strings);t.add(p);var g=this.compileIndex(e.globalSubrIndex);if(t.add(g),e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)d.setEntryLocation("Encoding",[e.encoding.format],t);else{var v=this.compileEncoding(e.encoding);d.setEntryLocation("Encoding",[t.length],t),t.add(v)}var y=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);d.setEntryLocation("charset",[t.length],t),t.add(y);var m=this.compileCharStrings(e.charStrings);if(d.setEntryLocation("CharStrings",[t.length],t),t.add(m),e.isCIDFont){d.setEntryLocation("FDSelect",[t.length],t);var b=this.compileFDSelect(e.fdSelect);t.add(b),f=this.compileTopDicts(e.fdArray,t.length,!0),d.setEntryLocation("FDArray",[t.length],t),t.add(f.output);var w=f.trackers;this.compilePrivateDicts(e.fdArray,w,t)}return this.compilePrivateDicts([e.topDict],[d],t),t.add([0]),t.data}},{key:"encodeNumber",value:function(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}},{key:"encodeFloat",value:function(t){var r=t.toString(),n=e.EncodeFloatRegExp.exec(r);if(n){var a=parseFloat("1e"+((n[2]?+n[2]:0)+n[1].length));r=(Math.round(t*a)/a).toString()}var i,o,s="";for(i=0,o=r.length;i=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e]}},{key:"compileHeader",value:function(e){return[e.major,e.minor,4,e.offSize]}},{key:"compileNameIndex",value:function(e){var t,r=new A,a=h(e);try{for(a.s();!(t=a.n()).done;){for(var i=t.value,o=Math.min(i.length,127),s=new Array(o),c=0;c"~"||"["===u||"]"===u||"("===u||")"===u||"{"===u||"}"===u||"<"===u||">"===u||"/"===u||"%"===u)&&(u="_"),s[c]=u}""===(s=s.join(""))&&(s="Bad_Font_Name"),r.add((0,n.stringToBytes)(s))}}catch(e){a.e(e)}finally{a.f()}return this.compileIndex(r)}},{key:"compileTopDicts",value:function(e,t,r){var n,a=[],i=new A,o=h(e);try{for(o.s();!(n=o.n()).done;){var s=n.value;r&&(s.removeByName("CIDFontVersion"),s.removeByName("CIDFontRevision"),s.removeByName("CIDFontType"),s.removeByName("CIDCount"),s.removeByName("UIDBase"));var c=new L,u=this.compileDict(s,c);a.push(c),i.add(u),c.offset(t)}}catch(e){o.e(e)}finally{o.f()}return{trackers:a,output:i=this.compileIndex(i,a)}}},{key:"compilePrivateDicts",value:function(e,t,r){for(var a=0,i=e.length;a>8&255,255&o]);else{(i=new Uint8Array(1+2*o))[0]=0;for(var s=0,c=e.charset.length,u=!1,l=1;l>8&255,i[l+1]=255&f}}return this.compileTypedArray(i)}},{key:"compileEncoding",value:function(e){return this.compileTypedArray(e.raw)}},{key:"compileFDSelect",value:function(e){var t,r,n=e.format;switch(n){case 0:for((t=new Uint8Array(1+e.fdSelect.length))[0]=n,r=0;r>8&255,255&r,o),a=o)}var s=(i.length-3)/3;i[1]=s>>8&255,i[2]=255&s,i.push(r>>8&255,255&r),t=new Uint8Array(i)}return this.compileTypedArray(t)}},{key:"compileTypedArray",value:function(e){for(var t=[],r=0,n=e.length;r1&&void 0!==arguments[1]?arguments[1]:[],r=e.objects,n=r.length;if(0===n)return[0,0];var a,i,s=[n>>8&255,255&n],c=1;for(a=0;a>8&255,255&u):3===i?s.push(u>>16&255,u>>8&255,255&u):s.push(u>>>24&255,u>>16&255,u>>8&255,255&u),r[a]&&(u+=r[a].length);for(a=0;a{Object.defineProperty(t,"__esModule",{value:!0}),t.ISOAdobeCharset=t.ExpertSubsetCharset=t.ExpertCharset=void 0,t.ISOAdobeCharset=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],t.ExpertCharset=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],t.ExpertSubsetCharset=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ZapfDingbatsEncoding=t.WinAnsiEncoding=t.SymbolSetEncoding=t.StandardEncoding=t.MacRomanEncoding=t.ExpertEncoding=void 0,t.getEncoding=function(e){switch(e){case"WinAnsiEncoding":return o;case"StandardEncoding":return i;case"MacRomanEncoding":return a;case"SymbolSetEncoding":return s;case"ZapfDingbatsEncoding":return c;case"ExpertEncoding":return r;case"MacExpertEncoding":return n;default:return null}};var r=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertEncoding=r;var n=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],a=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"];t.MacRomanEncoding=a;var i=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""];t.StandardEncoding=i;var o=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"];t.WinAnsiEncoding=o;var s=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""];t.SymbolSetEncoding=s;var c=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];t.ZapfDingbatsEncoding=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SEAC_ANALYSIS_ENABLED=t.MacStandardGlyphOrdering=t.FontFlags=void 0,t.getFontType=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];switch(e){case"Type1":return r?n.FontType.TYPE1STANDARD:"Type1C"===t?n.FontType.TYPE1C:n.FontType.TYPE1;case"CIDFontType0":return"CIDFontType0C"===t?n.FontType.CIDFONTTYPE0C:n.FontType.CIDFONTTYPE0;case"OpenType":return n.FontType.OPENTYPE;case"TrueType":return n.FontType.TRUETYPE;case"CIDFontType2":return n.FontType.CIDFONTTYPE2;case"MMType1":return n.FontType.MMTYPE1;case"Type0":return n.FontType.TYPE0;default:return n.FontType.UNKNOWN}},t.normalizeFontName=function(e){return e.replace(/[,_]/g,"-").replace(/\\s/g,"")},t.recoverGlyphName=c,t.type1FontGlyphMapping=function(e,t,r){var n,o,u,l=Object.create(null),f=!!(e.flags&s.Symbolic);if(e.isInternalFont)for(u=t,o=0;o=0?n:0;else if(e.baseEncodingName)for(u=(0,a.getEncoding)(e.baseEncodingName),o=0;o=0?n:0;else if(f)for(o in t)l[o]=t[o];else for(u=a.StandardEncoding,o=0;o=0?n:0;var h,d=e.differences;if(d)for(o in d){var p=d[o];if(-1===(n=r.indexOf(p))){h||(h=(0,i.getGlyphsUnicode)());var g=c(p,h);g!==p&&(n=r.indexOf(g))}l[o]=n>=0?n:0}return l};var n=r(2),a=r(166),i=r(168),o=r(169);t.SEAC_ANALYSIS_ENABLED=!0;var s={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};function c(e,t){if(void 0!==t[e])return e;var r=(0,o.getUnicodeForGlyph)(e,t);if(-1!==r)for(var a in t)if(t[a]===r)return a;return(0,n.info)("Unable to recover a standard glyph name for: "+e),e}t.FontFlags=s,t.MacStandardGlyphOrdering=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"]},(e,t,r)=>{r.r(t),r.d(t,{getDingbatsGlyphsUnicode:()=>i,getGlyphsUnicode:()=>a});var n=r(135);const a=(0,n.getArrayLookupTableFactory)((function(){return["A",65,"AE",198,"AEacute",508,"AEmacron",482,"AEsmall",63462,"Aacute",193,"Aacutesmall",63457,"Abreve",258,"Abreveacute",7854,"Abrevecyrillic",1232,"Abrevedotbelow",7862,"Abrevegrave",7856,"Abrevehookabove",7858,"Abrevetilde",7860,"Acaron",461,"Acircle",9398,"Acircumflex",194,"Acircumflexacute",7844,"Acircumflexdotbelow",7852,"Acircumflexgrave",7846,"Acircumflexhookabove",7848,"Acircumflexsmall",63458,"Acircumflextilde",7850,"Acute",63177,"Acutesmall",63412,"Acyrillic",1040,"Adblgrave",512,"Adieresis",196,"Adieresiscyrillic",1234,"Adieresismacron",478,"Adieresissmall",63460,"Adotbelow",7840,"Adotmacron",480,"Agrave",192,"Agravesmall",63456,"Ahookabove",7842,"Aiecyrillic",1236,"Ainvertedbreve",514,"Alpha",913,"Alphatonos",902,"Amacron",256,"Amonospace",65313,"Aogonek",260,"Aring",197,"Aringacute",506,"Aringbelow",7680,"Aringsmall",63461,"Asmall",63329,"Atilde",195,"Atildesmall",63459,"Aybarmenian",1329,"B",66,"Bcircle",9399,"Bdotaccent",7682,"Bdotbelow",7684,"Becyrillic",1041,"Benarmenian",1330,"Beta",914,"Bhook",385,"Blinebelow",7686,"Bmonospace",65314,"Brevesmall",63220,"Bsmall",63330,"Btopbar",386,"C",67,"Caarmenian",1342,"Cacute",262,"Caron",63178,"Caronsmall",63221,"Ccaron",268,"Ccedilla",199,"Ccedillaacute",7688,"Ccedillasmall",63463,"Ccircle",9400,"Ccircumflex",264,"Cdot",266,"Cdotaccent",266,"Cedillasmall",63416,"Chaarmenian",1353,"Cheabkhasiancyrillic",1212,"Checyrillic",1063,"Chedescenderabkhasiancyrillic",1214,"Chedescendercyrillic",1206,"Chedieresiscyrillic",1268,"Cheharmenian",1347,"Chekhakassiancyrillic",1227,"Cheverticalstrokecyrillic",1208,"Chi",935,"Chook",391,"Circumflexsmall",63222,"Cmonospace",65315,"Coarmenian",1361,"Csmall",63331,"D",68,"DZ",497,"DZcaron",452,"Daarmenian",1332,"Dafrican",393,"Dcaron",270,"Dcedilla",7696,"Dcircle",9401,"Dcircumflexbelow",7698,"Dcroat",272,"Ddotaccent",7690,"Ddotbelow",7692,"Decyrillic",1044,"Deicoptic",1006,"Delta",8710,"Deltagreek",916,"Dhook",394,"Dieresis",63179,"DieresisAcute",63180,"DieresisGrave",63181,"Dieresissmall",63400,"Digammagreek",988,"Djecyrillic",1026,"Dlinebelow",7694,"Dmonospace",65316,"Dotaccentsmall",63223,"Dslash",272,"Dsmall",63332,"Dtopbar",395,"Dz",498,"Dzcaron",453,"Dzeabkhasiancyrillic",1248,"Dzecyrillic",1029,"Dzhecyrillic",1039,"E",69,"Eacute",201,"Eacutesmall",63465,"Ebreve",276,"Ecaron",282,"Ecedillabreve",7708,"Echarmenian",1333,"Ecircle",9402,"Ecircumflex",202,"Ecircumflexacute",7870,"Ecircumflexbelow",7704,"Ecircumflexdotbelow",7878,"Ecircumflexgrave",7872,"Ecircumflexhookabove",7874,"Ecircumflexsmall",63466,"Ecircumflextilde",7876,"Ecyrillic",1028,"Edblgrave",516,"Edieresis",203,"Edieresissmall",63467,"Edot",278,"Edotaccent",278,"Edotbelow",7864,"Efcyrillic",1060,"Egrave",200,"Egravesmall",63464,"Eharmenian",1335,"Ehookabove",7866,"Eightroman",8551,"Einvertedbreve",518,"Eiotifiedcyrillic",1124,"Elcyrillic",1051,"Elevenroman",8554,"Emacron",274,"Emacronacute",7702,"Emacrongrave",7700,"Emcyrillic",1052,"Emonospace",65317,"Encyrillic",1053,"Endescendercyrillic",1186,"Eng",330,"Enghecyrillic",1188,"Enhookcyrillic",1223,"Eogonek",280,"Eopen",400,"Epsilon",917,"Epsilontonos",904,"Ercyrillic",1056,"Ereversed",398,"Ereversedcyrillic",1069,"Escyrillic",1057,"Esdescendercyrillic",1194,"Esh",425,"Esmall",63333,"Eta",919,"Etarmenian",1336,"Etatonos",905,"Eth",208,"Ethsmall",63472,"Etilde",7868,"Etildebelow",7706,"Euro",8364,"Ezh",439,"Ezhcaron",494,"Ezhreversed",440,"F",70,"Fcircle",9403,"Fdotaccent",7710,"Feharmenian",1366,"Feicoptic",996,"Fhook",401,"Fitacyrillic",1138,"Fiveroman",8548,"Fmonospace",65318,"Fourroman",8547,"Fsmall",63334,"G",71,"GBsquare",13191,"Gacute",500,"Gamma",915,"Gammaafrican",404,"Gangiacoptic",1002,"Gbreve",286,"Gcaron",486,"Gcedilla",290,"Gcircle",9404,"Gcircumflex",284,"Gcommaaccent",290,"Gdot",288,"Gdotaccent",288,"Gecyrillic",1043,"Ghadarmenian",1346,"Ghemiddlehookcyrillic",1172,"Ghestrokecyrillic",1170,"Gheupturncyrillic",1168,"Ghook",403,"Gimarmenian",1331,"Gjecyrillic",1027,"Gmacron",7712,"Gmonospace",65319,"Grave",63182,"Gravesmall",63328,"Gsmall",63335,"Gsmallhook",667,"Gstroke",484,"H",72,"H18533",9679,"H18543",9642,"H18551",9643,"H22073",9633,"HPsquare",13259,"Haabkhasiancyrillic",1192,"Hadescendercyrillic",1202,"Hardsigncyrillic",1066,"Hbar",294,"Hbrevebelow",7722,"Hcedilla",7720,"Hcircle",9405,"Hcircumflex",292,"Hdieresis",7718,"Hdotaccent",7714,"Hdotbelow",7716,"Hmonospace",65320,"Hoarmenian",1344,"Horicoptic",1e3,"Hsmall",63336,"Hungarumlaut",63183,"Hungarumlautsmall",63224,"Hzsquare",13200,"I",73,"IAcyrillic",1071,"IJ",306,"IUcyrillic",1070,"Iacute",205,"Iacutesmall",63469,"Ibreve",300,"Icaron",463,"Icircle",9406,"Icircumflex",206,"Icircumflexsmall",63470,"Icyrillic",1030,"Idblgrave",520,"Idieresis",207,"Idieresisacute",7726,"Idieresiscyrillic",1252,"Idieresissmall",63471,"Idot",304,"Idotaccent",304,"Idotbelow",7882,"Iebrevecyrillic",1238,"Iecyrillic",1045,"Ifraktur",8465,"Igrave",204,"Igravesmall",63468,"Ihookabove",7880,"Iicyrillic",1048,"Iinvertedbreve",522,"Iishortcyrillic",1049,"Imacron",298,"Imacroncyrillic",1250,"Imonospace",65321,"Iniarmenian",1339,"Iocyrillic",1025,"Iogonek",302,"Iota",921,"Iotaafrican",406,"Iotadieresis",938,"Iotatonos",906,"Ismall",63337,"Istroke",407,"Itilde",296,"Itildebelow",7724,"Izhitsacyrillic",1140,"Izhitsadblgravecyrillic",1142,"J",74,"Jaarmenian",1345,"Jcircle",9407,"Jcircumflex",308,"Jecyrillic",1032,"Jheharmenian",1355,"Jmonospace",65322,"Jsmall",63338,"K",75,"KBsquare",13189,"KKsquare",13261,"Kabashkircyrillic",1184,"Kacute",7728,"Kacyrillic",1050,"Kadescendercyrillic",1178,"Kahookcyrillic",1219,"Kappa",922,"Kastrokecyrillic",1182,"Kaverticalstrokecyrillic",1180,"Kcaron",488,"Kcedilla",310,"Kcircle",9408,"Kcommaaccent",310,"Kdotbelow",7730,"Keharmenian",1364,"Kenarmenian",1343,"Khacyrillic",1061,"Kheicoptic",998,"Khook",408,"Kjecyrillic",1036,"Klinebelow",7732,"Kmonospace",65323,"Koppacyrillic",1152,"Koppagreek",990,"Ksicyrillic",1134,"Ksmall",63339,"L",76,"LJ",455,"LL",63167,"Lacute",313,"Lambda",923,"Lcaron",317,"Lcedilla",315,"Lcircle",9409,"Lcircumflexbelow",7740,"Lcommaaccent",315,"Ldot",319,"Ldotaccent",319,"Ldotbelow",7734,"Ldotbelowmacron",7736,"Liwnarmenian",1340,"Lj",456,"Ljecyrillic",1033,"Llinebelow",7738,"Lmonospace",65324,"Lslash",321,"Lslashsmall",63225,"Lsmall",63340,"M",77,"MBsquare",13190,"Macron",63184,"Macronsmall",63407,"Macute",7742,"Mcircle",9410,"Mdotaccent",7744,"Mdotbelow",7746,"Menarmenian",1348,"Mmonospace",65325,"Msmall",63341,"Mturned",412,"Mu",924,"N",78,"NJ",458,"Nacute",323,"Ncaron",327,"Ncedilla",325,"Ncircle",9411,"Ncircumflexbelow",7754,"Ncommaaccent",325,"Ndotaccent",7748,"Ndotbelow",7750,"Nhookleft",413,"Nineroman",8552,"Nj",459,"Njecyrillic",1034,"Nlinebelow",7752,"Nmonospace",65326,"Nowarmenian",1350,"Nsmall",63342,"Ntilde",209,"Ntildesmall",63473,"Nu",925,"O",79,"OE",338,"OEsmall",63226,"Oacute",211,"Oacutesmall",63475,"Obarredcyrillic",1256,"Obarreddieresiscyrillic",1258,"Obreve",334,"Ocaron",465,"Ocenteredtilde",415,"Ocircle",9412,"Ocircumflex",212,"Ocircumflexacute",7888,"Ocircumflexdotbelow",7896,"Ocircumflexgrave",7890,"Ocircumflexhookabove",7892,"Ocircumflexsmall",63476,"Ocircumflextilde",7894,"Ocyrillic",1054,"Odblacute",336,"Odblgrave",524,"Odieresis",214,"Odieresiscyrillic",1254,"Odieresissmall",63478,"Odotbelow",7884,"Ogoneksmall",63227,"Ograve",210,"Ogravesmall",63474,"Oharmenian",1365,"Ohm",8486,"Ohookabove",7886,"Ohorn",416,"Ohornacute",7898,"Ohorndotbelow",7906,"Ohorngrave",7900,"Ohornhookabove",7902,"Ohorntilde",7904,"Ohungarumlaut",336,"Oi",418,"Oinvertedbreve",526,"Omacron",332,"Omacronacute",7762,"Omacrongrave",7760,"Omega",8486,"Omegacyrillic",1120,"Omegagreek",937,"Omegaroundcyrillic",1146,"Omegatitlocyrillic",1148,"Omegatonos",911,"Omicron",927,"Omicrontonos",908,"Omonospace",65327,"Oneroman",8544,"Oogonek",490,"Oogonekmacron",492,"Oopen",390,"Oslash",216,"Oslashacute",510,"Oslashsmall",63480,"Osmall",63343,"Ostrokeacute",510,"Otcyrillic",1150,"Otilde",213,"Otildeacute",7756,"Otildedieresis",7758,"Otildesmall",63477,"P",80,"Pacute",7764,"Pcircle",9413,"Pdotaccent",7766,"Pecyrillic",1055,"Peharmenian",1354,"Pemiddlehookcyrillic",1190,"Phi",934,"Phook",420,"Pi",928,"Piwrarmenian",1363,"Pmonospace",65328,"Psi",936,"Psicyrillic",1136,"Psmall",63344,"Q",81,"Qcircle",9414,"Qmonospace",65329,"Qsmall",63345,"R",82,"Raarmenian",1356,"Racute",340,"Rcaron",344,"Rcedilla",342,"Rcircle",9415,"Rcommaaccent",342,"Rdblgrave",528,"Rdotaccent",7768,"Rdotbelow",7770,"Rdotbelowmacron",7772,"Reharmenian",1360,"Rfraktur",8476,"Rho",929,"Ringsmall",63228,"Rinvertedbreve",530,"Rlinebelow",7774,"Rmonospace",65330,"Rsmall",63346,"Rsmallinverted",641,"Rsmallinvertedsuperior",694,"S",83,"SF010000",9484,"SF020000",9492,"SF030000",9488,"SF040000",9496,"SF050000",9532,"SF060000",9516,"SF070000",9524,"SF080000",9500,"SF090000",9508,"SF100000",9472,"SF110000",9474,"SF190000",9569,"SF200000",9570,"SF210000",9558,"SF220000",9557,"SF230000",9571,"SF240000",9553,"SF250000",9559,"SF260000",9565,"SF270000",9564,"SF280000",9563,"SF360000",9566,"SF370000",9567,"SF380000",9562,"SF390000",9556,"SF400000",9577,"SF410000",9574,"SF420000",9568,"SF430000",9552,"SF440000",9580,"SF450000",9575,"SF460000",9576,"SF470000",9572,"SF480000",9573,"SF490000",9561,"SF500000",9560,"SF510000",9554,"SF520000",9555,"SF530000",9579,"SF540000",9578,"Sacute",346,"Sacutedotaccent",7780,"Sampigreek",992,"Scaron",352,"Scarondotaccent",7782,"Scaronsmall",63229,"Scedilla",350,"Schwa",399,"Schwacyrillic",1240,"Schwadieresiscyrillic",1242,"Scircle",9416,"Scircumflex",348,"Scommaaccent",536,"Sdotaccent",7776,"Sdotbelow",7778,"Sdotbelowdotaccent",7784,"Seharmenian",1357,"Sevenroman",8550,"Shaarmenian",1351,"Shacyrillic",1064,"Shchacyrillic",1065,"Sheicoptic",994,"Shhacyrillic",1210,"Shimacoptic",1004,"Sigma",931,"Sixroman",8549,"Smonospace",65331,"Softsigncyrillic",1068,"Ssmall",63347,"Stigmagreek",986,"T",84,"Tau",932,"Tbar",358,"Tcaron",356,"Tcedilla",354,"Tcircle",9417,"Tcircumflexbelow",7792,"Tcommaaccent",354,"Tdotaccent",7786,"Tdotbelow",7788,"Tecyrillic",1058,"Tedescendercyrillic",1196,"Tenroman",8553,"Tetsecyrillic",1204,"Theta",920,"Thook",428,"Thorn",222,"Thornsmall",63486,"Threeroman",8546,"Tildesmall",63230,"Tiwnarmenian",1359,"Tlinebelow",7790,"Tmonospace",65332,"Toarmenian",1337,"Tonefive",444,"Tonesix",388,"Tonetwo",423,"Tretroflexhook",430,"Tsecyrillic",1062,"Tshecyrillic",1035,"Tsmall",63348,"Twelveroman",8555,"Tworoman",8545,"U",85,"Uacute",218,"Uacutesmall",63482,"Ubreve",364,"Ucaron",467,"Ucircle",9418,"Ucircumflex",219,"Ucircumflexbelow",7798,"Ucircumflexsmall",63483,"Ucyrillic",1059,"Udblacute",368,"Udblgrave",532,"Udieresis",220,"Udieresisacute",471,"Udieresisbelow",7794,"Udieresiscaron",473,"Udieresiscyrillic",1264,"Udieresisgrave",475,"Udieresismacron",469,"Udieresissmall",63484,"Udotbelow",7908,"Ugrave",217,"Ugravesmall",63481,"Uhookabove",7910,"Uhorn",431,"Uhornacute",7912,"Uhorndotbelow",7920,"Uhorngrave",7914,"Uhornhookabove",7916,"Uhorntilde",7918,"Uhungarumlaut",368,"Uhungarumlautcyrillic",1266,"Uinvertedbreve",534,"Ukcyrillic",1144,"Umacron",362,"Umacroncyrillic",1262,"Umacrondieresis",7802,"Umonospace",65333,"Uogonek",370,"Upsilon",933,"Upsilon1",978,"Upsilonacutehooksymbolgreek",979,"Upsilonafrican",433,"Upsilondieresis",939,"Upsilondieresishooksymbolgreek",980,"Upsilonhooksymbol",978,"Upsilontonos",910,"Uring",366,"Ushortcyrillic",1038,"Usmall",63349,"Ustraightcyrillic",1198,"Ustraightstrokecyrillic",1200,"Utilde",360,"Utildeacute",7800,"Utildebelow",7796,"V",86,"Vcircle",9419,"Vdotbelow",7806,"Vecyrillic",1042,"Vewarmenian",1358,"Vhook",434,"Vmonospace",65334,"Voarmenian",1352,"Vsmall",63350,"Vtilde",7804,"W",87,"Wacute",7810,"Wcircle",9420,"Wcircumflex",372,"Wdieresis",7812,"Wdotaccent",7814,"Wdotbelow",7816,"Wgrave",7808,"Wmonospace",65335,"Wsmall",63351,"X",88,"Xcircle",9421,"Xdieresis",7820,"Xdotaccent",7818,"Xeharmenian",1341,"Xi",926,"Xmonospace",65336,"Xsmall",63352,"Y",89,"Yacute",221,"Yacutesmall",63485,"Yatcyrillic",1122,"Ycircle",9422,"Ycircumflex",374,"Ydieresis",376,"Ydieresissmall",63487,"Ydotaccent",7822,"Ydotbelow",7924,"Yericyrillic",1067,"Yerudieresiscyrillic",1272,"Ygrave",7922,"Yhook",435,"Yhookabove",7926,"Yiarmenian",1349,"Yicyrillic",1031,"Yiwnarmenian",1362,"Ymonospace",65337,"Ysmall",63353,"Ytilde",7928,"Yusbigcyrillic",1130,"Yusbigiotifiedcyrillic",1132,"Yuslittlecyrillic",1126,"Yuslittleiotifiedcyrillic",1128,"Z",90,"Zaarmenian",1334,"Zacute",377,"Zcaron",381,"Zcaronsmall",63231,"Zcircle",9423,"Zcircumflex",7824,"Zdot",379,"Zdotaccent",379,"Zdotbelow",7826,"Zecyrillic",1047,"Zedescendercyrillic",1176,"Zedieresiscyrillic",1246,"Zeta",918,"Zhearmenian",1338,"Zhebrevecyrillic",1217,"Zhecyrillic",1046,"Zhedescendercyrillic",1174,"Zhedieresiscyrillic",1244,"Zlinebelow",7828,"Zmonospace",65338,"Zsmall",63354,"Zstroke",437,"a",97,"aabengali",2438,"aacute",225,"aadeva",2310,"aagujarati",2694,"aagurmukhi",2566,"aamatragurmukhi",2622,"aarusquare",13059,"aavowelsignbengali",2494,"aavowelsigndeva",2366,"aavowelsigngujarati",2750,"abbreviationmarkarmenian",1375,"abbreviationsigndeva",2416,"abengali",2437,"abopomofo",12570,"abreve",259,"abreveacute",7855,"abrevecyrillic",1233,"abrevedotbelow",7863,"abrevegrave",7857,"abrevehookabove",7859,"abrevetilde",7861,"acaron",462,"acircle",9424,"acircumflex",226,"acircumflexacute",7845,"acircumflexdotbelow",7853,"acircumflexgrave",7847,"acircumflexhookabove",7849,"acircumflextilde",7851,"acute",180,"acutebelowcmb",791,"acutecmb",769,"acutecomb",769,"acutedeva",2388,"acutelowmod",719,"acutetonecmb",833,"acyrillic",1072,"adblgrave",513,"addakgurmukhi",2673,"adeva",2309,"adieresis",228,"adieresiscyrillic",1235,"adieresismacron",479,"adotbelow",7841,"adotmacron",481,"ae",230,"aeacute",509,"aekorean",12624,"aemacron",483,"afii00208",8213,"afii08941",8356,"afii10017",1040,"afii10018",1041,"afii10019",1042,"afii10020",1043,"afii10021",1044,"afii10022",1045,"afii10023",1025,"afii10024",1046,"afii10025",1047,"afii10026",1048,"afii10027",1049,"afii10028",1050,"afii10029",1051,"afii10030",1052,"afii10031",1053,"afii10032",1054,"afii10033",1055,"afii10034",1056,"afii10035",1057,"afii10036",1058,"afii10037",1059,"afii10038",1060,"afii10039",1061,"afii10040",1062,"afii10041",1063,"afii10042",1064,"afii10043",1065,"afii10044",1066,"afii10045",1067,"afii10046",1068,"afii10047",1069,"afii10048",1070,"afii10049",1071,"afii10050",1168,"afii10051",1026,"afii10052",1027,"afii10053",1028,"afii10054",1029,"afii10055",1030,"afii10056",1031,"afii10057",1032,"afii10058",1033,"afii10059",1034,"afii10060",1035,"afii10061",1036,"afii10062",1038,"afii10063",63172,"afii10064",63173,"afii10065",1072,"afii10066",1073,"afii10067",1074,"afii10068",1075,"afii10069",1076,"afii10070",1077,"afii10071",1105,"afii10072",1078,"afii10073",1079,"afii10074",1080,"afii10075",1081,"afii10076",1082,"afii10077",1083,"afii10078",1084,"afii10079",1085,"afii10080",1086,"afii10081",1087,"afii10082",1088,"afii10083",1089,"afii10084",1090,"afii10085",1091,"afii10086",1092,"afii10087",1093,"afii10088",1094,"afii10089",1095,"afii10090",1096,"afii10091",1097,"afii10092",1098,"afii10093",1099,"afii10094",1100,"afii10095",1101,"afii10096",1102,"afii10097",1103,"afii10098",1169,"afii10099",1106,"afii10100",1107,"afii10101",1108,"afii10102",1109,"afii10103",1110,"afii10104",1111,"afii10105",1112,"afii10106",1113,"afii10107",1114,"afii10108",1115,"afii10109",1116,"afii10110",1118,"afii10145",1039,"afii10146",1122,"afii10147",1138,"afii10148",1140,"afii10192",63174,"afii10193",1119,"afii10194",1123,"afii10195",1139,"afii10196",1141,"afii10831",63175,"afii10832",63176,"afii10846",1241,"afii299",8206,"afii300",8207,"afii301",8205,"afii57381",1642,"afii57388",1548,"afii57392",1632,"afii57393",1633,"afii57394",1634,"afii57395",1635,"afii57396",1636,"afii57397",1637,"afii57398",1638,"afii57399",1639,"afii57400",1640,"afii57401",1641,"afii57403",1563,"afii57407",1567,"afii57409",1569,"afii57410",1570,"afii57411",1571,"afii57412",1572,"afii57413",1573,"afii57414",1574,"afii57415",1575,"afii57416",1576,"afii57417",1577,"afii57418",1578,"afii57419",1579,"afii57420",1580,"afii57421",1581,"afii57422",1582,"afii57423",1583,"afii57424",1584,"afii57425",1585,"afii57426",1586,"afii57427",1587,"afii57428",1588,"afii57429",1589,"afii57430",1590,"afii57431",1591,"afii57432",1592,"afii57433",1593,"afii57434",1594,"afii57440",1600,"afii57441",1601,"afii57442",1602,"afii57443",1603,"afii57444",1604,"afii57445",1605,"afii57446",1606,"afii57448",1608,"afii57449",1609,"afii57450",1610,"afii57451",1611,"afii57452",1612,"afii57453",1613,"afii57454",1614,"afii57455",1615,"afii57456",1616,"afii57457",1617,"afii57458",1618,"afii57470",1607,"afii57505",1700,"afii57506",1662,"afii57507",1670,"afii57508",1688,"afii57509",1711,"afii57511",1657,"afii57512",1672,"afii57513",1681,"afii57514",1722,"afii57519",1746,"afii57534",1749,"afii57636",8362,"afii57645",1470,"afii57658",1475,"afii57664",1488,"afii57665",1489,"afii57666",1490,"afii57667",1491,"afii57668",1492,"afii57669",1493,"afii57670",1494,"afii57671",1495,"afii57672",1496,"afii57673",1497,"afii57674",1498,"afii57675",1499,"afii57676",1500,"afii57677",1501,"afii57678",1502,"afii57679",1503,"afii57680",1504,"afii57681",1505,"afii57682",1506,"afii57683",1507,"afii57684",1508,"afii57685",1509,"afii57686",1510,"afii57687",1511,"afii57688",1512,"afii57689",1513,"afii57690",1514,"afii57694",64298,"afii57695",64299,"afii57700",64331,"afii57705",64287,"afii57716",1520,"afii57717",1521,"afii57718",1522,"afii57723",64309,"afii57793",1460,"afii57794",1461,"afii57795",1462,"afii57796",1467,"afii57797",1464,"afii57798",1463,"afii57799",1456,"afii57800",1458,"afii57801",1457,"afii57802",1459,"afii57803",1474,"afii57804",1473,"afii57806",1465,"afii57807",1468,"afii57839",1469,"afii57841",1471,"afii57842",1472,"afii57929",700,"afii61248",8453,"afii61289",8467,"afii61352",8470,"afii61573",8236,"afii61574",8237,"afii61575",8238,"afii61664",8204,"afii63167",1645,"afii64937",701,"agrave",224,"agujarati",2693,"agurmukhi",2565,"ahiragana",12354,"ahookabove",7843,"aibengali",2448,"aibopomofo",12574,"aideva",2320,"aiecyrillic",1237,"aigujarati",2704,"aigurmukhi",2576,"aimatragurmukhi",2632,"ainarabic",1593,"ainfinalarabic",65226,"aininitialarabic",65227,"ainmedialarabic",65228,"ainvertedbreve",515,"aivowelsignbengali",2504,"aivowelsigndeva",2376,"aivowelsigngujarati",2760,"akatakana",12450,"akatakanahalfwidth",65393,"akorean",12623,"alef",1488,"alefarabic",1575,"alefdageshhebrew",64304,"aleffinalarabic",65166,"alefhamzaabovearabic",1571,"alefhamzaabovefinalarabic",65156,"alefhamzabelowarabic",1573,"alefhamzabelowfinalarabic",65160,"alefhebrew",1488,"aleflamedhebrew",64335,"alefmaddaabovearabic",1570,"alefmaddaabovefinalarabic",65154,"alefmaksuraarabic",1609,"alefmaksurafinalarabic",65264,"alefmaksurainitialarabic",65267,"alefmaksuramedialarabic",65268,"alefpatahhebrew",64302,"alefqamatshebrew",64303,"aleph",8501,"allequal",8780,"alpha",945,"alphatonos",940,"amacron",257,"amonospace",65345,"ampersand",38,"ampersandmonospace",65286,"ampersandsmall",63270,"amsquare",13250,"anbopomofo",12578,"angbopomofo",12580,"angbracketleft",12296,"angbracketright",12297,"angkhankhuthai",3674,"angle",8736,"anglebracketleft",12296,"anglebracketleftvertical",65087,"anglebracketright",12297,"anglebracketrightvertical",65088,"angleleft",9001,"angleright",9002,"angstrom",8491,"anoteleia",903,"anudattadeva",2386,"anusvarabengali",2434,"anusvaradeva",2306,"anusvaragujarati",2690,"aogonek",261,"apaatosquare",13056,"aparen",9372,"apostrophearmenian",1370,"apostrophemod",700,"apple",63743,"approaches",8784,"approxequal",8776,"approxequalorimage",8786,"approximatelyequal",8773,"araeaekorean",12686,"araeakorean",12685,"arc",8978,"arighthalfring",7834,"aring",229,"aringacute",507,"aringbelow",7681,"arrowboth",8596,"arrowdashdown",8675,"arrowdashleft",8672,"arrowdashright",8674,"arrowdashup",8673,"arrowdblboth",8660,"arrowdbldown",8659,"arrowdblleft",8656,"arrowdblright",8658,"arrowdblup",8657,"arrowdown",8595,"arrowdownleft",8601,"arrowdownright",8600,"arrowdownwhite",8681,"arrowheaddownmod",709,"arrowheadleftmod",706,"arrowheadrightmod",707,"arrowheadupmod",708,"arrowhorizex",63719,"arrowleft",8592,"arrowleftdbl",8656,"arrowleftdblstroke",8653,"arrowleftoverright",8646,"arrowleftwhite",8678,"arrowright",8594,"arrowrightdblstroke",8655,"arrowrightheavy",10142,"arrowrightoverleft",8644,"arrowrightwhite",8680,"arrowtableft",8676,"arrowtabright",8677,"arrowup",8593,"arrowupdn",8597,"arrowupdnbse",8616,"arrowupdownbase",8616,"arrowupleft",8598,"arrowupleftofdown",8645,"arrowupright",8599,"arrowupwhite",8679,"arrowvertex",63718,"asciicircum",94,"asciicircummonospace",65342,"asciitilde",126,"asciitildemonospace",65374,"ascript",593,"ascriptturned",594,"asmallhiragana",12353,"asmallkatakana",12449,"asmallkatakanahalfwidth",65383,"asterisk",42,"asteriskaltonearabic",1645,"asteriskarabic",1645,"asteriskmath",8727,"asteriskmonospace",65290,"asterisksmall",65121,"asterism",8258,"asuperior",63209,"asymptoticallyequal",8771,"at",64,"atilde",227,"atmonospace",65312,"atsmall",65131,"aturned",592,"aubengali",2452,"aubopomofo",12576,"audeva",2324,"augujarati",2708,"augurmukhi",2580,"aulengthmarkbengali",2519,"aumatragurmukhi",2636,"auvowelsignbengali",2508,"auvowelsigndeva",2380,"auvowelsigngujarati",2764,"avagrahadeva",2365,"aybarmenian",1377,"ayin",1506,"ayinaltonehebrew",64288,"ayinhebrew",1506,"b",98,"babengali",2476,"backslash",92,"backslashmonospace",65340,"badeva",2348,"bagujarati",2732,"bagurmukhi",2604,"bahiragana",12400,"bahtthai",3647,"bakatakana",12496,"bar",124,"barmonospace",65372,"bbopomofo",12549,"bcircle",9425,"bdotaccent",7683,"bdotbelow",7685,"beamedsixteenthnotes",9836,"because",8757,"becyrillic",1073,"beharabic",1576,"behfinalarabic",65168,"behinitialarabic",65169,"behiragana",12409,"behmedialarabic",65170,"behmeeminitialarabic",64671,"behmeemisolatedarabic",64520,"behnoonfinalarabic",64621,"bekatakana",12505,"benarmenian",1378,"bet",1489,"beta",946,"betasymbolgreek",976,"betdagesh",64305,"betdageshhebrew",64305,"bethebrew",1489,"betrafehebrew",64332,"bhabengali",2477,"bhadeva",2349,"bhagujarati",2733,"bhagurmukhi",2605,"bhook",595,"bihiragana",12403,"bikatakana",12499,"bilabialclick",664,"bindigurmukhi",2562,"birusquare",13105,"blackcircle",9679,"blackdiamond",9670,"blackdownpointingtriangle",9660,"blackleftpointingpointer",9668,"blackleftpointingtriangle",9664,"blacklenticularbracketleft",12304,"blacklenticularbracketleftvertical",65083,"blacklenticularbracketright",12305,"blacklenticularbracketrightvertical",65084,"blacklowerlefttriangle",9699,"blacklowerrighttriangle",9698,"blackrectangle",9644,"blackrightpointingpointer",9658,"blackrightpointingtriangle",9654,"blacksmallsquare",9642,"blacksmilingface",9787,"blacksquare",9632,"blackstar",9733,"blackupperlefttriangle",9700,"blackupperrighttriangle",9701,"blackuppointingsmalltriangle",9652,"blackuppointingtriangle",9650,"blank",9251,"blinebelow",7687,"block",9608,"bmonospace",65346,"bobaimaithai",3610,"bohiragana",12412,"bokatakana",12508,"bparen",9373,"bqsquare",13251,"braceex",63732,"braceleft",123,"braceleftbt",63731,"braceleftmid",63730,"braceleftmonospace",65371,"braceleftsmall",65115,"bracelefttp",63729,"braceleftvertical",65079,"braceright",125,"bracerightbt",63742,"bracerightmid",63741,"bracerightmonospace",65373,"bracerightsmall",65116,"bracerighttp",63740,"bracerightvertical",65080,"bracketleft",91,"bracketleftbt",63728,"bracketleftex",63727,"bracketleftmonospace",65339,"bracketlefttp",63726,"bracketright",93,"bracketrightbt",63739,"bracketrightex",63738,"bracketrightmonospace",65341,"bracketrighttp",63737,"breve",728,"brevebelowcmb",814,"brevecmb",774,"breveinvertedbelowcmb",815,"breveinvertedcmb",785,"breveinverteddoublecmb",865,"bridgebelowcmb",810,"bridgeinvertedbelowcmb",826,"brokenbar",166,"bstroke",384,"bsuperior",63210,"btopbar",387,"buhiragana",12406,"bukatakana",12502,"bullet",8226,"bulletinverse",9688,"bulletoperator",8729,"bullseye",9678,"c",99,"caarmenian",1390,"cabengali",2458,"cacute",263,"cadeva",2330,"cagujarati",2714,"cagurmukhi",2586,"calsquare",13192,"candrabindubengali",2433,"candrabinducmb",784,"candrabindudeva",2305,"candrabindugujarati",2689,"capslock",8682,"careof",8453,"caron",711,"caronbelowcmb",812,"caroncmb",780,"carriagereturn",8629,"cbopomofo",12568,"ccaron",269,"ccedilla",231,"ccedillaacute",7689,"ccircle",9426,"ccircumflex",265,"ccurl",597,"cdot",267,"cdotaccent",267,"cdsquare",13253,"cedilla",184,"cedillacmb",807,"cent",162,"centigrade",8451,"centinferior",63199,"centmonospace",65504,"centoldstyle",63394,"centsuperior",63200,"chaarmenian",1401,"chabengali",2459,"chadeva",2331,"chagujarati",2715,"chagurmukhi",2587,"chbopomofo",12564,"cheabkhasiancyrillic",1213,"checkmark",10003,"checyrillic",1095,"chedescenderabkhasiancyrillic",1215,"chedescendercyrillic",1207,"chedieresiscyrillic",1269,"cheharmenian",1395,"chekhakassiancyrillic",1228,"cheverticalstrokecyrillic",1209,"chi",967,"chieuchacirclekorean",12919,"chieuchaparenkorean",12823,"chieuchcirclekorean",12905,"chieuchkorean",12618,"chieuchparenkorean",12809,"chochangthai",3594,"chochanthai",3592,"chochingthai",3593,"chochoethai",3596,"chook",392,"cieucacirclekorean",12918,"cieucaparenkorean",12822,"cieuccirclekorean",12904,"cieuckorean",12616,"cieucparenkorean",12808,"cieucuparenkorean",12828,"circle",9675,"circlecopyrt",169,"circlemultiply",8855,"circleot",8857,"circleplus",8853,"circlepostalmark",12342,"circlewithlefthalfblack",9680,"circlewithrighthalfblack",9681,"circumflex",710,"circumflexbelowcmb",813,"circumflexcmb",770,"clear",8999,"clickalveolar",450,"clickdental",448,"clicklateral",449,"clickretroflex",451,"club",9827,"clubsuitblack",9827,"clubsuitwhite",9831,"cmcubedsquare",13220,"cmonospace",65347,"cmsquaredsquare",13216,"coarmenian",1409,"colon",58,"colonmonetary",8353,"colonmonospace",65306,"colonsign",8353,"colonsmall",65109,"colontriangularhalfmod",721,"colontriangularmod",720,"comma",44,"commaabovecmb",787,"commaaboverightcmb",789,"commaaccent",63171,"commaarabic",1548,"commaarmenian",1373,"commainferior",63201,"commamonospace",65292,"commareversedabovecmb",788,"commareversedmod",701,"commasmall",65104,"commasuperior",63202,"commaturnedabovecmb",786,"commaturnedmod",699,"compass",9788,"congruent",8773,"contourintegral",8750,"control",8963,"controlACK",6,"controlBEL",7,"controlBS",8,"controlCAN",24,"controlCR",13,"controlDC1",17,"controlDC2",18,"controlDC3",19,"controlDC4",20,"controlDEL",127,"controlDLE",16,"controlEM",25,"controlENQ",5,"controlEOT",4,"controlESC",27,"controlETB",23,"controlETX",3,"controlFF",12,"controlFS",28,"controlGS",29,"controlHT",9,"controlLF",10,"controlNAK",21,"controlNULL",0,"controlRS",30,"controlSI",15,"controlSO",14,"controlSOT",2,"controlSTX",1,"controlSUB",26,"controlSYN",22,"controlUS",31,"controlVT",11,"copyright",169,"copyrightsans",63721,"copyrightserif",63193,"cornerbracketleft",12300,"cornerbracketlefthalfwidth",65378,"cornerbracketleftvertical",65089,"cornerbracketright",12301,"cornerbracketrighthalfwidth",65379,"cornerbracketrightvertical",65090,"corporationsquare",13183,"cosquare",13255,"coverkgsquare",13254,"cparen",9374,"cruzeiro",8354,"cstretched",663,"curlyand",8911,"curlyor",8910,"currency",164,"cyrBreve",63185,"cyrFlex",63186,"cyrbreve",63188,"cyrflex",63189,"d",100,"daarmenian",1380,"dabengali",2470,"dadarabic",1590,"dadeva",2342,"dadfinalarabic",65214,"dadinitialarabic",65215,"dadmedialarabic",65216,"dagesh",1468,"dageshhebrew",1468,"dagger",8224,"daggerdbl",8225,"dagujarati",2726,"dagurmukhi",2598,"dahiragana",12384,"dakatakana",12480,"dalarabic",1583,"dalet",1491,"daletdagesh",64307,"daletdageshhebrew",64307,"dalethebrew",1491,"dalfinalarabic",65194,"dammaarabic",1615,"dammalowarabic",1615,"dammatanaltonearabic",1612,"dammatanarabic",1612,"danda",2404,"dargahebrew",1447,"dargalefthebrew",1447,"dasiapneumatacyrilliccmb",1157,"dblGrave",63187,"dblanglebracketleft",12298,"dblanglebracketleftvertical",65085,"dblanglebracketright",12299,"dblanglebracketrightvertical",65086,"dblarchinvertedbelowcmb",811,"dblarrowleft",8660,"dblarrowright",8658,"dbldanda",2405,"dblgrave",63190,"dblgravecmb",783,"dblintegral",8748,"dbllowline",8215,"dbllowlinecmb",819,"dbloverlinecmb",831,"dblprimemod",698,"dblverticalbar",8214,"dblverticallineabovecmb",782,"dbopomofo",12553,"dbsquare",13256,"dcaron",271,"dcedilla",7697,"dcircle",9427,"dcircumflexbelow",7699,"dcroat",273,"ddabengali",2465,"ddadeva",2337,"ddagujarati",2721,"ddagurmukhi",2593,"ddalarabic",1672,"ddalfinalarabic",64393,"dddhadeva",2396,"ddhabengali",2466,"ddhadeva",2338,"ddhagujarati",2722,"ddhagurmukhi",2594,"ddotaccent",7691,"ddotbelow",7693,"decimalseparatorarabic",1643,"decimalseparatorpersian",1643,"decyrillic",1076,"degree",176,"dehihebrew",1453,"dehiragana",12391,"deicoptic",1007,"dekatakana",12487,"deleteleft",9003,"deleteright",8998,"delta",948,"deltaturned",397,"denominatorminusonenumeratorbengali",2552,"dezh",676,"dhabengali",2471,"dhadeva",2343,"dhagujarati",2727,"dhagurmukhi",2599,"dhook",599,"dialytikatonos",901,"dialytikatonoscmb",836,"diamond",9830,"diamondsuitwhite",9826,"dieresis",168,"dieresisacute",63191,"dieresisbelowcmb",804,"dieresiscmb",776,"dieresisgrave",63192,"dieresistonos",901,"dihiragana",12386,"dikatakana",12482,"dittomark",12291,"divide",247,"divides",8739,"divisionslash",8725,"djecyrillic",1106,"dkshade",9619,"dlinebelow",7695,"dlsquare",13207,"dmacron",273,"dmonospace",65348,"dnblock",9604,"dochadathai",3598,"dodekthai",3604,"dohiragana",12393,"dokatakana",12489,"dollar",36,"dollarinferior",63203,"dollarmonospace",65284,"dollaroldstyle",63268,"dollarsmall",65129,"dollarsuperior",63204,"dong",8363,"dorusquare",13094,"dotaccent",729,"dotaccentcmb",775,"dotbelowcmb",803,"dotbelowcomb",803,"dotkatakana",12539,"dotlessi",305,"dotlessj",63166,"dotlessjstrokehook",644,"dotmath",8901,"dottedcircle",9676,"doubleyodpatah",64287,"doubleyodpatahhebrew",64287,"downtackbelowcmb",798,"downtackmod",725,"dparen",9375,"dsuperior",63211,"dtail",598,"dtopbar",396,"duhiragana",12389,"dukatakana",12485,"dz",499,"dzaltone",675,"dzcaron",454,"dzcurl",677,"dzeabkhasiancyrillic",1249,"dzecyrillic",1109,"dzhecyrillic",1119,"e",101,"eacute",233,"earth",9793,"ebengali",2447,"ebopomofo",12572,"ebreve",277,"ecandradeva",2317,"ecandragujarati",2701,"ecandravowelsigndeva",2373,"ecandravowelsigngujarati",2757,"ecaron",283,"ecedillabreve",7709,"echarmenian",1381,"echyiwnarmenian",1415,"ecircle",9428,"ecircumflex",234,"ecircumflexacute",7871,"ecircumflexbelow",7705,"ecircumflexdotbelow",7879,"ecircumflexgrave",7873,"ecircumflexhookabove",7875,"ecircumflextilde",7877,"ecyrillic",1108,"edblgrave",517,"edeva",2319,"edieresis",235,"edot",279,"edotaccent",279,"edotbelow",7865,"eegurmukhi",2575,"eematragurmukhi",2631,"efcyrillic",1092,"egrave",232,"egujarati",2703,"eharmenian",1383,"ehbopomofo",12573,"ehiragana",12360,"ehookabove",7867,"eibopomofo",12575,"eight",56,"eightarabic",1640,"eightbengali",2542,"eightcircle",9319,"eightcircleinversesansserif",10129,"eightdeva",2414,"eighteencircle",9329,"eighteenparen",9349,"eighteenperiod",9369,"eightgujarati",2798,"eightgurmukhi",2670,"eighthackarabic",1640,"eighthangzhou",12328,"eighthnotebeamed",9835,"eightideographicparen",12839,"eightinferior",8328,"eightmonospace",65304,"eightoldstyle",63288,"eightparen",9339,"eightperiod",9359,"eightpersian",1784,"eightroman",8567,"eightsuperior",8312,"eightthai",3672,"einvertedbreve",519,"eiotifiedcyrillic",1125,"ekatakana",12456,"ekatakanahalfwidth",65396,"ekonkargurmukhi",2676,"ekorean",12628,"elcyrillic",1083,"element",8712,"elevencircle",9322,"elevenparen",9342,"elevenperiod",9362,"elevenroman",8570,"ellipsis",8230,"ellipsisvertical",8942,"emacron",275,"emacronacute",7703,"emacrongrave",7701,"emcyrillic",1084,"emdash",8212,"emdashvertical",65073,"emonospace",65349,"emphasismarkarmenian",1371,"emptyset",8709,"enbopomofo",12579,"encyrillic",1085,"endash",8211,"endashvertical",65074,"endescendercyrillic",1187,"eng",331,"engbopomofo",12581,"enghecyrillic",1189,"enhookcyrillic",1224,"enspace",8194,"eogonek",281,"eokorean",12627,"eopen",603,"eopenclosed",666,"eopenreversed",604,"eopenreversedclosed",606,"eopenreversedhook",605,"eparen",9376,"epsilon",949,"epsilontonos",941,"equal",61,"equalmonospace",65309,"equalsmall",65126,"equalsuperior",8316,"equivalence",8801,"erbopomofo",12582,"ercyrillic",1088,"ereversed",600,"ereversedcyrillic",1101,"escyrillic",1089,"esdescendercyrillic",1195,"esh",643,"eshcurl",646,"eshortdeva",2318,"eshortvowelsigndeva",2374,"eshreversedloop",426,"eshsquatreversed",645,"esmallhiragana",12359,"esmallkatakana",12455,"esmallkatakanahalfwidth",65386,"estimated",8494,"esuperior",63212,"eta",951,"etarmenian",1384,"etatonos",942,"eth",240,"etilde",7869,"etildebelow",7707,"etnahtafoukhhebrew",1425,"etnahtafoukhlefthebrew",1425,"etnahtahebrew",1425,"etnahtalefthebrew",1425,"eturned",477,"eukorean",12641,"euro",8364,"evowelsignbengali",2503,"evowelsigndeva",2375,"evowelsigngujarati",2759,"exclam",33,"exclamarmenian",1372,"exclamdbl",8252,"exclamdown",161,"exclamdownsmall",63393,"exclammonospace",65281,"exclamsmall",63265,"existential",8707,"ezh",658,"ezhcaron",495,"ezhcurl",659,"ezhreversed",441,"ezhtail",442,"f",102,"fadeva",2398,"fagurmukhi",2654,"fahrenheit",8457,"fathaarabic",1614,"fathalowarabic",1614,"fathatanarabic",1611,"fbopomofo",12552,"fcircle",9429,"fdotaccent",7711,"feharabic",1601,"feharmenian",1414,"fehfinalarabic",65234,"fehinitialarabic",65235,"fehmedialarabic",65236,"feicoptic",997,"female",9792,"ff",64256,"f_f",64256,"ffi",64259,"f_f_i",64259,"ffl",64260,"f_f_l",64260,"fi",64257,"f_i",64257,"fifteencircle",9326,"fifteenparen",9346,"fifteenperiod",9366,"figuredash",8210,"filledbox",9632,"filledrect",9644,"finalkaf",1498,"finalkafdagesh",64314,"finalkafdageshhebrew",64314,"finalkafhebrew",1498,"finalmem",1501,"finalmemhebrew",1501,"finalnun",1503,"finalnunhebrew",1503,"finalpe",1507,"finalpehebrew",1507,"finaltsadi",1509,"finaltsadihebrew",1509,"firsttonechinese",713,"fisheye",9673,"fitacyrillic",1139,"five",53,"fivearabic",1637,"fivebengali",2539,"fivecircle",9316,"fivecircleinversesansserif",10126,"fivedeva",2411,"fiveeighths",8541,"fivegujarati",2795,"fivegurmukhi",2667,"fivehackarabic",1637,"fivehangzhou",12325,"fiveideographicparen",12836,"fiveinferior",8325,"fivemonospace",65301,"fiveoldstyle",63285,"fiveparen",9336,"fiveperiod",9356,"fivepersian",1781,"fiveroman",8564,"fivesuperior",8309,"fivethai",3669,"fl",64258,"f_l",64258,"florin",402,"fmonospace",65350,"fmsquare",13209,"fofanthai",3615,"fofathai",3613,"fongmanthai",3663,"forall",8704,"four",52,"fourarabic",1636,"fourbengali",2538,"fourcircle",9315,"fourcircleinversesansserif",10125,"fourdeva",2410,"fourgujarati",2794,"fourgurmukhi",2666,"fourhackarabic",1636,"fourhangzhou",12324,"fourideographicparen",12835,"fourinferior",8324,"fourmonospace",65300,"fournumeratorbengali",2551,"fouroldstyle",63284,"fourparen",9335,"fourperiod",9355,"fourpersian",1780,"fourroman",8563,"foursuperior",8308,"fourteencircle",9325,"fourteenparen",9345,"fourteenperiod",9365,"fourthai",3668,"fourthtonechinese",715,"fparen",9377,"fraction",8260,"franc",8355,"g",103,"gabengali",2455,"gacute",501,"gadeva",2327,"gafarabic",1711,"gaffinalarabic",64403,"gafinitialarabic",64404,"gafmedialarabic",64405,"gagujarati",2711,"gagurmukhi",2583,"gahiragana",12364,"gakatakana",12460,"gamma",947,"gammalatinsmall",611,"gammasuperior",736,"gangiacoptic",1003,"gbopomofo",12557,"gbreve",287,"gcaron",487,"gcedilla",291,"gcircle",9430,"gcircumflex",285,"gcommaaccent",291,"gdot",289,"gdotaccent",289,"gecyrillic",1075,"gehiragana",12370,"gekatakana",12466,"geometricallyequal",8785,"gereshaccenthebrew",1436,"gereshhebrew",1523,"gereshmuqdamhebrew",1437,"germandbls",223,"gershayimaccenthebrew",1438,"gershayimhebrew",1524,"getamark",12307,"ghabengali",2456,"ghadarmenian",1394,"ghadeva",2328,"ghagujarati",2712,"ghagurmukhi",2584,"ghainarabic",1594,"ghainfinalarabic",65230,"ghaininitialarabic",65231,"ghainmedialarabic",65232,"ghemiddlehookcyrillic",1173,"ghestrokecyrillic",1171,"gheupturncyrillic",1169,"ghhadeva",2394,"ghhagurmukhi",2650,"ghook",608,"ghzsquare",13203,"gihiragana",12366,"gikatakana",12462,"gimarmenian",1379,"gimel",1490,"gimeldagesh",64306,"gimeldageshhebrew",64306,"gimelhebrew",1490,"gjecyrillic",1107,"glottalinvertedstroke",446,"glottalstop",660,"glottalstopinverted",662,"glottalstopmod",704,"glottalstopreversed",661,"glottalstopreversedmod",705,"glottalstopreversedsuperior",740,"glottalstopstroke",673,"glottalstopstrokereversed",674,"gmacron",7713,"gmonospace",65351,"gohiragana",12372,"gokatakana",12468,"gparen",9378,"gpasquare",13228,"gradient",8711,"grave",96,"gravebelowcmb",790,"gravecmb",768,"gravecomb",768,"gravedeva",2387,"gravelowmod",718,"gravemonospace",65344,"gravetonecmb",832,"greater",62,"greaterequal",8805,"greaterequalorless",8923,"greatermonospace",65310,"greaterorequivalent",8819,"greaterorless",8823,"greateroverequal",8807,"greatersmall",65125,"gscript",609,"gstroke",485,"guhiragana",12368,"guillemotleft",171,"guillemotright",187,"guilsinglleft",8249,"guilsinglright",8250,"gukatakana",12464,"guramusquare",13080,"gysquare",13257,"h",104,"haabkhasiancyrillic",1193,"haaltonearabic",1729,"habengali",2489,"hadescendercyrillic",1203,"hadeva",2361,"hagujarati",2745,"hagurmukhi",2617,"haharabic",1581,"hahfinalarabic",65186,"hahinitialarabic",65187,"hahiragana",12399,"hahmedialarabic",65188,"haitusquare",13098,"hakatakana",12495,"hakatakanahalfwidth",65418,"halantgurmukhi",2637,"hamzaarabic",1569,"hamzalowarabic",1569,"hangulfiller",12644,"hardsigncyrillic",1098,"harpoonleftbarbup",8636,"harpoonrightbarbup",8640,"hasquare",13258,"hatafpatah",1458,"hatafpatah16",1458,"hatafpatah23",1458,"hatafpatah2f",1458,"hatafpatahhebrew",1458,"hatafpatahnarrowhebrew",1458,"hatafpatahquarterhebrew",1458,"hatafpatahwidehebrew",1458,"hatafqamats",1459,"hatafqamats1b",1459,"hatafqamats28",1459,"hatafqamats34",1459,"hatafqamatshebrew",1459,"hatafqamatsnarrowhebrew",1459,"hatafqamatsquarterhebrew",1459,"hatafqamatswidehebrew",1459,"hatafsegol",1457,"hatafsegol17",1457,"hatafsegol24",1457,"hatafsegol30",1457,"hatafsegolhebrew",1457,"hatafsegolnarrowhebrew",1457,"hatafsegolquarterhebrew",1457,"hatafsegolwidehebrew",1457,"hbar",295,"hbopomofo",12559,"hbrevebelow",7723,"hcedilla",7721,"hcircle",9431,"hcircumflex",293,"hdieresis",7719,"hdotaccent",7715,"hdotbelow",7717,"he",1492,"heart",9829,"heartsuitblack",9829,"heartsuitwhite",9825,"hedagesh",64308,"hedageshhebrew",64308,"hehaltonearabic",1729,"heharabic",1607,"hehebrew",1492,"hehfinalaltonearabic",64423,"hehfinalalttwoarabic",65258,"hehfinalarabic",65258,"hehhamzaabovefinalarabic",64421,"hehhamzaaboveisolatedarabic",64420,"hehinitialaltonearabic",64424,"hehinitialarabic",65259,"hehiragana",12408,"hehmedialaltonearabic",64425,"hehmedialarabic",65260,"heiseierasquare",13179,"hekatakana",12504,"hekatakanahalfwidth",65421,"hekutaarusquare",13110,"henghook",615,"herutusquare",13113,"het",1495,"hethebrew",1495,"hhook",614,"hhooksuperior",689,"hieuhacirclekorean",12923,"hieuhaparenkorean",12827,"hieuhcirclekorean",12909,"hieuhkorean",12622,"hieuhparenkorean",12813,"hihiragana",12402,"hikatakana",12498,"hikatakanahalfwidth",65419,"hiriq",1460,"hiriq14",1460,"hiriq21",1460,"hiriq2d",1460,"hiriqhebrew",1460,"hiriqnarrowhebrew",1460,"hiriqquarterhebrew",1460,"hiriqwidehebrew",1460,"hlinebelow",7830,"hmonospace",65352,"hoarmenian",1392,"hohipthai",3627,"hohiragana",12411,"hokatakana",12507,"hokatakanahalfwidth",65422,"holam",1465,"holam19",1465,"holam26",1465,"holam32",1465,"holamhebrew",1465,"holamnarrowhebrew",1465,"holamquarterhebrew",1465,"holamwidehebrew",1465,"honokhukthai",3630,"hookabovecomb",777,"hookcmb",777,"hookpalatalizedbelowcmb",801,"hookretroflexbelowcmb",802,"hoonsquare",13122,"horicoptic",1001,"horizontalbar",8213,"horncmb",795,"hotsprings",9832,"house",8962,"hparen",9379,"hsuperior",688,"hturned",613,"huhiragana",12405,"huiitosquare",13107,"hukatakana",12501,"hukatakanahalfwidth",65420,"hungarumlaut",733,"hungarumlautcmb",779,"hv",405,"hyphen",45,"hypheninferior",63205,"hyphenmonospace",65293,"hyphensmall",65123,"hyphensuperior",63206,"hyphentwo",8208,"i",105,"iacute",237,"iacyrillic",1103,"ibengali",2439,"ibopomofo",12583,"ibreve",301,"icaron",464,"icircle",9432,"icircumflex",238,"icyrillic",1110,"idblgrave",521,"ideographearthcircle",12943,"ideographfirecircle",12939,"ideographicallianceparen",12863,"ideographiccallparen",12858,"ideographiccentrecircle",12965,"ideographicclose",12294,"ideographiccomma",12289,"ideographiccommaleft",65380,"ideographiccongratulationparen",12855,"ideographiccorrectcircle",12963,"ideographicearthparen",12847,"ideographicenterpriseparen",12861,"ideographicexcellentcircle",12957,"ideographicfestivalparen",12864,"ideographicfinancialcircle",12950,"ideographicfinancialparen",12854,"ideographicfireparen",12843,"ideographichaveparen",12850,"ideographichighcircle",12964,"ideographiciterationmark",12293,"ideographiclaborcircle",12952,"ideographiclaborparen",12856,"ideographicleftcircle",12967,"ideographiclowcircle",12966,"ideographicmedicinecircle",12969,"ideographicmetalparen",12846,"ideographicmoonparen",12842,"ideographicnameparen",12852,"ideographicperiod",12290,"ideographicprintcircle",12958,"ideographicreachparen",12867,"ideographicrepresentparen",12857,"ideographicresourceparen",12862,"ideographicrightcircle",12968,"ideographicsecretcircle",12953,"ideographicselfparen",12866,"ideographicsocietyparen",12851,"ideographicspace",12288,"ideographicspecialparen",12853,"ideographicstockparen",12849,"ideographicstudyparen",12859,"ideographicsunparen",12848,"ideographicsuperviseparen",12860,"ideographicwaterparen",12844,"ideographicwoodparen",12845,"ideographiczero",12295,"ideographmetalcircle",12942,"ideographmooncircle",12938,"ideographnamecircle",12948,"ideographsuncircle",12944,"ideographwatercircle",12940,"ideographwoodcircle",12941,"ideva",2311,"idieresis",239,"idieresisacute",7727,"idieresiscyrillic",1253,"idotbelow",7883,"iebrevecyrillic",1239,"iecyrillic",1077,"ieungacirclekorean",12917,"ieungaparenkorean",12821,"ieungcirclekorean",12903,"ieungkorean",12615,"ieungparenkorean",12807,"igrave",236,"igujarati",2695,"igurmukhi",2567,"ihiragana",12356,"ihookabove",7881,"iibengali",2440,"iicyrillic",1080,"iideva",2312,"iigujarati",2696,"iigurmukhi",2568,"iimatragurmukhi",2624,"iinvertedbreve",523,"iishortcyrillic",1081,"iivowelsignbengali",2496,"iivowelsigndeva",2368,"iivowelsigngujarati",2752,"ij",307,"ikatakana",12452,"ikatakanahalfwidth",65394,"ikorean",12643,"ilde",732,"iluyhebrew",1452,"imacron",299,"imacroncyrillic",1251,"imageorapproximatelyequal",8787,"imatragurmukhi",2623,"imonospace",65353,"increment",8710,"infinity",8734,"iniarmenian",1387,"integral",8747,"integralbottom",8993,"integralbt",8993,"integralex",63733,"integraltop",8992,"integraltp",8992,"intersection",8745,"intisquare",13061,"invbullet",9688,"invcircle",9689,"invsmileface",9787,"iocyrillic",1105,"iogonek",303,"iota",953,"iotadieresis",970,"iotadieresistonos",912,"iotalatin",617,"iotatonos",943,"iparen",9380,"irigurmukhi",2674,"ismallhiragana",12355,"ismallkatakana",12451,"ismallkatakanahalfwidth",65384,"issharbengali",2554,"istroke",616,"isuperior",63213,"iterationhiragana",12445,"iterationkatakana",12541,"itilde",297,"itildebelow",7725,"iubopomofo",12585,"iucyrillic",1102,"ivowelsignbengali",2495,"ivowelsigndeva",2367,"ivowelsigngujarati",2751,"izhitsacyrillic",1141,"izhitsadblgravecyrillic",1143,"j",106,"jaarmenian",1393,"jabengali",2460,"jadeva",2332,"jagujarati",2716,"jagurmukhi",2588,"jbopomofo",12560,"jcaron",496,"jcircle",9433,"jcircumflex",309,"jcrossedtail",669,"jdotlessstroke",607,"jecyrillic",1112,"jeemarabic",1580,"jeemfinalarabic",65182,"jeeminitialarabic",65183,"jeemmedialarabic",65184,"jeharabic",1688,"jehfinalarabic",64395,"jhabengali",2461,"jhadeva",2333,"jhagujarati",2717,"jhagurmukhi",2589,"jheharmenian",1403,"jis",12292,"jmonospace",65354,"jparen",9381,"jsuperior",690,"k",107,"kabashkircyrillic",1185,"kabengali",2453,"kacute",7729,"kacyrillic",1082,"kadescendercyrillic",1179,"kadeva",2325,"kaf",1499,"kafarabic",1603,"kafdagesh",64315,"kafdageshhebrew",64315,"kaffinalarabic",65242,"kafhebrew",1499,"kafinitialarabic",65243,"kafmedialarabic",65244,"kafrafehebrew",64333,"kagujarati",2709,"kagurmukhi",2581,"kahiragana",12363,"kahookcyrillic",1220,"kakatakana",12459,"kakatakanahalfwidth",65398,"kappa",954,"kappasymbolgreek",1008,"kapyeounmieumkorean",12657,"kapyeounphieuphkorean",12676,"kapyeounpieupkorean",12664,"kapyeounssangpieupkorean",12665,"karoriisquare",13069,"kashidaautoarabic",1600,"kashidaautonosidebearingarabic",1600,"kasmallkatakana",12533,"kasquare",13188,"kasraarabic",1616,"kasratanarabic",1613,"kastrokecyrillic",1183,"katahiraprolongmarkhalfwidth",65392,"kaverticalstrokecyrillic",1181,"kbopomofo",12558,"kcalsquare",13193,"kcaron",489,"kcedilla",311,"kcircle",9434,"kcommaaccent",311,"kdotbelow",7731,"keharmenian",1412,"kehiragana",12369,"kekatakana",12465,"kekatakanahalfwidth",65401,"kenarmenian",1391,"kesmallkatakana",12534,"kgreenlandic",312,"khabengali",2454,"khacyrillic",1093,"khadeva",2326,"khagujarati",2710,"khagurmukhi",2582,"khaharabic",1582,"khahfinalarabic",65190,"khahinitialarabic",65191,"khahmedialarabic",65192,"kheicoptic",999,"khhadeva",2393,"khhagurmukhi",2649,"khieukhacirclekorean",12920,"khieukhaparenkorean",12824,"khieukhcirclekorean",12906,"khieukhkorean",12619,"khieukhparenkorean",12810,"khokhaithai",3586,"khokhonthai",3589,"khokhuatthai",3587,"khokhwaithai",3588,"khomutthai",3675,"khook",409,"khorakhangthai",3590,"khzsquare",13201,"kihiragana",12365,"kikatakana",12461,"kikatakanahalfwidth",65399,"kiroguramusquare",13077,"kiromeetorusquare",13078,"kirosquare",13076,"kiyeokacirclekorean",12910,"kiyeokaparenkorean",12814,"kiyeokcirclekorean",12896,"kiyeokkorean",12593,"kiyeokparenkorean",12800,"kiyeoksioskorean",12595,"kjecyrillic",1116,"klinebelow",7733,"klsquare",13208,"kmcubedsquare",13222,"kmonospace",65355,"kmsquaredsquare",13218,"kohiragana",12371,"kohmsquare",13248,"kokaithai",3585,"kokatakana",12467,"kokatakanahalfwidth",65402,"kooposquare",13086,"koppacyrillic",1153,"koreanstandardsymbol",12927,"koroniscmb",835,"kparen",9382,"kpasquare",13226,"ksicyrillic",1135,"ktsquare",13263,"kturned",670,"kuhiragana",12367,"kukatakana",12463,"kukatakanahalfwidth",65400,"kvsquare",13240,"kwsquare",13246,"l",108,"labengali",2482,"lacute",314,"ladeva",2354,"lagujarati",2738,"lagurmukhi",2610,"lakkhangyaothai",3653,"lamaleffinalarabic",65276,"lamalefhamzaabovefinalarabic",65272,"lamalefhamzaaboveisolatedarabic",65271,"lamalefhamzabelowfinalarabic",65274,"lamalefhamzabelowisolatedarabic",65273,"lamalefisolatedarabic",65275,"lamalefmaddaabovefinalarabic",65270,"lamalefmaddaaboveisolatedarabic",65269,"lamarabic",1604,"lambda",955,"lambdastroke",411,"lamed",1500,"lameddagesh",64316,"lameddageshhebrew",64316,"lamedhebrew",1500,"lamfinalarabic",65246,"lamhahinitialarabic",64714,"laminitialarabic",65247,"lamjeeminitialarabic",64713,"lamkhahinitialarabic",64715,"lamlamhehisolatedarabic",65010,"lammedialarabic",65248,"lammeemhahinitialarabic",64904,"lammeeminitialarabic",64716,"largecircle",9711,"lbar",410,"lbelt",620,"lbopomofo",12556,"lcaron",318,"lcedilla",316,"lcircle",9435,"lcircumflexbelow",7741,"lcommaaccent",316,"ldot",320,"ldotaccent",320,"ldotbelow",7735,"ldotbelowmacron",7737,"leftangleabovecmb",794,"lefttackbelowcmb",792,"less",60,"lessequal",8804,"lessequalorgreater",8922,"lessmonospace",65308,"lessorequivalent",8818,"lessorgreater",8822,"lessoverequal",8806,"lesssmall",65124,"lezh",622,"lfblock",9612,"lhookretroflex",621,"lira",8356,"liwnarmenian",1388,"lj",457,"ljecyrillic",1113,"ll",63168,"lladeva",2355,"llagujarati",2739,"llinebelow",7739,"llladeva",2356,"llvocalicbengali",2529,"llvocalicdeva",2401,"llvocalicvowelsignbengali",2531,"llvocalicvowelsigndeva",2403,"lmiddletilde",619,"lmonospace",65356,"lmsquare",13264,"lochulathai",3628,"logicaland",8743,"logicalnot",172,"logicalnotreversed",8976,"logicalor",8744,"lolingthai",3621,"longs",383,"lowlinecenterline",65102,"lowlinecmb",818,"lowlinedashed",65101,"lozenge",9674,"lparen",9383,"lslash",322,"lsquare",8467,"lsuperior",63214,"ltshade",9617,"luthai",3622,"lvocalicbengali",2444,"lvocalicdeva",2316,"lvocalicvowelsignbengali",2530,"lvocalicvowelsigndeva",2402,"lxsquare",13267,"m",109,"mabengali",2478,"macron",175,"macronbelowcmb",817,"macroncmb",772,"macronlowmod",717,"macronmonospace",65507,"macute",7743,"madeva",2350,"magujarati",2734,"magurmukhi",2606,"mahapakhhebrew",1444,"mahapakhlefthebrew",1444,"mahiragana",12414,"maichattawalowleftthai",63637,"maichattawalowrightthai",63636,"maichattawathai",3659,"maichattawaupperleftthai",63635,"maieklowleftthai",63628,"maieklowrightthai",63627,"maiekthai",3656,"maiekupperleftthai",63626,"maihanakatleftthai",63620,"maihanakatthai",3633,"maitaikhuleftthai",63625,"maitaikhuthai",3655,"maitholowleftthai",63631,"maitholowrightthai",63630,"maithothai",3657,"maithoupperleftthai",63629,"maitrilowleftthai",63634,"maitrilowrightthai",63633,"maitrithai",3658,"maitriupperleftthai",63632,"maiyamokthai",3654,"makatakana",12510,"makatakanahalfwidth",65423,"male",9794,"mansyonsquare",13127,"maqafhebrew",1470,"mars",9794,"masoracirclehebrew",1455,"masquare",13187,"mbopomofo",12551,"mbsquare",13268,"mcircle",9436,"mcubedsquare",13221,"mdotaccent",7745,"mdotbelow",7747,"meemarabic",1605,"meemfinalarabic",65250,"meeminitialarabic",65251,"meemmedialarabic",65252,"meemmeeminitialarabic",64721,"meemmeemisolatedarabic",64584,"meetorusquare",13133,"mehiragana",12417,"meizierasquare",13182,"mekatakana",12513,"mekatakanahalfwidth",65426,"mem",1502,"memdagesh",64318,"memdageshhebrew",64318,"memhebrew",1502,"menarmenian",1396,"merkhahebrew",1445,"merkhakefulahebrew",1446,"merkhakefulalefthebrew",1446,"merkhalefthebrew",1445,"mhook",625,"mhzsquare",13202,"middledotkatakanahalfwidth",65381,"middot",183,"mieumacirclekorean",12914,"mieumaparenkorean",12818,"mieumcirclekorean",12900,"mieumkorean",12609,"mieumpansioskorean",12656,"mieumparenkorean",12804,"mieumpieupkorean",12654,"mieumsioskorean",12655,"mihiragana",12415,"mikatakana",12511,"mikatakanahalfwidth",65424,"minus",8722,"minusbelowcmb",800,"minuscircle",8854,"minusmod",727,"minusplus",8723,"minute",8242,"miribaarusquare",13130,"mirisquare",13129,"mlonglegturned",624,"mlsquare",13206,"mmcubedsquare",13219,"mmonospace",65357,"mmsquaredsquare",13215,"mohiragana",12418,"mohmsquare",13249,"mokatakana",12514,"mokatakanahalfwidth",65427,"molsquare",13270,"momathai",3617,"moverssquare",13223,"moverssquaredsquare",13224,"mparen",9384,"mpasquare",13227,"mssquare",13235,"msuperior",63215,"mturned",623,"mu",181,"mu1",181,"muasquare",13186,"muchgreater",8811,"muchless",8810,"mufsquare",13196,"mugreek",956,"mugsquare",13197,"muhiragana",12416,"mukatakana",12512,"mukatakanahalfwidth",65425,"mulsquare",13205,"multiply",215,"mumsquare",13211,"munahhebrew",1443,"munahlefthebrew",1443,"musicalnote",9834,"musicalnotedbl",9835,"musicflatsign",9837,"musicsharpsign",9839,"mussquare",13234,"muvsquare",13238,"muwsquare",13244,"mvmegasquare",13241,"mvsquare",13239,"mwmegasquare",13247,"mwsquare",13245,"n",110,"nabengali",2472,"nabla",8711,"nacute",324,"nadeva",2344,"nagujarati",2728,"nagurmukhi",2600,"nahiragana",12394,"nakatakana",12490,"nakatakanahalfwidth",65413,"napostrophe",329,"nasquare",13185,"nbopomofo",12555,"nbspace",160,"ncaron",328,"ncedilla",326,"ncircle",9437,"ncircumflexbelow",7755,"ncommaaccent",326,"ndotaccent",7749,"ndotbelow",7751,"nehiragana",12397,"nekatakana",12493,"nekatakanahalfwidth",65416,"newsheqelsign",8362,"nfsquare",13195,"ngabengali",2457,"ngadeva",2329,"ngagujarati",2713,"ngagurmukhi",2585,"ngonguthai",3591,"nhiragana",12435,"nhookleft",626,"nhookretroflex",627,"nieunacirclekorean",12911,"nieunaparenkorean",12815,"nieuncieuckorean",12597,"nieuncirclekorean",12897,"nieunhieuhkorean",12598,"nieunkorean",12596,"nieunpansioskorean",12648,"nieunparenkorean",12801,"nieunsioskorean",12647,"nieuntikeutkorean",12646,"nihiragana",12395,"nikatakana",12491,"nikatakanahalfwidth",65414,"nikhahitleftthai",63641,"nikhahitthai",3661,"nine",57,"ninearabic",1641,"ninebengali",2543,"ninecircle",9320,"ninecircleinversesansserif",10130,"ninedeva",2415,"ninegujarati",2799,"ninegurmukhi",2671,"ninehackarabic",1641,"ninehangzhou",12329,"nineideographicparen",12840,"nineinferior",8329,"ninemonospace",65305,"nineoldstyle",63289,"nineparen",9340,"nineperiod",9360,"ninepersian",1785,"nineroman",8568,"ninesuperior",8313,"nineteencircle",9330,"nineteenparen",9350,"nineteenperiod",9370,"ninethai",3673,"nj",460,"njecyrillic",1114,"nkatakana",12531,"nkatakanahalfwidth",65437,"nlegrightlong",414,"nlinebelow",7753,"nmonospace",65358,"nmsquare",13210,"nnabengali",2467,"nnadeva",2339,"nnagujarati",2723,"nnagurmukhi",2595,"nnnadeva",2345,"nohiragana",12398,"nokatakana",12494,"nokatakanahalfwidth",65417,"nonbreakingspace",160,"nonenthai",3603,"nonuthai",3609,"noonarabic",1606,"noonfinalarabic",65254,"noonghunnaarabic",1722,"noonghunnafinalarabic",64415,"nooninitialarabic",65255,"noonjeeminitialarabic",64722,"noonjeemisolatedarabic",64587,"noonmedialarabic",65256,"noonmeeminitialarabic",64725,"noonmeemisolatedarabic",64590,"noonnoonfinalarabic",64653,"notcontains",8716,"notelement",8713,"notelementof",8713,"notequal",8800,"notgreater",8815,"notgreaternorequal",8817,"notgreaternorless",8825,"notidentical",8802,"notless",8814,"notlessnorequal",8816,"notparallel",8742,"notprecedes",8832,"notsubset",8836,"notsucceeds",8833,"notsuperset",8837,"nowarmenian",1398,"nparen",9385,"nssquare",13233,"nsuperior",8319,"ntilde",241,"nu",957,"nuhiragana",12396,"nukatakana",12492,"nukatakanahalfwidth",65415,"nuktabengali",2492,"nuktadeva",2364,"nuktagujarati",2748,"nuktagurmukhi",2620,"numbersign",35,"numbersignmonospace",65283,"numbersignsmall",65119,"numeralsigngreek",884,"numeralsignlowergreek",885,"numero",8470,"nun",1504,"nundagesh",64320,"nundageshhebrew",64320,"nunhebrew",1504,"nvsquare",13237,"nwsquare",13243,"nyabengali",2462,"nyadeva",2334,"nyagujarati",2718,"nyagurmukhi",2590,"o",111,"oacute",243,"oangthai",3629,"obarred",629,"obarredcyrillic",1257,"obarreddieresiscyrillic",1259,"obengali",2451,"obopomofo",12571,"obreve",335,"ocandradeva",2321,"ocandragujarati",2705,"ocandravowelsigndeva",2377,"ocandravowelsigngujarati",2761,"ocaron",466,"ocircle",9438,"ocircumflex",244,"ocircumflexacute",7889,"ocircumflexdotbelow",7897,"ocircumflexgrave",7891,"ocircumflexhookabove",7893,"ocircumflextilde",7895,"ocyrillic",1086,"odblacute",337,"odblgrave",525,"odeva",2323,"odieresis",246,"odieresiscyrillic",1255,"odotbelow",7885,"oe",339,"oekorean",12634,"ogonek",731,"ogonekcmb",808,"ograve",242,"ogujarati",2707,"oharmenian",1413,"ohiragana",12362,"ohookabove",7887,"ohorn",417,"ohornacute",7899,"ohorndotbelow",7907,"ohorngrave",7901,"ohornhookabove",7903,"ohorntilde",7905,"ohungarumlaut",337,"oi",419,"oinvertedbreve",527,"okatakana",12458,"okatakanahalfwidth",65397,"okorean",12631,"olehebrew",1451,"omacron",333,"omacronacute",7763,"omacrongrave",7761,"omdeva",2384,"omega",969,"omega1",982,"omegacyrillic",1121,"omegalatinclosed",631,"omegaroundcyrillic",1147,"omegatitlocyrillic",1149,"omegatonos",974,"omgujarati",2768,"omicron",959,"omicrontonos",972,"omonospace",65359,"one",49,"onearabic",1633,"onebengali",2535,"onecircle",9312,"onecircleinversesansserif",10122,"onedeva",2407,"onedotenleader",8228,"oneeighth",8539,"onefitted",63196,"onegujarati",2791,"onegurmukhi",2663,"onehackarabic",1633,"onehalf",189,"onehangzhou",12321,"oneideographicparen",12832,"oneinferior",8321,"onemonospace",65297,"onenumeratorbengali",2548,"oneoldstyle",63281,"oneparen",9332,"oneperiod",9352,"onepersian",1777,"onequarter",188,"oneroman",8560,"onesuperior",185,"onethai",3665,"onethird",8531,"oogonek",491,"oogonekmacron",493,"oogurmukhi",2579,"oomatragurmukhi",2635,"oopen",596,"oparen",9386,"openbullet",9702,"option",8997,"ordfeminine",170,"ordmasculine",186,"orthogonal",8735,"oshortdeva",2322,"oshortvowelsigndeva",2378,"oslash",248,"oslashacute",511,"osmallhiragana",12361,"osmallkatakana",12457,"osmallkatakanahalfwidth",65387,"ostrokeacute",511,"osuperior",63216,"otcyrillic",1151,"otilde",245,"otildeacute",7757,"otildedieresis",7759,"oubopomofo",12577,"overline",8254,"overlinecenterline",65098,"overlinecmb",773,"overlinedashed",65097,"overlinedblwavy",65100,"overlinewavy",65099,"overscore",175,"ovowelsignbengali",2507,"ovowelsigndeva",2379,"ovowelsigngujarati",2763,"p",112,"paampssquare",13184,"paasentosquare",13099,"pabengali",2474,"pacute",7765,"padeva",2346,"pagedown",8671,"pageup",8670,"pagujarati",2730,"pagurmukhi",2602,"pahiragana",12401,"paiyannoithai",3631,"pakatakana",12497,"palatalizationcyrilliccmb",1156,"palochkacyrillic",1216,"pansioskorean",12671,"paragraph",182,"parallel",8741,"parenleft",40,"parenleftaltonearabic",64830,"parenleftbt",63725,"parenleftex",63724,"parenleftinferior",8333,"parenleftmonospace",65288,"parenleftsmall",65113,"parenleftsuperior",8317,"parenlefttp",63723,"parenleftvertical",65077,"parenright",41,"parenrightaltonearabic",64831,"parenrightbt",63736,"parenrightex",63735,"parenrightinferior",8334,"parenrightmonospace",65289,"parenrightsmall",65114,"parenrightsuperior",8318,"parenrighttp",63734,"parenrightvertical",65078,"partialdiff",8706,"paseqhebrew",1472,"pashtahebrew",1433,"pasquare",13225,"patah",1463,"patah11",1463,"patah1d",1463,"patah2a",1463,"patahhebrew",1463,"patahnarrowhebrew",1463,"patahquarterhebrew",1463,"patahwidehebrew",1463,"pazerhebrew",1441,"pbopomofo",12550,"pcircle",9439,"pdotaccent",7767,"pe",1508,"pecyrillic",1087,"pedagesh",64324,"pedageshhebrew",64324,"peezisquare",13115,"pefinaldageshhebrew",64323,"peharabic",1662,"peharmenian",1402,"pehebrew",1508,"pehfinalarabic",64343,"pehinitialarabic",64344,"pehiragana",12410,"pehmedialarabic",64345,"pekatakana",12506,"pemiddlehookcyrillic",1191,"perafehebrew",64334,"percent",37,"percentarabic",1642,"percentmonospace",65285,"percentsmall",65130,"period",46,"periodarmenian",1417,"periodcentered",183,"periodhalfwidth",65377,"periodinferior",63207,"periodmonospace",65294,"periodsmall",65106,"periodsuperior",63208,"perispomenigreekcmb",834,"perpendicular",8869,"perthousand",8240,"peseta",8359,"pfsquare",13194,"phabengali",2475,"phadeva",2347,"phagujarati",2731,"phagurmukhi",2603,"phi",966,"phi1",981,"phieuphacirclekorean",12922,"phieuphaparenkorean",12826,"phieuphcirclekorean",12908,"phieuphkorean",12621,"phieuphparenkorean",12812,"philatin",632,"phinthuthai",3642,"phisymbolgreek",981,"phook",421,"phophanthai",3614,"phophungthai",3612,"phosamphaothai",3616,"pi",960,"pieupacirclekorean",12915,"pieupaparenkorean",12819,"pieupcieuckorean",12662,"pieupcirclekorean",12901,"pieupkiyeokkorean",12658,"pieupkorean",12610,"pieupparenkorean",12805,"pieupsioskiyeokkorean",12660,"pieupsioskorean",12612,"pieupsiostikeutkorean",12661,"pieupthieuthkorean",12663,"pieuptikeutkorean",12659,"pihiragana",12404,"pikatakana",12500,"pisymbolgreek",982,"piwrarmenian",1411,"plus",43,"plusbelowcmb",799,"pluscircle",8853,"plusminus",177,"plusmod",726,"plusmonospace",65291,"plussmall",65122,"plussuperior",8314,"pmonospace",65360,"pmsquare",13272,"pohiragana",12413,"pointingindexdownwhite",9759,"pointingindexleftwhite",9756,"pointingindexrightwhite",9758,"pointingindexupwhite",9757,"pokatakana",12509,"poplathai",3611,"postalmark",12306,"postalmarkface",12320,"pparen",9387,"precedes",8826,"prescription",8478,"primemod",697,"primereversed",8245,"product",8719,"projective",8965,"prolongedkana",12540,"propellor",8984,"propersubset",8834,"propersuperset",8835,"proportion",8759,"proportional",8733,"psi",968,"psicyrillic",1137,"psilipneumatacyrilliccmb",1158,"pssquare",13232,"puhiragana",12407,"pukatakana",12503,"pvsquare",13236,"pwsquare",13242,"q",113,"qadeva",2392,"qadmahebrew",1448,"qafarabic",1602,"qaffinalarabic",65238,"qafinitialarabic",65239,"qafmedialarabic",65240,"qamats",1464,"qamats10",1464,"qamats1a",1464,"qamats1c",1464,"qamats27",1464,"qamats29",1464,"qamats33",1464,"qamatsde",1464,"qamatshebrew",1464,"qamatsnarrowhebrew",1464,"qamatsqatanhebrew",1464,"qamatsqatannarrowhebrew",1464,"qamatsqatanquarterhebrew",1464,"qamatsqatanwidehebrew",1464,"qamatsquarterhebrew",1464,"qamatswidehebrew",1464,"qarneyparahebrew",1439,"qbopomofo",12561,"qcircle",9440,"qhook",672,"qmonospace",65361,"qof",1511,"qofdagesh",64327,"qofdageshhebrew",64327,"qofhebrew",1511,"qparen",9388,"quarternote",9833,"qubuts",1467,"qubuts18",1467,"qubuts25",1467,"qubuts31",1467,"qubutshebrew",1467,"qubutsnarrowhebrew",1467,"qubutsquarterhebrew",1467,"qubutswidehebrew",1467,"question",63,"questionarabic",1567,"questionarmenian",1374,"questiondown",191,"questiondownsmall",63423,"questiongreek",894,"questionmonospace",65311,"questionsmall",63295,"quotedbl",34,"quotedblbase",8222,"quotedblleft",8220,"quotedblmonospace",65282,"quotedblprime",12318,"quotedblprimereversed",12317,"quotedblright",8221,"quoteleft",8216,"quoteleftreversed",8219,"quotereversed",8219,"quoteright",8217,"quoterightn",329,"quotesinglbase",8218,"quotesingle",39,"quotesinglemonospace",65287,"r",114,"raarmenian",1404,"rabengali",2480,"racute",341,"radeva",2352,"radical",8730,"radicalex",63717,"radoverssquare",13230,"radoverssquaredsquare",13231,"radsquare",13229,"rafe",1471,"rafehebrew",1471,"ragujarati",2736,"ragurmukhi",2608,"rahiragana",12425,"rakatakana",12521,"rakatakanahalfwidth",65431,"ralowerdiagonalbengali",2545,"ramiddlediagonalbengali",2544,"ramshorn",612,"ratio",8758,"rbopomofo",12566,"rcaron",345,"rcedilla",343,"rcircle",9441,"rcommaaccent",343,"rdblgrave",529,"rdotaccent",7769,"rdotbelow",7771,"rdotbelowmacron",7773,"referencemark",8251,"reflexsubset",8838,"reflexsuperset",8839,"registered",174,"registersans",63720,"registerserif",63194,"reharabic",1585,"reharmenian",1408,"rehfinalarabic",65198,"rehiragana",12428,"rekatakana",12524,"rekatakanahalfwidth",65434,"resh",1512,"reshdageshhebrew",64328,"reshhebrew",1512,"reversedtilde",8765,"reviahebrew",1431,"reviamugrashhebrew",1431,"revlogicalnot",8976,"rfishhook",638,"rfishhookreversed",639,"rhabengali",2525,"rhadeva",2397,"rho",961,"rhook",637,"rhookturned",635,"rhookturnedsuperior",693,"rhosymbolgreek",1009,"rhotichookmod",734,"rieulacirclekorean",12913,"rieulaparenkorean",12817,"rieulcirclekorean",12899,"rieulhieuhkorean",12608,"rieulkiyeokkorean",12602,"rieulkiyeoksioskorean",12649,"rieulkorean",12601,"rieulmieumkorean",12603,"rieulpansioskorean",12652,"rieulparenkorean",12803,"rieulphieuphkorean",12607,"rieulpieupkorean",12604,"rieulpieupsioskorean",12651,"rieulsioskorean",12605,"rieulthieuthkorean",12606,"rieultikeutkorean",12650,"rieulyeorinhieuhkorean",12653,"rightangle",8735,"righttackbelowcmb",793,"righttriangle",8895,"rihiragana",12426,"rikatakana",12522,"rikatakanahalfwidth",65432,"ring",730,"ringbelowcmb",805,"ringcmb",778,"ringhalfleft",703,"ringhalfleftarmenian",1369,"ringhalfleftbelowcmb",796,"ringhalfleftcentered",723,"ringhalfright",702,"ringhalfrightbelowcmb",825,"ringhalfrightcentered",722,"rinvertedbreve",531,"rittorusquare",13137,"rlinebelow",7775,"rlongleg",636,"rlonglegturned",634,"rmonospace",65362,"rohiragana",12429,"rokatakana",12525,"rokatakanahalfwidth",65435,"roruathai",3619,"rparen",9389,"rrabengali",2524,"rradeva",2353,"rragurmukhi",2652,"rreharabic",1681,"rrehfinalarabic",64397,"rrvocalicbengali",2528,"rrvocalicdeva",2400,"rrvocalicgujarati",2784,"rrvocalicvowelsignbengali",2500,"rrvocalicvowelsigndeva",2372,"rrvocalicvowelsigngujarati",2756,"rsuperior",63217,"rtblock",9616,"rturned",633,"rturnedsuperior",692,"ruhiragana",12427,"rukatakana",12523,"rukatakanahalfwidth",65433,"rupeemarkbengali",2546,"rupeesignbengali",2547,"rupiah",63197,"ruthai",3620,"rvocalicbengali",2443,"rvocalicdeva",2315,"rvocalicgujarati",2699,"rvocalicvowelsignbengali",2499,"rvocalicvowelsigndeva",2371,"rvocalicvowelsigngujarati",2755,"s",115,"sabengali",2488,"sacute",347,"sacutedotaccent",7781,"sadarabic",1589,"sadeva",2360,"sadfinalarabic",65210,"sadinitialarabic",65211,"sadmedialarabic",65212,"sagujarati",2744,"sagurmukhi",2616,"sahiragana",12373,"sakatakana",12469,"sakatakanahalfwidth",65403,"sallallahoualayhewasallamarabic",65018,"samekh",1505,"samekhdagesh",64321,"samekhdageshhebrew",64321,"samekhhebrew",1505,"saraaathai",3634,"saraaethai",3649,"saraaimaimalaithai",3652,"saraaimaimuanthai",3651,"saraamthai",3635,"saraathai",3632,"saraethai",3648,"saraiileftthai",63622,"saraiithai",3637,"saraileftthai",63621,"saraithai",3636,"saraothai",3650,"saraueeleftthai",63624,"saraueethai",3639,"saraueleftthai",63623,"sarauethai",3638,"sarauthai",3640,"sarauuthai",3641,"sbopomofo",12569,"scaron",353,"scarondotaccent",7783,"scedilla",351,"schwa",601,"schwacyrillic",1241,"schwadieresiscyrillic",1243,"schwahook",602,"scircle",9442,"scircumflex",349,"scommaaccent",537,"sdotaccent",7777,"sdotbelow",7779,"sdotbelowdotaccent",7785,"seagullbelowcmb",828,"second",8243,"secondtonechinese",714,"section",167,"seenarabic",1587,"seenfinalarabic",65202,"seeninitialarabic",65203,"seenmedialarabic",65204,"segol",1462,"segol13",1462,"segol1f",1462,"segol2c",1462,"segolhebrew",1462,"segolnarrowhebrew",1462,"segolquarterhebrew",1462,"segoltahebrew",1426,"segolwidehebrew",1462,"seharmenian",1405,"sehiragana",12379,"sekatakana",12475,"sekatakanahalfwidth",65406,"semicolon",59,"semicolonarabic",1563,"semicolonmonospace",65307,"semicolonsmall",65108,"semivoicedmarkkana",12444,"semivoicedmarkkanahalfwidth",65439,"sentisquare",13090,"sentosquare",13091,"seven",55,"sevenarabic",1639,"sevenbengali",2541,"sevencircle",9318,"sevencircleinversesansserif",10128,"sevendeva",2413,"seveneighths",8542,"sevengujarati",2797,"sevengurmukhi",2669,"sevenhackarabic",1639,"sevenhangzhou",12327,"sevenideographicparen",12838,"seveninferior",8327,"sevenmonospace",65303,"sevenoldstyle",63287,"sevenparen",9338,"sevenperiod",9358,"sevenpersian",1783,"sevenroman",8566,"sevensuperior",8311,"seventeencircle",9328,"seventeenparen",9348,"seventeenperiod",9368,"seventhai",3671,"sfthyphen",173,"shaarmenian",1399,"shabengali",2486,"shacyrillic",1096,"shaddaarabic",1617,"shaddadammaarabic",64609,"shaddadammatanarabic",64606,"shaddafathaarabic",64608,"shaddakasraarabic",64610,"shaddakasratanarabic",64607,"shade",9618,"shadedark",9619,"shadelight",9617,"shademedium",9618,"shadeva",2358,"shagujarati",2742,"shagurmukhi",2614,"shalshelethebrew",1427,"shbopomofo",12565,"shchacyrillic",1097,"sheenarabic",1588,"sheenfinalarabic",65206,"sheeninitialarabic",65207,"sheenmedialarabic",65208,"sheicoptic",995,"sheqel",8362,"sheqelhebrew",8362,"sheva",1456,"sheva115",1456,"sheva15",1456,"sheva22",1456,"sheva2e",1456,"shevahebrew",1456,"shevanarrowhebrew",1456,"shevaquarterhebrew",1456,"shevawidehebrew",1456,"shhacyrillic",1211,"shimacoptic",1005,"shin",1513,"shindagesh",64329,"shindageshhebrew",64329,"shindageshshindot",64300,"shindageshshindothebrew",64300,"shindageshsindot",64301,"shindageshsindothebrew",64301,"shindothebrew",1473,"shinhebrew",1513,"shinshindot",64298,"shinshindothebrew",64298,"shinsindot",64299,"shinsindothebrew",64299,"shook",642,"sigma",963,"sigma1",962,"sigmafinal",962,"sigmalunatesymbolgreek",1010,"sihiragana",12375,"sikatakana",12471,"sikatakanahalfwidth",65404,"siluqhebrew",1469,"siluqlefthebrew",1469,"similar",8764,"sindothebrew",1474,"siosacirclekorean",12916,"siosaparenkorean",12820,"sioscieuckorean",12670,"sioscirclekorean",12902,"sioskiyeokkorean",12666,"sioskorean",12613,"siosnieunkorean",12667,"siosparenkorean",12806,"siospieupkorean",12669,"siostikeutkorean",12668,"six",54,"sixarabic",1638,"sixbengali",2540,"sixcircle",9317,"sixcircleinversesansserif",10127,"sixdeva",2412,"sixgujarati",2796,"sixgurmukhi",2668,"sixhackarabic",1638,"sixhangzhou",12326,"sixideographicparen",12837,"sixinferior",8326,"sixmonospace",65302,"sixoldstyle",63286,"sixparen",9337,"sixperiod",9357,"sixpersian",1782,"sixroman",8565,"sixsuperior",8310,"sixteencircle",9327,"sixteencurrencydenominatorbengali",2553,"sixteenparen",9347,"sixteenperiod",9367,"sixthai",3670,"slash",47,"slashmonospace",65295,"slong",383,"slongdotaccent",7835,"smileface",9786,"smonospace",65363,"sofpasuqhebrew",1475,"softhyphen",173,"softsigncyrillic",1100,"sohiragana",12381,"sokatakana",12477,"sokatakanahalfwidth",65407,"soliduslongoverlaycmb",824,"solidusshortoverlaycmb",823,"sorusithai",3625,"sosalathai",3624,"sosothai",3595,"sosuathai",3626,"space",32,"spacehackarabic",32,"spade",9824,"spadesuitblack",9824,"spadesuitwhite",9828,"sparen",9390,"squarebelowcmb",827,"squarecc",13252,"squarecm",13213,"squarediagonalcrosshatchfill",9641,"squarehorizontalfill",9636,"squarekg",13199,"squarekm",13214,"squarekmcapital",13262,"squareln",13265,"squarelog",13266,"squaremg",13198,"squaremil",13269,"squaremm",13212,"squaremsquared",13217,"squareorthogonalcrosshatchfill",9638,"squareupperlefttolowerrightfill",9639,"squareupperrighttolowerleftfill",9640,"squareverticalfill",9637,"squarewhitewithsmallblack",9635,"srsquare",13275,"ssabengali",2487,"ssadeva",2359,"ssagujarati",2743,"ssangcieuckorean",12617,"ssanghieuhkorean",12677,"ssangieungkorean",12672,"ssangkiyeokkorean",12594,"ssangnieunkorean",12645,"ssangpieupkorean",12611,"ssangsioskorean",12614,"ssangtikeutkorean",12600,"ssuperior",63218,"sterling",163,"sterlingmonospace",65505,"strokelongoverlaycmb",822,"strokeshortoverlaycmb",821,"subset",8834,"subsetnotequal",8842,"subsetorequal",8838,"succeeds",8827,"suchthat",8715,"suhiragana",12377,"sukatakana",12473,"sukatakanahalfwidth",65405,"sukunarabic",1618,"summation",8721,"sun",9788,"superset",8835,"supersetnotequal",8843,"supersetorequal",8839,"svsquare",13276,"syouwaerasquare",13180,"t",116,"tabengali",2468,"tackdown",8868,"tackleft",8867,"tadeva",2340,"tagujarati",2724,"tagurmukhi",2596,"taharabic",1591,"tahfinalarabic",65218,"tahinitialarabic",65219,"tahiragana",12383,"tahmedialarabic",65220,"taisyouerasquare",13181,"takatakana",12479,"takatakanahalfwidth",65408,"tatweelarabic",1600,"tau",964,"tav",1514,"tavdages",64330,"tavdagesh",64330,"tavdageshhebrew",64330,"tavhebrew",1514,"tbar",359,"tbopomofo",12554,"tcaron",357,"tccurl",680,"tcedilla",355,"tcheharabic",1670,"tchehfinalarabic",64379,"tchehinitialarabic",64380,"tchehmedialarabic",64381,"tcircle",9443,"tcircumflexbelow",7793,"tcommaaccent",355,"tdieresis",7831,"tdotaccent",7787,"tdotbelow",7789,"tecyrillic",1090,"tedescendercyrillic",1197,"teharabic",1578,"tehfinalarabic",65174,"tehhahinitialarabic",64674,"tehhahisolatedarabic",64524,"tehinitialarabic",65175,"tehiragana",12390,"tehjeeminitialarabic",64673,"tehjeemisolatedarabic",64523,"tehmarbutaarabic",1577,"tehmarbutafinalarabic",65172,"tehmedialarabic",65176,"tehmeeminitialarabic",64676,"tehmeemisolatedarabic",64526,"tehnoonfinalarabic",64627,"tekatakana",12486,"tekatakanahalfwidth",65411,"telephone",8481,"telephoneblack",9742,"telishagedolahebrew",1440,"telishaqetanahebrew",1449,"tencircle",9321,"tenideographicparen",12841,"tenparen",9341,"tenperiod",9361,"tenroman",8569,"tesh",679,"tet",1496,"tetdagesh",64312,"tetdageshhebrew",64312,"tethebrew",1496,"tetsecyrillic",1205,"tevirhebrew",1435,"tevirlefthebrew",1435,"thabengali",2469,"thadeva",2341,"thagujarati",2725,"thagurmukhi",2597,"thalarabic",1584,"thalfinalarabic",65196,"thanthakhatlowleftthai",63640,"thanthakhatlowrightthai",63639,"thanthakhatthai",3660,"thanthakhatupperleftthai",63638,"theharabic",1579,"thehfinalarabic",65178,"thehinitialarabic",65179,"thehmedialarabic",65180,"thereexists",8707,"therefore",8756,"theta",952,"theta1",977,"thetasymbolgreek",977,"thieuthacirclekorean",12921,"thieuthaparenkorean",12825,"thieuthcirclekorean",12907,"thieuthkorean",12620,"thieuthparenkorean",12811,"thirteencircle",9324,"thirteenparen",9344,"thirteenperiod",9364,"thonangmonthothai",3601,"thook",429,"thophuthaothai",3602,"thorn",254,"thothahanthai",3607,"thothanthai",3600,"thothongthai",3608,"thothungthai",3606,"thousandcyrillic",1154,"thousandsseparatorarabic",1644,"thousandsseparatorpersian",1644,"three",51,"threearabic",1635,"threebengali",2537,"threecircle",9314,"threecircleinversesansserif",10124,"threedeva",2409,"threeeighths",8540,"threegujarati",2793,"threegurmukhi",2665,"threehackarabic",1635,"threehangzhou",12323,"threeideographicparen",12834,"threeinferior",8323,"threemonospace",65299,"threenumeratorbengali",2550,"threeoldstyle",63283,"threeparen",9334,"threeperiod",9354,"threepersian",1779,"threequarters",190,"threequartersemdash",63198,"threeroman",8562,"threesuperior",179,"threethai",3667,"thzsquare",13204,"tihiragana",12385,"tikatakana",12481,"tikatakanahalfwidth",65409,"tikeutacirclekorean",12912,"tikeutaparenkorean",12816,"tikeutcirclekorean",12898,"tikeutkorean",12599,"tikeutparenkorean",12802,"tilde",732,"tildebelowcmb",816,"tildecmb",771,"tildecomb",771,"tildedoublecmb",864,"tildeoperator",8764,"tildeoverlaycmb",820,"tildeverticalcmb",830,"timescircle",8855,"tipehahebrew",1430,"tipehalefthebrew",1430,"tippigurmukhi",2672,"titlocyrilliccmb",1155,"tiwnarmenian",1407,"tlinebelow",7791,"tmonospace",65364,"toarmenian",1385,"tohiragana",12392,"tokatakana",12488,"tokatakanahalfwidth",65412,"tonebarextrahighmod",741,"tonebarextralowmod",745,"tonebarhighmod",742,"tonebarlowmod",744,"tonebarmidmod",743,"tonefive",445,"tonesix",389,"tonetwo",424,"tonos",900,"tonsquare",13095,"topatakthai",3599,"tortoiseshellbracketleft",12308,"tortoiseshellbracketleftsmall",65117,"tortoiseshellbracketleftvertical",65081,"tortoiseshellbracketright",12309,"tortoiseshellbracketrightsmall",65118,"tortoiseshellbracketrightvertical",65082,"totaothai",3605,"tpalatalhook",427,"tparen",9391,"trademark",8482,"trademarksans",63722,"trademarkserif",63195,"tretroflexhook",648,"triagdn",9660,"triaglf",9668,"triagrt",9658,"triagup",9650,"ts",678,"tsadi",1510,"tsadidagesh",64326,"tsadidageshhebrew",64326,"tsadihebrew",1510,"tsecyrillic",1094,"tsere",1461,"tsere12",1461,"tsere1e",1461,"tsere2b",1461,"tserehebrew",1461,"tserenarrowhebrew",1461,"tserequarterhebrew",1461,"tserewidehebrew",1461,"tshecyrillic",1115,"tsuperior",63219,"ttabengali",2463,"ttadeva",2335,"ttagujarati",2719,"ttagurmukhi",2591,"tteharabic",1657,"ttehfinalarabic",64359,"ttehinitialarabic",64360,"ttehmedialarabic",64361,"tthabengali",2464,"tthadeva",2336,"tthagujarati",2720,"tthagurmukhi",2592,"tturned",647,"tuhiragana",12388,"tukatakana",12484,"tukatakanahalfwidth",65410,"tusmallhiragana",12387,"tusmallkatakana",12483,"tusmallkatakanahalfwidth",65391,"twelvecircle",9323,"twelveparen",9343,"twelveperiod",9363,"twelveroman",8571,"twentycircle",9331,"twentyhangzhou",21316,"twentyparen",9351,"twentyperiod",9371,"two",50,"twoarabic",1634,"twobengali",2536,"twocircle",9313,"twocircleinversesansserif",10123,"twodeva",2408,"twodotenleader",8229,"twodotleader",8229,"twodotleadervertical",65072,"twogujarati",2792,"twogurmukhi",2664,"twohackarabic",1634,"twohangzhou",12322,"twoideographicparen",12833,"twoinferior",8322,"twomonospace",65298,"twonumeratorbengali",2549,"twooldstyle",63282,"twoparen",9333,"twoperiod",9353,"twopersian",1778,"tworoman",8561,"twostroke",443,"twosuperior",178,"twothai",3666,"twothirds",8532,"u",117,"uacute",250,"ubar",649,"ubengali",2441,"ubopomofo",12584,"ubreve",365,"ucaron",468,"ucircle",9444,"ucircumflex",251,"ucircumflexbelow",7799,"ucyrillic",1091,"udattadeva",2385,"udblacute",369,"udblgrave",533,"udeva",2313,"udieresis",252,"udieresisacute",472,"udieresisbelow",7795,"udieresiscaron",474,"udieresiscyrillic",1265,"udieresisgrave",476,"udieresismacron",470,"udotbelow",7909,"ugrave",249,"ugujarati",2697,"ugurmukhi",2569,"uhiragana",12358,"uhookabove",7911,"uhorn",432,"uhornacute",7913,"uhorndotbelow",7921,"uhorngrave",7915,"uhornhookabove",7917,"uhorntilde",7919,"uhungarumlaut",369,"uhungarumlautcyrillic",1267,"uinvertedbreve",535,"ukatakana",12454,"ukatakanahalfwidth",65395,"ukcyrillic",1145,"ukorean",12636,"umacron",363,"umacroncyrillic",1263,"umacrondieresis",7803,"umatragurmukhi",2625,"umonospace",65365,"underscore",95,"underscoredbl",8215,"underscoremonospace",65343,"underscorevertical",65075,"underscorewavy",65103,"union",8746,"universal",8704,"uogonek",371,"uparen",9392,"upblock",9600,"upperdothebrew",1476,"upsilon",965,"upsilondieresis",971,"upsilondieresistonos",944,"upsilonlatin",650,"upsilontonos",973,"uptackbelowcmb",797,"uptackmod",724,"uragurmukhi",2675,"uring",367,"ushortcyrillic",1118,"usmallhiragana",12357,"usmallkatakana",12453,"usmallkatakanahalfwidth",65385,"ustraightcyrillic",1199,"ustraightstrokecyrillic",1201,"utilde",361,"utildeacute",7801,"utildebelow",7797,"uubengali",2442,"uudeva",2314,"uugujarati",2698,"uugurmukhi",2570,"uumatragurmukhi",2626,"uuvowelsignbengali",2498,"uuvowelsigndeva",2370,"uuvowelsigngujarati",2754,"uvowelsignbengali",2497,"uvowelsigndeva",2369,"uvowelsigngujarati",2753,"v",118,"vadeva",2357,"vagujarati",2741,"vagurmukhi",2613,"vakatakana",12535,"vav",1493,"vavdagesh",64309,"vavdagesh65",64309,"vavdageshhebrew",64309,"vavhebrew",1493,"vavholam",64331,"vavholamhebrew",64331,"vavvavhebrew",1520,"vavyodhebrew",1521,"vcircle",9445,"vdotbelow",7807,"vecyrillic",1074,"veharabic",1700,"vehfinalarabic",64363,"vehinitialarabic",64364,"vehmedialarabic",64365,"vekatakana",12537,"venus",9792,"verticalbar",124,"verticallineabovecmb",781,"verticallinebelowcmb",809,"verticallinelowmod",716,"verticallinemod",712,"vewarmenian",1406,"vhook",651,"vikatakana",12536,"viramabengali",2509,"viramadeva",2381,"viramagujarati",2765,"visargabengali",2435,"visargadeva",2307,"visargagujarati",2691,"vmonospace",65366,"voarmenian",1400,"voicediterationhiragana",12446,"voicediterationkatakana",12542,"voicedmarkkana",12443,"voicedmarkkanahalfwidth",65438,"vokatakana",12538,"vparen",9393,"vtilde",7805,"vturned",652,"vuhiragana",12436,"vukatakana",12532,"w",119,"wacute",7811,"waekorean",12633,"wahiragana",12431,"wakatakana",12527,"wakatakanahalfwidth",65436,"wakorean",12632,"wasmallhiragana",12430,"wasmallkatakana",12526,"wattosquare",13143,"wavedash",12316,"wavyunderscorevertical",65076,"wawarabic",1608,"wawfinalarabic",65262,"wawhamzaabovearabic",1572,"wawhamzaabovefinalarabic",65158,"wbsquare",13277,"wcircle",9446,"wcircumflex",373,"wdieresis",7813,"wdotaccent",7815,"wdotbelow",7817,"wehiragana",12433,"weierstrass",8472,"wekatakana",12529,"wekorean",12638,"weokorean",12637,"wgrave",7809,"whitebullet",9702,"whitecircle",9675,"whitecircleinverse",9689,"whitecornerbracketleft",12302,"whitecornerbracketleftvertical",65091,"whitecornerbracketright",12303,"whitecornerbracketrightvertical",65092,"whitediamond",9671,"whitediamondcontainingblacksmalldiamond",9672,"whitedownpointingsmalltriangle",9663,"whitedownpointingtriangle",9661,"whiteleftpointingsmalltriangle",9667,"whiteleftpointingtriangle",9665,"whitelenticularbracketleft",12310,"whitelenticularbracketright",12311,"whiterightpointingsmalltriangle",9657,"whiterightpointingtriangle",9655,"whitesmallsquare",9643,"whitesmilingface",9786,"whitesquare",9633,"whitestar",9734,"whitetelephone",9743,"whitetortoiseshellbracketleft",12312,"whitetortoiseshellbracketright",12313,"whiteuppointingsmalltriangle",9653,"whiteuppointingtriangle",9651,"wihiragana",12432,"wikatakana",12528,"wikorean",12639,"wmonospace",65367,"wohiragana",12434,"wokatakana",12530,"wokatakanahalfwidth",65382,"won",8361,"wonmonospace",65510,"wowaenthai",3623,"wparen",9394,"wring",7832,"wsuperior",695,"wturned",653,"wynn",447,"x",120,"xabovecmb",829,"xbopomofo",12562,"xcircle",9447,"xdieresis",7821,"xdotaccent",7819,"xeharmenian",1389,"xi",958,"xmonospace",65368,"xparen",9395,"xsuperior",739,"y",121,"yaadosquare",13134,"yabengali",2479,"yacute",253,"yadeva",2351,"yaekorean",12626,"yagujarati",2735,"yagurmukhi",2607,"yahiragana",12420,"yakatakana",12516,"yakatakanahalfwidth",65428,"yakorean",12625,"yamakkanthai",3662,"yasmallhiragana",12419,"yasmallkatakana",12515,"yasmallkatakanahalfwidth",65388,"yatcyrillic",1123,"ycircle",9448,"ycircumflex",375,"ydieresis",255,"ydotaccent",7823,"ydotbelow",7925,"yeharabic",1610,"yehbarreearabic",1746,"yehbarreefinalarabic",64431,"yehfinalarabic",65266,"yehhamzaabovearabic",1574,"yehhamzaabovefinalarabic",65162,"yehhamzaaboveinitialarabic",65163,"yehhamzaabovemedialarabic",65164,"yehinitialarabic",65267,"yehmedialarabic",65268,"yehmeeminitialarabic",64733,"yehmeemisolatedarabic",64600,"yehnoonfinalarabic",64660,"yehthreedotsbelowarabic",1745,"yekorean",12630,"yen",165,"yenmonospace",65509,"yeokorean",12629,"yeorinhieuhkorean",12678,"yerahbenyomohebrew",1450,"yerahbenyomolefthebrew",1450,"yericyrillic",1099,"yerudieresiscyrillic",1273,"yesieungkorean",12673,"yesieungpansioskorean",12675,"yesieungsioskorean",12674,"yetivhebrew",1434,"ygrave",7923,"yhook",436,"yhookabove",7927,"yiarmenian",1397,"yicyrillic",1111,"yikorean",12642,"yinyang",9775,"yiwnarmenian",1410,"ymonospace",65369,"yod",1497,"yoddagesh",64313,"yoddageshhebrew",64313,"yodhebrew",1497,"yodyodhebrew",1522,"yodyodpatahhebrew",64287,"yohiragana",12424,"yoikorean",12681,"yokatakana",12520,"yokatakanahalfwidth",65430,"yokorean",12635,"yosmallhiragana",12423,"yosmallkatakana",12519,"yosmallkatakanahalfwidth",65390,"yotgreek",1011,"yoyaekorean",12680,"yoyakorean",12679,"yoyakthai",3618,"yoyingthai",3597,"yparen",9396,"ypogegrammeni",890,"ypogegrammenigreekcmb",837,"yr",422,"yring",7833,"ysuperior",696,"ytilde",7929,"yturned",654,"yuhiragana",12422,"yuikorean",12684,"yukatakana",12518,"yukatakanahalfwidth",65429,"yukorean",12640,"yusbigcyrillic",1131,"yusbigiotifiedcyrillic",1133,"yuslittlecyrillic",1127,"yuslittleiotifiedcyrillic",1129,"yusmallhiragana",12421,"yusmallkatakana",12517,"yusmallkatakanahalfwidth",65389,"yuyekorean",12683,"yuyeokorean",12682,"yyabengali",2527,"yyadeva",2399,"z",122,"zaarmenian",1382,"zacute",378,"zadeva",2395,"zagurmukhi",2651,"zaharabic",1592,"zahfinalarabic",65222,"zahinitialarabic",65223,"zahiragana",12374,"zahmedialarabic",65224,"zainarabic",1586,"zainfinalarabic",65200,"zakatakana",12470,"zaqefgadolhebrew",1429,"zaqefqatanhebrew",1428,"zarqahebrew",1432,"zayin",1494,"zayindagesh",64310,"zayindageshhebrew",64310,"zayinhebrew",1494,"zbopomofo",12567,"zcaron",382,"zcircle",9449,"zcircumflex",7825,"zcurl",657,"zdot",380,"zdotaccent",380,"zdotbelow",7827,"zecyrillic",1079,"zedescendercyrillic",1177,"zedieresiscyrillic",1247,"zehiragana",12380,"zekatakana",12476,"zero",48,"zeroarabic",1632,"zerobengali",2534,"zerodeva",2406,"zerogujarati",2790,"zerogurmukhi",2662,"zerohackarabic",1632,"zeroinferior",8320,"zeromonospace",65296,"zerooldstyle",63280,"zeropersian",1776,"zerosuperior",8304,"zerothai",3664,"zerowidthjoiner",65279,"zerowidthnonjoiner",8204,"zerowidthspace",8203,"zeta",950,"zhbopomofo",12563,"zhearmenian",1386,"zhebrevecyrillic",1218,"zhecyrillic",1078,"zhedescendercyrillic",1175,"zhedieresiscyrillic",1245,"zihiragana",12376,"zikatakana",12472,"zinorhebrew",1454,"zlinebelow",7829,"zmonospace",65370,"zohiragana",12382,"zokatakana",12478,"zparen",9397,"zretroflexhook",656,"zstroke",438,"zuhiragana",12378,"zukatakana",12474,".notdef",0,"angbracketleftbig",9001,"angbracketleftBig",9001,"angbracketleftbigg",9001,"angbracketleftBigg",9001,"angbracketrightBig",9002,"angbracketrightbig",9002,"angbracketrightBigg",9002,"angbracketrightbigg",9002,"arrowhookleft",8618,"arrowhookright",8617,"arrowlefttophalf",8636,"arrowleftbothalf",8637,"arrownortheast",8599,"arrownorthwest",8598,"arrowrighttophalf",8640,"arrowrightbothalf",8641,"arrowsoutheast",8600,"arrowsouthwest",8601,"backslashbig",8726,"backslashBig",8726,"backslashBigg",8726,"backslashbigg",8726,"bardbl",8214,"bracehtipdownleft",65079,"bracehtipdownright",65079,"bracehtipupleft",65080,"bracehtipupright",65080,"braceleftBig",123,"braceleftbig",123,"braceleftbigg",123,"braceleftBigg",123,"bracerightBig",125,"bracerightbig",125,"bracerightbigg",125,"bracerightBigg",125,"bracketleftbig",91,"bracketleftBig",91,"bracketleftbigg",91,"bracketleftBigg",91,"bracketrightBig",93,"bracketrightbig",93,"bracketrightbigg",93,"bracketrightBigg",93,"ceilingleftbig",8968,"ceilingleftBig",8968,"ceilingleftBigg",8968,"ceilingleftbigg",8968,"ceilingrightbig",8969,"ceilingrightBig",8969,"ceilingrightbigg",8969,"ceilingrightBigg",8969,"circledotdisplay",8857,"circledottext",8857,"circlemultiplydisplay",8855,"circlemultiplytext",8855,"circleplusdisplay",8853,"circleplustext",8853,"contintegraldisplay",8750,"contintegraltext",8750,"coproductdisplay",8720,"coproducttext",8720,"floorleftBig",8970,"floorleftbig",8970,"floorleftbigg",8970,"floorleftBigg",8970,"floorrightbig",8971,"floorrightBig",8971,"floorrightBigg",8971,"floorrightbigg",8971,"hatwide",770,"hatwider",770,"hatwidest",770,"intercal",7488,"integraldisplay",8747,"integraltext",8747,"intersectiondisplay",8898,"intersectiontext",8898,"logicalanddisplay",8743,"logicalandtext",8743,"logicalordisplay",8744,"logicalortext",8744,"parenleftBig",40,"parenleftbig",40,"parenleftBigg",40,"parenleftbigg",40,"parenrightBig",41,"parenrightbig",41,"parenrightBigg",41,"parenrightbigg",41,"prime",8242,"productdisplay",8719,"producttext",8719,"radicalbig",8730,"radicalBig",8730,"radicalBigg",8730,"radicalbigg",8730,"radicalbt",8730,"radicaltp",8730,"radicalvertex",8730,"slashbig",47,"slashBig",47,"slashBigg",47,"slashbigg",47,"summationdisplay",8721,"summationtext",8721,"tildewide",732,"tildewider",732,"tildewidest",732,"uniondisplay",8899,"unionmultidisplay",8846,"unionmultitext",8846,"unionsqdisplay",8852,"unionsqtext",8852,"uniontext",8899,"vextenddouble",8741,"vextendsingle",8739]})),i=(0,n.getArrayLookupTableFactory)((function(){return["space",32,"a1",9985,"a2",9986,"a202",9987,"a3",9988,"a4",9742,"a5",9990,"a119",9991,"a118",9992,"a117",9993,"a11",9755,"a12",9758,"a13",9996,"a14",9997,"a15",9998,"a16",9999,"a105",1e4,"a17",10001,"a18",10002,"a19",10003,"a20",10004,"a21",10005,"a22",10006,"a23",10007,"a24",10008,"a25",10009,"a26",10010,"a27",10011,"a28",10012,"a6",10013,"a7",10014,"a8",10015,"a9",10016,"a10",10017,"a29",10018,"a30",10019,"a31",10020,"a32",10021,"a33",10022,"a34",10023,"a35",9733,"a36",10025,"a37",10026,"a38",10027,"a39",10028,"a40",10029,"a41",10030,"a42",10031,"a43",10032,"a44",10033,"a45",10034,"a46",10035,"a47",10036,"a48",10037,"a49",10038,"a50",10039,"a51",10040,"a52",10041,"a53",10042,"a54",10043,"a55",10044,"a56",10045,"a57",10046,"a58",10047,"a59",10048,"a60",10049,"a61",10050,"a62",10051,"a63",10052,"a64",10053,"a65",10054,"a66",10055,"a67",10056,"a68",10057,"a69",10058,"a70",10059,"a71",9679,"a72",10061,"a73",9632,"a74",10063,"a203",10064,"a75",10065,"a204",10066,"a76",9650,"a77",9660,"a78",9670,"a79",10070,"a81",9687,"a82",10072,"a83",10073,"a84",10074,"a97",10075,"a98",10076,"a99",10077,"a100",10078,"a101",10081,"a102",10082,"a103",10083,"a104",10084,"a106",10085,"a107",10086,"a108",10087,"a112",9827,"a111",9830,"a110",9829,"a109",9824,"a120",9312,"a121",9313,"a122",9314,"a123",9315,"a124",9316,"a125",9317,"a126",9318,"a127",9319,"a128",9320,"a129",9321,"a130",10102,"a131",10103,"a132",10104,"a133",10105,"a134",10106,"a135",10107,"a136",10108,"a137",10109,"a138",10110,"a139",10111,"a140",10112,"a141",10113,"a142",10114,"a143",10115,"a144",10116,"a145",10117,"a146",10118,"a147",10119,"a148",10120,"a149",10121,"a150",10122,"a151",10123,"a152",10124,"a153",10125,"a154",10126,"a155",10127,"a156",10128,"a157",10129,"a158",10130,"a159",10131,"a160",10132,"a161",8594,"a163",8596,"a164",8597,"a196",10136,"a165",10137,"a192",10138,"a166",10139,"a167",10140,"a168",10141,"a169",10142,"a170",10143,"a171",10144,"a172",10145,"a173",10146,"a162",10147,"a174",10148,"a175",10149,"a176",10150,"a177",10151,"a178",10152,"a179",10153,"a193",10154,"a180",10155,"a199",10156,"a181",10157,"a200",10158,"a182",10159,"a201",10161,"a183",10162,"a184",10163,"a197",10164,"a185",10165,"a194",10166,"a198",10167,"a186",10168,"a195",10169,"a187",10170,"a188",10171,"a189",10172,"a190",10173,"a191",10174,"a89",10088,"a90",10089,"a93",10090,"a94",10091,"a91",10092,"a92",10093,"a205",10094,"a85",10095,"a206",10096,"a86",10097,"a87",10098,"a88",10099,"a95",10100,"a96",10101,".notdef",0]}))},(e,t,r)=>{r.r(t),r.d(t,{clearUnicodeCaches:()=>p,getCharUnicodeCategory:()=>d,getNormalizedUnicodes:()=>u,getUnicodeForGlyph:()=>o,getUnicodeRangeFor:()=>c,mapSpecialUnicodeValues:()=>i,reverseIfRtl:()=>l});var n=r(135);const a=(0,n.getLookupTableFactory)((function(e){e[63721]=169,e[63193]=169,e[63720]=174,e[63194]=174,e[63722]=8482,e[63195]=8482,e[63729]=9127,e[63730]=9128,e[63731]=9129,e[63740]=9131,e[63741]=9132,e[63742]=9133,e[63726]=9121,e[63727]=9122,e[63728]=9123,e[63737]=9124,e[63738]=9125,e[63739]=9126,e[63723]=9115,e[63724]=9116,e[63725]=9117,e[63734]=9118,e[63735]=9119,e[63736]=9120}));function i(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?a()[e]||e:173===e?45:e}function o(e,t){let r=t[e];if(void 0!==r)return r;if(!e)return-1;if("u"===e[0]){const t=e.length;let n;if(7===t&&"n"===e[1]&&"i"===e[2])n=e.substring(3);else{if(!(t>=5&&t<=7))return-1;n=e.substring(1)}if(n===n.toUpperCase()&&(r=parseInt(n,16),r>=0))return r}return-1}const s=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function c(e){for(let t=0,r=s.length;t=r.begin&&e=t.begin&&e=t.begin&&e=0;n--)r.push(e[n]);return r.join("")}const f=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),h=new Map;function d(e){const t=h.get(e);if(t)return t;const r=e.match(f),n={isWhitespace:!(!r||!r[1]),isZeroWidthDiacritic:!(!r||!r[2]),isInvisibleFormatMark:!(!r||!r[3])};return h.set(e,n),n}function p(){h.clear()}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSerifFonts=t.getNonStdFontMap=t.getGlyphMapForStandardFonts=t.getFontNameToFileMap=void 0,t.getStandardFontName=function(e){var t=(0,a.normalizeFontName)(e);return i()[t]},t.getSymbolsFonts=t.getSupplementalGlyphMapForCalibri=t.getSupplementalGlyphMapForArialBlack=t.getStdFontMap=void 0;var n=r(135),a=r(167),i=(0,n.getLookupTableFactory)((function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}));t.getStdFontMap=i;var o=(0,n.getLookupTableFactory)((function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="FoxitSans.pfb",e["Helvetica-Bold"]="FoxitSansBold.pfb",e["Helvetica-BoldOblique"]="FoxitSansBoldItalic.pfb",e["Helvetica-Oblique"]="FoxitSansItalic.pfb",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}));t.getFontNameToFileMap=o;var s=(0,n.getLookupTableFactory)((function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica",e.Wingdings="ZapfDingbats",e["Wingdings-Regular"]="ZapfDingbats"}));t.getNonStdFontMap=s;var c=(0,n.getLookupTableFactory)((function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e["Trinité"]=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}));t.getSerifFonts=c;var u=(0,n.getLookupTableFactory)((function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0}));t.getSymbolsFonts=u;var l=(0,n.getLookupTableFactory)((function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}));t.getGlyphMapForStandardFonts=l;var f=(0,n.getLookupTableFactory)((function(e){e[227]=322,e[264]=261,e[291]=346}));t.getSupplementalGlyphMapForArialBlack=f;var h=(0,n.getLookupTableFactory)((function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45}));t.getSupplementalGlyphMapForCalibri=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ToUnicodeMap=t.IdentityToUnicodeMap=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];i(this,e),this._map=t}return s(e,[{key:"length",get:function(){return this._map.length}},{key:"forEach",value:function(e){for(var t in this._map)e(t,this._map[t].charCodeAt(0))}},{key:"has",value:function(e){return void 0!==this._map[e]}},{key:"get",value:function(e){return this._map[e]}},{key:"charCodeOf",value:function(e){var t=this._map;if(t.length<=65536)return t.indexOf(e);for(var r in t)if(t[r]===e)return 0|r;return-1}},{key:"amend",value:function(e){for(var t in e)this._map[t]=e[t]}}]),e}();t.ToUnicodeMap=c;var u=function(){function e(t,r){i(this,e),this.firstChar=t,this.lastChar=r}return s(e,[{key:"length",get:function(){return this.lastChar+1-this.firstChar}},{key:"forEach",value:function(e){for(var t=this.firstChar,r=this.lastChar;t<=r;t++)e(t,t)}},{key:"has",value:function(e){return this.firstChar<=e&&e<=this.lastChar}},{key:"get",value:function(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}},{key:"charCodeOf",value:function(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}},{key:"amend",value:function(e){(0,n.unreachable)("Should not call amend()")}}]),e}();t.IdentityToUnicodeMap=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFFont=void 0;var n=r(164),a=r(167),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r0){c=Object.create(null);for(var l=0,f=i.length;l=0){var c=n[s];c&&(i[o]=c)}}i.length>0&&(this.properties.builtInEncoding=i)}}}])&&s(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.CFFFont=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontRendererFactory=void 0;var n=r(2),a=r(164),i=r(168),o=r(166),s=r(139);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===h(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){for(var r=0;r>>0}function y(e,t){return e[t]<<8|e[t+1]}function m(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function b(e,t){return e[t]<<24>>24}function w(e,t){return m(e,t)/16384}function k(e){var t=e.length,r=32768;return t<1240?r=107:t<33900&&(r=1131),r}function S(e,t,r){var a,i,o,s=1===y(e,t+2)?v(e,t+8):v(e,t+16),c=y(e,t+s);if(4===c){y(e,t+s+2);var u=y(e,t+s+6)>>1;for(i=t+s+14,a=[],o=0;o>1;r0;)P.push({flags:o})}for(x=0;x>1,g=!0;break;case 4:f+=u.pop(),i(l,f),g=!0;break;case 5:for(;u.length>0;)l+=u.shift(),f+=u.shift(),s(l,f);break;case 6:for(;u.length>0&&(s(l+=u.shift(),f),0!==u.length);)f+=u.shift(),s(l,f);break;case 7:for(;u.length>0&&(f+=u.shift(),s(l,f),0!==u.length);)s(l+=u.shift(),f);break;case 8:for(;u.length>0;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 10:if(A=u.pop(),F=null,r.isCFFCIDFont){var P=r.fdSelect.getFDIndex(a);if(P>=0&&PMath.abs(f-j)?l+=u.shift():f+=u.shift(),c(y,b,m,w,l,f);break;default:throw new n.FormatError("unknown operator: 12 ".concat(v))}break;case 14:if(u.length>=4){var M=u.pop(),_=u.pop();f=u.pop(),l=u.pop(),t.push({cmd:"save"},{cmd:"translate",args:[l,f]});var L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[M]]));C(r.glyphs[L.glyphId],t,r,L.glyphId),t.push({cmd:"restore"}),L=O(r.cmap,String.fromCharCode(r.glyphNameMap[o.StandardEncoding[_]])),C(r.glyphs[L.glyphId],t,r,L.glyphId)}return;case 19:case 20:p+=(h+=u.length>>1)+7>>3,g=!0;break;case 21:f+=u.pop(),i(l+=u.pop(),f),g=!0;break;case 22:i(l+=u.pop(),f),g=!0;break;case 24:for(;u.length>2;)y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);l+=u.shift(),f+=u.shift(),s(l,f);break;case 25:for(;u.length>6;)l+=u.shift(),f+=u.shift(),s(l,f);y=l+u.shift(),b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+u.shift(),c(y,b,m,w,l,f);break;case 26:for(u.length%2&&(l+=u.shift());u.length>0;)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m,f=w+u.shift(),c(y,b,m,w,l,f);break;case 27:for(u.length%2&&(f+=u.shift());u.length>0;)c(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w);break;case 28:u.push((d[p]<<24|d[p+1]<<16)>>16),p+=2;break;case 29:A=u.pop()+r.gsubrsBias,(F=r.gsubrs[A])&&e(F);break;case 30:for(;u.length>0&&(y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f),0!==u.length);)y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f);break;case 31:for(;u.length>0&&(y=l+u.shift(),b=f,m=y+u.shift(),w=b+u.shift(),f=w+u.shift(),c(y,b,m,w,l=m+(1===u.length?u.shift():0),f),0!==u.length);)y=l,b=f+u.shift(),m=y+u.shift(),w=b+u.shift(),l=m+u.shift(),f=w+(1===u.length?u.shift():0),c(y,b,m,w,l,f);break;default:if(v<32)throw new n.FormatError("unknown operator: ".concat(v));v<247?u.push(v-139):v<251?u.push(256*(v-247)+d[p++]+108):v<255?u.push(256*-(v-251)-d[p++]-108):(u.push((d[p]<<24|d[p+1]<<16|d[p+2]<<8|d[p+3])/65536),p+=4)}g&&(u.length=0)}}(e)}var F=[],P=function(){function e(t){d(this,e),this.constructor===e&&(0,n.unreachable)("Cannot initialize CompiledFont."),this.fontMatrix=t,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}return g(e,[{key:"getPathJs",value:function(e){var t=O(this.cmap,e),r=t.charCode,n=t.glyphId,a=this.compiledGlyphs[n];if(!a)try{a=this.compileGlyph(this.glyphs[n],n),this.compiledGlyphs[n]=a}catch(e){throw this.compiledGlyphs[n]=F,void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),e}return void 0===this.compiledCharCodeToGlyphId[r]&&(this.compiledCharCodeToGlyphId[r]=n),a}},{key:"compileGlyph",value:function(e,t){if(!e||0===e.length||14===e[0])return F;var r=this.fontMatrix;if(this.isCFFCIDFont){var a=this.fdSelect.getFDIndex(t);a>=0&&a{Object.defineProperty(t,"__esModule",{value:!0}),t.getMetrics=t.getFontBasicMetrics=void 0;var n=r(135),a=(0,n.getLookupTableFactory)((function(e){e.Courier=600,e["Courier-Bold"]=600,e["Courier-BoldOblique"]=600,e["Courier-Oblique"]=600,e.Helvetica=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-BoldOblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Oblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e.Symbol=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.universal=713,e.numbersign=500,e.existential=549,e.percent=833,e.ampersand=778,e.suchthat=439,e.parenleft=333,e.parenright=333,e.asteriskmath=500,e.plus=549,e.comma=250,e.minus=549,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=549,e.equal=549,e.greater=549,e.question=444,e.congruent=549,e.Alpha=722,e.Beta=667,e.Chi=722,e.Delta=612,e.Epsilon=611,e.Phi=763,e.Gamma=603,e.Eta=722,e.Iota=333,e.theta1=631,e.Kappa=722,e.Lambda=686,e.Mu=889,e.Nu=722,e.Omicron=722,e.Pi=768,e.Theta=741,e.Rho=556,e.Sigma=592,e.Tau=611,e.Upsilon=690,e.sigma1=439,e.Omega=768,e.Xi=645,e.Psi=795,e.Zeta=611,e.bracketleft=333,e.therefore=863,e.bracketright=333,e.perpendicular=658,e.underscore=500,e.radicalex=500,e.alpha=631,e.beta=549,e.chi=549,e.delta=494,e.epsilon=439,e.phi=521,e.gamma=411,e.eta=603,e.iota=329,e.phi1=603,e.kappa=549,e.lambda=549,e.mu=576,e.nu=521,e.omicron=549,e.pi=549,e.theta=521,e.rho=549,e.sigma=603,e.tau=439,e.upsilon=576,e.omega1=713,e.omega=686,e.xi=493,e.psi=686,e.zeta=494,e.braceleft=480,e.bar=200,e.braceright=480,e.similar=549,e.Euro=750,e.Upsilon1=620,e.minute=247,e.lessequal=549,e.fraction=167,e.infinity=713,e.florin=500,e.club=753,e.diamond=753,e.heart=753,e.spade=753,e.arrowboth=1042,e.arrowleft=987,e.arrowup=603,e.arrowright=987,e.arrowdown=603,e.degree=400,e.plusminus=549,e.second=411,e.greaterequal=549,e.multiply=549,e.proportional=713,e.partialdiff=494,e.bullet=460,e.divide=549,e.notequal=549,e.equivalence=549,e.approxequal=549,e.ellipsis=1e3,e.arrowvertex=603,e.arrowhorizex=1e3,e.carriagereturn=658,e.aleph=823,e.Ifraktur=686,e.Rfraktur=795,e.weierstrass=987,e.circlemultiply=768,e.circleplus=768,e.emptyset=823,e.intersection=768,e.union=768,e.propersuperset=713,e.reflexsuperset=713,e.notsubset=713,e.propersubset=713,e.reflexsubset=713,e.element=713,e.notelement=713,e.angle=768,e.gradient=713,e.registerserif=790,e.copyrightserif=790,e.trademarkserif=890,e.product=823,e.radical=549,e.dotmath=250,e.logicalnot=713,e.logicaland=603,e.logicalor=603,e.arrowdblboth=1042,e.arrowdblleft=987,e.arrowdblup=603,e.arrowdblright=987,e.arrowdbldown=603,e.lozenge=494,e.angleleft=329,e.registersans=790,e.copyrightsans=790,e.trademarksans=786,e.summation=713,e.parenlefttp=384,e.parenleftex=384,e.parenleftbt=384,e.bracketlefttp=384,e.bracketleftex=384,e.bracketleftbt=384,e.bracelefttp=494,e.braceleftmid=494,e.braceleftbt=494,e.braceex=494,e.angleright=329,e.integral=274,e.integraltp=686,e.integralex=686,e.integralbt=686,e.parenrighttp=384,e.parenrightex=384,e.parenrightbt=384,e.bracketrighttp=384,e.bracketrightex=384,e.bracketrightbt=384,e.bracerighttp=494,e.bracerightmid=494,e.bracerightbt=494,e.apple=790})),e["Times-Roman"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=408,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=564,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=564,e.equal=564,e.greater=564,e.question=444,e.at=921,e.A=722,e.B=667,e.C=667,e.D=722,e.E=611,e.F=556,e.G=722,e.H=722,e.I=333,e.J=389,e.K=722,e.L=611,e.M=889,e.N=722,e.O=722,e.P=556,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=722,e.W=944,e.X=722,e.Y=722,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=469,e.underscore=500,e.quoteleft=333,e.a=444,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=500,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=500,e.o=500,e.p=500,e.q=500,e.r=333,e.s=389,e.t=278,e.u=500,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=480,e.bar=200,e.braceright=480,e.asciitilde=541,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=180,e.quotedblleft=444,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=453,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=444,e.quotedblright=444,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=444,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=889,e.ordfeminine=276,e.Lslash=611,e.Oslash=722,e.OE=889,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=444,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=722,e.divide=564,e.Yacute=722,e.Acircumflex=722,e.aacute=444,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=444,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=444,e.Ncommaaccent=722,e.lacute=278,e.agrave=444,e.Tcommaaccent=611,e.Cacute=667,e.atilde=444,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=444,e.Amacron=722,e.rcaron=333,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=556,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=588,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=722,e.Abreve=722,e.multiply=564,e.uacute=500,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=444,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=722,e.Iacute=333,e.plusminus=564,e.brokenbar=200,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=333,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=326,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=444,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=344,e.Kcommaaccent=722,e.Lacute=611,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=722,e.zdotaccent=444,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=500,e.minus=564,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=564,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=1e3,e.ampersand=833,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=930,e.A=722,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=778,e.I=389,e.J=500,e.K=778,e.L=667,e.M=944,e.N=722,e.O=778,e.P=611,e.Q=778,e.R=722,e.S=556,e.T=667,e.U=722,e.V=722,e.W=1e3,e.X=722,e.Y=722,e.Z=667,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=581,e.underscore=500,e.quoteleft=333,e.a=500,e.b=556,e.c=444,e.d=556,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=333,e.k=556,e.l=278,e.m=833,e.n=556,e.o=500,e.p=556,e.q=556,e.r=444,e.s=389,e.t=333,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=394,e.bar=220,e.braceright=394,e.asciitilde=520,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=540,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=300,e.Lslash=667,e.Oslash=778,e.OE=1e3,e.ordmasculine=330,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=556,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=722,e.divide=570,e.Yacute=722,e.Acircumflex=722,e.aacute=500,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=667,e.Cacute=722,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=500,e.Amacron=722,e.rcaron=444,e.ccedilla=444,e.Zdotaccent=667,e.Thorn=611,e.Omacron=778,e.Racute=722,e.Sacute=556,e.dcaron=672,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=570,e.uacute=556,e.Tcaron=667,e.partialdiff=494,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=778,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=444,e.omacron=500,e.Zacute=667,e.Zcaron=667,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=416,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=778,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=300,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=556,e.threequarters=750,e.Scedilla=556,e.lcaron=394,e.Kcommaaccent=778,e.Lacute=667,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=667,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=778,e.degree=400,e.ograve=500,e.Ccaron=722,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=444,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=722,e.Lcommaaccent=667,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=444,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=556,e.minus=570,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=333,e.logicalnot=570,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-BoldItalic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=389,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=832,e.A=667,e.B=667,e.C=667,e.D=722,e.E=667,e.F=667,e.G=722,e.H=778,e.I=389,e.J=500,e.K=667,e.L=611,e.M=889,e.N=722,e.O=722,e.P=611,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=667,e.W=889,e.X=667,e.Y=611,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=570,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=556,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=556,e.v=444,e.w=667,e.x=500,e.y=444,e.z=389,e.braceleft=348,e.bar=220,e.braceright=348,e.asciitilde=570,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=500,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=944,e.ordfeminine=266,e.Lslash=611,e.Oslash=722,e.OE=944,e.ordmasculine=300,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=611,e.divide=570,e.Yacute=611,e.Acircumflex=667,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=611,e.Cacute=667,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=556,e.acircumflex=500,e.Amacron=667,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=611,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=608,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=722,e.Agrave=667,e.Abreve=667,e.multiply=570,e.uacute=556,e.Tcaron=611,e.partialdiff=494,e.ydieresis=444,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=722,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=366,e.eogonek=444,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=576,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=382,e.Kcommaaccent=667,e.Lacute=611,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=722,e.zdotaccent=389,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=500,e.minus=606,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=606,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Italic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=420,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=675,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=675,e.equal=675,e.greater=675,e.question=500,e.at=920,e.A=611,e.B=611,e.C=667,e.D=722,e.E=611,e.F=611,e.G=722,e.H=722,e.I=333,e.J=444,e.K=667,e.L=556,e.M=833,e.N=667,e.O=722,e.P=611,e.Q=722,e.R=611,e.S=500,e.T=556,e.U=722,e.V=611,e.W=833,e.X=611,e.Y=556,e.Z=556,e.bracketleft=389,e.backslash=278,e.bracketright=389,e.asciicircum=422,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=278,e.g=500,e.h=500,e.i=278,e.j=278,e.k=444,e.l=278,e.m=722,e.n=500,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=500,e.v=444,e.w=667,e.x=444,e.y=444,e.z=389,e.braceleft=400,e.bar=275,e.braceright=400,e.asciitilde=541,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=214,e.quotedblleft=556,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=523,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=556,e.quotedblright=556,e.guillemotright=500,e.ellipsis=889,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=889,e.AE=889,e.ordfeminine=276,e.Lslash=556,e.Oslash=722,e.OE=944,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=667,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=500,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=556,e.divide=675,e.Yacute=556,e.Acircumflex=611,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=500,e.Ncommaaccent=667,e.lacute=278,e.agrave=500,e.Tcommaaccent=556,e.Cacute=667,e.atilde=500,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=611,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=500,e.Amacron=611,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=556,e.Thorn=611,e.Omacron=722,e.Racute=611,e.Sacute=500,e.dcaron=544,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=611,e.Abreve=611,e.multiply=675,e.uacute=500,e.Tcaron=556,e.partialdiff=476,e.ydieresis=444,e.Nacute=667,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=667,e.Iacute=333,e.plusminus=675,e.brokenbar=275,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=389,e.omacron=500,e.Zacute=556,e.Zcaron=556,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=300,e.eogonek=444,e.Uogonek=722,e.Aacute=611,e.Adieresis=611,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=500,e.lcaron=300,e.Kcommaaccent=667,e.Lacute=556,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=500,e.Scommaaccent=500,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=667,e.otilde=500,e.Rcommaaccent=611,e.Lcommaaccent=556,e.Atilde=611,e.Aogonek=611,e.Aring=611,e.Otilde=722,e.zdotaccent=389,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=444,e.minus=675,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=675,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e.ZapfDingbats=(0,n.getLookupTableFactory)((function(e){e.space=278,e.a1=974,e.a2=961,e.a202=974,e.a3=980,e.a4=719,e.a5=789,e.a119=790,e.a118=791,e.a117=690,e.a11=960,e.a12=939,e.a13=549,e.a14=855,e.a15=911,e.a16=933,e.a105=911,e.a17=945,e.a18=974,e.a19=755,e.a20=846,e.a21=762,e.a22=761,e.a23=571,e.a24=677,e.a25=763,e.a26=760,e.a27=759,e.a28=754,e.a6=494,e.a7=552,e.a8=537,e.a9=577,e.a10=692,e.a29=786,e.a30=788,e.a31=788,e.a32=790,e.a33=793,e.a34=794,e.a35=816,e.a36=823,e.a37=789,e.a38=841,e.a39=823,e.a40=833,e.a41=816,e.a42=831,e.a43=923,e.a44=744,e.a45=723,e.a46=749,e.a47=790,e.a48=792,e.a49=695,e.a50=776,e.a51=768,e.a52=792,e.a53=759,e.a54=707,e.a55=708,e.a56=682,e.a57=701,e.a58=826,e.a59=815,e.a60=789,e.a61=789,e.a62=707,e.a63=687,e.a64=696,e.a65=689,e.a66=786,e.a67=787,e.a68=713,e.a69=791,e.a70=785,e.a71=791,e.a72=873,e.a73=761,e.a74=762,e.a203=762,e.a75=759,e.a204=759,e.a76=892,e.a77=892,e.a78=788,e.a79=784,e.a81=438,e.a82=138,e.a83=277,e.a84=415,e.a97=392,e.a98=392,e.a99=668,e.a100=668,e.a89=390,e.a90=390,e.a93=317,e.a94=317,e.a91=276,e.a92=276,e.a205=509,e.a85=509,e.a206=410,e.a86=410,e.a87=234,e.a88=234,e.a95=334,e.a96=334,e.a101=732,e.a102=544,e.a103=544,e.a104=910,e.a106=667,e.a107=760,e.a108=760,e.a112=776,e.a111=595,e.a110=694,e.a109=626,e.a120=788,e.a121=788,e.a122=788,e.a123=788,e.a124=788,e.a125=788,e.a126=788,e.a127=788,e.a128=788,e.a129=788,e.a130=788,e.a131=788,e.a132=788,e.a133=788,e.a134=788,e.a135=788,e.a136=788,e.a137=788,e.a138=788,e.a139=788,e.a140=788,e.a141=788,e.a142=788,e.a143=788,e.a144=788,e.a145=788,e.a146=788,e.a147=788,e.a148=788,e.a149=788,e.a150=788,e.a151=788,e.a152=788,e.a153=788,e.a154=788,e.a155=788,e.a156=788,e.a157=788,e.a158=788,e.a159=788,e.a160=894,e.a161=838,e.a163=1016,e.a164=458,e.a196=748,e.a165=924,e.a192=748,e.a166=918,e.a167=927,e.a168=928,e.a169=928,e.a170=834,e.a171=873,e.a172=828,e.a173=924,e.a162=924,e.a174=917,e.a175=930,e.a176=931,e.a177=463,e.a178=883,e.a179=836,e.a193=836,e.a180=867,e.a199=867,e.a181=696,e.a200=696,e.a182=874,e.a201=874,e.a183=760,e.a184=946,e.a197=771,e.a185=865,e.a194=771,e.a198=888,e.a186=967,e.a195=888,e.a187=831,e.a188=873,e.a189=927,e.a190=970,e.a191=918}))}));t.getMetrics=a;var i=(0,n.getLookupTableFactory)((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426},e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439},e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450},e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461},e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441},e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462},e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN},e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));t.getFontBasicMetrics=i},(e,t)=>{function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||i(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=i(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r131070,n=r?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*n));r?i.setUint32(0,0):i.setUint16(0,0);var o,s=0,c=0,u=a(this.glyphs);try{for(u.s();!(o=u.n()).done;)s=(s+=o.value.write(s,t))+3&-4,c+=n,r?i.setUint32(c,s):i.setUint16(c,s>>1)}catch(e){u.e(e)}finally{u.f()}return{isLocationLong:r,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}},{key:"scale",value:function(e){for(var t=0,r=this.glyphs.length;t255?t+=2:f>0&&(t+=1),r=u,(f=Math.abs(l-n))>255?t+=2:f>0&&(t+=1),n=l}}}catch(e){i.e(e)}finally{i.f()}return t}},{key:"write",value:function(e,t){var r,n=e,i=[],o=[],s=[],c=0,u=0,l=a(this.contours);try{for(l.s();!(r=l.n()).done;){for(var f=r.value,h=0,d=f.xCoordinates.length;h=0?18:2,i.push(y)):i.push(v)}c=g;var m=f.yCoordinates[h];if(0==(v=m-u))p|=32,o.push(0);else{var b=Math.abs(v);b<=255?(p|=v>=0?36:4,o.push(b)):o.push(v)}u=m,s.push(p)}t.setUint16(e,i.length-1),e+=2}}catch(e){l.e(e)}finally{l.f()}t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length);for(var w=0,k=s;w=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2),e}},{key:"write",value:function(e,t){var r=e;return 2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1),t.setUint16(e,this.flags),t.setUint16(e+2,this.glyphIndex),e+=4,1&this.flags?(2&this.flags?(t.setInt16(e,this.argument1),t.setInt16(e+2,this.argument2)):(t.setUint16(e,this.argument1),t.setUint16(e+2,this.argument2)),e+=4):(t.setUint8(e,this.argument1),t.setUint8(e+1,this.argument2),e+=2),256&this.flags&&(t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length)),e-r}},{key:"scale",value:function(e,t){}}],[{key:"parse",value:function(t,r){var n,a,i=t,o=[],s=r.getUint16(t),c=r.getUint16(t+2);t+=4,1&s?(2&s?(n=r.getInt16(t),a=r.getInt16(t+2)):(n=r.getUint16(t),a=r.getUint16(t+2)),t+=4,s^=1):(2&s?(n=r.getInt8(t),a=r.getInt8(t+1)):(n=r.getUint8(t),a=r.getUint8(t+1)),t+=2),8&s?(o.push(r.getUint16(t)),t+=2):64&s?(o.push(r.getUint16(t),r.getUint16(t+2)),t+=4):128&s&&(o.push(r.getUint16(t),r.getUint16(t+2),r.getUint16(t+4),r.getUint16(t+6)),t+=8);var u=null;if(256&s){var l=r.getUint16(t);t+=2,u=new Uint8Array(r).slice(t,t+l),t+=l}return[t-i,new e({flags:s,glyphIndex:c,argument1:n,argument2:a,transf:o,instructions:u})]}}]),e}()},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.OpenTypeFileBuilder=void 0;var a=r(135),i=r(2);function o(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r>8&255,e[t+1]=255&r}function u(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}function l(e,t,r){if(r instanceof Uint8Array)e.set(r,t);else if("string"==typeof r)for(var n=0,a=r.length;n=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}(r);try{for(o.s();!(i=o.n()).done;){var c=i.value;e[t++]=255&c}}catch(e){o.e(e)}finally{o.f()}}}var f=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sfnt=t,this.tables=Object.create(null)}var t,r,n;return t=e,n=[{key:"getSearchParams",value:function(e,t){for(var r=1,n=0;(r^e)>r;)r<<=1,n++;var a=r*t;return{range:a,entry:n,rangeShift:t*e-a}}}],(r=[{key:"toArray",value:function(){var t=this.sfnt,r=this.tables,n=Object.keys(r);n.sort();var o,s,f,h,d,p=n.length,g=12+16*p,v=[g];for(o=0;o>>0,v.push(g);var y=new Uint8Array(g);for(o=0;o>>0;u(y,g+4,b),u(y,g+8,v[o]),u(y,g+12,r[d].length),g+=16}return y}},{key:"addTable",value:function(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}])&&o(t.prototype,r),n&&o(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.OpenTypeFileBuilder=f},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Font=void 0;var n=r(164),a=r(2),i=r(167),o=r(135),s=r(139),c=r(178);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=a){for(s+=u;s=0&&(o[l]=s);return(0,i.type1FontGlyphMapping)(e,o,c)}},{key:"hasGlyphId",value:function(e){return!(e<0||e>=this.numGlyphs)&&(0===e||this.charstrings[e-1].charstring.length>0)}},{key:"getSeacs",value:function(e){for(var t=[],r=0,n=e.length;r0;b--)m[b]-=m[b-1];g.setByName(y,m)}}o.topDict.privateDict=g;var w=new n.CFFIndex;for(u=0,l=a.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Parser=void 0;var n=r(166),a=r(135),i=r(139),o=r(2);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);ri)return!0;for(var o=i-e,s=o;s>8&255,255&u):(u=65536*u|0,this.output.push(255,u>>24&255,u>>16&255,u>>8&255,255&u))}return(n=this.output).push.apply(n,function(e){if(Array.isArray(e))return c(e)}(a=t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),r?this.stack.splice(o,e):this.stack.length=0,!1}}]),e}();function O(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function A(e,t,r){if(r>=e.length)return new Uint8Array(0);var n,a,i=0|t;for(n=0;n>8,i=52845*(c+i)+22719&65535}return s}function C(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}var F=function(){function e(t,r,n){if(u(this,e),r){var o=t.getBytes(),s=!((O(o[0])||(0,a.isWhiteSpace)(o[0]))&&O(o[1])&&O(o[2])&&O(o[3])&&O(o[4])&&O(o[5])&&O(o[6])&&O(o[7]));t=new i.Stream(s?A(o,55665,4):function(e,t,r){var n,a,i=55665,o=e.length,s=new Uint8Array(o>>>1);for(n=0,a=0;n>8,i=52845*(l+i)+22719&65535}}}return s.slice(4,a)}(o))}this.seacAnalysisEnabled=!!n,this.stream=t,this.nextChar()}return f(e,[{key:"readNumberArray",value:function(){this.getToken();for(var e=[];;){var t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}},{key:"readNumber",value:function(){var e=this.getToken();return parseFloat(e||0)}},{key:"readInt",value:function(){var e=this.getToken();return 0|parseInt(e||0,10)}},{key:"readBoolean",value:function(){return"true"===this.getToken()?1:0}},{key:"nextChar",value:function(){return this.currentChar=this.stream.getByte()}},{key:"prevChar",value:function(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}},{key:"getToken",value:function(){for(var e=!1,t=this.currentChar;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,a.isWhiteSpace)(t))break;t=this.nextChar()}if(C(t))return this.nextChar(),String.fromCharCode(t);var r="";do{r+=String.fromCharCode(t),t=this.nextChar()}while(t>=0&&!(0,a.isWhiteSpace)(t)&&!C(t));return r}},{key:"readCharStrings",value:function(e,t){return-1===t?e:A(e,4330,t)}},{key:"extractFontProgram",value:function(e){var t=this.stream,r=[],n=[],a=Object.create(null);a.lenIV=4;for(var i,o,s,c,u={subrs:[],charstrings:[],properties:{privateData:a}};null!==(i=this.getToken());)if("/"===i)switch(i=this.getToken()){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();null!==(i=this.getToken())&&"end"!==i;)if("/"===i){var l=this.getToken();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var f=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())?this.getToken():"/"===i&&this.prevChar(),n.push({glyph:l,encoded:f})}break;case"Subrs":for(this.readInt(),this.getToken();"dup"===this.getToken();){var h=this.readInt();o=this.readInt(),this.getToken(),s=o>0?t.getBytes(o):new Uint8Array(0),c=u.properties.privateData.lenIV;var d=this.readCharStrings(s,c);this.nextChar(),"noaccess"===(i=this.getToken())&&this.getToken(),r[h]=d}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":var p=this.readNumberArray();p.length>0&&p.length;break;case"StemSnapH":case"StemSnapV":u.properties.privateData[i]=this.readNumberArray();break;case"StdHW":case"StdVW":u.properties.privateData[i]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":case"ExpansionFactor":u.properties.privateData[i]=this.readNumber();break;case"ForceBold":u.properties.privateData[i]=this.readBoolean()}for(var g=0,v=n;g-1&&void 0===e.widths[A]&&A>=e.firstChar&&A<=e.lastChar&&(e.widths[A]=w.width)}}return u}},{key:"extractFontHeader",value:function(e){for(var t;null!==(t=this.getToken());)if("/"===t)switch(t=this.getToken()){case"FontMatrix":var r=this.readNumberArray();e.fontMatrix=r;break;case"Encoding":var a=this.getToken(),i=void 0;if(/^\\d+$/.test(a)){i=[];var o=0|parseInt(a,10);this.getToken();for(var s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.Pattern=void 0,t.getTilingPatternIR=function(e,t,r){var a=t.getArray("Matrix"),i=n.Util.normalizeRect(t.getArray("BBox")),o=t.get("XStep"),s=t.get("YStep"),c=t.get("PaintType"),u=t.get("TilingType");if(i[2]-i[0]==0||i[3]-i[1]==0)throw new n.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(i,"]."));return["TilingPattern",r,e,a,i,o,s,c,u]};var n=r(2),a=r(136),i=r(143),o=r(135);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=v||j<=0)return(0,n.info)("Bad shading domain."),f(l);for(var _,L=new Float32Array(h.numComps),R=new Float32Array(1),N=0;N<=10;N++){R[0]=g+N*j,E(R,0,L,0),_=h.getRgb(L,0);var D=n.Util.makeHexColor(_[0],_[1],_[2]);M.push([N/10,D])}var B="transparent";return e.has("Background")&&(_=h.getRgb(e.get("Background"),0),B=n.Util.makeHexColor(_[0],_[1],_[2])),m||(M.unshift([0,B]),M[1][0]+=b.SMALL_NUMBER),w||(M.at(-1)[0]-=b.SMALL_NUMBER,M.push([1,B])),l.colorStops=M,l}return v(r,[{key:"getIR",value:function(){var e,t,r,a,i,o=this.coordsArr,s=this.shadingType;return 2===s?(t=[o[0],o[1]],r=[o[2],o[3]],a=null,i=null,e="axial"):3===s?(t=[o[0],o[1]],r=[o[3],o[4]],a=o[2],i=o[5],e="radial"):(0,n.unreachable)("getPattern type unknown: ".concat(s)),["RadialAxial",e,this.bbox,this.colorStops,t,r,a,i]}}]),r}(b),k=function(){function e(t,r){p(this,e),this.stream=t,this.context=r,this.buffer=0,this.bufferLength=0;var n=r.numComps;this.tmpCompsBuf=new Float32Array(n);var a=r.colorSpace.numComps;this.tmpCsCompsBuf=r.colorFn?new Float32Array(a):this.tmpCompsBuf}return v(e,[{key:"hasData",get:function(){if(this.stream.end)return this.stream.pos0)return!0;var e=this.stream.getByte();return!(e<0||(this.buffer=e,this.bufferLength=8,0))}},{key:"readBits",value:function(e){var t=this.buffer,r=this.bufferLength;if(32===e){if(0===r)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var n=this.stream.getByte();return this.buffer=n&(1<>r)>>>0}if(8===e&&0===r)return this.stream.getByte();for(;r>r}},{key:"align",value:function(){this.buffer=0,this.bufferLength=0}},{key:"readFlag",value:function(){return this.readBits(this.context.bitsPerFlag)}},{key:"readCoordinate",value:function(){var e=this.context.bitsPerCoordinate,t=this.readBits(e),r=this.readBits(e),n=this.context.decode,a=e<32?1/((1<o?o:e,t=t>s?s:t,r=r{Object.defineProperty(t,"__esModule",{value:!0}),t.getXfaFontDict=function(e){var t=function(e){var t=g(e);if(!t)return null;var r,n=t.baseWidths,a=t.baseMapping,i=t.factors;r=i?n.map((function(e,t){return e*i[t]})):n;var o,s,c=-2,u=[],l=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=h(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(a.map((function(e,t){return[e,t]})).sort((function(e,t){return f(e,1)[0]-f(t,1)[0]})));try{for(l.s();!(s=l.n()).done;){var d=f(s.value,2),p=d[0],v=d[1];-1!==p&&(p===c+1?(o.push(r[v]),c+=1):(c=p,o=[r[v]],u.push(p,o)))}}catch(e){l.e(e)}finally{l.f()}return u}(e),r=new a.Dict(null);r.set("BaseFont",a.Name.get(e)),r.set("Type",a.Name.get("Font")),r.set("Subtype",a.Name.get("CIDFontType2")),r.set("Encoding",a.Name.get("Identity-H")),r.set("CIDToGIDMap",a.Name.get("Identity")),r.set("W",t),r.set("FirstChar",t[0]),r.set("LastChar",t.at(-2)+t.at(-1).length-1);var n=new a.Dict(null);r.set("FontDescriptor",n);var i=new a.Dict(null);return i.set("Ordering","Identity"),i.set("Registry","Adobe"),i.set("Supplement",0),r.set("CIDSystemInfo",i),r},t.getXfaFontName=g;var n=r(181),a=r(134),i=r(182),o=r(183),s=r(184),c=r(185),u=r(135),l=r(167);function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.CalibriRegularMetrics=t.CalibriRegularFactors=t.CalibriItalicMetrics=t.CalibriItalicFactors=t.CalibriBoldMetrics=t.CalibriBoldItalicMetrics=t.CalibriBoldItalicFactors=t.CalibriBoldFactors=void 0,t.CalibriBoldFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriBoldItalicFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriItalicFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriRegularFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],t.CalibriRegularMetrics={lineHeight:1.2207,lineGap:.2207}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HelveticaRegularMetrics=t.HelveticaRegularFactors=t.HelveticaItalicMetrics=t.HelveticaItalicFactors=t.HelveticaBoldMetrics=t.HelveticaBoldItalicMetrics=t.HelveticaBoldItalicFactors=t.HelveticaBoldFactors=void 0,t.HelveticaBoldFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldMetrics={lineHeight:1.2,lineGap:.2},t.HelveticaBoldItalicFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaItalicFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaRegularFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LiberationSansRegularWidths=t.LiberationSansRegularMapping=t.LiberationSansItalicWidths=t.LiberationSansItalicMapping=t.LiberationSansBoldWidths=t.LiberationSansBoldMapping=t.LiberationSansBoldItalicWidths=t.LiberationSansBoldItalicMapping=void 0,t.LiberationSansBoldWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansBoldItalicWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansItalicWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansRegularWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansRegularMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MyriadProRegularMetrics=t.MyriadProRegularFactors=t.MyriadProItalicMetrics=t.MyriadProItalicFactors=t.MyriadProBoldMetrics=t.MyriadProBoldItalicMetrics=t.MyriadProBoldItalicFactors=t.MyriadProBoldFactors=void 0,t.MyriadProBoldFactors=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProBoldItalicFactors=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProItalicFactors=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProRegularFactors=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SegoeuiRegularMetrics=t.SegoeuiRegularFactors=t.SegoeuiItalicMetrics=t.SegoeuiItalicFactors=t.SegoeuiBoldMetrics=t.SegoeuiBoldItalicMetrics=t.SegoeuiBoldItalicFactors=t.SegoeuiBoldFactors=void 0,t.SegoeuiBoldFactors=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiBoldItalicFactors=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiItalicFactors=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiRegularFactors=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiRegularMetrics={lineHeight:1.33008,lineGap:0}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptEvaluator=t.PostScriptCompiler=t.PDFFunctionFactory=void 0,t.isPDFFunction=function(e){var t;if("object"!==g(e))return!1;if(e instanceof n.Dict)t=e;else{if(!(e instanceof o.BaseStream))return!1;t=e.dict}return t.has("FunctionType")};var n=r(134),a=r(2),i=r(187),o=r(136),s=r(188);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=f(e);if(t){var a=f(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function h(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>c)*l,u&=(1<r?e=r:e0&&(u=l[a-1]);var h=i[1];a>1,h=o.length>>1,d=new x(u),p=Object.create(null),g=8192,v=new Float32Array(h);return function(e,t,r,n){var a,i,o="",c=v;for(a=0;a(b=s[2*a+1]))&&(i=b),l[a]=i}g>0&&(g--,p[o]=l),r.set(l,n)}else r.set(u,n)}}}]),e}(),S=function(){function e(t){v(this,e),this.stack=t?Array.from(t):[]}return m(e,[{key:"push",value:function(t){if(this.stack.length>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(t)}},{key:"pop",value:function(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}},{key:"copy",value:function(t){if(this.stack.length+t>=e.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");for(var r=this.stack,n=r.length-t,a=t-1;a>=0;a--,n++)r.push(r[n])}},{key:"index",value:function(e){this.push(this.stack[this.stack.length-e-1])}},{key:"roll",value:function(e,t){for(var r=this.stack,n=r.length-e,a=r.length-1,i=n+(t-Math.floor(t/e)*e),o=n,s=a;o0?i.push(r<>n);break;case"ceiling":r=i.pop(),i.push(Math.ceil(r));break;case"copy":r=i.pop(),i.copy(r);break;case"cos":r=i.pop(),i.push(Math.cos(r));break;case"cvi":r=0|i.pop(),i.push(r);break;case"cvr":break;case"div":n=i.pop(),r=i.pop(),i.push(r/n);break;case"dup":i.copy(1);break;case"eq":n=i.pop(),r=i.pop(),i.push(r===n);break;case"exch":i.roll(2,1);break;case"exp":n=i.pop(),r=i.pop(),i.push(Math.pow(r,n));break;case"false":i.push(!1);break;case"floor":r=i.pop(),i.push(Math.floor(r));break;case"ge":n=i.pop(),r=i.pop(),i.push(r>=n);break;case"gt":n=i.pop(),r=i.pop(),i.push(r>n);break;case"idiv":n=i.pop(),r=i.pop(),i.push(r/n|0);break;case"index":r=i.pop(),i.index(r);break;case"le":n=i.pop(),r=i.pop(),i.push(r<=n);break;case"ln":r=i.pop(),i.push(Math.log(r));break;case"log":r=i.pop(),i.push(Math.log(r)/Math.LN10);break;case"lt":n=i.pop(),r=i.pop(),i.push(r=t?new C(t):e.max<=t?e:new P(e,t)}var R=function(){function e(){v(this,e)}return m(e,[{key:"compile",value:function(e,t,r){for(var n,a,i,o,s,c,u,l,f=[],h=[],g=t.length>>1,v=r.length>>1,y=0,m=0;mD.min&&(X.unshift("Math.max(",U,", "),X.push(")")),${Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptParser=t.PostScriptLexer=void 0;var n=r(2),a=r(134),i=r(135);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r=0&&(t>=65&&t<=90||t>=97&&t<=122);)r.push(String.fromCharCode(t));var n=r.join("");switch(n.toLowerCase()){case"if":return h.IF;case"ifelse":return h.IFELSE;default:return h.getOperator(n)}}},{key:"getNumber",value:function(){var e=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(e);(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));var r=parseFloat(t.join(""));if(isNaN(r))throw new n.FormatError("Invalid floating point number: ".concat(r));return r}}]),e}();t.PostScriptLexer=d},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocalTilingPatternCache=t.LocalImageCache=t.LocalGStateCache=t.LocalFunctionCache=t.LocalColorSpaceCache=t.GlobalImageCache=void 0;var n=r(2),a=r(134);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalImageCache=g;var v=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;return null!==e&&this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalColorSpaceCache=v;var y=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalFunctionCache=y;var m=function(e){o(r,e);var t=c(r);function r(){return f(this,r),t.apply(this,arguments)}return d(r,[{key:"set",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;return this._nameRefMap.set(e,t),void this._imageCache.put(t,r)}this._imageMap.has(e)||this._imageMap.set(e,r)}}]),r}(p);t.LocalGStateCache=m;var b=function(e){o(r,e);var t=c(r);function r(e){return f(this,r),t.call(this,{onlyRefs:!0})}return d(r,[{key:"set",value:function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}}]),r}(p);t.LocalTilingPatternCache=b;var w=function(){function e(){f(this,e),this._refCache=new a.RefSetCache,this._imageCache=new a.RefSetCache}return d(e,[{key:"_byteSize",get:function(){var e,t=0,r=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}(this._imageCache);try{for(r.s();!(e=r.n()).done;)t+=e.value.byteSize}catch(e){r.e(e)}finally{r.f()}return t}},{key:"_cacheLimitReached",get:function(){return!(this._imageCache.size0&&void 0!==arguments[0]&&arguments[0]||this._refCache.clear(),this._imageCache.clear()}}],[{key:"NUM_PAGES_THRESHOLD",get:function(){return(0,n.shadow)(this,"NUM_PAGES_THRESHOLD",2)}},{key:"MIN_IMAGES_TO_CACHE",get:function(){return(0,n.shadow)(this,"MIN_IMAGES_TO_CACHE",10)}},{key:"MAX_BYTE_SIZE",get:function(){return(0,n.shadow)(this,"MAX_BYTE_SIZE",4e7)}}]),e}();t.GlobalImageCache=w},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.bidi=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],p=!0,g=e.length;if(0===g||r)return f(e,p,r);h.length=g,d.length=g;var v,y,m=0;for(v=0;v4?(p=!0,t=0):(p=!1,t=1));var k=[];for(v=0;v=0&&"ET"===d[F];--F)d[F]="EN";for(var P=v+1;P0&&(I=d[v-1]);var E=A;T+1j&&o(j)&&(_=j);for(j=M;j>=_;--j){var L=-1;for(v=0,y=k.length;v=0&&(l(h,L,v),L=-1):L<0&&(L=v);L>=0&&l(h,L,k.length)}for(v=0,y=h.length;v"!==R||(h[v]="")}return f(h.join(""),p)};var n=r(2),a=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],i=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function o(e){return 0!=(1&e)}function s(e){return 0==(1&e)}function c(e,t,r){var n,a;for(n=t,a=e.length;n2&&void 0!==arguments[2]&&arguments[2]?r="ttb":t||(r="rtl"),{str:e,dir:r}}var h=[],d=[]},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MurmurHash3_64=void 0;var n=r(2);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r>>8,t[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(e))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(t=e.slice()).byteLength}for(var u=r>>2,l=r-4*u,f=new Uint32Array(t.buffer,0,u),h=0,d=0,p=this.h1,g=this.h2,v=3432918353,y=461845907,m=11601,b=13715,w=0;w>>17)*y&s|h*b&c)<<13|p>>>19)+3864292196:g=5*(g=(g^=d=(d=(d=(d=f[w])*v&s|d*m&c)<<15|d>>>17)*y&s|d*b&c)<<13|g>>>19)+3864292196;switch(h=0,l){case 3:h^=t[4*u+2]<<16;case 2:h^=t[4*u+1]<<8;case 1:h=(h=(h=(h^=t[4*u])*v&s|h*m&c)<<15|h>>>17)*y&s|h*b&c,1&u?p^=h:g^=h}this.h1=p,this.h2=g}},{key:"hexdigest",value:function(){var e=this.h1,t=this.h2;return e=3981806797*(e^=t>>>1)&s|36045*e&c,e=444984403*(e^=(t=4283543511*t&s|(2950163797*(t<<16|e>>>16)&s)>>>16)>>>1)&s|60499*e&c,((e^=(t=3301882366*t&s|(3120437893*(t<<16|e>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}])&&i(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MurmurHash3_64=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OperatorList=void 0;var n=r(2);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1e3&&(l=Math.max(l,d),p+=h+2,d=0,h=0),f.push({transform:v,x:d,y:p,w:y.width,h:y.height}),d+=y.width+2,h=Math.max(h,y.height)}for(var m=Math.max(l,d)+1,b=p+h+1,w=new Uint8Array(m*b*4),k=m<<2,S=0;S=0;)x[C-4]=x[C],x[C-3]=x[C+1],x[C-2]=x[C+2],x[C-1]=x[C+3],x[C+O]=x[C+O-4],x[C+O+1]=x[C+O-3],x[C+O+2]=x[C+O-2],x[C+O+3]=x[C+O-1],C-=k}return r.splice(o,4*u,n.OPS.paintInlineImageXObjectGroup),a.splice(o,4*u,[{width:m,height:b,kind:n.ImageKind.RGBA_32BPP,data:w},f]),o+1})),h(d,[n.OPS.save,n.OPS.transform,n.OPS.paintImageMaskXObject,n.OPS.restore],null,(function(e,t){var r=e.fnArray,a=(t-(e.iCurr-3))%4;switch(a){case 0:return r[t]===n.OPS.save;case 1:return r[t]===n.OPS.transform;case 2:return r[t]===n.OPS.paintImageMaskXObject;case 3:return r[t]===n.OPS.restore}throw new Error("iterateImageMaskGroup - invalid pos: ".concat(a))}),(function(e,t){var r=e.fnArray,a=e.argsArray,i=e.iCurr,o=i-3,s=i-2,c=i-1,u=Math.floor((t-o)/4);if(u<10)return t-(t-o)%4;var l,f,h=!1,d=a[c][0],p=a[s][0],g=a[s][1],v=a[s][2],y=a[s][3];if(g===v){h=!0,l=s+4;for(var m=c+4,b=1;b=4&&r[i-4]===r[o]&&r[i-3]===r[s]&&r[i-2]===r[c]&&r[i-1]===r[u]&&n[i-4][0]===l&&n[i-4][1]===f&&(h++,d-=5);for(var p=d+4,g=1;g=(r=e.length))break}(n=(n||d)[e[t]])&&!Array.isArray(n)?(i.iCurr=t,t++,!n.checkFn||(0,n.checkFn)(i)?(a=n,n=null):n=null):t++}this.state=n,this.match=a,this.lastProcessed=t}else this.lastProcessed=r}},{key:"flush",value:function(){for(;this.match;){var e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e),this.match=null,this.state=null,this._optimize()}}},{key:"reset",value:function(){this.state=null,this.match=null,this.lastProcessed=0}}]),a}(p),v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1?arguments[1]:void 0;u(this,e),this._streamSink=r,this.fnArray=[],this.argsArray=[],!r||t&n.RenderingIntentFlag.OPLIST?this.optimizer=new p(this):this.optimizer=new g(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=r?null:Promise.resolve()}return f(e,[{key:"length",get:function(){return this.argsArray.length}},{key:"ready",get:function(){return this._resolved||this._streamSink.ready}},{key:"totalLength",get:function(){return this._totalLength+this.length}},{key:"addOp",value:function(t,r){this.optimizer.push(t,r),this.weight++,this._streamSink&&(this.weight>=e.CHUNK_SIZE||this.weight>=e.CHUNK_SIZE_ABOUT&&(t===n.OPS.restore||t===n.OPS.endText))&&this.flush()}},{key:"addImageOps",value:function(e,t,r){void 0!==r&&this.addOp(n.OPS.beginMarkedContentProps,["OC",r]),this.addOp(e,t),void 0!==r&&this.addOp(n.OPS.endMarkedContent,[])}},{key:"addDependency",value:function(e){this.dependencies.has(e)||(this.dependencies.add(e),this.addOp(n.OPS.dependency,[e]))}},{key:"addDependencies",value:function(e){var t,r=a(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;this.addDependency(n)}}catch(e){r.e(e)}finally{r.f()}}},{key:"addOpList",value:function(t){if(t instanceof e){var r,i=a(t.dependencies);try{for(i.s();!(r=i.n()).done;){var o=r.value;this.dependencies.add(o)}}catch(e){i.e(e)}finally{i.f()}for(var s=0,c=t.length;s0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.optimizer.flush();var r=this.length;this._totalLength+=r,this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:r},1,this._transfers),this.dependencies.clear(),this.fnArray.length=0,this.argsArray.length=0,this.weight=0,this.optimizer.reset()}}],[{key:"CHUNK_SIZE",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE",1e3)}},{key:"CHUNK_SIZE_ABOUT",get:function(){return(0,n.shadow)(this,"CHUNK_SIZE_ABOUT",this.CHUNK_SIZE-5)}}]),e}();t.OperatorList=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFImage=void 0;var n=r(2),a=r(193),i=r(136),o=r(143),s=r(148),c=r(156),u=r(159),l=r(134);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==f(h)&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(h).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function p(e,t){for(var r=0;rn&&(e=n),e}function v(e,t,r,n,a,i){var o,s=a*i;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);var c,u,l,f,h=r/a,d=n/i,p=0,g=new Uint16Array(a),v=r;for(c=0;c0&&Number.isInteger(s.height)&&s.height>0&&(s.width!==A||s.height!==C)&&((0,n.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),A=s.width,C=s.height),A<1||C<1)throw new n.FormatError("Invalid image width: ".concat(A," or height: ").concat(C));this.width=A,this.height=C,this.interpolate=k.get("I","Interpolate"),this.imageMask=k.get("IM","ImageMask")||!1,this.matte=k.get("Matte")||!1;var F=s.bitsPerComponent;if(!F&&!(F=k.get("BPC","BitsPerComponent"))){if(!this.imageMask)throw new n.FormatError("Bits per component missing in image: ".concat(this.imageMask));F=1}if(this.bpc=F,!this.imageMask){var P=k.getRaw("CS")||k.getRaw("ColorSpace");if(!P)switch((0,n.info)("JPX images (which do not require color spaces)"),s.numComps){case 1:P=l.Name.get("DeviceGray");break;case 3:P=l.Name.get("DeviceRGB");break;case 4:P=l.Name.get("DeviceCMYK");break;default:throw new Error("JPX images with ".concat(s.numComps," color components not supported."))}this.colorSpace=o.ColorSpace.parse({cs:P,xref:r,resources:f?a:null,pdfFunctionFactory:m,localColorSpaceCache:b}),this.numComps=this.colorSpace.numComps}if(this.decode=k.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,F)||y&&!o.ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;var T=(1<>7&1,r[h+1]=u>>6&1,r[h+2]=u>>5&1,r[h+3]=u>>4&1,r[h+4]=u>>3&1,r[h+5]=u>>2&1,r[h+6]=u>>1&1,r[h+7]=1&u,h+=8;if(h>=1}else{var y=0;for(u=0,h=0,c=o;h>m;b<0?b=0:b>f&&(b=f),r[h]=b,u&=(1<p[w+1]){y=255;break}}s[l]=y}}if(s)for(l=0,h=3,f=r*i;l0&&void 0!==arguments[0]&&arguments[0],t=this.drawWidth,r=this.drawHeight,a={width:t,height:r,interpolate:this.interpolate,kind:0,data:null},i=this.numComps,o=this.width,s=this.height,u=this.bpc,l=o*i*u+7>>3;if(!e){var f;if("DeviceGray"===this.colorSpace.name&&1===u?f=n.ImageKind.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==u||this.needsDecode||(f=n.ImageKind.RGB_24BPP),f&&!this.smask&&!this.mask&&t===o&&r===s){if(a.kind=f,a.data=this.getImageBytes(s*l,{}),this.needsDecode){(0,n.assert)(f===n.ImageKind.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");for(var h=a.data,d=0,p=h.length;d>3,u=this.getImageBytes(o*c,{internal:!0}),l=this.getComponents(u);if(1!==s){this.needsDecode&&this.decodeBuffer(l),a=i*o;var f=255/((1<>3)*i,l=n.byteLength;if(!o||s&&u!==l?s?((t=new Uint8Array(u)).set(n),t.fill(255,l)):t=new Uint8Array(n):t=n,s)for(r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.applyMaskImageData=function(e){var t,r=e.src,i=e.srcPos,o=void 0===i?0:i,s=e.dest,c=e.destPos,u=void 0===c?0:c,l=e.width,f=e.height,h=e.inverseDecode,d=void 0!==h&&h,p=n.FeatureTest.isLittleEndian?4278190080:255,g=function(e){if(Array.isArray(e))return e}(t=d?[0,p]:[p,0])||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{for(i=(r=r.call(e)).next;!(c=(n=i.call(r)).done)&&(s.push(n.value),2!==s.length);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(t)||function(e,t){if(e){if("string"==typeof e)return a(e,2);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,2):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),v=g[0],y=g[1],m=l>>3,b=7&l,w=r.length;s=new Uint32Array(s.buffer);for(var k=0;ke.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.incrementalUpdate=function(e){var t=e.originalData,r=e.xrefInfo,s=e.newRefs,u=e.xref,h=void 0===u?null:u,g=e.hasXfa,v=void 0!==g&&g,b=e.xfaDatasetsRef,w=void 0===b?null:b,k=e.hasXfaDatasetsEntry,S=void 0!==k&&k,x=e.needAppearances,O=e.acroFormRef,A=void 0===O?null:O,C=e.acroForm,F=void 0===C?null:C,P=e.xfaData,T=void 0===P?null:P;(function(e){var t=e.xref,r=e.acroForm,i=e.acroFormRef,o=e.hasXfa,s=e.hasXfaDatasetsEntry,c=e.xfaDatasetsRef,u=e.needAppearances,f=e.newRefs;if(!o||s||c||(0,n.warn)("XFA - Cannot save it"),u||o&&c){var h,p=new a.Dict(t),g=l(r.getKeys());try{for(g.s();!(h=g.n()).done;){var v=h.value;p.set(v,r.getRaw(v))}}catch(e){g.e(e)}finally{g.f()}if(o&&!s){var y=r.get("XFA").slice();y.splice(2,0,"datasets"),y.splice(3,0,c),p.set("XFA",y)}u&&p.set("NeedAppearances",!0);var m=t.encrypt,b=null;m&&(b=m.createCipherTransform(i.num,i.gen));var w=[];d(i,p,w,b),f.push({ref:i,data:w.join("")})}})({xref:h,acroForm:F,acroFormRef:A,hasXfa:v,hasXfaDatasetsEntry:S,xfaDatasetsRef:w,needAppearances:x,newRefs:s}),v&&function(e){var t=e.xfaData,r=e.xfaDatasetsRef,a=e.newRefs,s=e.xref;null===t&&(t=function(e,t){var r,a=new o.SimpleXMLParser({hasAttributes:!0}).parseFromString(e),s=l(t);try{for(s.s();!(r=s.n()).done;){var c=r.value.xfa;if(c){var u=c.path,f=c.value;if(u){var h=a.documentElement.searchNode((0,i.parseXFAPath)(u),0);h?Array.isArray(f)?h.childNodes=f.map((function(e){return new o.SimpleDOMNode("value",e)})):h.childNodes=[new o.SimpleDOMNode("#text",f)]:(0,n.warn)("Node not found for path: ".concat(u))}}}}catch(e){s.e(e)}finally{s.f()}var d=[];return a.documentElement.dump(d),d.join("")}(s.fetchIfRef(r).getString(),a));var c=s.encrypt;c&&(t=c.createCipherTransform(r.num,r.gen).encryptString(t));var u="".concat(r.num," ").concat(r.gen," obj\\n")+"<< /Type /EmbeddedFile /Length ".concat(t.length,">>\\nstream\\n")+t+"\\nendstream\\nendobj\\n";a.push({ref:r,data:u})}({xfaData:T,xfaDatasetsRef:w,newRefs:s,xref:h});var I,E,j=new a.Dict(null),M=r.newRef,_=t.at(-1);10===_||13===_?(I=[],E=t.length):(I=["\\n"],E=t.length+1),j.set("Size",M.num+1),j.set("Prev",r.startXRef),j.set("Type",a.Name.get("XRef")),null!==r.rootRef&&j.set("Root",r.rootRef),null!==r.infoRef&&j.set("Info",r.infoRef),null!==r.encryptRef&&j.set("Encrypt",r.encryptRef),s.push({ref:M,data:""});var L,R=[[0,1,65535]],N=[0,1],D=0,B=l(s=s.sort((function(e,t){return e.ref.num-t.ref.num})));try{for(B.s();!(L=B.n()).done;){var U=L.value,$=U.ref,X=U.data;D=Math.max(D,E),R.push([1,E,Math.min($.gen,65535)]),E+=X.length,N.push($.num,1),I.push(X)}}catch(e){B.e(e)}finally{B.f()}if(j.set("Index",N),Array.isArray(r.fileIds)&&r.fileIds.length>0){var H=function(e,t){for(var r=Math.floor(Date.now()/1e3),a=t.filename||"",i=[r.toString(),a,e.toString()],o=i.reduce((function(e,t){return e+t.length}),0),s=0,u=Object.values(t.info);s=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r>")}function g(e,t,r){p(e.dict,t,r),t.push(" stream\\n");var n=e.getString();null!==r&&(n=r.encryptString(n)),t.push(n,"\\nendstream")}function v(e,t,r){e instanceof a.Name?t.push("/".concat((0,i.escapePDFName)(e.name))):e instanceof a.Ref?t.push("".concat(e.num," ").concat(e.gen," R")):Array.isArray(e)?function(e,t,r){t.push("[");var n,a=!0,i=l(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;a?a=!1:t.push(" "),v(o,t,r)}}catch(e){i.e(e)}finally{i.f()}t.push("]")}(e,t,r):"string"==typeof e?(null!==r&&(e=r.encryptString(e)),t.push("(".concat((0,i.escapeString)(e),")"))):"number"==typeof e?t.push((0,i.numberToString)(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof a.Dict?p(e,t,r):e instanceof s.BaseStream?g(e,t,r):null===e?t.push("null"):(0,n.warn)("Unhandled value in writer: ".concat(u(e),", please file a bug."))}function y(e,t,r,n){for(var a=t+r-1;a>r-1;a--)n[a]=255&e,e>>=8;return r+t}function m(e,t,r){for(var n=0,a=e.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.XMLParserErrorCode=t.XMLParserBase=t.SimpleXMLParser=t.SimpleDOMNode=void 0;var n=r(135);function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=c(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return t.onResolveEntity(r)}))}},{key:"_parseContent",value:function(e,t){var r=[],n=t;function a(){for(;n"!==e[n]&&"/"!==e[n];)++n;var i=e.substring(t,n);for(a();n"!==e[n]&&"/"!==e[n]&&"?"!==e[n];){a();for(var o,s="";n"!==e[r]&&"?"!==e[r]&&"/"!==e[r];)++r;var n=e.substring(t,r);!function(){for(;r"!==e[r+1]);)++r;return{name:n,value:e.substring(a,r),parsed:r-t}}},{key:"parseXml",value:function(e){for(var t=0;t",r))<0)return void this.onError(p.UnterminatedElement);this.onEndElement(e.substring(r,n)),r=n+1;break;case"?":++r;var a=this._parseProcessingInstruction(e,r);if("?>"!==e.substring(r+a.parsed,r+a.parsed+2))return void this.onError(p.UnterminatedXmlDeclaration);this.onPi(a.name,a.value),r+=a.parsed+2;break;case"!":if("--"===e.substring(r+1,r+3)){if((n=e.indexOf("--\\x3e",r+3))<0)return void this.onError(p.UnterminatedComment);this.onComment(e.substring(r+3,n)),r=n+3}else if("[CDATA["===e.substring(r+1,r+8)){if((n=e.indexOf("]]>",r+8))<0)return void this.onError(p.UnterminatedCdat);this.onCdata(e.substring(r+8,n)),r=n+3}else{if("DOCTYPE"!==e.substring(r+1,r+8))return void this.onError(p.MalformedElement);var i=e.indexOf("[",r+8),o=!1;if((n=e.indexOf(">",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);if(i>0&&n>i){if((n=e.indexOf("]>",r+8))<0)return void this.onError(p.UnterminatedDoctypeDeclaration);o=!0}var s=e.substring(r+8,n+(o?1:0));this.onDoctype(s),r=n+(o?2:1)}break;default:var c=this._parseContent(e,r);if(null===c)return void this.onError(p.MalformedElement);var u=!1;if("/>"===e.substring(r+c.parsed,r+c.parsed+2))u=!0;else if(">"!==e.substring(r+c.parsed,r+c.parsed+1))return void this.onError(p.UnterminatedElement);this.onBeginElement(c.name,c.attributes,u),r+=c.parsed+(u?2:1)}}else{for(;r0}},{key:"searchNode",value:function(e,t){if(t>=e.length)return this;for(var r=e[t],n=[],a=this;;){if(r.name===a.nodeName){if(0!==r.pos){if(0===n.length)return null;var i,c=0,u=o(s(n.pop(),1)[0].childNodes);try{for(u.s();!(i=u.n()).done;){var l=i.value;if(r.name===l.nodeName){if(c===r.pos)return l.searchNode(e,t+1);c++}}}catch(e){u.e(e)}finally{u.f()}return a.searchNode(e,t+1)}var f=a.searchNode(e,t+1);if(null!==f)return f}if(a.childNodes&&0!==a.childNodes.length)n.push([a,0]),a=a.childNodes[0];else{if(0===n.length)return null;for(;0!==n.length;){var h=s(n.pop(),2),d=h[0],p=h[1]+1;if(p");var i,s=o(this.childNodes);try{for(s.s();!(i=s.n()).done;)i.value.dump(e)}catch(e){s.e(e)}finally{s.f()}e.push(""))}else this.nodeValue?e.push(">".concat((0,n.encodeToXmlString)(this.nodeValue),"")):e.push("/>")}else e.push((0,n.encodeToXmlString)(this.nodeValue))}}]),e}();t.SimpleDOMNode=y;var m=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&a(e,t)}(c,e);var t,r,n=(t=c,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=i(t);if(r){var a=i(this).constructor;e=Reflect.construct(n,arguments,a)}else e=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function c(e){var t,r=e.hasAttributes,a=void 0!==r&&r,i=e.lowerCaseName,o=void 0!==i&&i;return f(this,c),(t=n.call(this))._currentFragment=null,t._stack=null,t._errorCode=p.NoError,t._hasAttributes=a,t._lowerCaseName=o,t}return d(c,[{key:"parseFromString",value:function(e){if(this._currentFragment=[],this._stack=[],this._errorCode=p.NoError,this.parseXml(e),this._errorCode===p.NoError){var t=s(this._currentFragment,1)[0];if(t)return{documentElement:t}}}},{key:"onText",value:function(e){if(!function(e){for(var t=0,r=e.length;t{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSHA256=t.calculateMD5=t.PDF20=t.PDF17=t.CipherTransformFactory=t.ARCFourCipher=t.AES256Cipher=t.AES128Cipher=void 0,t.calculateSHA384=k,t.calculateSHA512=void 0;var n=r(2),a=r(134),i=r(197);function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function c(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=u(e);if(t){var a=u(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;r>5&255,l[n++]=r>>13&255,l[n++]=r>>21&255,l[n++]=r>>>29&255,l[n++]=0,l[n++]=0,l[n++]=0;var h=new Int32Array(16);for(n=0;n>>32-x)|0,d=k}i=i+d|0,o=o+p|0,s=s+y|0,c=c+m|0}return new Uint8Array([255&i,i>>8&255,i>>16&255,i>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255,255&c,c>>8&255,c>>16&255,c>>>24&255])});t.calculateMD5=y;var m=function(){function e(t,r){f(this,e),this.high=0|t,this.low=0|r}return d(e,[{key:"and",value:function(e){this.high&=e.high,this.low&=e.low}},{key:"xor",value:function(e){this.high^=e.high,this.low^=e.low}},{key:"or",value:function(e){this.high|=e.high,this.low|=e.low}},{key:"shiftRight",value:function(e){e>=32?(this.low=this.high>>>e-32|0,this.high=0):(this.low=this.low>>>e|this.high<<32-e,this.high=this.high>>>e|0)}},{key:"shiftLeft",value:function(e){e>=32?(this.high=this.low<>>32-e,this.low<<=e)}},{key:"rotateRight",value:function(e){var t,r;32&e?(r=this.low,t=this.high):(t=this.low,r=this.high),e&=31,this.low=t>>>e|r<<32-e,this.high=r>>>e|t<<32-e}},{key:"not",value:function(){this.high=~this.high,this.low=~this.low}},{key:"add",value:function(e){var t=(this.low>>>0)+(e.low>>>0),r=(this.high>>>0)+(e.high>>>0);t>4294967295&&(r+=1),this.low=0|t,this.high=0|r}},{key:"copyTo",value:function(e,t){e[t]=this.high>>>24&255,e[t+1]=this.high>>16&255,e[t+2]=this.high>>8&255,e[t+3]=255&this.high,e[t+4]=this.low>>>24&255,e[t+5]=this.low>>16&255,e[t+6]=this.low>>8&255,e[t+7]=255&this.low}},{key:"assign",value:function(e){this.high=e.high,this.low=e.low}}]),e}(),b=function(){function e(e,t){return e>>>t|e<<32-t}function t(e,t,r){return e&t^~e&r}function r(e,t,r){return e&t^e&r^t&r}function n(t){return e(t,2)^e(t,13)^e(t,22)}function a(t){return e(t,6)^e(t,11)^e(t,25)}function i(t){return e(t,7)^e(t,18)^t>>>3}var o=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function(s,c,u){var l,f,h=1779033703,d=3144134277,p=1013904242,g=2773480762,v=1359893119,y=2600822924,m=528734635,b=1541459225,w=64*Math.ceil((u+9)/64),k=new Uint8Array(w);for(l=0;l>>29&255,k[l++]=u>>21&255,k[l++]=u>>13&255,k[l++]=u>>5&255,k[l++]=u<<3&255;var x,O=new Uint32Array(64);for(l=0;l>>10)+O[f-7]+i(O[f-15])+O[f-16];var A=h,C=d,F=p,P=g,T=v,I=y,E=m,j=b,M=void 0,_=void 0;for(f=0;f<64;++f)M=j+a(T)+t(T,I,E)+o[f]+O[f],_=n(A)+r(A,C,F),j=E,E=I,I=T,T=P+M|0,P=F,F=C,C=A,A=M+_|0;h=h+A|0,d=d+C|0,p=p+F|0,g=g+P|0,v=v+T|0,y=y+I|0,m=m+E|0,b=b+j|0}return new Uint8Array([h>>24&255,h>>16&255,h>>8&255,255&h,d>>24&255,d>>16&255,d>>8&255,255&d,p>>24&255,p>>16&255,p>>8&255,255&p,g>>24&255,g>>16&255,g>>8&255,255&g,v>>24&255,v>>16&255,v>>8&255,255&v,y>>24&255,y>>16&255,y>>8&255,255&y,m>>24&255,m>>16&255,m>>8&255,255&m,b>>24&255,b>>16&255,b>>8&255,255&b])}}();t.calculateSHA256=b;var w=function(){function e(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.not(),a.and(n),e.xor(a)}function t(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.and(n),e.xor(a),a.assign(r),a.and(n),e.xor(a)}function r(e,t,r){e.assign(t),e.rotateRight(28),r.assign(t),r.rotateRight(34),e.xor(r),r.assign(t),r.rotateRight(39),e.xor(r)}function n(e,t,r){e.assign(t),e.rotateRight(14),r.assign(t),r.rotateRight(18),e.xor(r),r.assign(t),r.rotateRight(41),e.xor(r)}function a(e,t,r){e.assign(t),e.rotateRight(1),r.assign(t),r.rotateRight(8),e.xor(r),r.assign(t),r.shiftRight(7),e.xor(r)}function i(e,t,r){e.assign(t),e.rotateRight(19),r.assign(t),r.rotateRight(61),e.xor(r),r.assign(t),r.shiftRight(6),e.xor(r)}var o=[new m(1116352408,3609767458),new m(1899447441,602891725),new m(3049323471,3964484399),new m(3921009573,2173295548),new m(961987163,4081628472),new m(1508970993,3053834265),new m(2453635748,2937671579),new m(2870763221,3664609560),new m(3624381080,2734883394),new m(310598401,1164996542),new m(607225278,1323610764),new m(1426881987,3590304994),new m(1925078388,4068182383),new m(2162078206,991336113),new m(2614888103,633803317),new m(3248222580,3479774868),new m(3835390401,2666613458),new m(4022224774,944711139),new m(264347078,2341262773),new m(604807628,2007800933),new m(770255983,1495990901),new m(1249150122,1856431235),new m(1555081692,3175218132),new m(1996064986,2198950837),new m(2554220882,3999719339),new m(2821834349,766784016),new m(2952996808,2566594879),new m(3210313671,3203337956),new m(3336571891,1034457026),new m(3584528711,2466948901),new m(113926993,3758326383),new m(338241895,168717936),new m(666307205,1188179964),new m(773529912,1546045734),new m(1294757372,1522805485),new m(1396182291,2643833823),new m(1695183700,2343527390),new m(1986661051,1014477480),new m(2177026350,1206759142),new m(2456956037,344077627),new m(2730485921,1290863460),new m(2820302411,3158454273),new m(3259730800,3505952657),new m(3345764771,106217008),new m(3516065817,3606008344),new m(3600352804,1432725776),new m(4094571909,1467031594),new m(275423344,851169720),new m(430227734,3100823752),new m(506948616,1363258195),new m(659060556,3750685593),new m(883997877,3785050280),new m(958139571,3318307427),new m(1322822218,3812723403),new m(1537002063,2003034995),new m(1747873779,3602036899),new m(1955562222,1575990012),new m(2024104815,1125592928),new m(2227730452,2716904306),new m(2361852424,442776044),new m(2428436474,593698344),new m(2756734187,3733110249),new m(3204031479,2999351573),new m(3329325298,3815920427),new m(3391569614,3928383900),new m(3515267271,566280711),new m(3940187606,3454069534),new m(4118630271,4000239992),new m(116418474,1914138554),new m(174292421,2731055270),new m(289380356,3203993006),new m(460393269,320620315),new m(685471733,587496836),new m(852142971,1086792851),new m(1017036298,365543100),new m(1126000580,2618297676),new m(1288033470,3409855158),new m(1501505948,4234509866),new m(1607167915,987167468),new m(1816402316,1246189591)];return function(s,c,u){var l,f,h,d,p,g,v,y,b=arguments.length>3&&void 0!==arguments[3]&&arguments[3];b?(l=new m(3418070365,3238371032),f=new m(1654270250,914150663),h=new m(2438529370,812702999),d=new m(355462360,4144912697),p=new m(1731405415,4290775857),g=new m(2394180231,1750603025),v=new m(3675008525,1694076839),y=new m(1203062813,3204075428)):(l=new m(1779033703,4089235720),f=new m(3144134277,2227873595),h=new m(1013904242,4271175723),d=new m(2773480762,1595750129),p=new m(1359893119,2917565137),g=new m(2600822924,725511199),v=new m(528734635,4215389547),y=new m(1541459225,327033209));var w,k,S=128*Math.ceil((u+17)/128),x=new Uint8Array(S);for(w=0;w>>29&255,x[w++]=u>>21&255,x[w++]=u>>13&255,x[w++]=u>>5&255,x[w++]=u<<3&255;var A=new Array(80);for(w=0;w<80;w++)A[w]=new m(0,0);var C,F,P=new m(0,0),T=new m(0,0),I=new m(0,0),E=new m(0,0),j=new m(0,0),M=new m(0,0),_=new m(0,0),L=new m(0,0),R=new m(0,0),N=new m(0,0),D=new m(0,0),B=new m(0,0);for(w=0;w=1;--c){r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var u=0;u<16;++u)i[u]=this._inv_s[i[u]];for(var l=0,f=16*c;l<16;++l,++f)i[l]^=t[f];for(var h=0;h<16;h+=4){var d=this._mix[i[h]],p=this._mix[i[h+1]],g=this._mix[i[h+2]],v=this._mix[i[h+3]];r=d^p>>>8^p<<24^g>>>16^g<<16^v>>>24^v<<8,i[h]=r>>>24&255,i[h+1]=r>>16&255,i[h+2]=r>>8&255,i[h+3]=255&r}}r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(var y=0;y<16;++y)i[y]=this._inv_s[i[y]],i[y]^=t[y];return i}},{key:"_encrypt",value:function(e,t){var r,n,a,i=this._s,o=new Uint8Array(16);o.set(e);for(var s=0;s<16;++s)o[s]^=t[s];for(var c=1;c=p;--d)if(f[d]!==h){h=0;break}l-=h,i[i.length-1]=f.subarray(0,16-h)}}for(var g=new Uint8Array(l),v=0,y=0,m=i.length;v2&&void 0!==arguments[2]?arguments[2]:null,n=e.length,a=this.buffer,i=this.bufferPosition;if(r)this.iv=r;else{for(var o=0;i<16&&o=256&&(s=255&(27^s)));for(var l=0;l<4;++l)r[c]=n^=r[c-32],r[++c]=a^=r[c-32],r[++c]=i^=r[c-32],r[++c]=o^=r[c-32],c++}return r}}]),r}(x);t.AES256Cipher=A;var C=function(){function e(){f(this,e)}return d(e,[{key:"checkOwnerPassword",value:function(e,t,r,a){var i=new Uint8Array(e.length+56);i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length);var o=b(i,0,i.length);return(0,n.isArrayEqual)(o,a)}},{key:"checkUserPassword",value:function(e,t,r){var a=new Uint8Array(e.length+8);a.set(e,0),a.set(t,e.length);var i=b(a,0,a.length);return(0,n.isArrayEqual)(i,r)}},{key:"getOwnerKey",value:function(e,t,r,n){var a=new Uint8Array(e.length+56);a.set(e,0),a.set(t,e.length),a.set(r,e.length+t.length);var i=b(a,0,a.length);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(e,t,r){var n=new Uint8Array(e.length+8);n.set(e,0),n.set(t,e.length);var a=b(n,0,n.length);return new A(a).decryptBlock(r,!1,new Uint8Array(16))}}]),e}();t.PDF17=C;var F=function(){function e(e,t,r){for(var n=b(t,0,t.length).subarray(0,32),a=[0],i=0;i<64||a.at(-1)>i-32;){var o=e.length+n.length+r.length,s=new Uint8Array(o),c=0;s.set(e,c),c+=e.length,s.set(n,c),c+=n.length,s.set(r,c);for(var u=new Uint8Array(64*o),l=0,f=0;l<64;l++,f+=o)u.set(s,f);var h=(a=new O(n.subarray(0,16)).encrypt(u,n.subarray(16,32))).slice(0,16).reduce((function(e,t){return e+t}),0)%3;0===h?n=b(a,0,a.length):1===h?n=k(a,0,a.length):2===h&&(n=w(a,0,a.length)),i++}return n.subarray(0,32)}return function(){function t(){f(this,t)}return d(t,[{key:"hash",value:function(t,r,n){return e(t,r,n)}},{key:"checkOwnerPassword",value:function(t,r,a,i){var o=new Uint8Array(t.length+56);o.set(t,0),o.set(r,t.length),o.set(a,t.length+r.length);var s=e(t,o,a);return(0,n.isArrayEqual)(s,i)}},{key:"checkUserPassword",value:function(t,r,a){var i=new Uint8Array(t.length+8);i.set(t,0),i.set(r,t.length);var o=e(t,i,[]);return(0,n.isArrayEqual)(o,a)}},{key:"getOwnerKey",value:function(t,r,n,a){var i=new Uint8Array(t.length+56);i.set(t,0),i.set(r,t.length),i.set(n,t.length+r.length);var o=e(t,i,n);return new A(o).decryptBlock(a,!1,new Uint8Array(16))}},{key:"getUserKey",value:function(t,r,n){var a=new Uint8Array(t.length+8);a.set(t,0),a.set(r,t.length);var i=e(t,a,[]);return new A(i).decryptBlock(n,!1,new Uint8Array(16))}}]),t}()}();t.PDF20=F;var P=function(){function e(t,r){f(this,e),this.StringCipherConstructor=t,this.StreamCipherConstructor=r}return d(e,[{key:"createStream",value:function(e,t){var r=new this.StreamCipherConstructor;return new i.DecryptStream(e,t,(function(e,t){return r.decryptBlock(e,t)}))}},{key:"decryptString",value:function(e){var t=new this.StringCipherConstructor,r=(0,n.stringToBytes)(e);return r=t.decryptBlock(r,!0),(0,n.bytesToString)(r)}},{key:"encryptString",value:function(e){var t=new this.StringCipherConstructor;if(t instanceof x){var r=16-e.length%16;e+=String.fromCharCode(r).repeat(r);var a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(var i=0;i<16;i++)a[i]=Math.floor(256*Math.random());var o=(0,n.stringToBytes)(e);o=t.encrypt(o,a);var s=new Uint8Array(16+o.length);return s.set(a),s.set(o,16),(0,n.bytesToString)(s)}var c=(0,n.stringToBytes)(e);return c=t.encrypt(c),(0,n.bytesToString)(c)}}]),e}(),T=function(){var e=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function t(t,r,n,a,i,o,s,c){var u,l,f=40+n.length+t.length,h=new Uint8Array(f),d=0;if(r)for(l=Math.min(32,r.length);d>8&255,h[d++]=i>>16&255,h[d++]=i>>>24&255,u=0,l=t.length;u=4&&!c&&(h[d++]=255,h[d++]=255,h[d++]=255,h[d++]=255);var g=y(h,0,d),v=s>>3;if(o>=3)for(u=0;u<50;++u)g=y(g,0,v);var m,b=g.subarray(0,v);if(o>=3){for(d=0;d<32;++d)h[d]=e[d];for(u=0,l=t.length;u3&&void 0!==arguments[3]&&arguments[3],i=new Uint8Array(r.length+9),o=r.length;for(n=0;n>8&255,i[n++]=e>>16&255,i[n++]=255&t,i[n++]=t>>8&255,a&&(i[n++]=115,i[n++]=65,i[n++]=108,i[n++]=84),y(i,0,n).subarray(0,Math.min(r.length+5,16))}function o(e,t,r,o,s){if(!(t instanceof a.Name))throw new n.FormatError("Invalid crypt filter name.");var c,u=e.get(t.name);if(null!=u&&(c=u.get("CFM")),!c||"None"===c.name)return function(){return new S};if("V2"===c.name)return function(){return new p(i(r,o,s,!1))};if("AESV2"===c.name)return function(){return new O(i(r,o,s,!0))};if("AESV3"===c.name)return function(){return new A(s)};throw new n.FormatError("Unknown crypto method")}var s=function(){function s(i,o,c){f(this,s);var u=i.get("Filter");if(!(0,a.isName)(u,"Standard"))throw new n.FormatError("unknown encryption method");this.filterName=u.name,this.dict=i;var l=i.get("V");if(!Number.isInteger(l)||1!==l&&2!==l&&4!==l&&5!==l)throw new n.FormatError("unsupported encryption algorithm");this.algorithm=l;var h=i.get("Length");if(!h)if(l<=3)h=40;else{var d=i.get("CF"),g=i.get("StmF");if(d instanceof a.Dict&&g instanceof a.Name){d.suppressEncryption=!0;var v=d.get(g.name);(h=v&&v.get("Length")||128)<40&&(h<<=3)}}if(!Number.isInteger(h)||h<40||h%8!=0)throw new n.FormatError("invalid key length");var m=(0,n.stringToBytes)(i.get("O")).subarray(0,32),b=(0,n.stringToBytes)(i.get("U")).subarray(0,32),w=i.get("P"),k=i.get("R"),S=(4===l||5===l)&&!1!==i.get("EncryptMetadata");this.encryptMetadata=S;var x,O,A=(0,n.stringToBytes)(o);if(c){if(6===k)try{c=(0,n.utf8StringToString)(c)}catch(e){(0,n.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.")}x=(0,n.stringToBytes)(c)}if(5!==l)O=t(A,x,m,b,w,k,h,S);else{var P=(0,n.stringToBytes)(i.get("O")).subarray(32,40),T=(0,n.stringToBytes)(i.get("O")).subarray(40,48),I=(0,n.stringToBytes)(i.get("U")).subarray(0,48),E=(0,n.stringToBytes)(i.get("U")).subarray(32,40),j=(0,n.stringToBytes)(i.get("U")).subarray(40,48),M=(0,n.stringToBytes)(i.get("OE")),_=(0,n.stringToBytes)(i.get("UE"));(0,n.stringToBytes)(i.get("Perms")),O=function(e,t,r,n,a,i,o,s,c,u,l,f){if(t){var h=Math.min(127,t.length);t=t.subarray(0,h)}else t=[];var d;return(d=6===e?new F:new C).checkUserPassword(t,s,o)?d.getUserKey(t,c,l):t.length&&d.checkOwnerPassword(t,n,i,r)?d.getOwnerKey(t,a,i,u):null}(k,x,m,P,T,I,b,E,j,M,_)}if(!O&&!c)throw new n.PasswordException("No password given",n.PasswordResponses.NEED_PASSWORD);if(!O&&c){var L=function(t,r,n,a){for(var i=new Uint8Array(32),o=0,s=Math.min(32,t.length);o>3;if(n>=3)for(c=0;c<50;++c)l=y(l,0,l.length);if(n>=3){u=r;var h=new Uint8Array(f);for(c=19;c>=0;c--){for(var d=0;d=4){var R=i.get("CF");R instanceof a.Dict&&(R.suppressEncryption=!0),this.cf=R,this.stmf=i.get("StmF")||r,this.strf=i.get("StrF")||r,this.eff=i.get("EFF")||this.stmf}}return d(s,[{key:"createCipherTransform",value:function(e,t){if(4===this.algorithm||5===this.algorithm)return new P(o(this.cf,this.strf,e,t,this.encryptionKey),o(this.cf,this.stmf,e,t,this.encryptionKey));var r=i(e,t,this.encryptionKey,!1),n=function(){return new p(r)};return new P(n,n)}}]),s}();return s}();t.CipherTransformFactory=T},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(e,t){for(var r=0;r0;e=(0,this.decrypt)(e,!t);var r=this.bufferLength,n=r+e.length;this.ensureBuffer(n).set(e,r),this.bufferLength=n}else this.eof=!0}}])&&a(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),l}(r(148).DecodeStream);t.DecryptStream=s},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Catalog=void 0;var n=r(135),a=r(2),i=r(134),o=r(199),s=r(136),c=r(200),u=r(143),l=r(201),f=r(188),h=r(202),d=r(203);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function g(){g=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==p(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function v(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){v(i,n,a,o,s,"next",e)}function s(e){v(i,n,a,o,s,"throw",e)}o(void 0)}))}}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||w(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=w(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function w(e,t){if(e){if("string"==typeof e)return k(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(e,t):void 0}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch Collection entry; assuming no collection is present.")}return(0,a.shadow)(this,"collection",e)}},{key:"acroForm",get:function(){var e=null;try{var t=this._catDict.get("AcroForm");t instanceof i.Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch AcroForm entry; assuming no forms are present.")}return(0,a.shadow)(this,"acroForm",e)}},{key:"acroFormRef",get:function(){var e=this._catDict.getRaw("AcroForm");return(0,a.shadow)(this,"acroFormRef",e instanceof i.Ref?e:null)}},{key:"metadata",get:function(){var e=this._catDict.getRaw("Metadata");if(!(e instanceof i.Ref))return(0,a.shadow)(this,"metadata",null);var t=null;try{var r=!(this.xref.encrypt&&this.xref.encrypt.encryptMetadata),o=this.xref.fetch(e,r);if(o instanceof s.BaseStream&&o.dict instanceof i.Dict){var c=o.dict.get("Type"),u=o.dict.get("Subtype");if((0,i.isName)(c,"Metadata")&&(0,i.isName)(u,"XML")){var l=(0,a.stringToUTF8String)(o.getString());l&&(t=new h.MetadataParser(l).serializable)}}}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)('Skipping invalid Metadata: "'.concat(e,'".'))}return(0,a.shadow)(this,"metadata",t)}},{key:"markInfo",get:function(){var e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read mark info.")}return(0,a.shadow)(this,"markInfo",e)}},{key:"_readMarkInfo",value:function(){var e=this._catDict.get("MarkInfo");if(!(e instanceof i.Dict))return null;var t={Marked:!1,UserProperties:!1,Suspects:!1};for(var r in t){var n=e.get(r);"boolean"==typeof n&&(t[r]=n)}return t}},{key:"structTreeRoot",get:function(){var e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable read to structTreeRoot info.")}return(0,a.shadow)(this,"structTreeRoot",e)}},{key:"_readStructTreeRoot",value:function(){var e=this._catDict.get("StructTreeRoot");if(!(e instanceof i.Dict))return null;var t=new d.StructTreeRoot(e);return t.init(),t}},{key:"toplevelPagesDict",get:function(){var e=this._catDict.get("Pages");if(!(e instanceof i.Dict))throw new a.FormatError("Invalid top-level pages dictionary.");return(0,a.shadow)(this,"toplevelPagesDict",e)}},{key:"documentOutline",get:function(){var e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read document outline.")}return(0,a.shadow)(this,"documentOutline",e)}},{key:"_readDocumentOutline",value:function(){var t=this._catDict.get("Outlines");if(!(t instanceof i.Dict))return null;if(!((t=t.getRaw("First"))instanceof i.Ref))return null;var r={items:[]},n=[{obj:t,parent:r}],o=new i.RefSet;o.put(t);for(var s=this.xref,c=new Uint8ClampedArray(3);n.length>0;){var l=n.shift(),f=s.fetchIfRef(l.obj);if(null!==f){if(!f.has("Title"))throw new a.FormatError("Invalid outline item encountered.");var h={url:null,dest:null,action:null};e.parseDestDictionary({destDict:f,resultObj:h,docBaseUrl:this.pdfManager.docBaseUrl,docAttachments:this.attachments});var d=f.get("Title"),p=f.get("F")||0,g=f.getArray("C"),v=f.get("Count"),y=c;!Array.isArray(g)||3!==g.length||0===g[0]&&0===g[1]&&0===g[2]||(y=u.ColorSpace.singletons.rgb.getRgb(g,0));var m={action:h.action,attachment:h.attachment,dest:h.dest,url:h.url,unsafeUrl:h.unsafeUrl,newWindow:h.newWindow,setOCGState:h.setOCGState,title:(0,a.stringToPDFString)(d),color:y,count:Number.isInteger(v)?v:void 0,bold:!!(2&p),italic:!!(1&p),items:[]};l.parent.items.push(m),(t=f.getRaw("First"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:m}),o.put(t)),(t=f.getRaw("Next"))instanceof i.Ref&&!o.has(t)&&(n.push({obj:t,parent:l.parent}),o.put(t))}}return r.items.length>0?r.items:null}},{key:"permissions",get:function(){var e=null;try{e=this._readPermissions()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read permissions.")}return(0,a.shadow)(this,"permissions",e)}},{key:"_readPermissions",value:function(){var e=this.xref.trailer.get("Encrypt");if(!(e instanceof i.Dict))return null;var t=e.get("P");if("number"!=typeof t)return null;t+=Math.pow(2,32);var r=[];for(var n in a.PermissionFlag){var o=a.PermissionFlag[n];t&o&&r.push(o)}return r}},{key:"optionalContentConfig",get:function(){var e=null;try{var t=this._catDict.get("OCProperties");if(!t)return(0,a.shadow)(this,"optionalContentConfig",null);var r=t.get("D");if(!r)return(0,a.shadow)(this,"optionalContentConfig",null);var o=t.get("OCGs");if(!Array.isArray(o))return(0,a.shadow)(this,"optionalContentConfig",null);var s,c=[],u=[],l=b(o);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(f instanceof i.Ref){u.push(f);var h=this.xref.fetchIfRef(f);c.push({id:f.toString(),name:"string"==typeof h.get("Name")?(0,a.stringToPDFString)(h.get("Name")):null,intent:"string"==typeof h.get("Intent")?(0,a.stringToPDFString)(h.get("Intent")):null})}}}catch(e){l.e(e)}finally{l.f()}(e=this._readOptionalContentConfig(r,u)).groups=c}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read optional content config: ".concat(e))}return(0,a.shadow)(this,"optionalContentConfig",e)}},{key:"_readOptionalContentConfig",value:function(e,t){function r(e){var r=[];if(Array.isArray(e)){var n,a=b(e);try{for(a.s();!(n=a.n()).done;){var o=n.value;o instanceof i.Ref&&t.includes(o)&&r.push(o.toString())}}catch(e){a.e(e)}finally{a.f()}}return r}function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!Array.isArray(e))return null;var n,a=[],s=b(e);try{for(s.s();!(n=s.n()).done;){var u=n.value;if(u instanceof i.Ref&&t.includes(u))c.put(u),a.push(u.toString());else{var l=o(u,r);l&&a.push(l)}}}catch(e){s.e(e)}finally{s.f()}if(r>0)return a;var f,h=[],d=b(t);try{for(d.s();!(f=d.n()).done;){var p=f.value;c.has(p)||h.push(p.toString())}}catch(e){d.e(e)}finally{d.f()}return h.length&&a.push({name:null,order:h}),a}function o(e,t){if(++t>u)return(0,a.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;var r=s.fetchIfRef(e);if(!Array.isArray(r))return null;var i=s.fetchIfRef(r[0]);if("string"!=typeof i)return null;var o=n(r.slice(1),t);return o&&o.length?{name:(0,a.stringToPDFString)(i),order:o}:null}var s=this.xref,c=new i.RefSet,u=10;return{name:"string"==typeof e.get("Name")?(0,a.stringToPDFString)(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?(0,a.stringToPDFString)(e.get("Creator")):null,baseState:e.get("BaseState")instanceof i.Name?e.get("BaseState").name:null,on:r(e.get("ON")),off:r(e.get("OFF")),order:n(e.get("Order")),groups:null}}},{key:"setActualNumPages",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._actualNumPages=e}},{key:"hasActualNumPages",get:function(){return null!==this._actualNumPages}},{key:"_pagesCount",get:function(){var e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new a.FormatError("Page count in top-level pages dictionary is not an integer.");return(0,a.shadow)(this,"_pagesCount",e)}},{key:"numPages",get:function(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}},{key:"destinations",get:function(){var e=this._readDests(),t=Object.create(null);if(e instanceof o.NameTree){var r,n=b(e.getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=x(s[1]);u&&(t[(0,a.stringToPDFString)(c)]=u)}}catch(e){n.e(e)}finally{n.f()}}else e instanceof i.Dict&&e.forEach((function(e,r){var n=x(r);n&&(t[e]=n)}));return(0,a.shadow)(this,"destinations",t)}},{key:"getDestination",value:function(e){var t=this._readDests();if(t instanceof o.NameTree){var r=x(t.get(e));if(r)return r;var n=this.destinations[e];if(n)return(0,a.warn)('Found "'.concat(e,'" at an incorrect position in the NameTree.')),n}else if(t instanceof i.Dict){var s=x(t.get(e));if(s)return s}return null}},{key:"_readDests",value:function(){var e=this._catDict.get("Names");return e&&e.has("Dests")?new o.NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}},{key:"pageLabels",get:function(){var e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read page labels.")}return(0,a.shadow)(this,"pageLabels",e)}},{key:"_readPageLabels",value:function(){var e=this._catDict.getRaw("PageLabels");if(!e)return null;for(var t=new Array(this.numPages),r=null,s="",c=new o.NumberTree(e,this.xref).getAll(),u="",l=1,f=0,h=this.numPages;f=1))throw new a.FormatError("Invalid start in PageLabel dictionary.");l=v}else l=1}switch(r){case"D":u=l;break;case"R":case"r":u=(0,n.toRomanNumerals)(l,"r"===r);break;case"A":case"a":var y="a"===r?97:65,m=l-1;u=String.fromCharCode(y+m%26).repeat(Math.floor(m/26)+1);break;default:if(r)throw new a.FormatError('Invalid style "'.concat(r,'" in PageLabel dictionary.'));u=""}t[f]=s+u,l++}return t}},{key:"pageLayout",get:function(){var e=this._catDict.get("PageLayout"),t="";if(e instanceof i.Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return(0,a.shadow)(this,"pageLayout",t)}},{key:"pageMode",get:function(){var e=this._catDict.get("PageMode"),t="UseNone";if(e instanceof i.Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return(0,a.shadow)(this,"pageMode",t)}},{key:"viewerPreferences",get:function(){var e=this,t=this._catDict.get("ViewerPreferences");if(!(t instanceof i.Dict))return(0,a.shadow)(this,"viewerPreferences",null);var r,n=null,o=b(t.getKeys());try{for(o.s();!(r=o.n()).done;){var s=r.value,c=t.get(s),u=void 0;switch(s){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof c&&(u=c);break;case"NonFullScreenPageMode":if(c instanceof i.Name)switch(c.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":u=c.name;break;default:u="UseNone"}break;case"Direction":if(c instanceof i.Name)switch(c.name){case"L2R":case"R2L":u=c.name;break;default:u="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(c instanceof i.Name)switch(c.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":u=c.name;break;default:u="CropBox"}break;case"PrintScaling":if(c instanceof i.Name)switch(c.name){case"None":case"AppDefault":u=c.name;break;default:u="AppDefault"}break;case"Duplex":if(c instanceof i.Name)switch(c.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":u=c.name;break;default:u="None"}break;case"PrintPageRange":Array.isArray(c)&&c.length%2==0&&c.every((function(t,r,n){return Number.isInteger(t)&&t>0&&(0===r||t>=n[r-1])&&t<=e.numPages}))&&(u=c);break;case"NumCopies":Number.isInteger(c)&&c>0&&(u=c);break;default:(0,a.warn)("Ignoring non-standard key in ViewerPreferences: ".concat(s,"."));continue}void 0!==u?(n||(n=Object.create(null)),n[s]=u):(0,a.warn)('Bad value, for key "'.concat(s,'", in ViewerPreferences: ').concat(c,"."))}}catch(e){o.e(e)}finally{o.f()}return(0,a.shadow)(this,"viewerPreferences",n)}},{key:"openAction",get:function(){var t=this._catDict.get("OpenAction"),r=Object.create(null);if(t instanceof i.Dict){var n=new i.Dict(this.xref);n.set("A",t);var o={url:null,dest:null,action:null};e.parseDestDictionary({destDict:n,resultObj:o}),Array.isArray(o.dest)?r.dest=o.dest:o.action&&(r.action=o.action)}else Array.isArray(t)&&(r.dest=t);return(0,a.shadow)(this,"openAction",(0,a.objectSize)(r)>0?r:null)}},{key:"attachments",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("EmbeddedFiles")){var r,n=b(new o.NameTree(e.getRaw("EmbeddedFiles"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1],f=new l.FileSpec(u,this.xref);t||(t=Object.create(null)),t[(0,a.stringToPDFString)(c)]=f.serializable}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"attachments",t)}},{key:"xfaImages",get:function(){var e=this._catDict.get("Names"),t=null;if(e instanceof i.Dict&&e.has("XFAImages")){var r,n=b(new o.NameTree(e.getRaw("XFAImages"),this.xref).getAll());try{for(n.s();!(r=n.n()).done;){var s=m(r.value,2),c=s[0],u=s[1];t||(t=new i.Dict(this.xref)),t.set((0,a.stringToPDFString)(c),u)}}catch(e){n.e(e)}finally{n.f()}}return(0,a.shadow)(this,"xfaImages",t)}},{key:"_collectJavaScript",value:function(){var e=this._catDict.get("Names"),t=null;function r(e,r){if(r instanceof i.Dict&&(0,i.isName)(r.get("S"),"JavaScript")){var n=r.get("JS");if(n instanceof s.BaseStream)n=n.getString();else if("string"!=typeof n)return;null===t&&(t=new Map),n=(0,a.stringToPDFString)(n).replace(/\\u0000/g,""),t.set(e,n)}}if(e instanceof i.Dict&&e.has("JavaScript")){var n,c=b(new o.NameTree(e.getRaw("JavaScript"),this.xref).getAll());try{for(c.s();!(n=c.n()).done;){var u=m(n.value,2),l=u[0],f=u[1];r((0,a.stringToPDFString)(l),f)}}catch(e){c.e(e)}finally{c.f()}}var h=this._catDict.get("OpenAction");return h&&r("OpenAction",h),t}},{key:"javaScript",get:function(){var e,t=this._collectJavaScript();return(0,a.shadow)(this,"javaScript",t?function(e){if(Array.isArray(e))return k(e)}(e=t.values())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||w(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null)}},{key:"jsActions",get:function(){var e=this._collectJavaScript(),t=(0,n.collectActions)(this.xref,this._catDict,a.DocumentActionEventType);if(e){t||(t=Object.create(null));var r,i=b(e);try{for(i.s();!(r=i.n()).done;){var o=m(r.value,2),s=o[0],c=o[1];s in t?t[s].push(c):t[s]=[c]}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,"jsActions",t)}},{key:"fontFallback",value:(F=y(g().mark((function e(t,r){var n,a,i,o;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(this.fontCache);case 2:n=e.sent,a=b(n),e.prev=4,a.s();case 6:if((i=a.n()).done){e.next=13;break}if((o=i.value).loadedName!==t){e.next=11;break}return o.fallback(r),e.abrupt("return");case 11:e.next=6;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(4),a.e(e.t0);case 18:return e.prev=18,a.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[4,15,18,21]])}))),function(e,t){return F.apply(this,arguments)})},{key:"cleanup",value:(C=y(g().mark((function e(){var t,r,n,a,i=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=i.length>0&&void 0!==i[0]&&i[0],(0,c.clearGlobalCaches)(),this.globalImageCache.clear(t),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.nonBlendModesSet.clear(),e.next=8,Promise.all(this.fontCache);case 8:r=e.sent,n=b(r);try{for(n.s();!(a=n.n()).done;)delete a.value.dict.cacheKey}catch(e){n.e(e)}finally{n.f()}this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear();case 14:case"end":return e.stop()}}),e,this)}))),function(){return C.apply(this,arguments)})},{key:"getPageDict",value:(A=y(g().mark((function e(t){var r,n,o,s,c,u,l,f,h,d,p,v,y,m,b,w;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[this.toplevelPagesDict],n=new i.RefSet,(o=this._catDict.getRaw("Pages"))instanceof i.Ref&&n.put(o),s=this.xref,c=this.pageKidsCountCache,u=this.pageIndexCache,l=0;case 6:if(!r.length){e.next=67;break}if(!((f=r.pop())instanceof i.Ref)){e.next=34;break}if(!((h=c.get(f))>=0&&l+h<=t)){e.next=13;break}return l+=h,e.abrupt("continue",6);case 13:if(!n.has(f)){e.next=15;break}throw new a.FormatError("Pages tree contains circular reference.");case 15:return n.put(f),e.next=18,s.fetchAsync(f);case 18:if(!((d=e.sent)instanceof i.Dict)){e.next=32;break}if(!((p=d.getRaw("Type"))instanceof i.Ref)){e.next=25;break}return e.next=24,s.fetchAsync(p);case 24:p=e.sent;case 25:if(!(0,i.isName)(p,"Page")&&d.has("Kids")){e.next=32;break}if(c.has(f)||c.put(f,1),u.has(f)||u.put(f,l),l!==t){e.next=30;break}return e.abrupt("return",[d,f]);case 30:return l++,e.abrupt("continue",6);case 32:return r.push(d),e.abrupt("continue",6);case 34:if(f instanceof i.Dict){e.next=36;break}throw new a.FormatError("Page dictionary kid reference points to wrong type of object.");case 36:if(v=f.objId,!((y=f.getRaw("Count"))instanceof i.Ref)){e.next=42;break}return e.next=41,s.fetchAsync(y);case 41:y=e.sent;case 42:if(!(Number.isInteger(y)&&y>=0)){e.next=47;break}if(v&&!c.has(v)&&c.put(v,y),!(l+y<=t)){e.next=47;break}return l+=y,e.abrupt("continue",6);case 47:if(!((m=f.getRaw("Kids"))instanceof i.Ref)){e.next=52;break}return e.next=51,s.fetchAsync(m);case 51:m=e.sent;case 52:if(Array.isArray(m)){e.next=64;break}if(!((b=f.getRaw("Type"))instanceof i.Ref)){e.next=58;break}return e.next=57,s.fetchAsync(b);case 57:b=e.sent;case 58:if(!(0,i.isName)(b,"Page")&&f.has("Kids")){e.next=63;break}if(l!==t){e.next=61;break}return e.abrupt("return",[f,null]);case 61:return l++,e.abrupt("continue",6);case 63:throw new a.FormatError("Page dictionary kids object is not an array.");case 64:for(w=m.length-1;w>=0;w--)r.push(m[w]);e.next=6;break;case 67:throw new Error("Page index ".concat(t," not found."));case 68:case"end":return e.stop()}}),e,this)}))),function(e){return A.apply(this,arguments)})},{key:"getAllPageDicts",value:(O=y(g().mark((function e(){var t,r,o,s,c,u,l,f,h,d,p,v,y,m,b,w,k,S,x=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:p=function(e){if(e instanceof n.XRefEntryException&&!t)throw e;t&&r&&0===h&&((0,a.warn)('getAllPageDicts - Skipping invalid first page: "'.concat(e,'".')),e=i.Dict.empty),u.set(h++,[e,null])},d=function(e,t){t&&!f.has(t)&&f.put(t,h),u.set(h++,[e,t])},t=x.length>0&&void 0!==x[0]&&x[0],r=this.pdfManager.evaluatorOptions.ignoreErrors,o=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new i.RefSet,(c=this._catDict.getRaw("Pages"))instanceof i.Ref&&s.put(c),u=new Map,l=this.xref,f=this.pageIndexCache,h=0;case 10:if(!(o.length>0)){e.next=70;break}if(v=o.at(-1),y=v.currentNode,m=v.posInKids,!((b=y.getRaw("Kids"))instanceof i.Ref)){e.next=25;break}return e.prev=15,e.next=18,l.fetchAsync(b);case 18:b=e.sent,e.next=25;break;case 21:return e.prev=21,e.t0=e.catch(15),p(e.t0),e.abrupt("break",70);case 25:if(Array.isArray(b)){e.next=28;break}return p(new a.FormatError("Page dictionary kids object is not an array.")),e.abrupt("break",70);case 28:if(!(m>=b.length)){e.next=31;break}return o.pop(),e.abrupt("continue",10);case 31:if(w=b[m],k=void 0,!(w instanceof i.Ref)){e.next=50;break}if(!s.has(w)){e.next=37;break}return p(new a.FormatError("Pages tree contains circular reference.")),e.abrupt("break",70);case 37:return s.put(w),e.prev=38,e.next=41,l.fetchAsync(w);case 41:k=e.sent,e.next=48;break;case 44:return e.prev=44,e.t1=e.catch(38),p(e.t1),e.abrupt("break",70);case 48:e.next=51;break;case 50:k=w;case 51:if(k instanceof i.Dict){e.next=54;break}return p(new a.FormatError("Page dictionary kid reference points to wrong type of object.")),e.abrupt("break",70);case 54:if(!((S=k.getRaw("Type"))instanceof i.Ref)){e.next=66;break}return e.prev=56,e.next=59,l.fetchAsync(S);case 59:S=e.sent,e.next=66;break;case 62:return e.prev=62,e.t2=e.catch(56),p(e.t2),e.abrupt("break",70);case 66:(0,i.isName)(S,"Page")||!k.has("Kids")?d(k,w instanceof i.Ref?w:null):o.push({currentNode:k,posInKids:0}),v.posInKids++,e.next=10;break;case 70:return e.abrupt("return",u);case 71:case"end":return e.stop()}}),e,this,[[15,21],[38,44],[56,62]])}))),function(){return O.apply(this,arguments)})},{key:"getPageIndex",value:function(e){var t=this,r=this.pageIndexCache.get(e);if(void 0!==r)return Promise.resolve(r);var n=this.xref,o=0;return function r(s){return function(t){var r,o=0;return n.fetchAsync(t).then((function(n){if((0,i.isRefsEqual)(t,e)&&!(0,i.isDict)(n,"Page")&&!(n instanceof i.Dict&&!n.has("Type")&&n.has("Contents")))throw new a.FormatError("The reference does not point to a /Page dictionary.");if(!n)return null;if(!(n instanceof i.Dict))throw new a.FormatError("Node must be a dictionary.");return r=n.getRaw("Parent"),n.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof i.Dict))throw new a.FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;var s,c=[],u=!1,l=b(e);try{for(l.s();!(s=l.n()).done;){var f=s.value;if(!(f instanceof i.Ref))throw new a.FormatError("Kid must be a reference.");if((0,i.isRefsEqual)(f,t)){u=!0;break}c.push(n.fetchAsync(f).then((function(e){if(!(e instanceof i.Dict))throw new a.FormatError("Kid node must be a dictionary.");e.has("Count")?o+=e.get("Count"):o++})))}}catch(e){l.e(e)}finally{l.f()}if(!u)throw new a.FormatError("Kid reference not found in parent's kids.");return Promise.all(c).then((function(){return[o,r]}))}))}(s).then((function(n){if(!n)return t.pageIndexCache.put(e,o),o;var a=m(n,2),i=a[0],s=a[1];return o+=i,r(s)}))}(e)}},{key:"baseUrl",get:function(){var e=this._catDict.get("URI");if(e instanceof i.Dict){var t=e.get("Base");if("string"==typeof t){var r=(0,a.createValidAbsoluteUrl)(t,null,{tryConvertEncoding:!0});if(r)return(0,a.shadow)(this,"baseUrl",r.href)}}return(0,a.shadow)(this,"baseUrl",null)}}],v=[{key:"parseDestDictionary",value:function(e){var t=e.destDict;if(t instanceof i.Dict){var r=e.resultObj;if("object"===p(r)){var o,c,u=e.docBaseUrl||null,l=e.docAttachments||null,f=t.get("A");if(f instanceof i.Dict||(t.has("Dest")?f=t.get("Dest"):(f=t.get("AA"))instanceof i.Dict&&(f.has("D")?f=f.get("D"):f.has("U")&&(f=f.get("U")))),f instanceof i.Dict){var h=f.get("S");if(!(h instanceof i.Name))return void(0,a.warn)("parseDestDictionary: Invalid type in Action dictionary.");var d=h.name;switch(d){case"ResetForm":var g,v=f.get("Flags"),y=0==(1&("number"==typeof v?v:0)),m=[],w=[],k=b(f.get("Fields")||[]);try{for(k.s();!(g=k.n()).done;){var S=g.value;S instanceof i.Ref?w.push(S.toString()):"string"==typeof S&&m.push((0,a.stringToPDFString)(S))}}catch(e){k.e(e)}finally{k.f()}r.resetForm={fields:m,refs:w,include:y};break;case"URI":(o=f.get("URI"))instanceof i.Name&&(o="/"+o.name);break;case"GoTo":c=f.get("D");break;case"Launch":case"GoToR":var x=f.get("F");x instanceof i.Dict?o=x.get("F")||null:"string"==typeof x&&(o=x);var O=f.get("D");if(O&&(O instanceof i.Name&&(O=O.name),"string"==typeof o)){var A=o.split("#")[0];"string"==typeof O?o=A+"#"+O:Array.isArray(O)&&(o=A+"#"+JSON.stringify(O))}var C=f.get("NewWindow");"boolean"==typeof C&&(r.newWindow=C);break;case"GoToE":var F,P=f.get("T");if(l&&P instanceof i.Dict){var T=P.get("R"),I=P.get("N");(0,i.isName)(T,"C")&&"string"==typeof I&&(F=l[(0,a.stringToPDFString)(I)])}F?r.attachment=F:(0,a.warn)('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":var E=f.get("N");E instanceof i.Name&&(r.action=E.name);break;case"SetOCGState":var j=f.get("State"),M=f.get("PreserveRB");if(!Array.isArray(j)||0===j.length)break;var _,L=[],R=b(j);try{for(R.s();!(_=R.n()).done;){var N=_.value;if(N instanceof i.Name)switch(N.name){case"ON":case"OFF":case"Toggle":L.push(N.name)}else N instanceof i.Ref&&L.push(N.toString())}}catch(e){R.e(e)}finally{R.f()}if(L.length!==j.length)break;r.setOCGState={state:L,preserveRB:"boolean"!=typeof M||M};break;case"JavaScript":var D,B=f.get("JS");B instanceof s.BaseStream?D=B.getString():"string"==typeof B&&(D=B);var U=D&&(0,n.recoverJsURL)((0,a.stringToPDFString)(D));if(U){o=U.url,r.newWindow=U.newWindow;break}default:if("JavaScript"===d||"SubmitForm"===d)break;(0,a.warn)('parseDestDictionary - unsupported action: "'.concat(d,'".'))}}else t.has("Dest")&&(c=t.get("Dest"));if("string"==typeof o){var $=(0,a.createValidAbsoluteUrl)(o,u,{addDefaultProtocol:!0,tryConvertEncoding:!0});$&&(r.url=$.href),r.unsafeUrl=o}c&&(c instanceof i.Name&&(c=c.name),"string"==typeof c?r.dest=(0,a.stringToPDFString)(c):Array.isArray(c)&&(r.dest=c))}else(0,a.warn)("parseDestDictionary: \`resultObj\` must be an object.")}else(0,a.warn)("parseDestDictionary: \`destDict\` must be a dictionary.")}}],r&&S(t.prototype,r),v&&S(t,v),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Catalog=O},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NumberTree=t.NameTree=void 0;var n=r(134),a=r(2);function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o(e,t)}function o(e,t){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},o(e,t)}function s(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=c(e);if(t){var a=c(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===u(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,r)}}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var o=t.fetchIfRef(i.shift());if(o instanceof n.Dict)if(o.has("Kids")){var s=o.get("Kids");if(!Array.isArray(s))continue;var c,u=l(s);try{for(u.s();!(c=u.n()).done;){var f=c.value;if(r.has(f))throw new a.FormatError('Duplicate entry in "'.concat(this._type,'" tree.'));i.push(f),r.put(f)}}catch(e){u.e(e)}finally{u.f()}}else{var h=o.get(this._type);if(Array.isArray(h))for(var d=0,p=h.length;d10)return(0,a.warn)('Search depth limit reached for "'.concat(this._type,'" tree.')),null;var i=r.get("Kids");if(!Array.isArray(i))return null;for(var o=0,s=i.length-1;o<=s;){var c=o+s>>1,u=t.fetchIfRef(i[c]),l=u.get("Limits");if(et.fetchIfRef(l[1]))){r=u;break}o=c+1}}if(o>s)return null}var f=r.get(this._type);if(Array.isArray(f))for(var h=0,d=f.length-2;h<=d;){var p=h+d>>1,g=p+(1&p),v=t.fetchIfRef(f[g]);if(ev))return t.fetchIfRef(f[g+1]);h=g+2}}return null}}]),e}(),v=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Names")}return p(r)}(g);t.NameTree=v;var y=function(e){i(r,e);var t=s(r);function r(e,n){return h(this,r),t.call(this,e,n,"Nums")}return p(r)}(g);t.NumberTree=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearGlobalCaches=function(){(0,n.clearPrimitiveCaches)(),(0,a.clearUnicodeCaches)()};var n=r(134),a=r(169)},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileSpec=void 0;var n=r(2),a=r(136),i=r(134);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataParser=void 0;var n=r(195);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\\\\376\\\\377([^<]+)/g,(function(e,t){for(var r=t.replace(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,r,n){return String.fromCharCode(64*t+8*r+1*n)})).replace(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error("_repair: ".concat(t," isn't defined."))})),n=[],a=0,i=r.length;a=32&&o<127&&60!==o&&62!==o&&38!==o?n.push(String.fromCharCode(o)):n.push("&#x"+(65536+o).toString(16).substring(1)+";")}return">"+n.join("")}))}},{key:"_getSequence",value:function(e){var t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((function(e){return"rdf:li"===e.nodeName}))}},{key:"_parseArray",value:function(e){if(e.hasChildNodes()){var t=(n=e.childNodes,a=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(n,a)||o(n,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],r=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,r.map((function(e){return e.textContent.trim()})))}var n,a}},{key:"_parse",value:function(e){var t=e.documentElement;if("rdf:rdf"!==t.nodeName)for(t=t.firstChild;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling;if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes()){var r,n=i(t.childNodes);try{for(n.s();!(r=n.n()).done;){var a=r.value;if("rdf:description"===a.nodeName){var o,s=i(a.childNodes);try{for(s.s();!(o=s.n()).done;){var c=o.value,u=c.nodeName;switch(u){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(c);continue}this._metadataMap.set(u,c.textContent.trim())}}catch(e){s.e(e)}finally{s.f()}}}}catch(e){n.e(e)}finally{n.f()}}}},{key:"serializable",get:function(){return{parsedData:this._metadataMap,rawData:this._data}}}])&&c(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MetadataParser=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StructTreeRoot=t.StructTreePage=void 0;var n=r(134),a=r(2),i=r(199);function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:0;if(r>40)return(0,a.warn)("StructTree MAX_DEPTH reached."),null;if(t.has(e))return t.get(e);var i=new y(this,e);t.set(e,i);var s=e.get("P");if(!s||(0,n.isName)(s.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(e,i)||t.delete(e),i;var c=this.addNode(s,t,r+1);if(!c)return i;var u,l=!1,f=o(c.kids);try{for(f.s();!(u=f.n()).done;){var h=u.value;h.type===g&&h.dict===e&&(h.parentNode=i,l=!0)}}catch(e){f.e(e)}finally{f.f()}return l||t.delete(e),i}},{key:"addTopLevelNode",value:function(e,t){var r=this.rootDict.get("K");if(!r)return!1;if(r instanceof n.Dict)return r.objId===e.objId&&(this.nodes[0]=t,!0);if(!Array.isArray(r))return!0;for(var a=!1,i=0;i2&&void 0!==arguments[2]?arguments[2]:0;if(n>40)(0,a.warn)("StructTree too deep to be fully serialized.");else{var i=Object.create(null);i.role=t.role,i.children=[],r.children.push(i);var s=t.dict.get("Alt");"string"==typeof s&&(i.alt=(0,a.stringToPDFString)(s));var c=t.dict.get("Lang");"string"==typeof c&&(i.lang=(0,a.stringToPDFString)(c));var u,l=o(t.kids);try{for(l.s();!(u=l.n()).done;){var f=u.value,v=f.type===g?f.parentNode:null;v?e(v,i,n+1):f.type===h||f.type===d?i.children.push({type:"content",id:"page".concat(f.pageObjId,"_mcid").concat(f.mcid)}):f.type===p&&i.children.push({type:"object",id:f.refObjId})}}catch(e){l.e(e)}finally{l.f()}}}var t=Object.create(null);t.children=[],t.role="Root";var r,n=o(this.nodes);try{for(n.s();!(r=n.n()).done;){var i=r.value;i&&e(i,t)}}catch(e){n.e(e)}finally{n.f()}return t}}]),e}();t.StructTreePage=b},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ObjectLoader=void 0;var a=r(134),i=r(136),o=r(135),s=r(2);function c(){c=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,n){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(n||[]);return a(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function i(a,o,s,c){var u=h(e[a],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==n(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):t.resolve(f).then((function(e){l.value=e,s(l)}),(function(e){return i("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){i(e,r,t,n)}))}return o=o?o.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function u(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function l(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){u(i,n,a,o,s,"next",e)}function s(e){u(i,n,a,o,s,"throw",e)}o(void 0)}))}}function f(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.XFAFactory=void 0;var n=r(206),a=r(210),i=r(216),o=r(214),s=r(207),c=r(2),u=r(217),l=r(227);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},e}function p(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function g(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){p(i,n,a,o,s,"next",e)}function s(e){p(i,n,a,o,s,"throw",e)}o(void 0)}))}}function v(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this.form[n.$globalData].usedTypefaces);try{for(a.s();!(t=a.n()).done;){var i=t.value;i=(0,s.stripQuotes)(i),this.form[n.$globalData].fontFinder.find(i)||r.push(i)}}catch(e){a.e(e)}finally{a.f()}return r.length>0?r:null}},{key:"appendFonts",value:function(e,t){this.form[n.$globalData].fontFinder.add(e,t)}},{key:"getPages",value:(p=g(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.pages){e.next=3;break}return e.next=3,this._createPages();case 3:return t=this.pages,this.pages=null,e.abrupt("return",t);case 6:case"end":return e.stop()}}),e,this)}))),function(){return p.apply(this,arguments)})},{key:"serializeData",value:function(e){return this.dataHandler.serialize(e)}}],f=[{key:"_createDocument",value:function(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}},{key:"getRichTextAsHtml",value:function(e){if(!e||"string"!=typeof e)return null;try{var t=new u.XFAParser(l.XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[n.$nodeName])){var r=l.XhtmlNamespace.body({});r[n.$appendChild](t),t=r}var a=t[n.$toHTML]();if(!a.success)return null;var i=a.html,o=i.attributes;return o&&(o.class&&(o.class=o.class.filter((function(e){return!e.startsWith("xfa")}))),o.dir="auto"),{html:i,str:t[n.$text]()}}catch(e){(0,c.warn)("XFA - an error occurred during parsing of rich text: ".concat(e))}return null}}],r&&v(t.prototype,r),f&&v(t,f),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.XFAFactory=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XmlObject=t.XFAObjectArray=t.XFAObject=t.XFAAttribute=t.StringObject=t.OptionObject=t.Option10=t.Option01=t.IntegerObject=t.ContentObject=t.$uid=t.$toStyle=t.$toString=t.$toPages=t.$toHTML=t.$text=t.$tabIndex=t.$setValue=t.$setSetAttributes=t.$setId=t.$searchNode=t.$root=t.$resolvePrototypes=t.$removeChild=t.$pushPara=t.$pushGlyphs=t.$popPara=t.$onText=t.$onChildCheck=t.$onChild=t.$nsAttributes=t.$nodeName=t.$namespaceId=t.$isUsable=t.$isTransparent=t.$isThereMoreWidth=t.$isSplittable=t.$isNsAgnostic=t.$isDescendent=t.$isDataValue=t.$isCDATAXml=t.$isBindable=t.$insertAt=t.$indexOf=t.$ids=t.$hasSettableValue=t.$globalData=t.$getTemplateRoot=t.$getSubformParent=t.$getRealChildrenByNameIt=t.$getParent=t.$getNextPage=t.$getExtra=t.$getDataValue=t.$getContainedChildren=t.$getChildrenByNameIt=t.$getChildrenByName=t.$getChildrenByClass=t.$getChildren=t.$getAvailableSpace=t.$getAttributes=t.$getAttributeIt=t.$flushHTML=t.$finalize=t.$extra=t.$dump=t.$data=t.$content=t.$consumed=t.$clone=t.$cleanup=t.$cleanPage=t.$clean=t.$childrenToHTML=t.$appendChild=t.$addHTML=t.$acceptWhitespace=void 0;var n=r(207),a=r(2),i=r(135),o=r(208),s=r(209);function c(){return c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=p(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},c.apply(this,arguments)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||m(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=p(e);if(t){var a=p(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return d(e)}(this,r)}}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function v(){v=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,a){var i=t&&t.prototype instanceof h?t:h,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function d(){}function p(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=p.prototype=h.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==g(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){u.value=e,o(u)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function y(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=m(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]&&arguments[2];w(this,e),this[pe]=t,this[ge]=r,this[We]=n,this[Ke]=null,this[Ue]=[],this[Re]="".concat(r).concat(et++),this[Q]=null}return S(e,[{key:ye,value:function(e){if(!this[We]||!this[me](e))return!1;var t=e[ge],r=this[t];if(!(r instanceof nt))return null!==r&&this[xe](r),this[t]=e,this[A](e),!0;if(r.push(e))return this[A](e),!0;var n="";return this.id?n=" (id: ".concat(this.id,")"):this.name&&(n=" (name: ".concat(this.name," ").concat(this.h.value,")")),(0,a.warn)('XFA - node "'.concat(this[ge],'"').concat(n,' has already enough "').concat(t,'"!')),!1}},{key:me,value:function(e){return this.hasOwnProperty(e[ge])&&e[pe]===this[pe]}},{key:ce,value:function(){return!1}},{key:x,value:function(){return!1}},{key:ae,value:function(){return!1}},{key:ie,value:function(){return!1}},{key:ke,value:function(){this.para&&this[Z]()[L].paraStack.pop()}},{key:Se,value:function(){this[Z]()[L].paraStack.push(this.para)}},{key:Fe,value:function(e){this.id&&this[pe]===o.NamespaceIds.template.id&&e.set(this.id,this)}},{key:Z,value:function(){return this[Q].template}},{key:ue,value:function(){return!1}},{key:le,value:function(){return!1}},{key:A,value:function(e){e[Ke]=this,this[Ue].push(e),!e[Q]&&this[Q]&&(e[Q]=this[Q])}},{key:xe,value:function(e){var t=this[Ue].indexOf(e);this[Ue].splice(t,1)}},{key:ee,value:function(){return this.hasOwnProperty("value")}},{key:Te,value:function(e){}},{key:be,value:function(e){}},{key:R,value:function(){}},{key:F,value:function(e){delete this[We],this[T]&&(e.clean(this[T]),delete this[T])}},{key:re,value:function(e){return this[Ue].indexOf(e)}},{key:ne,value:function(e,t){t[Ke]=this,this[Ue].splice(e,0,t),!t[Q]&&this[Q]&&(t[Q]=this[Q])}},{key:fe,value:function(){return!this.name}},{key:de,value:function(){return""}},{key:Ee,value:function(){return 0===this[Ue].length?this[j]:this[Ue].map((function(e){return e[Ee]()})).join("")}},{key:Be,get:function(){var t=Object.getPrototypeOf(this);if(!t._attributes){var r,n=t._attributes=new Set,i=y(Object.getOwnPropertyNames(this));try{for(i.s();!(r=i.n()).done;){var o=r.value;if(null===this[o]||this[o]instanceof e||this[o]instanceof nt)break;n.add(o)}}catch(e){i.e(e)}finally{i.f()}}return(0,a.shadow)(this,Be,t._attributes)}},{key:se,value:function(e){for(var t=this;t;){if(t===e)return!0;t=t[J]()}return!1}},{key:J,value:function(){return this[Ke]}},{key:K,value:function(){return this[J]()}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[e]:this[Ue]}},{key:_,value:function(){var t=Object.create(null);this[j]&&(t.$content=this[j]);var r,n=y(Object.getOwnPropertyNames(this));try{for(n.s();!(r=n.n()).done;){var a=r.value,i=this[a];null!==i&&(i instanceof e?t[a]=i[_]():i instanceof nt?i.isEmpty()||(t[a]=i.dump()):t[a]=i)}}catch(e){n.e(e)}finally{n.f()}return t}},{key:Le,value:function(){return null}},{key:Me,value:function(){return n.HTMLResult.EMPTY}},{key:V,value:v().mark((function e(){var t,r,n;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=y(this[W]()),e.prev=1,t.s();case 3:if((r=t.n()).done){e.next=9;break}return n=r.value,e.next=7,n;case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case"end":return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:qe,value:v().mark((function e(t,r){var n,a,i,o,s;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=y(this[V]()),e.prev=1,n.s();case 3:if((a=n.n()).done){e.next=13;break}if(i=a.value,t&&r!==t.has(i[ge])){e.next=11;break}return o=this[U](),(s=i[Me](o)).success||(this[L].failingNode=i),e.next=11,s;case 11:e.next=3;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(1),n.e(e.t0);case 18:return e.prev=18,n.f(),e.finish(18);case 21:case"end":return e.stop()}}),e,this,[[1,15,18,21]])}))},{key:N,value:function(){return null}},{key:O,value:function(e,t){this[L].children.push(e)}},{key:U,value:function(){}},{key:C,value:function(e){var t=e.filter,r=void 0===t?null:t,a=e.include,i=void 0===a||a;if(this[L].generator){var o=this[U](),s=this[L].failingNode[Me](o);if(!s.success)return s;s.html&&this[O](s.html,s.bbox),delete this[L].failingNode}else this[L].generator=this[qe](r,i);for(;;){var c=this[L].generator.next();if(c.done)break;var u=c.value;if(!u.success)return u;u.html&&this[O](u.html,u.bbox)}return this[L].generator=null,n.HTMLResult.EMPTY}},{key:Pe,value:function(e){this[Ze]=new Set(Object.keys(e))}},{key:ze,value:function(e){var t,r=this[Be],n=this[Ze];return(t=e,function(e){if(Array.isArray(e))return b(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||m(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).filter((function(e){return r.has(e)&&!n.has(e)}))}},{key:Ae,value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set,n=y(this[Ue]);try{for(n.s();!(t=n.n()).done;)t.value[Je](e,r)}catch(e){n.e(e)}finally{n.f()}}},{key:Je,value:function(e,t){var r=this[Ge](e,t);r?this[Ne](r,e,t):this[Ae](e,t)}},{key:Ge,value:function(e,t){var r=this.use,n=this.usehref;if(!r&&!n)return null;var i=null,o=null,c=null,u=r;if(n?(u=n,n.startsWith("#som(")&&n.endsWith(")")?o=n.slice(5,n.length-1):n.startsWith(".#som(")&&n.endsWith(")")?o=n.slice(6,n.length-1):n.startsWith("#")?c=n.slice(1):n.startsWith(".#")&&(c=n.slice(2))):r.startsWith("#")?c=r.slice(1):o=r,this.use=this.usehref="",c?i=e.get(c):(i=(0,s.searchNode)(e.get(Oe),this,o,!0,!1))&&(i=i[0]),!i)return(0,a.warn)("XFA - Invalid prototype reference: ".concat(u,".")),null;if(i[ge]!==this[ge])return(0,a.warn)("XFA - Incompatible prototype: ".concat(i[ge]," !== ").concat(this[ge],".")),null;if(t.has(i))return(0,a.warn)("XFA - Cycle detected in prototypes use."),null;t.add(i);var l=i[Ge](e,t);return l&&i[Ne](l,e,t),i[Ae](e,t),t.delete(i),i}},{key:Ne,value:function(e,t,r){if(r.has(e))(0,a.warn)("XFA - Cycle detected in prototypes use.");else{!this[j]&&e[j]&&(this[j]=e[j]),new Set(r).add(e);var n,i=y(this[ze](e[Ze]));try{for(i.s();!(n=i.n()).done;){var o=n.value;this[o]=e[o],this[Ze]&&this[Ze].add(o)}}catch(e){i.e(e)}finally{i.f()}var s,c=y(Object.getOwnPropertyNames(this));try{for(c.s();!(s=c.n()).done;){var u=s.value;if(!this[Be].has(u)){var l=this[u],f=e[u];if(l instanceof nt){var h,d=y(l[Ue]);try{for(d.s();!(h=d.n()).done;)h.value[Je](t,r)}catch(e){d.e(e)}finally{d.f()}for(var p=l[Ue].length,g=f[Ue].length;p0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:$,value:function(e){return this[e]}},{key:X,value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return Array.from(this[H](e,t,r))}},{key:H,value:function(e,t){var r=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return v().mark((function a(){var i,o,s;return v().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if("parent"!==e){a.next=4;break}return a.next=3,r[Ke];case 3:return a.abrupt("return");case 4:i=y(r[Ue]),a.prev=5,i.s();case 7:if((o=i.n()).done){a.next=19;break}if((s=o.value)[ge]!==e){a.next=12;break}return a.next=12,s;case 12:if(s.name!==e){a.next=15;break}return a.next=15,s;case 15:if(!t&&!s[fe]()){a.next=17;break}return a.delegateYield(s[H](e,t,!1),"t0",17);case 17:a.next=7;break;case 19:a.next=24;break;case 21:a.prev=21,a.t1=a.catch(5),i.e(a.t1);case 24:return a.prev=24,i.f(),a.finish(24);case 27:if(!n||!r[Be].has(e)){a.next=30;break}return a.next=30,new at(r,e,r[e]);case 30:case"end":return a.stop()}}),a,null,[[5,21,24,27]])}))()}}],[{key:$e,value:function(t){return Array.isArray(t)?t.map((function(t){return e[$e](t)})):"object"===g(t)&&null!==t?Object.assign({},t):t}}]),e}();t.XFAObject=rt;var nt=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;w(this,e),this[Ve]=t,this[Ue]=[]}return S(e,[{key:"push",value:function(e){return this[Ue].length<=this[Ve]?(this[Ue].push(e),!0):((0,a.warn)('XFA - node "'.concat(e[ge],'" accepts no more than ').concat(this[Ve]," children")),!1)}},{key:"isEmpty",value:function(){return 0===this[Ue].length}},{key:"dump",value:function(){return 1===this[Ue].length?this[Ue][0][_]():this[Ue].map((function(e){return e[_]()}))}},{key:I,value:function(){var t=new e(this[Ve]);return t[Ue]=this[Ue].map((function(e){return e[I]()})),t}},{key:"children",get:function(){return this[Ue]}},{key:"clear",value:function(){this[Ue].length=0}}]),e}();t.XFAObjectArray=nt;var at=function(){function e(t,r,n){w(this,e),this[Ke]=t,this[ge]=r,this[j]=n,this[E]=!1,this[Re]="attribute".concat(et++)}return S(e,[{key:J,value:function(){return this[Ke]}},{key:oe,value:function(){return!0}},{key:q,value:function(){return this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:Ee,value:function(){return this[j]}},{key:se,value:function(e){return this[Ke]===e||this[Ke][se](e)}}]),e}();t.XFAAttribute=at;var it=function(e){l(r,e);var t=h(r);function r(e,n){var a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(w(this,r),(a=t.call(this,e,n))[j]="",a[Xe]=null,"#text"!==n){var o=new Map;a[De]=o;for(var s=0,c=Object.entries(i);s"),this[j])"string"==typeof this[j]?e.push((0,i.encodeToXmlString)(this[j])):this[j][_e](e);else{var d,p=y(this[Ue]);try{for(p.s();!(d=p.n()).done;)d.value[_e](e)}catch(e){p.e(e)}finally{p.f()}}e.push(""))}else e.push("/>")}else e.push((0,i.encodeToXmlString)(this[j]))}},{key:ye,value:function(e){if(this[j]){var t=new r(this[pe],"#text");this[A](t),t[j]=this[j],this[j]=""}return this[A](e),!0}},{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){if(this[j]&&this[Ue].length>0){var e=new r(this[pe],"#text");this[A](e),e[j]=this[j],delete this[j]}}},{key:Me,value:function(){return"#text"===this[ge]?n.HTMLResult.success({name:"#text",value:this[j]}):n.HTMLResult.EMPTY}},{key:W,value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[Ue].filter((function(t){return t[ge]===e})):this[Ue]}},{key:B,value:function(){return this[De]}},{key:$,value:function(e){var t=this[De].get(e);return void 0!==t?t:this[W](e)}},{key:H,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=16;break}if((i=a.value)[ge]!==e){o.next=12;break}return o.next=12,i;case 12:if(!t){o.next=14;break}return o.delegateYield(i[H](e,t),"t0",14);case 14:o.next=7;break;case 16:o.next=21;break;case 18:o.prev=18,o.t1=o.catch(5),n.e(o.t1);case 21:return o.prev=21,n.f(),o.finish(21);case 24:case"end":return o.stop()}}),r,this,[[5,18,21,24]])}))},{key:D,value:v().mark((function(e,t){var r,n,a,i;return v().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(r=this[De].get(e))||t&&r[E]){o.next=4;break}return o.next=4,r;case 4:n=y(this[Ue]),o.prev=5,n.s();case 7:if((a=n.n()).done){o.next=12;break}return i=a.value,o.delegateYield(i[D](e,t),"t0",10);case 10:o.next=7;break;case 12:o.next=17;break;case 14:o.prev=14,o.t1=o.catch(5),n.e(o.t1);case 17:return o.prev=17,n.f(),o.finish(17);case 20:case"end":return o.stop()}}),r,this,[[5,14,17,20]])}))},{key:z,value:v().mark((function e(t,r,n){var a,i,o;return v().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=y(this[Ue]),e.prev=1,a.s();case 3:if((i=a.n()).done){e.next=12;break}if((o=i.value)[ge]!==t||n&&o[E]){e.next=8;break}return e.next=8,o;case 8:if(!r){e.next=10;break}return e.delegateYield(o[z](t,r,n),"t0",10);case 10:e.next=3;break;case 12:e.next=17;break;case 14:e.prev=14,e.t1=e.catch(1),a.e(e.t1);case 17:return e.prev=17,a.f(),e.finish(17);case 20:case"end":return e.stop()}}),e,this,[[1,14,17,20]])}))},{key:oe,value:function(){return null===this[Xe]?0===this[Ue].length||this[Ue][0][pe]===o.NamespaceIds.xhtml.id:this[Xe]}},{key:q,value:function(){return null===this[Xe]?0===this[Ue].length?this[j].trim():this[Ue][0][pe]===o.NamespaceIds.xhtml.id?this[Ue][0][Ee]().trim():null:this[j].trim()}},{key:Te,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){e=e.value||"",this[j]=e.toString()}))},{key:_,value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=Object.create(null);e&&(t.$ns=this[pe]),this[j]&&(t.$content=this[j]),t.$name=this[ge],t.children=[];var r,n=y(this[Ue]);try{for(n.s();!(r=n.n()).done;){var a=r.value;t.children.push(a[_](e))}}catch(e){n.e(e)}finally{n.f()}t.attributes=Object.create(null);var i,o=y(this[De]);try{for(o.s();!(i=o.n()).done;){var s=u(i.value,2),c=s[0],l=s[1];t.attributes[c]=l[j]}}catch(e){o.e(e)}finally{o.f()}return t}}]),r}(rt);t.XmlObject=it;var ot=function(e){l(r,e);var t=h(r);function r(e,n){var a;return w(this,r),(a=t.call(this,e,n))[j]="",a}return S(r,[{key:be,value:function(e){this[j]+=e}},{key:R,value:function(){}}]),r}(rt);t.ContentObject=ot;var st=function(e){l(r,e);var t=h(r);function r(e,n,a){var i;return w(this,r),(i=t.call(this,e,n))[Ye]=a,i}return S(r,[{key:R,value:function(){var e=this;this[j]=(0,n.getKeyword)({data:this[j],defaultValue:this[Ye][0],validate:function(t){return e[Ye].includes(t)}})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[Ye]}}]),r}(ot);t.OptionObject=st;var ct=function(e){l(r,e);var t=h(r);function r(){return w(this,r),t.apply(this,arguments)}return S(r,[{key:R,value:function(){this[j]=this[j].trim()}}]),r}(ot);t.StringObject=ct;var ut=function(e){l(r,e);var t=h(r);function r(e,n,a,i){var o;return w(this,r),(o=t.call(this,e,n))[He]=a,o[Qe]=i,o}return S(r,[{key:R,value:function(){this[j]=(0,n.getInteger)({data:this[j],defaultValue:this[He],validate:this[Qe]})}},{key:F,value:function(e){c(p(r.prototype),F,this).call(this,e),delete this[He],delete this[Qe]}}]),r}(ot);t.IntegerObject=ut;var lt=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,0,(function(e){return 1===e}))}return S(r)}(ut);t.Option01=lt;var ft=function(e){l(r,e);var t=h(r);function r(e,n){return w(this,r),t.call(this,e,n,1,(function(e){return 0===e}))}return S(r)}(ut);t.Option10=ft},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.HTMLResult=void 0,t.getBBox=function(e){var t=-1;if(!e)return{x:t,y:t,width:t,height:t};var r=e.trim().split(/\\s*,\\s*/).map((function(e){return f(e,"-1")}));if(r.length<4||r[2]<0||r[3]<0)return{x:t,y:t,width:t,height:t};var n=o(r,4);return{x:n[0],y:n[1],width:n[2],height:n[3]}},t.getColor=function(e){var t=o(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],3),r=t[0],n=t[1],a=t[2];if(!e)return{r,g:n,b:a};var i=e.trim().split(/\\s*,\\s*/).map((function(e){return Math.min(Math.max(0,parseInt(e.trim(),10)),255)})).map((function(e){return isNaN(e)?0:e}));if(i.length<3)return{r,g:n,b:a};var s=o(i,3);return{r:r=s[0],g:n=s[1],b:a=s[2]}},t.getFloat=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseFloat(t);return!isNaN(a)&&n(a)?a:r},t.getInteger=function(e){var t=e.data,r=e.defaultValue,n=e.validate;if(!t)return r;t=t.trim();var a=parseInt(t,10);return!isNaN(a)&&n(a)?a:r},t.getKeyword=l,t.getMeasurement=f,t.getRatio=function(e){if(!e)return{num:1,den:1};var t=e.trim().split(/\\s*:\\s*/).map((function(e){return parseFloat(e)})).filter((function(e){return!isNaN(e)}));if(1===t.length&&t.push(1),0===t.length)return{num:1,den:1};var r=o(t,2);return{num:r[0],den:r[1]}},t.getRelevant=function(e){return e?e.trim().split(/\\s+/).map((function(e){return{excluded:"-"===e[0],viewname:e.substring(1)}})):[]},t.getStringOption=function(e,t){return l({data:e,defaultValue:t[0],validate:function(e){return t.includes(e)}})},t.stripQuotes=function(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,e.length-1):e};var a=r(2);function i(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:"0";if(t=t||"0",!e)return f(t);var r=e.trim().match(u);if(!r)return f(t);var n=o(r,3),a=n[1],i=n[2],s=parseFloat(a);if(isNaN(s))return f(t);if(0===s)return 0;var l=c[i];return l?l(s):s}var h=function(){function e(t,r,n,a){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.success=t,this.html=r,this.bbox=n,this.breakNode=a}var t,r,n;return t=e,n=[{key:"FAILURE",get:function(){return(0,a.shadow)(this,"FAILURE",new e(!1,null,null,null))}},{key:"EMPTY",get:function(){return(0,a.shadow)(this,"EMPTY",new e(!0,null,null,null))}},{key:"breakNode",value:function(t){return new e(!1,null,null,t)}},{key:"success",value:function(t){return new e(!0,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,null)}}],(r=[{key:"isBreak",value:function(){return!!this.breakNode}}])&&i(t.prototype,r),n&&i(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.HTMLResult=h},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceIds=t.$buildXFAObject=void 0;var r=Symbol();t.$buildXFAObject=r,t.NamespaceIds={config:{id:0,check:function(e){return e.startsWith("http://www.xfa.org/schema/xci/")}},connectionSet:{id:1,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")}},datasets:{id:2,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-data/")}},form:{id:3,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-form/")}},localeSet:{id:4,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")}},pdf:{id:5,check:function(e){return"http://ns.adobe.com/xdp/pdf/"===e}},signature:{id:6,check:function(e){return"http://www.w3.org/2000/09/xmldsig#"===e}},sourceSet:{id:7,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-source-set/")}},stylesheet:{id:8,check:function(e){return"http://www.w3.org/1999/XSL/Transform"===e}},template:{id:9,check:function(e){return e.startsWith("http://www.xfa.org/schema/xfa-template/")}},xdc:{id:10,check:function(e){return e.startsWith("http://www.xfa.org/schema/xdc/")}},xdp:{id:11,check:function(e){return"http://ns.adobe.com/xdp/"===e}},xfdf:{id:12,check:function(e){return"http://ns.adobe.com/xfdf/"===e}},xhtml:{id:13,check:function(e){return"http://www.w3.org/1999/xhtml"===e}},xmpmeta:{id:14,check:function(e){return"http://ns.adobe.com/xmpmeta/"===e}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDataNode=function(e,t,r){var a=y(r);if(!a)return null;if(a.some((function(e){return e.operator===d.dotDot})))return null;var o=p.get(a[0].name),s=0;o?(e=o(e,t),s=1):e=t||e;for(var c=a.length;s4&&void 0!==arguments[4])||arguments[4],i=y(r,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);if(!i)return null;var c,u=p.get(i[0].name),l=0;u?(c=!0,e=[u(e,t)],l=1):(c=null===t,e=[t||e]);for(var f=function(r){var s,u=i[l],f=u.name,h=u.cacheName,p=u.operator,v=u.index,y=[],m=o(e);try{for(m.s();!(s=m.n()).done;){var b=s.value;if(b instanceof n.XFAObject){var w=void 0,k=void 0;if(a&&((k=g.get(b))||(k=new Map,g.set(b,k)),w=k.get(h)),!w){switch(p){case d.dot:w=b[n.$getChildrenByName](f,!1);break;case d.dotDot:w=b[n.$getChildrenByName](f,!0);break;case d.dotHash:w=(w=b[n.$getChildrenByClass](f))instanceof n.XFAObjectArray?w.children:[w]}a&&k.set(h,w)}w.length>0&&y.push(w)}}}catch(e){m.e(e)}finally{m.f()}if(0===y.length&&!c&&0===l){var S=t[n.$getParent]();return(t=S)?(l=-1,e=[t],"continue"):{v:null}}e=isFinite(v)?y.filter((function(e){return v=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2])||arguments[2],n=e.match(f);if(!n)return null;for(var a,o=c(n,1)[0],s=[{name:o,cacheName:"."+o,index:0,js:null,formCalc:null,operator:d.dot}],u=o.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Binder=void 0;var n=r(206),a=r(211),i=r(209),o=r(208),s=r(2);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=f(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&((a=e[n.$clone]())[n.$removeChild](a.occur),a.occur=null),this._bindValue(e,t[0],r),this._setProperties(e,t[0]),this._bindItems(e,t[0]),1!==t.length)for(var i=e[n.$getParent](),o=e[n.$nodeName],s=i[n.$indexOf](e),c=1,u=t.length;cm?g=g.slice(0,m):0===g.length&&(g=null),g&&this._isConsumeData()&&g.forEach((function(e){e[n.$consumed]=!0}))}else{if(!c.name){this._setAndBind(c,t);continue}if(this._isConsumeData()){for(var b=[];b.length0?b:null}else{if(!(g=t[n.$getRealChildrenByNameIt](c.name,!1,this.emptyMerge).next().value)){if(0===y){r.push(c);continue}var k=t[n.$namespaceId]===p?-1:t[n.$namespaceId];g=c[n.$data]=new n.XmlObject(k,c.name),this.emptyMerge&&(g[n.$consumed]=!0),t[n.$appendChild](g),this._setAndBind(c,g);continue}this.emptyMerge&&(g[n.$consumed]=!0),g=[g]}}g?this._bindOccurrences(c,g,h):y>0?this._setAndBind(c,t):r.push(c)}}else{this._mergeMode="consumeData"===c.mergeMode;var S=t[n.$getChildren]();if(S.length>0)this._bindOccurrences(c,[S[0]],null);else if(this.emptyMerge){var x=t[n.$namespaceId]===p?-1:t[n.$namespaceId],O=c[n.$data]=new n.XmlObject(x,c.name||"root");t[n.$appendChild](O),this._bindElement(c,O)}}}}catch(e){o.e(e)}finally{o.f()}r.forEach((function(e){return e[n.$getParent]()[n.$removeChild](e)}))}}])&&d(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Binder=v},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Value=t.Text=t.TemplateNamespace=t.Template=t.SetProperty=t.Items=t.Field=t.BindItems=void 0;var n=r(206),a=r(208),i=r(212),o=r(213),s=r(207),c=r(2),u=r(214),l=r(135),f=r(209);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(){return d="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=k(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:r):a.value}},d.apply(this,arguments)}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||A(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){for(var r=0;r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}var x=S().mark(L);function O(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=A(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function A(e,t){if(e){if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r180?1:0,f=50*(1+Math.cos(c)),h=50*(1-Math.sin(c)),d=50*(1+Math.cos(c+u)),p=50*(1-Math.sin(c+u));e={name:"path",attributes:{xmlns:P,d:"M ".concat(f," ").concat(h," A 50 50 0 ").concat(l," 0 ").concat(d," ").concat(p),vectorEffect:"non-scaling-stroke",style:a}},Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}var g={name:"svg",children:[e],attributes:i};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[g]}):(g.attributes.style.position="absolute",s.HTMLResult.success(g))}}]),r}(n.XFAObject),W=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"area",!0)).colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.id=e.id||"",a.name=e.name||"",a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.desc=null,a.extras=null,a.area=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$isTransparent,value:function(){return!0}},{key:n.$isBindable,value:function(){return!0}},{key:n.$addHTML,value:function(e,t){var r=p(t,4),a=r[0],i=r[1],o=r[2],s=r[3];this[n.$extra].width=Math.max(this[n.$extra].width,a+o),this[n.$extra].height=Math.max(this[n.$extra].height,i+s),this[n.$extra].children.push(e)}},{key:n.$getAvailableSpace,value:function(){return this[n.$extra].availableSpace}},{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"position"),r={style:t,id:this[n.$uid],class:["xfaArea"]};(0,o.isPrintOnly)(this)&&r.class.push("xfaPrintOnly"),this.name&&(r.xfaName=this.name);var a=[];this[n.$extra]={children:a,width:0,height:0,availableSpace:e};var i=this[n.$childrenToHTML]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success)return i.isBreak()?i:(delete this[n.$extra],s.HTMLResult.FAILURE);t.width=(0,o.measureToString)(this[n.$extra].width),t.height=(0,o.measureToString)(this[n.$extra].height);var c={name:"div",attributes:r,children:a},u=[this.x,this.y,this[n.$extra].width,this[n.$extra].height];return delete this[n.$extra],s.HTMLResult.success(c,u)}}]),r}(n.XFAObject),V=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"assist",!0)).id=e.id||"",n.role=e.role||"",n.use=e.use||"",n.usehref=e.usehref||"",n.speak=null,n.toolTip=null,n}return v(r,[{key:n.$toHTML,value:function(){return this.toolTip&&this.toolTip[n.$content]?this.toolTip[n.$content]:null}}]),r}(n.XFAObject),Y=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"barcode",!0)).charEncoding=(0,s.getKeyword)({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),n.checksum=(0,s.getStringOption)(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),n.dataColumnCount=(0,s.getInteger)({data:e.dataColumnCount,defaultValue:-1,validate:function(e){return e>=0}}),n.dataLength=(0,s.getInteger)({data:e.dataLength,defaultValue:-1,validate:function(e){return e>=0}}),n.dataPrep=(0,s.getStringOption)(e.dataPrep,["none","flateCompress"]),n.dataRowCount=(0,s.getInteger)({data:e.dataRowCount,defaultValue:-1,validate:function(e){return e>=0}}),n.endChar=e.endChar||"",n.errorCorrectionLevel=(0,s.getInteger)({data:e.errorCorrectionLevel,defaultValue:-1,validate:function(e){return e>=0&&e<=8}}),n.id=e.id||"",n.moduleHeight=(0,s.getMeasurement)(e.moduleHeight,"5mm"),n.moduleWidth=(0,s.getMeasurement)(e.moduleWidth,"0.25mm"),n.printCheckDigit=(0,s.getInteger)({data:e.printCheckDigit,defaultValue:0,validate:function(e){return 1===e}}),n.rowColumnRatio=(0,s.getRatio)(e.rowColumnRatio),n.startChar=e.startChar||"",n.textLocation=(0,s.getStringOption)(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),n.truncate=(0,s.getInteger)({data:e.truncate,defaultValue:0,validate:function(e){return 1===e}}),n.type=(0,s.getStringOption)(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),n.upsMode=(0,s.getStringOption)(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),n.use=e.use||"",n.usehref=e.usehref||"",n.wideNarrowRatio=(0,s.getRatio)(e.wideNarrowRatio),n.encrypt=null,n.extras=null,n}return v(r)}(n.XFAObject),K=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bind",!0)).match=(0,s.getStringOption)(e.match,["once","dataRef","global","none"]),n.ref=e.ref||"",n.picture=null,n}return v(r)}(n.XFAObject),J=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bindItems")).connection=e.connection||"",n.labelRef=e.labelRef||"",n.ref=e.ref||"",n.valueRef=e.valueRef||"",n}return v(r)}(n.XFAObject);t.BindItems=J;var Z=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"bookend")).id=e.id||"",n.leader=e.leader||"",n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Q=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"boolean")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(e){return U(1===this[n.$content]?"1":"0")}}]),r}(n.Option01),ee=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"border",!0)).break=(0,s.getStringOption)(e.break,["close","open"]),a.hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.extras=null,a.fill=null,a.margin=null,a}return v(r,[{key:n.$getExtra,value:function(){if(!this[n.$extra]){var e=this.edge.children.slice();if(e.length<4)for(var t=e.at(-1)||new Ae({}),r=e.length;r<4;r++)e.push(t);var a=e.map((function(e){return e.thickness})),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[n.$extra]={widths:a,insets:i,edges:e}}return this[n.$extra]}},{key:n.$toStyle,value:function(){var e=this[n.$getExtra]().edges.map((function(e){var t=e[n.$toStyle]();return t.color=t.color||"#000000",t})),t=Object.create(null);if(this.margin&&Object.assign(t,this.margin[n.$toStyle]()),this.fill&&"visible"===this.fill.presence&&Object.assign(t,this.fill[n.$toStyle]()),this.corner.children.some((function(e){return 0!==e.radius}))){var r=this.corner.children.map((function(e){return e[n.$toStyle]()}));if(2===r.length||3===r.length)for(var a=r.at(-1),i=r.length;i<4;i++)r.push(a);t.borderRadius=r.map((function(e){return e.radius})).join(" ")}switch(this.presence){case"invisible":case"hidden":t.borderStyle="";break;case"inactive":t.borderStyle="none";break;default:t.borderStyle=e.map((function(e){return e.style})).join(" ")}return t.borderWidth=e.map((function(e){return e.width})).join(" "),t.borderColor=e.map((function(e){return e.color})).join(" "),t}}]),r}(n.XFAObject),te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"break",!0)).after=(0,s.getStringOption)(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.afterTarget=e.afterTarget||"",n.before=(0,s.getStringOption)(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),n.beforeTarget=e.beforeTarget||"",n.bookendLeader=e.bookendLeader||"",n.bookendTrailer=e.bookendTrailer||"",n.id=e.id||"",n.overflowLeader=e.overflowLeader||"",n.overflowTarget=e.overflowTarget||"",n.overflowTrailer=e.overflowTrailer||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),re=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakAfter",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r)}(n.XFAObject),ne=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"breakBefore",!0)).id=e.id||"",n.leader=e.leader||"",n.startNew=(0,s.getInteger)({data:e.startNew,defaultValue:0,validate:function(e){return 1===e}}),n.target=e.target||"",n.targetType=(0,s.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),n.trailer=e.trailer||"",n.use=e.use||"",n.usehref=e.usehref||"",n.script=null,n}return v(r,[{key:n.$toHTML,value:function(e){return this[n.$extra]={},s.HTMLResult.FAILURE}}]),r}(n.XFAObject),ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"button",!0)).highlight=(0,s.getStringOption)(e.highlight,["inverted","none","outline","push"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=this[n.$getParent]()[n.$getParent](),a={name:"button",attributes:{id:this[n.$uid],class:["xfaButton"],style:{}},children:[]},i=O(r.event.children);try{for(i.s();!(t=i.n()).done;){var c=t.value;if("click"===c.activity&&c.script){var u=(0,l.recoverJsURL)(c.script[n.$content]);if(u){var f=(0,o.fixURL)(u.url);f&&a.children.push({name:"a",attributes:{id:"link"+this[n.$uid],href:f,newWindow:u.newWindow,class:["xfaLink"],style:{}},children:[]})}}}}catch(e){i.e(e)}finally{i.f()}return s.HTMLResult.success(a)}}]),r}(n.XFAObject),ie=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"calculate",!0)).id=e.id||"",n.override=(0,s.getStringOption)(e.override,["disabled","error","ignore","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.script=null,n}return v(r)}(n.XFAObject),oe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"caption",!0)).id=e.id||"",n.placement=(0,s.getStringOption)(e.placement,["left","bottom","inline","right","top"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.reserve=Math.ceil((0,s.getMeasurement)(e.reserve)),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.font=null,n.margin=null,n.para=null,n.value=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$getExtra,value:function(e){if(!this[n.$extra]){var t=e.width,r=e.height;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":r=this.reserve<=0?r:this.reserve}this[n.$extra]=(0,o.layoutNode)(this,{width:t,height:r})}return this[n.$extra]}},{key:n.$toHTML,value:function(e){if(!this.value)return s.HTMLResult.EMPTY;this[n.$pushPara]();var t=this.value[n.$toHTML](e).html;if(!t)return this[n.$popPara](),s.HTMLResult.EMPTY;var r=this.reserve;if(this.reserve<=0){var a=this[n.$getExtra](e),i=a.w,c=a.h;switch(this.placement){case"left":case"right":case"inline":this.reserve=i;break;case"top":case"bottom":this.reserve=c}}var u=[];"string"==typeof t?u.push({name:"#text",value:t}):u.push(t);var l=(0,o.toStyle)(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(l.width=(0,o.measureToString)(this.reserve));break;case"top":case"bottom":this.reserve>0&&(l.height=(0,o.measureToString)(this.reserve))}return(0,o.setPara)(this,null,t),this[n.$popPara](),this.reserve=r,s.HTMLResult.success({name:"div",attributes:{style:l,class:["xfaCaption"]},children:u})}}]),r}(n.XFAObject),se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificate")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"certificates",!0)).credentialServerPolicy=(0,s.getStringOption)(e.credentialServerPolicy,["optional","required"]),n.id=e.id||"",n.url=e.url||"",n.urlPolicy=e.urlPolicy||"",n.use=e.use||"",n.usehref=e.usehref||"",n.encryption=null,n.issuers=null,n.keyUsage=null,n.oids=null,n.signing=null,n.subjectDNs=null,n}return v(r)}(n.XFAObject),ue=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"checkButton",!0)).id=e.id||"",n.mark=(0,s.getStringOption)(e.mark,["default","check","circle","cross","diamond","square","star"]),n.shape=(0,s.getStringOption)(e.shape,["square","round"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r,a,i=(0,o.toStyle)("margin"),c=(0,o.measureToString)(this.size);i.width=i.height=c;var u,l=this[n.$getParent]()[n.$getParent](),f=l.items.children.length&&l.items.children[0][n.$toHTML]().html||[],h={on:(void 0!==f[0]?f[0]:"on").toString(),off:(void 0!==f[1]?f[1]:"off").toString()},d=(l.value&&l.value[n.$text]()||"off")===h.on||void 0,p=l[n.$getSubformParent](),g=l[n.$uid];p instanceof Re?(a=p[n.$uid],t="radio",r="xfaRadio",u=p[n.$data]&&p[n.$data][n.$uid]||p[n.$uid]):(t="checkbox",r="xfaCheckbox",u=l[n.$data]&&l[n.$data][n.$uid]||l[n.$uid]);var v={name:"input",attributes:{class:[r],style:i,fieldId:g,dataId:u,type:t,checked:d,xfaOn:h.on,xfaOff:h.off,"aria-label":B(l),"aria-required":!1}};return a&&(v.attributes.name=a),R(l)&&(v.attributes["aria-required"]=!0,v.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[v]})}}]),r}(n.XFAObject),le=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"choiceList",!0)).commitOn=(0,s.getStringOption)(e.commitOn,["select","exit"]),n.id=e.id||"",n.open=(0,s.getStringOption)(e.open,["userControl","always","multiSelect","onEntry"]),n.textEntry=(0,s.getInteger)({data:e.textEntry,defaultValue:0,validate:function(e){return 1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","margin"),r=this[n.$getParent]()[n.$getParent](),a=r.font&&r.font.size||10,i={fontSize:"calc(".concat(a,"px * var(--scale-factor))")},c=[];if(r.items.children.length>0){var u=r.items,l=0,f=0;2===u.children.length&&(f=1-(l=u.children[0].save));for(var h=u.children[l][n.$toHTML]().html,d=u.children[f][n.$toHTML]().html,p=!1,g=r.value&&r.value[n.$text]()||"",v=0,y=h.length;v=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),de=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"connect",!0)).connection=e.connection||"",n.id=e.id||"",n.ref=e.ref||"",n.usage=(0,s.getStringOption)(e.usage,["exportAndImport","exportOnly","importOnly"]),n.use=e.use||"",n.usehref=e.usehref||"",n.picture=null,n}return v(r)}(n.XFAObject),pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"contentArea",!0)).h=(0,s.getMeasurement)(e.h),n.id=e.id||"",n.name=e.name||"",n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.w=(0,s.getMeasurement)(e.w),n.x=(0,s.getMeasurement)(e.x,"0pt"),n.y=(0,s.getMeasurement)(e.y,"0pt"),n.desc=null,n.extras=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t={left:(0,o.measureToString)(this.x),top:(0,o.measureToString)(this.y),width:(0,o.measureToString)(this.w),height:(0,o.measureToString)(this.h)},r=["xfaContentarea"];return(0,o.isPrintOnly)(this)&&r.push("xfaPrintOnly"),s.HTMLResult.success({name:"div",children:[],attributes:{style:t,class:r,id:this[n.$uid]}})}}]),r}(n.XFAObject),ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"corner",!0)).id=e.id||"",n.inverted=(0,s.getInteger)({data:e.inverted,defaultValue:0,validate:function(e){return 1===e}}),n.join=(0,s.getStringOption)(e.join,["square","round"]),n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.radius=(0,s.getMeasurement)(e.radius),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");return e.radius=(0,o.measureToString)("square"===this.join?0:this.radius),e}}]),r}(n.XFAObject),ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"date")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTime")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"dateTimeEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.picker=(0,s.getStringOption)(e.picker,["host","none"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),be=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"decimal")).fracDigits=(0,s.getInteger)({data:e.fracDigits,defaultValue:2,validate:function(e){return!0}}),n.id=e.id||"",n.leadDigits=(0,s.getInteger)({data:e.leadDigits,defaultValue:-1,validate:function(e){return!0}}),n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),we=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"defaultUi",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"desc",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Se=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),xe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"digestMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.digestMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Oe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"draw",!0)).anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.border=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.value=null,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this),this[n.$pushPara]();var t=this.w,r=this.h,a=(0,o.layoutNode)(this,e),c=a.w,u=a.h,l=a.isBroken;if(c&&""===this.w){if(l&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;this.w=c}if(u&&""===this.h&&(this.h=u),$(this),!(0,i.checkDimensions)(this,e))return this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.FAILURE;X(this);var f=(0,o.toStyle)(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");(0,o.setMinMaxDimensions)(this,f),f.margin&&(f.padding=f.margin,delete f.margin);var h=["xfaDraw"];this.font&&h.push("xfaFont"),(0,o.isPrintOnly)(this)&&h.push("xfaPrintOnly");var d={style:f,id:this[n.$uid],class:h};this.name&&(d.xfaName=this.name);var p={name:"div",attributes:d,children:[]};D(this,d);var g=(0,o.computeBbox)(this,p,e),v=this.value?this.value[n.$toHTML](e).html:null;return null===v?(this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g)):(p.children.push(v),(0,o.setPara)(this,f,v),this.w=t,this.h=r,this[n.$popPara](),s.HTMLResult.success((0,o.createWrapper)(this,p),g))}}]),r}(n.XFAObject),Ae=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"edge",!0)).cap=(0,s.getStringOption)(e.cap,["square","butt","round"]),n.id=e.id||"",n.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),n.stroke=(0,s.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),n.thickness=(0,s.getMeasurement)(e.thickness,"0.5pt"),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"visibility");if(Object.assign(e,{linecap:this.cap,width:(0,o.measureToString)(this.thickness),color:this.color?this.color[n.$toStyle]():"#000000",style:""}),"visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}]),r}(n.XFAObject),Ce=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),Fe=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encodings",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encoding=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Pe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encrypt",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.certificate=null,n}return v(r)}(n.XFAObject),Te=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["encrypt","decrypt"]),n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Ie=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryption",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Ee=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"])).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.OptionObject),je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"encryptionMethods",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.encryptionMethod=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Me=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"event",!0)).activity=(0,s.getStringOption)(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),n.id=e.id||"",n.listen=(0,s.getStringOption)(e.listen,["refOnly","refAndDescendents"]),n.name=e.name||"",n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.encryptData=null,n.execute=null,n.script=null,n.signData=null,n.submit=null,n}return v(r)}(n.XFAObject),_e=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"exData")).contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.maxLength=(0,s.getInteger)({data:e.maxLength,defaultValue:-1,validate:function(e){return e>=-1}}),n.name=e.name||"",n.rid=e.rid||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["none","base64","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$isCDATAXml,value:function(){return"text/html"===this.contentType}},{key:n.$onChild,value:function(e){return("text/html"===this.contentType&&e[n.$namespaceId]===a.NamespaceIds.xhtml.id||"text/xml"===this.contentType)&&(this[n.$content]=e,!0)}},{key:n.$toHTML,value:function(e){return"text/html"===this.contentType&&this[n.$content]?this[n.$content][n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.ContentObject),Le=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exObject",!0)).archive=e.archive||"",a.classId=e.classId||"",a.codeBase=e.codeBase||"",a.codeType=e.codeType||"",a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Re=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"exclGroup",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.accessKey=e.accessKey||"",a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.margin=null,a.para=null,a.traversal=null,a.validate=null,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$hasSettableValue,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t,r=O(this.field.children);try{for(r.s();!(t=r.n()).done;){var a=t.value;if(!a.value){var i=new Vt({});a[n.$appendChild](i),a.value=i}a.value[n.$setValue](e)}}catch(e){r.e(e)}finally{r.f()}}))},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$toHTML,value:function(e){if(N(this),"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var t=[],r={id:this[n.$uid],class:[]};(0,o.setAccess)(this,r.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:t,attributes:r,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var a=this[n.$isSplittable]();if(a||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var c=new Set(["field"]);if(this.layout.includes("row")){var u=this[n.$getSubformParent]().columnWidths;Array.isArray(u)&&u.length>0&&(this[n.$extra].columnWidths=u,this[n.$extra].currentColumn=0)}var l=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),f=["xfaExclgroup"],h=(0,o.layoutClass)(this);h&&f.push(h),(0,o.isPrintOnly)(this)&&f.push("xfaPrintOnly"),r.style=l,r.class=f,this.name&&(r.xfaName=this.name),this[n.$pushPara]();for(var d="lr-tb"===this.layout||"rl-tb"===this.layout,p=d?2:1;this[n.$extra].attempt=1||-1===e}}),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.rotate=(0,s.getInteger)({data:e.rotate,defaultValue:0,validate:function(e){return e%90==0}}),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.border=null,a.calculate=null,a.caption=null,a.desc=null,a.extras=null,a.font=null,a.format=null,a.items=new n.XFAObjectArray(2),a.keep=null,a.margin=null,a.para=null,a.traversal=null,a.ui=null,a.validate=null,a.value=null,a.bindItems=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a}return v(r,[{key:n.$isBindable,value:function(){return!0}},{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){_(this,e)}))},{key:n.$toHTML,value:function(e){if(N(this),!this.ui){var t;switch(this.ui=new zt({}),this.ui[n.$globalData]=this[n.$globalData],this[n.$appendChild](this.ui),this.items.children.length){case 0:t=new Ut({}),this.ui.textEdit=t;break;case 1:t=new ue({}),this.ui.checkButton=t;break;case 2:t=new le({}),this.ui.choiceList=t}this.ui[n.$appendChild](t)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return s.HTMLResult.EMPTY;this.caption&&delete this.caption[n.$extra],this[n.$pushPara]();var r=this.caption?this.caption[n.$toHTML](e).html:null,a=this.w,c=this.h,l=0,f=0;this.margin&&(l=this.margin.leftInset+this.margin.rightInset,f=this.margin.topInset+this.margin.bottomInset);var h=null;if(""===this.w||""===this.h){var d=null,g=null,v=0,y=0;if(this.ui.checkButton)v=y=this.ui.checkButton.size;else{var m=(0,o.layoutNode)(this,e),b=m.w,w=m.h;null!==b?(v=b,y=w):y=(0,u.getMetrics)(this.font,!0).lineNoGap}if(v+=(h=j(this.ui[n.$getExtra]())).w,y+=h.h,this.caption){var k=this.caption[n.$getExtra](e),S=k.w,x=k.h;if(k.isBroken&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),s.HTMLResult.FAILURE;switch(d=S,g=x,this.caption.placement){case"left":case"right":case"inline":d+=v;break;case"top":case"bottom":g+=y}}else d=v,g=y;d&&""===this.w&&(d+=l,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1=1&&e<=5}}),n.appearanceFilter=null,n.certificates=null,n.digestMethods=null,n.encodings=null,n.encryptionMethods=null,n.handler=null,n.lockDocument=null,n.mdp=null,n.reasons=null,n.timeStamp=null,n}return v(r)}(n.XFAObject),Xe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"float")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),He=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"font",!0)).baselineShift=(0,s.getMeasurement)(e.baselineShift),n.fontHorizontalScale=(0,s.getFloat)({data:e.fontHorizontalScale,defaultValue:100,validate:function(e){return e>=0}}),n.fontVerticalScale=(0,s.getFloat)({data:e.fontVerticalScale,defaultValue:100,validate:function(e){return e>=0}}),n.id=e.id||"",n.kerningMode=(0,s.getStringOption)(e.kerningMode,["none","pair"]),n.letterSpacing=(0,s.getMeasurement)(e.letterSpacing,"0"),n.lineThrough=(0,s.getInteger)({data:e.lineThrough,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.lineThroughPeriod=(0,s.getStringOption)(e.lineThroughPeriod,["all","word"]),n.overline=(0,s.getInteger)({data:e.overline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.overlinePeriod=(0,s.getStringOption)(e.overlinePeriod,["all","word"]),n.posture=(0,s.getStringOption)(e.posture,["normal","italic"]),n.size=(0,s.getMeasurement)(e.size,"10pt"),n.typeface=e.typeface||"Courier",n.underline=(0,s.getInteger)({data:e.underline,defaultValue:0,validate:function(e){return 1===e||2===e}}),n.underlinePeriod=(0,s.getStringOption)(e.underlinePeriod,["all","word"]),n.use=e.use||"",n.usehref=e.usehref||"",n.weight=(0,s.getStringOption)(e.weight,["normal","bold"]),n.extras=null,n.fill=null,n}return v(r,[{key:n.$clean,value:function(e){d(k(r.prototype),n.$clean,this).call(this,e),this[n.$globalData].usedTypefaces.add(this.typeface)}},{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"fill"),t=e.color;return t&&("#000000"===t?delete e.color:t.startsWith("#")||(e.background=t,e.backgroundClip="text",e.color="transparent")),this.baselineShift&&(e.verticalAlign=(0,o.measureToString)(this.baselineShift)),e.fontKerning="none"===this.kerningMode?"none":"normal",e.letterSpacing=(0,o.measureToString)(this.letterSpacing),0!==this.lineThrough&&(e.textDecoration="line-through",2===this.lineThrough&&(e.textDecorationStyle="double")),0!==this.overline&&(e.textDecoration="overline",2===this.overline&&(e.textDecorationStyle="double")),e.fontStyle=this.posture,e.fontSize=(0,o.measureToString)(.99*this.size),(0,o.setFontFamily)(this,this,this[n.$globalData].fontFinder,e),0!==this.underline&&(e.textDecoration="underline",2===this.underline&&(e.textDecorationStyle="double")),e.fontWeight=this.weight,e}}]),r}(n.XFAObject),qe=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"format",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n}return v(r)}(n.XFAObject),Ge=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"handler")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),ze=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"hyphenation")).excludeAllCaps=(0,s.getInteger)({data:e.excludeAllCaps,defaultValue:0,validate:function(e){return 1===e}}),n.excludeInitialCap=(0,s.getInteger)({data:e.excludeInitialCap,defaultValue:0,validate:function(e){return 1===e}}),n.hyphenate=(0,s.getInteger)({data:e.hyphenate,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.pushCharacterCount=(0,s.getInteger)({data:e.pushCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.remainCharacterCount=(0,s.getInteger)({data:e.remainCharacterCount,defaultValue:3,validate:function(e){return e>=0}}),n.use=e.use||"",n.usehref=e.usehref||"",n.wordCharacterCount=(0,s.getInteger)({data:e.wordCharacterCount,defaultValue:7,validate:function(e){return e>=0}}),n}return v(r)}(n.XFAObject),We=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"image")).aspect=(0,s.getStringOption)(e.aspect,["fit","actual","height","none","width"]),n.contentType=e.contentType||"",n.href=e.href||"",n.id=e.id||"",n.name=e.name||"",n.transferEncoding=(0,s.getStringOption)(e.transferEncoding,["base64","none","package"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$toHTML,value:function(){if(this.contentType&&!I.has(this.contentType.toLowerCase()))return s.HTMLResult.EMPTY;var e=this[n.$globalData].images&&this[n.$globalData].images.get(this.href);if(!e&&(this.href||!this[n.$content]))return s.HTMLResult.EMPTY;if(e||"base64"!==this.transferEncoding||(e=(0,c.stringToBytes)(atob(this[n.$content]))),!e)return s.HTMLResult.EMPTY;if(!this.contentType){for(var t=0,r=E;ti.length&&i.every((function(t,r){return t===e[r]}))){this.contentType=o;break}}if(!this.contentType)return s.HTMLResult.EMPTY}var u,l=new Blob([e],{type:this.contentType});switch(this.aspect){case"fit":case"actual":break;case"height":u={height:"100%",objectFit:"fill"};break;case"none":u={width:"100%",height:"100%",objectFit:"fill"};break;case"width":u={width:"100%",objectFit:"fill"}}var f=this[n.$getParent]();return s.HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:u,src:URL.createObjectURL(l),alt:f?B(f[n.$getParent]()):null}})}}]),r}(n.StringObject),Ve=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"imageEdit",!0)).data=(0,s.getStringOption)(e.data,["link","embed"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){return"embed"===this.data?s.HTMLResult.success({name:"div",children:[],attributes:{}}):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Ye=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"integer")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=parseInt(this[n.$content].trim(),10);this[n.$content]=isNaN(e)?null:e}},{key:n.$toHTML,value:function(e){return U(null!==this[n.$content]?this[n.$content].toString():"")}}]),r}(n.ContentObject),Ke=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"issuers",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Je=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"items",!0)).id=e.id||"",a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.ref=e.ref||"",a.save=(0,s.getInteger)({data:e.save,defaultValue:0,validate:function(e){return 1===e}}),a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$toHTML,value:function(){var e,t=[],r=O(this[n.$getChildren]());try{for(r.s();!(e=r.n()).done;){var a=e.value;t.push(a[n.$text]())}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.success(t)}}]),r}(n.XFAObject);t.Items=Je;var Ze=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r),(n=t.call(this,F,"keep",!0)).id=e.id||"";var a=["none","contentArea","pageArea"];return n.intact=(0,s.getStringOption)(e.intact,a),n.next=(0,s.getStringOption)(e.next,a),n.previous=(0,s.getStringOption)(e.previous,a),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r)}(n.XFAObject),Qe=function(e){m(r,e);var t=w(r);function r(e){var n;y(this,r);var a=["","yes","no"];return(n=t.call(this,F,"keyUsage")).crlSign=(0,s.getStringOption)(e.crlSign,a),n.dataEncipherment=(0,s.getStringOption)(e.dataEncipherment,a),n.decipherOnly=(0,s.getStringOption)(e.decipherOnly,a),n.digitalSignature=(0,s.getStringOption)(e.digitalSignature,a),n.encipherOnly=(0,s.getStringOption)(e.encipherOnly,a),n.id=e.id||"",n.keyAgreement=(0,s.getStringOption)(e.keyAgreement,a),n.keyCertSign=(0,s.getStringOption)(e.keyCertSign,a),n.keyEncipherment=(0,s.getStringOption)(e.keyEncipherment,a),n.nonRepudiation=(0,s.getStringOption)(e.nonRepudiation,a),n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"line",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),n.id=e.id||"",n.slope=(0,s.getStringOption)(e.slope,["\\\\","/"]),n.use=e.use||"",n.usehref=e.usehref||"",n.edge=null,n}return v(r,[{key:n.$toHTML,value:function(){var e,t,r,a,i=this[n.$getParent]()[n.$getParent](),c=this.edge||new Ae({}),u=c[n.$toStyle](),l=Object.create(null),f="visible"===c.presence?c.thickness:0;l.strokeWidth=(0,o.measureToString)(f),l.stroke=u.color;var h="100%",d="100%";i.w<=f?(e="50%",t=0,r="50%",a="100%",h=l.strokeWidth):i.h<=f?(e=0,t="50%",r="100%",a="50%",d=l.strokeWidth):"\\\\"===this.slope?(e=0,t=0,r="100%",a="100%"):(e=0,t="100%",r="100%",a=0);var p={name:"svg",children:[{name:"line",attributes:{xmlns:P,x1:e,y1:t,x2:r,y2:a,style:l}}],attributes:{xmlns:P,width:h,height:d,style:{overflow:"visible"}}};return M(i)?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[p]}):(p.attributes.style.position="absolute",s.HTMLResult.success(p))}}]),r}(n.XFAObject),tt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"linear",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toRight","toBottom","toLeft","toTop"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.type.replace(/([RBLT])/," $1").toLowerCase(),r=this.color?this.color[n.$toStyle]():"#000000";return"linear-gradient(".concat(t,", ").concat(e,", ").concat(r,")")}}]),r}(n.XFAObject),rt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"lockDocument")).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=(0,s.getStringOption)(this[n.$content],["auto","0","1"])}}]),r}(n.ContentObject),nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"manifest",!0)).action=(0,s.getStringOption)(e.action,["include","all","exclude"]),a.id=e.id||"",a.name=e.name||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.ref=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),at=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"margin",!0)).bottomInset=(0,s.getMeasurement)(e.bottomInset,"0"),n.id=e.id||"",n.leftInset=(0,s.getMeasurement)(e.leftInset,"0"),n.rightInset=(0,s.getMeasurement)(e.rightInset,"0"),n.topInset=(0,s.getMeasurement)(e.topInset,"0"),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(){return{margin:(0,o.measureToString)(this.topInset)+" "+(0,o.measureToString)(this.rightInset)+" "+(0,o.measureToString)(this.bottomInset)+" "+(0,o.measureToString)(this.leftInset)}}}]),r}(n.XFAObject),it=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"mdp")).id=e.id||"",n.permissions=(0,s.getInteger)({data:e.permissions,defaultValue:2,validate:function(e){return 1===e||3===e}}),n.signatureType=(0,s.getStringOption)(e.signatureType,["filler","author"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"medium")).id=e.id||"",n.imagingBBox=(0,s.getBBox)(e.imagingBBox),n.long=(0,s.getMeasurement)(e.long),n.orientation=(0,s.getStringOption)(e.orientation,["portrait","landscape"]),n.short=(0,s.getMeasurement)(e.short),n.stock=e.stock||"",n.trayIn=(0,s.getStringOption)(e.trayIn,["auto","delegate","pageFront"]),n.trayOut=(0,s.getStringOption)(e.trayOut,["auto","delegate"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),st=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"message",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.text=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"numericEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t=(0,o.toStyle)(this,"border","font","margin"),r=this[n.$getParent]()[n.$getParent](),a={name:"input",attributes:{type:"text",fieldId:r[n.$uid],dataId:r[n.$data]&&r[n.$data][n.$uid]||r[n.$uid],class:["xfaTextfield"],style:t,"aria-label":B(r),"aria-required":!1}};return R(r)&&(a.attributes["aria-required"]=!0,a.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}]),r}(n.XFAObject),ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"occur",!0)).id=e.id||"",n.initial=""!==e.initial?(0,s.getInteger)({data:e.initial,defaultValue:"",validate:function(e){return!0}}):"",n.max=""!==e.max?(0,s.getInteger)({data:e.max,defaultValue:1,validate:function(e){return!0}}):"",n.min=""!==e.min?(0,s.getInteger)({data:e.min,defaultValue:1,validate:function(e){return!0}}):"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$clean,value:function(){var e=this[n.$getParent](),t=this.min;""===this.min&&(this.min=e instanceof dt||e instanceof pt?0:1),""===this.max&&(this.max=""===t?e instanceof dt||e instanceof pt?-1:1:this.min),-1!==this.max&&this.max=0}}),n.preserve=e.preserve||"",n.radixOffset=e.radixOffset?(0,s.getMeasurement)(e.radixOffset,"0pt"):"",n.spaceAbove=e.spaceAbove?(0,s.getMeasurement)(e.spaceAbove,"0pt"):"",n.spaceBelow=e.spaceBelow?(0,s.getMeasurement)(e.spaceBelow,"0pt"):"",n.tabDefault=e.tabDefault?(0,s.getMeasurement)(n.tabDefault):"",n.tabStops=(e.tabStops||"").trim().split(/\\s+/).map((function(e,t){return t%2==1?(0,s.getMeasurement)(e):e})),n.textIndent=e.textIndent?(0,s.getMeasurement)(e.textIndent,"0pt"):"",n.use=e.use||"",n.usehref=e.usehref||"",n.vAlign=(0,s.getStringOption)(e.vAlign,["top","bottom","middle"]),n.widows=(0,s.getInteger)({data:e.widows,defaultValue:0,validate:function(e){return e>=0}}),n.hyphenation=null,n}return v(r,[{key:n.$toStyle,value:function(){var e=(0,o.toStyle)(this,"hAlign");return""!==this.marginLeft&&(e.paddingLeft=(0,o.measureToString)(this.marginLeft)),""!==this.marginRight&&(e.paddingight=(0,o.measureToString)(this.marginRight)),""!==this.spaceAbove&&(e.paddingTop=(0,o.measureToString)(this.spaceAbove)),""!==this.spaceBelow&&(e.paddingBottom=(0,o.measureToString)(this.spaceBelow)),""!==this.textIndent&&(e.textIndent=(0,o.measureToString)(this.textIndent),(0,o.fixTextIndent)(e)),this.lineHeight>0&&(e.lineHeight=(0,o.measureToString)(this.lineHeight)),""!==this.tabDefault&&(e.tabSize=(0,o.measureToString)(this.tabDefault)),this.tabStops.length,this.hyphenatation&&Object.assign(e,this.hyphenatation[n.$toStyle]()),e}}]),r}(n.XFAObject),vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"passwordEdit",!0)).hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.passwordChar=e.passwordChar||"*",n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.margin=null,n}return v(r)}(n.XFAObject),yt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"pattern",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="repeating-linear-gradient",a="".concat(e,",").concat(e," ").concat(5,"px,").concat(t," ").concat(5,"px,").concat(t," ").concat(10,"px");switch(this.type){case"crossHatch":return"".concat(r,"(to top,").concat(a,") ").concat(r,"(to right,").concat(a,")");case"crossDiagonal":return"".concat(r,"(45deg,").concat(a,") ").concat(r,"(-45deg,").concat(a,")");case"diagonalLeft":return"".concat(r,"(45deg,").concat(a,")");case"diagonalRight":return"".concat(r,"(-45deg,").concat(a,")");case"horizontal":return"".concat(r,"(to top,").concat(a,")");case"vertical":return"".concat(r,"(to right,").concat(a,")")}return""}}]),r}(n.XFAObject),mt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"picture")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),bt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"proto",!0)).appearanceFilter=new n.XFAObjectArray,a.arc=new n.XFAObjectArray,a.area=new n.XFAObjectArray,a.assist=new n.XFAObjectArray,a.barcode=new n.XFAObjectArray,a.bindItems=new n.XFAObjectArray,a.bookend=new n.XFAObjectArray,a.boolean=new n.XFAObjectArray,a.border=new n.XFAObjectArray,a.break=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.button=new n.XFAObjectArray,a.calculate=new n.XFAObjectArray,a.caption=new n.XFAObjectArray,a.certificate=new n.XFAObjectArray,a.certificates=new n.XFAObjectArray,a.checkButton=new n.XFAObjectArray,a.choiceList=new n.XFAObjectArray,a.color=new n.XFAObjectArray,a.comb=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.contentArea=new n.XFAObjectArray,a.corner=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.dateTimeEdit=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.defaultUi=new n.XFAObjectArray,a.desc=new n.XFAObjectArray,a.digestMethod=new n.XFAObjectArray,a.digestMethods=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.edge=new n.XFAObjectArray,a.encoding=new n.XFAObjectArray,a.encodings=new n.XFAObjectArray,a.encrypt=new n.XFAObjectArray,a.encryptData=new n.XFAObjectArray,a.encryption=new n.XFAObjectArray,a.encryptionMethod=new n.XFAObjectArray,a.encryptionMethods=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.execute=new n.XFAObjectArray,a.extras=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.fill=new n.XFAObjectArray,a.filter=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.font=new n.XFAObjectArray,a.format=new n.XFAObjectArray,a.handler=new n.XFAObjectArray,a.hyphenation=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.imageEdit=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.issuers=new n.XFAObjectArray,a.items=new n.XFAObjectArray,a.keep=new n.XFAObjectArray,a.keyUsage=new n.XFAObjectArray,a.line=new n.XFAObjectArray,a.linear=new n.XFAObjectArray,a.lockDocument=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.margin=new n.XFAObjectArray,a.mdp=new n.XFAObjectArray,a.medium=new n.XFAObjectArray,a.message=new n.XFAObjectArray,a.numericEdit=new n.XFAObjectArray,a.occur=new n.XFAObjectArray,a.oid=new n.XFAObjectArray,a.oids=new n.XFAObjectArray,a.overflow=new n.XFAObjectArray,a.pageArea=new n.XFAObjectArray,a.pageSet=new n.XFAObjectArray,a.para=new n.XFAObjectArray,a.passwordEdit=new n.XFAObjectArray,a.pattern=new n.XFAObjectArray,a.picture=new n.XFAObjectArray,a.radial=new n.XFAObjectArray,a.reason=new n.XFAObjectArray,a.reasons=new n.XFAObjectArray,a.rectangle=new n.XFAObjectArray,a.ref=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a.signature=new n.XFAObjectArray,a.signing=new n.XFAObjectArray,a.solid=new n.XFAObjectArray,a.speak=new n.XFAObjectArray,a.stipple=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a.subjectDN=new n.XFAObjectArray,a.subjectDNs=new n.XFAObjectArray,a.submit=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.textEdit=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a.timeStamp=new n.XFAObjectArray,a.toolTip=new n.XFAObjectArray,a.traversal=new n.XFAObjectArray,a.traverse=new n.XFAObjectArray,a.ui=new n.XFAObjectArray,a.validate=new n.XFAObjectArray,a.value=new n.XFAObjectArray,a.variables=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"radial",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["toEdge","toCenter"]),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){e=e?e[n.$toStyle]():"#FFFFFF";var t=this.color?this.color[n.$toStyle]():"#000000",r="toEdge"===this.type?"".concat(e,",").concat(t):"".concat(t,",").concat(e);return"radial-gradient(circle at center, ".concat(r,")")}}]),r}(n.XFAObject),kt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"reason")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),St=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"reasons",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.reason=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),xt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"rectangle",!0)).hand=(0,s.getStringOption)(e.hand,["even","left","right"]),a.id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.corner=new n.XFAObjectArray(4),a.edge=new n.XFAObjectArray(4),a.fill=null,a}return v(r,[{key:n.$toHTML,value:function(){var e=this.edge.children.length?this.edge.children[0]:new Ae({}),t=e[n.$toStyle](),r=Object.create(null);this.fill&&"visible"===this.fill.presence?Object.assign(r,this.fill[n.$toStyle]()):r.fill="transparent",r.strokeWidth=(0,o.measureToString)("visible"===e.presence?e.thickness:0),r.stroke=t.color;var a=(this.corner.children.length?this.corner.children[0]:new ge({}))[n.$toStyle](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:P,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:r}}],attributes:{xmlns:P,style:{overflow:"visible"},width:"100%",height:"100%"}};return M(this[n.$getParent]()[n.$getParent]())?s.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]}):(i.attributes.style.position="absolute",s.HTMLResult.success(i))}}]),r}(n.XFAObject),Ot=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ref")).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),At=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"script")).binding=e.binding||"",n.contentType=e.contentType||"",n.id=e.id||"",n.name=e.name||"",n.runAt=(0,s.getStringOption)(e.runAt,["client","both","server"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),Ct=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"setProperty")).connection=e.connection||"",n.ref=e.ref||"",n.target=e.target||"",n}return v(r)}(n.XFAObject);t.SetProperty=Ct;var Ft=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signData",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["sign","clear","verify"]),n.ref=e.ref||"",n.target=e.target||"",n.use=e.use||"",n.usehref=e.usehref||"",n.filter=null,n.manifest=null,n}return v(r)}(n.XFAObject),Pt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"signature",!0)).id=e.id||"",n.type=(0,s.getStringOption)(e.type,["PDF1.3","PDF1.6"]),n.use=e.use||"",n.usehref=e.usehref||"",n.border=null,n.extras=null,n.filter=null,n.manifest=null,n.margin=null,n}return v(r)}(n.XFAObject),Tt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"signing",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.certificate=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),It=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"solid",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){return e?e[n.$toStyle]():"#FFFFFF"}}]),r}(n.XFAObject),Et=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"speak")).disable=(0,s.getInteger)({data:e.disable,defaultValue:0,validate:function(e){return 1===e}}),n.id=e.id||"",n.priority=(0,s.getStringOption)(e.priority,["custom","caption","name","toolTip"]),n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),jt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"stipple",!0)).id=e.id||"",n.rate=(0,s.getInteger)({data:e.rate,defaultValue:50,validate:function(e){return e>=0&&e<=100}}),n.use=e.use||"",n.usehref=e.usehref||"",n.color=null,n.extras=null,n}return v(r,[{key:n.$toStyle,value:function(e){var t=this.rate/100;return c.Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}]),r}(n.XFAObject),Mt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subform",!0)).access=(0,s.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),a.allowMacro=(0,s.getInteger)({data:e.allowMacro,defaultValue:0,validate:function(e){return 1===e}}),a.anchorType=(0,s.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),a.colSpan=(0,s.getInteger)({data:e.colSpan,defaultValue:1,validate:function(e){return e>=1||-1===e}}),a.columnWidths=(e.columnWidths||"").trim().split(/\\s+/).map((function(e){return"-1"===e?-1:(0,s.getMeasurement)(e)})),a.h=e.h?(0,s.getMeasurement)(e.h):"",a.hAlign=(0,s.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),a.id=e.id||"",a.layout=(0,s.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),a.locale=e.locale||"",a.maxH=(0,s.getMeasurement)(e.maxH,"0pt"),a.maxW=(0,s.getMeasurement)(e.maxW,"0pt"),a.mergeMode=(0,s.getStringOption)(e.mergeMode,["consumeData","matchTemplate"]),a.minH=(0,s.getMeasurement)(e.minH,"0pt"),a.minW=(0,s.getMeasurement)(e.minW,"0pt"),a.name=e.name||"",a.presence=(0,s.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),a.relevant=(0,s.getRelevant)(e.relevant),a.restoreState=(0,s.getStringOption)(e.restoreState,["manual","auto"]),a.scope=(0,s.getStringOption)(e.scope,["name","none"]),a.use=e.use||"",a.usehref=e.usehref||"",a.w=e.w?(0,s.getMeasurement)(e.w):"",a.x=(0,s.getMeasurement)(e.x,"0pt"),a.y=(0,s.getMeasurement)(e.y,"0pt"),a.assist=null,a.bind=null,a.bookend=null,a.border=null,a.break=null,a.calculate=null,a.desc=null,a.extras=null,a.keep=null,a.margin=null,a.occur=null,a.overflow=null,a.pageSet=null,a.para=null,a.traversal=null,a.validate=null,a.variables=null,a.area=new n.XFAObjectArray,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.connect=new n.XFAObjectArray,a.draw=new n.XFAObjectArray,a.event=new n.XFAObjectArray,a.exObject=new n.XFAObjectArray,a.exclGroup=new n.XFAObjectArray,a.field=new n.XFAObjectArray,a.proto=new n.XFAObjectArray,a.setProperty=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getSubformParent,value:function(){var e=this[n.$getParent]();return e instanceof _t?e[n.$getSubformParent]():e}},{key:n.$isBindable,value:function(){return!0}},{key:n.$isThereMoreWidth,value:function(){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}},{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$flushHTML,value:function(){return(0,i.flushHTML)(this)}},{key:n.$addHTML,value:function(e,t){(0,i.addHTML)(this,e,t)}},{key:n.$getAvailableSpace,value:function(){return(0,i.getAvailableSpace)(this)}},{key:n.$isSplittable,value:function(){var e=this[n.$getSubformParent]();return!!e[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")||this.keep&&"none"!==this.keep.intact?(this[n.$extra]._isSplittable=!1,!1):!(e.layout&&e.layout.endsWith("-tb")&&0!==e[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}},{key:n.$toHTML,value:function(e){if(N(this),this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){var t=new re({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});t[n.$globalData]=this[n.$globalData],this[n.$appendChild](t),this.breakAfter.push(t)}if("auto"!==this.break.before||""!==this.break.beforeTarget){var r=new ne({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});r[n.$globalData]=this[n.$globalData],this[n.$appendChild](r),this.breakBefore.push(r)}if(""!==this.break.overflowTarget){var a=new ht({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});a[n.$globalData]=this[n.$globalData],this[n.$appendChild](a),this.overflow.push(a)}this[n.$removeChild](this.break),this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return s.HTMLResult.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&(0,c.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){var u=this.breakBefore.children[0];if(H(u))return s.HTMLResult.breakNode(u)}if(this[n.$extra]&&this[n.$extra].afterBreakAfter)return s.HTMLResult.EMPTY;(0,o.fixDimensions)(this);var l=[],f={id:this[n.$uid],class:[]};(0,o.setAccess)(this,f.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:l,line:null,attributes:f,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});var h=this[n.$getTemplateRoot](),d=h[n.$extra].noLayoutFailure,p=this[n.$isSplittable]();if(p||$(this),!(0,i.checkDimensions)(this,e))return s.HTMLResult.FAILURE;var g=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){var v=this[n.$getSubformParent]().columnWidths;Array.isArray(v)&&v.length>0&&(this[n.$extra].columnWidths=v,this[n.$extra].currentColumn=0)}var y=(0,o.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),m=["xfaSubform"],b=(0,o.layoutClass)(this);if(b&&m.push(b),f.style=y,f.class=m,this.name&&(f.xfaName=this.name),this.overflow){var w=this.overflow[n.$getExtra]();w.addLeader&&(w.addLeader=!1,q(this,w.leader,e))}this[n.$pushPara]();for(var k="lr-tb"===this.layout||"rl-tb"===this.layout,S=k?2:1;this[n.$extra].attempt=1){var j=this.breakAfter.children[0];if(H(j))return this[n.$extra].afterBreakAfter=E,s.HTMLResult.breakNode(j)}return delete this[n.$extra],E}}]),r}(n.XFAObject),_t=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subformSet",!0)).id=e.id||"",a.name=e.name||"",a.relation=(0,s.getStringOption)(e.relation,["ordered","choice","unordered"]),a.relevant=(0,s.getRelevant)(e.relevant),a.use=e.use||"",a.usehref=e.usehref||"",a.bookend=null,a.break=null,a.desc=null,a.extras=null,a.occur=null,a.overflow=null,a.breakAfter=new n.XFAObjectArray,a.breakBefore=new n.XFAObjectArray,a.subform=new n.XFAObjectArray,a.subformSet=new n.XFAObjectArray,a}return v(r,[{key:n.$getContainedChildren,value:S().mark((function e(){return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.delegateYield(L(this),"t0",1);case 1:case"end":return e.stop()}}),e,this)}))},{key:n.$getSubformParent,value:function(){for(var e=this[n.$getParent]();!(e instanceof Mt);)e=e[n.$getParent]();return e}},{key:n.$isBindable,value:function(){return!0}}]),r}(n.XFAObject),Lt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"subjectDN")).delimiter=e.delimiter||",",n.id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){this[n.$content]=new Map(this[n.$content].split(this.delimiter).map((function(e){return(e=e.split("=",2))[0]=e[0].trim(),e})))}}]),r}(n.ContentObject),Rt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"subjectDNs",!0)).id=e.id||"",a.type=(0,s.getStringOption)(e.type,["optional","required"]),a.use=e.use||"",a.usehref=e.usehref||"",a.subjectDN=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Nt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"submit",!0)).embedPDF=(0,s.getInteger)({data:e.embedPDF,defaultValue:0,validate:function(e){return 1===e}}),a.format=(0,s.getStringOption)(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),a.id=e.id||"",a.target=e.target||"",a.textEncoding=(0,s.getKeyword)({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:function(e){return["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}}),a.use=e.use||"",a.usehref=e.usehref||"",a.xdpContent=e.xdpContent||"",a.encrypt=null,a.encryptData=new n.XFAObjectArray,a.signData=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Dt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"template",!0)).baseProfile=(0,s.getStringOption)(e.baseProfile,["full","interactiveForms"]),a.extras=null,a.subform=new n.XFAObjectArray,a}return v(r,[{key:n.$finalize,value:function(){0===this.subform.children.length&&(0,c.warn)("XFA - No subforms in template node."),this.subform.children.length>=2&&(0,c.warn)("XFA - Several subforms in template node: please file a bug."),this[n.$tabIndex]=5e3}},{key:n.$isSplittable,value:function(){return!0}},{key:n.$searchNode,value:function(e,t){return e.startsWith("#")?[this[n.$ids].get(e.slice(1))]:(0,f.searchNode)(this,t,e,!0,!0)}},{key:n.$toPages,value:S().mark((function e(){var t,r,a,i,o,u,l,f,d,p,g,v,y,m,b,w,k=this;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.subform.children.length){e.next=2;break}return e.abrupt("return",s.HTMLResult.success({name:"div",children:[]}));case 2:this[n.$extra]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]},(t=this.subform.children[0]).pageSet[n.$cleanPage](),r=t.pageSet.pageArea.children,a={name:"div",children:[]},i=null,o=null,u=null,t.breakBefore.children.length>=1?(o=t.breakBefore.children[0],u=o.target):t.subform.children.length>=1&&t.subform.children[0].breakBefore.children.length>=1?(o=t.subform.children[0].breakBefore.children[0],u=o.target):t.break&&t.break.beforeTarget?(o=t.break,u=o.beforeTarget):t.subform.children.length>=1&&t.subform.children[0].break&&t.subform.children[0].break.beforeTarget&&(o=t.subform.children[0].break,u=o.beforeTarget),o&&(l=this[n.$searchNode](u,o[n.$getParent]()))instanceof dt&&(i=l,o[n.$extra]={}),i||(i=r[0]),i[n.$extra]={numberOfUse:1},(f=i[n.$getParent]())[n.$extra]={numberOfUse:1,pageIndex:f.pageArea.children.indexOf(i),pageSetIndex:0},p=null,g=null,v=!0,y=0,m=0,b=S().mark((function e(){var r,o,s,u,l,f,h,b,w,x,O,A,C,F,P;return S().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(v){e.next=7;break}if(a.children.pop(),3!=++y){e.next=5;break}return(0,c.warn)("XFA - Something goes wrong: please file a bug."),e.abrupt("return",{v:a});case 5:e.next=8;break;case 7:y=0;case 8:d=null,k[n.$extra].currentPageArea=i,r=i[n.$toHTML]().html,a.children.push(r),p&&(k[n.$extra].noLayoutFailure=!0,r.children.push(p[n.$toHTML](i[n.$extra].space).html),p=null),g&&(k[n.$extra].noLayoutFailure=!0,r.children.push(g[n.$toHTML](i[n.$extra].space).html),g=null),o=i.contentArea.children,s=r.children.filter((function(e){return e.attributes.class.includes("xfaContentarea")})),v=!1,k[n.$extra].firstUnsplittable=null,k[n.$extra].noLayoutFailure=!1,u=function(e){var r=t[n.$flushHTML]();r&&(v=v||r.children&&0!==r.children.length,s[e].children.push(r))},l=m,f=o.length;case 21:if(!(l1&&a.children.pop(),e.abrupt("return",{v:a});case 31:if(!w.isBreak()){e.next=40;break}if(x=w.breakNode,u(l),"auto"!==x.targetType){e.next=36;break}return e.abrupt("continue",53);case 36:return x.leader&&(p=(p=k[n.$searchNode](x.leader,x[n.$getParent]()))?p[0]:null),x.trailer&&(g=(g=k[n.$searchNode](x.trailer,x[n.$getParent]()))?g[0]:null),"pageArea"===x.targetType?(d=x[n.$extra].target,l=1/0):x[n.$extra].target?(d=x[n.$extra].target,m=x[n.$extra].index+1,l=1/0):l=x[n.$extra].index,e.abrupt("continue",53);case 40:if(!k[n.$extra].overflowNode){e.next=52;break}return O=k[n.$extra].overflowNode,k[n.$extra].overflowNode=null,A=O[n.$getExtra](),C=A.target,A.addLeader=null!==A.leader,A.addTrailer=null!==A.trailer,u(l),F=l,l=1/0,C instanceof dt?d=C:C instanceof pe&&(-1!==(P=o.indexOf(C))?P>F?l=P-1:m=P:(d=C[n.$getParent](),m=d.contentArea.children.indexOf(C))),e.abrupt("continue",53);case 52:u(l);case 53:l++,e.next=21;break;case 56:return k[n.$extra].pageNumber+=1,d&&(d[n.$isUsable]()?d[n.$extra].numberOfUse+=1:d=null),i=d||i[n.$getNextPage](),e.next=61,null;case 61:case"end":return e.stop()}}),e)}));case 22:return e.delegateYield(b(),"t0",24);case 24:if("object"!==h(w=e.t0)){e.next=27;break}return e.abrupt("return",w.v);case 27:e.next=22;break;case 29:case"end":return e.stop()}}),e,this)}))}]),r}(n.XFAObject);t.Template=Dt;var Bt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"text")).id=e.id||"",n.maxChars=(0,s.getInteger)({data:e.maxChars,defaultValue:0,validate:function(e){return e>=0}}),n.name=e.name||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$acceptWhitespace,value:function(){return!0}},{key:n.$onChild,value:function(e){return e[n.$namespaceId]===a.NamespaceIds.xhtml.id?(this[n.$content]=e,!0):((0,c.warn)("XFA - Invalid content in Text: ".concat(e[n.$nodeName],".")),!1)}},{key:n.$onText,value:function(e){this[n.$content]instanceof n.XFAObject||d(k(r.prototype),n.$onText,this).call(this,e)}},{key:n.$finalize,value:function(){"string"==typeof this[n.$content]&&(this[n.$content]=this[n.$content].replace(/\\r\\n/g,"\\n"))}},{key:n.$getExtra,value:function(){return"string"==typeof this[n.$content]?this[n.$content].split(/[\\u2029\\u2028\\n]/).reduce((function(e,t){return t&&e.push(t),e}),[]).join("\\n"):this[n.$content][n.$text]()}},{key:n.$toHTML,value:function(e){if("string"==typeof this[n.$content]){var t=U(this[n.$content]).html;return this[n.$content].includes("\\u2029")?(t.name="div",t.children=[],this[n.$content].split("\\u2029").map((function(e){return e.split(/[\\u2028\\n]/).reduce((function(e,t){return e.push({name:"span",value:t},{name:"br"}),e}),[])})).forEach((function(e){t.children.push({name:"p",children:e})}))):/[\\u2028\\n]/.test(this[n.$content])&&(t.name="div",t.children=[],this[n.$content].split(/[\\u2028\\n]/).forEach((function(e){t.children.push({name:"span",value:e},{name:"br"})}))),s.HTMLResult.success(t)}return this[n.$content][n.$toHTML](e)}}]),r}(n.ContentObject);t.Text=Bt;var Ut=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"textEdit",!0)).allowRichText=(0,s.getInteger)({data:e.allowRichText,defaultValue:0,validate:function(e){return 1===e}}),n.hScrollPolicy=(0,s.getStringOption)(e.hScrollPolicy,["auto","off","on"]),n.id=e.id||"",n.multiLine=(0,s.getInteger)({data:e.multiLine,defaultValue:"",validate:function(e){return 0===e||1===e}}),n.use=e.use||"",n.usehref=e.usehref||"",n.vScrollPolicy=(0,s.getStringOption)(e.vScrollPolicy,["auto","off","on"]),n.border=null,n.comb=null,n.extras=null,n.margin=null,n}return v(r,[{key:n.$toHTML,value:function(e){var t,r=(0,o.toStyle)(this,"border","font","margin"),a=this[n.$getParent]()[n.$getParent]();return""===this.multiLine&&(this.multiLine=a instanceof Oe?1:0),t=1===this.multiLine?{name:"textarea",attributes:{dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:a[n.$data]&&a[n.$data][n.$uid]||a[n.$uid],fieldId:a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":B(a),"aria-required":!1}},R(a)&&(t.attributes["aria-required"]=!0,t.attributes.required=!0),s.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[t]})}}]),r}(n.XFAObject),$t=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"time")).id=e.id||"",n.name=e.name||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r,[{key:n.$finalize,value:function(){var e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}},{key:n.$toHTML,value:function(e){return U(this[n.$content]?this[n.$content].toString():"")}}]),r}(n.StringObject),Xt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"timeStamp")).id=e.id||"",n.server=e.server||"",n.type=(0,s.getStringOption)(e.type,["optional","required"]),n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.XFAObject),Ht=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"toolTip")).id=e.id||"",n.rid=e.rid||"",n.use=e.use||"",n.usehref=e.usehref||"",n}return v(r)}(n.StringObject),qt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"traversal",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.extras=null,a.traverse=new n.XFAObjectArray,a}return v(r)}(n.XFAObject),Gt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"traverse",!0)).id=e.id||"",n.operation=(0,s.getStringOption)(e.operation,["next","back","down","first","left","right","up"]),n.ref=e.ref||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.script=null,n}return v(r,[{key:"name",get:function(){return this.operation}},{key:n.$isTransparent,value:function(){return!1}}]),r}(n.XFAObject),zt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"ui",!0)).id=e.id||"",n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.picture=null,n.barcode=null,n.button=null,n.checkButton=null,n.choiceList=null,n.dateTimeEdit=null,n.defaultUi=null,n.imageEdit=null,n.numericEdit=null,n.passwordEdit=null,n.signature=null,n.textEdit=null,n}return v(r,[{key:n.$getExtra,value:function(){if(void 0===this[n.$extra]){var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("extras"!==r&&"picture"!==r){var a=this[r];if(a instanceof n.XFAObject)return this[n.$extra]=a,a}}}catch(e){t.e(e)}finally{t.f()}this[n.$extra]=null}return this[n.$extra]}},{key:n.$toHTML,value:function(e){var t=this[n.$getExtra]();return t?t[n.$toHTML](e):s.HTMLResult.EMPTY}}]),r}(n.XFAObject),Wt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"validate",!0)).formatTest=(0,s.getStringOption)(e.formatTest,["warning","disabled","error"]),n.id=e.id||"",n.nullTest=(0,s.getStringOption)(e.nullTest,["disabled","error","warning"]),n.scriptTest=(0,s.getStringOption)(e.scriptTest,["error","disabled","warning"]),n.use=e.use||"",n.usehref=e.usehref||"",n.extras=null,n.message=null,n.picture=null,n.script=null,n}return v(r)}(n.XFAObject),Vt=function(e){m(r,e);var t=w(r);function r(e){var n;return y(this,r),(n=t.call(this,F,"value",!0)).id=e.id||"",n.override=(0,s.getInteger)({data:e.override,defaultValue:0,validate:function(e){return 1===e}}),n.relevant=(0,s.getRelevant)(e.relevant),n.use=e.use||"",n.usehref=e.usehref||"",n.arc=null,n.boolean=null,n.date=null,n.dateTime=null,n.decimal=null,n.exData=null,n.float=null,n.image=null,n.integer=null,n.line=null,n.rectangle=null,n.text=null,n.time=null,n}return v(r,[{key:n.$setValue,value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){var t=this[n.$getParent]();if(t instanceof Be&&t.ui&&t.ui.imageEdit)return this.image||(this.image=new We({}),this[n.$appendChild](this.image)),void(this.image[n.$content]=e[n.$content]);var r=e[n.$nodeName];if(null===this[r]){var a,i=O(Object.getOwnPropertyNames(this));try{for(i.s();!(a=i.n()).done;){var o=a.value,s=this[o];s instanceof n.XFAObject&&(this[o]=null,this[n.$removeChild](s))}}catch(e){i.e(e)}finally{i.f()}this[e[n.$nodeName]]=e,this[n.$appendChild](e)}else this[r][n.$content]=e[n.$content]}))},{key:n.$text,value:function(){if(this.exData)return"string"==typeof this.exData[n.$content]?this.exData[n.$content].trim():this.exData[n.$content][n.$text]().trim();var e,t=O(Object.getOwnPropertyNames(this));try{for(t.s();!(e=t.n()).done;){var r=e.value;if("image"!==r){var a=this[r];if(a instanceof n.XFAObject)return(a[n.$content]||"").toString().trim()}}}catch(e){t.e(e)}finally{t.f()}return null}},{key:n.$toHTML,value:function(e){var t,r=O(Object.getOwnPropertyNames(this));try{for(r.s();!(t=r.n()).done;){var a=this[t.value];if(a instanceof n.XFAObject)return a[n.$toHTML](e)}}catch(e){r.e(e)}finally{r.f()}return s.HTMLResult.EMPTY}}]),r}(n.XFAObject);t.Value=Vt;var Yt=function(e){m(r,e);var t=w(r);function r(e){var a;return y(this,r),(a=t.call(this,F,"variables",!0)).id=e.id||"",a.use=e.use||"",a.usehref=e.usehref||"",a.boolean=new n.XFAObjectArray,a.date=new n.XFAObjectArray,a.dateTime=new n.XFAObjectArray,a.decimal=new n.XFAObjectArray,a.exData=new n.XFAObjectArray,a.float=new n.XFAObjectArray,a.image=new n.XFAObjectArray,a.integer=new n.XFAObjectArray,a.manifest=new n.XFAObjectArray,a.script=new n.XFAObjectArray,a.text=new n.XFAObjectArray,a.time=new n.XFAObjectArray,a}return v(r,[{key:n.$isTransparent,value:function(){return!0}}]),r}(n.XFAObject),Kt=function(){function e(){y(this,e)}return v(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t)){var a=e[t](r);return a[n.$setSetAttributes](r),a}}},{key:"appearanceFilter",value:function(e){return new G(e)}},{key:"arc",value:function(e){return new z(e)}},{key:"area",value:function(e){return new W(e)}},{key:"assist",value:function(e){return new V(e)}},{key:"barcode",value:function(e){return new Y(e)}},{key:"bind",value:function(e){return new K(e)}},{key:"bindItems",value:function(e){return new J(e)}},{key:"bookend",value:function(e){return new Z(e)}},{key:"boolean",value:function(e){return new Q(e)}},{key:"border",value:function(e){return new ee(e)}},{key:"break",value:function(e){return new te(e)}},{key:"breakAfter",value:function(e){return new re(e)}},{key:"breakBefore",value:function(e){return new ne(e)}},{key:"button",value:function(e){return new ae(e)}},{key:"calculate",value:function(e){return new ie(e)}},{key:"caption",value:function(e){return new oe(e)}},{key:"certificate",value:function(e){return new se(e)}},{key:"certificates",value:function(e){return new ce(e)}},{key:"checkButton",value:function(e){return new ue(e)}},{key:"choiceList",value:function(e){return new le(e)}},{key:"color",value:function(e){return new fe(e)}},{key:"comb",value:function(e){return new he(e)}},{key:"connect",value:function(e){return new de(e)}},{key:"contentArea",value:function(e){return new pe(e)}},{key:"corner",value:function(e){return new ge(e)}},{key:"date",value:function(e){return new ve(e)}},{key:"dateTime",value:function(e){return new ye(e)}},{key:"dateTimeEdit",value:function(e){return new me(e)}},{key:"decimal",value:function(e){return new be(e)}},{key:"defaultUi",value:function(e){return new we(e)}},{key:"desc",value:function(e){return new ke(e)}},{key:"digestMethod",value:function(e){return new Se(e)}},{key:"digestMethods",value:function(e){return new xe(e)}},{key:"draw",value:function(e){return new Oe(e)}},{key:"edge",value:function(e){return new Ae(e)}},{key:"encoding",value:function(e){return new Ce(e)}},{key:"encodings",value:function(e){return new Fe(e)}},{key:"encrypt",value:function(e){return new Pe(e)}},{key:"encryptData",value:function(e){return new Te(e)}},{key:"encryption",value:function(e){return new Ie(e)}},{key:"encryptionMethod",value:function(e){return new Ee(e)}},{key:"encryptionMethods",value:function(e){return new je(e)}},{key:"event",value:function(e){return new Me(e)}},{key:"exData",value:function(e){return new _e(e)}},{key:"exObject",value:function(e){return new Le(e)}},{key:"exclGroup",value:function(e){return new Re(e)}},{key:"execute",value:function(e){return new Ne(e)}},{key:"extras",value:function(e){return new De(e)}},{key:"field",value:function(e){return new Be(e)}},{key:"fill",value:function(e){return new Ue(e)}},{key:"filter",value:function(e){return new $e(e)}},{key:"float",value:function(e){return new Xe(e)}},{key:"font",value:function(e){return new He(e)}},{key:"format",value:function(e){return new qe(e)}},{key:"handler",value:function(e){return new Ge(e)}},{key:"hyphenation",value:function(e){return new ze(e)}},{key:"image",value:function(e){return new We(e)}},{key:"imageEdit",value:function(e){return new Ve(e)}},{key:"integer",value:function(e){return new Ye(e)}},{key:"issuers",value:function(e){return new Ke(e)}},{key:"items",value:function(e){return new Je(e)}},{key:"keep",value:function(e){return new Ze(e)}},{key:"keyUsage",value:function(e){return new Qe(e)}},{key:"line",value:function(e){return new et(e)}},{key:"linear",value:function(e){return new tt(e)}},{key:"lockDocument",value:function(e){return new rt(e)}},{key:"manifest",value:function(e){return new nt(e)}},{key:"margin",value:function(e){return new at(e)}},{key:"mdp",value:function(e){return new it(e)}},{key:"medium",value:function(e){return new ot(e)}},{key:"message",value:function(e){return new st(e)}},{key:"numericEdit",value:function(e){return new ct(e)}},{key:"occur",value:function(e){return new ut(e)}},{key:"oid",value:function(e){return new lt(e)}},{key:"oids",value:function(e){return new ft(e)}},{key:"overflow",value:function(e){return new ht(e)}},{key:"pageArea",value:function(e){return new dt(e)}},{key:"pageSet",value:function(e){return new pt(e)}},{key:"para",value:function(e){return new gt(e)}},{key:"passwordEdit",value:function(e){return new vt(e)}},{key:"pattern",value:function(e){return new yt(e)}},{key:"picture",value:function(e){return new mt(e)}},{key:"proto",value:function(e){return new bt(e)}},{key:"radial",value:function(e){return new wt(e)}},{key:"reason",value:function(e){return new kt(e)}},{key:"reasons",value:function(e){return new St(e)}},{key:"rectangle",value:function(e){return new xt(e)}},{key:"ref",value:function(e){return new Ot(e)}},{key:"script",value:function(e){return new At(e)}},{key:"setProperty",value:function(e){return new Ct(e)}},{key:"signData",value:function(e){return new Ft(e)}},{key:"signature",value:function(e){return new Pt(e)}},{key:"signing",value:function(e){return new Tt(e)}},{key:"solid",value:function(e){return new It(e)}},{key:"speak",value:function(e){return new Et(e)}},{key:"stipple",value:function(e){return new jt(e)}},{key:"subform",value:function(e){return new Mt(e)}},{key:"subformSet",value:function(e){return new _t(e)}},{key:"subjectDN",value:function(e){return new Lt(e)}},{key:"subjectDNs",value:function(e){return new Rt(e)}},{key:"submit",value:function(e){return new Nt(e)}},{key:"template",value:function(e){return new Dt(e)}},{key:"text",value:function(e){return new Bt(e)}},{key:"textEdit",value:function(e){return new Ut(e)}},{key:"time",value:function(e){return new $t(e)}},{key:"timeStamp",value:function(e){return new Xt(e)}},{key:"toolTip",value:function(e){return new Ht(e)}},{key:"traversal",value:function(e){return new qt(e)}},{key:"traverse",value:function(e){return new Gt(e)}},{key:"ui",value:function(e){return new zt(e)}},{key:"validate",value:function(e){return new Wt(e)}},{key:"value",value:function(e){return new Vt(e)}},{key:"variables",value:function(e){return new Yt(e)}}]),e}();t.TemplateNamespace=Kt},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addHTML=function(e,t,r){var s=e[n.$extra],u=s.availableSpace,l=i(r,4),f=l[0],h=l[1],d=l[2],p=l[3];switch(e.layout){case"position":s.width=Math.max(s.width,f+d),s.height=Math.max(s.height,h+p),s.children.push(t);break;case"lr-tb":case"rl-tb":s.line&&1!==s.attempt||(s.line=c(e,[]),s.children.push(s.line),s.numberInLine=0),s.numberInLine+=1,s.line.children.push(t),0===s.attempt?(s.currentWidth+=d,s.height=Math.max(s.height,s.prevHeight+p)):(s.currentWidth=d,s.prevHeight=s.height,s.height+=p,s.attempt=0),s.width=Math.max(s.width,s.currentWidth);break;case"rl-row":case"row":s.children.push(t),s.width+=d,s.height=Math.max(s.height,p);var g,v=(0,a.measureToString)(s.height),y=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=o(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}(s.children);try{for(y.s();!(g=y.n()).done;)g.value.attributes.style.height=v}catch(e){y.e(e)}finally{y.f()}break;case"table":case"tb":s.width=Math.min(u.width,Math.max(s.width,d)),s.height+=p,s.children.push(t)}},t.checkDimensions=function(e,t){if(null===e[n.$getTemplateRoot]()[n.$extra].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;var r=e[n.$getSubformParent](),a=r[n.$extra]&&r[n.$extra].attempt||0,o=i(function(e){var t,r,n=""===e.w?NaN:e.w,a=""===e.h?NaN:e.h,i=0,o=0;switch(e.anchorType||""){case"bottomCenter":i=n/2,o=a;break;case"bottomLeft":i=0,o=a;break;case"bottomRight":i=n,o=a;break;case"middleCenter":i=n/2,o=a/2;break;case"middleLeft":i=0,o=a/2;break;case"middleRight":i=n,o=a/2;break;case"topCenter":i=n/2,o=0;break;case"topRight":i=n,o=0}switch(e.rotate||0){case 0:t=-i,r=-o;break;case 90:t=-o,r=i;var s=[a,-n];n=s[0],a=s[1];break;case 180:t=i,r=o;var c=[-n,-a];n=c[0],a=c[1];break;case 270:t=o,r=-i;var u=[-a,n];n=u[0],a=u[1]}return[e.x+t+Math.min(0,n),e.y+r+Math.min(0,a),Math.abs(n),Math.abs(a)]}(e),4),s=o[1],c=o[2],u=o[3];switch(r.layout){case"lr-tb":case"rl-tb":return 0===a?e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure?""!==e.w?Math.round(c-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(u-t.height)>2)&&(""!==e.w?Math.round(c-t.width)<=2||0===r[n.$extra].numberInLine&&t.height>2:t.width>2):!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||!(""!==e.h&&Math.round(u-t.height)>2)&&(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2;case"table":case"tb":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||(""===e.h||e[n.$isSplittable]()?(""===e.w||Math.round(c-t.width)<=2||!r[n.$isThereMoreWidth]())&&t.height>2:Math.round(u-t.height)<=2);case"position":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u+s-t.height)<=2||u+s>e[n.$getTemplateRoot]()[n.$extra].currentContentArea.h;case"rl-row":case"row":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(u-t.height)<=2;default:return!0}},t.flushHTML=function(e){if(!e[n.$extra])return null;var t={name:"div",attributes:e[n.$extra].attributes,children:e[n.$extra].children};if(e[n.$extra].failingNode){var r=e[n.$extra].failingNode[n.$flushHTML]();r&&(e.layout.endsWith("-tb")?t.children.push(c(e,[r])):t.children.push(r))}return 0===t.children.length?null:t},t.getAvailableSpace=function(e){var t=e[n.$extra].availableSpace,r=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[n.$extra].attempt?{width:t.width-a-e[n.$extra].currentWidth,height:t.height-r-e[n.$extra].prevHeight}:{width:t.width-a,height:t.height-r-e[n.$extra].height};case"rl-row":case"row":return{width:e[n.$extra].columnWidths.slice(e[n.$extra].currentColumn).reduce((function(e,t){return e+t})),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-r-e[n.$extra].height};default:return t}};var n=r(206),a=r(213);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||o(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{Object.defineProperty(t,"__esModule",{value:!0}),t.computeBbox=function(e,t,r){var a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!r)return null;var i=e.w;if(""===i){if(0===e.maxW){var o=e[n.$getSubformParent]();i="position"===o.layout&&""!==o.w?0:e.minW}else i=Math.min(e.maxW,r.width);t.attributes.style.width=u(i)}var s=e.h;if(""===s){if(0===e.maxH){var c=e[n.$getSubformParent]();s="position"===c.layout&&""!==c.h?0:e.minH}else s=Math.min(e.maxH,r.height);t.attributes.style.height=u(s)}a=[e.x,e.y,i,s]}return a},t.createWrapper=function(e,t){var r=t.attributes,a=r.style,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(r.class.push("xfaWrapped"),e.border){var o,s,c=e.border[n.$extra],u=c.widths,l=c.insets,f=l[0],d=l[3],p=l[0]+l[2],g=l[1]+l[3];switch(e.border.hand){case"even":f-=u[0]/2,d-=u[3]/2,o="calc(100% + ".concat((u[1]+u[3])/2-g,"px)"),s="calc(100% + ".concat((u[0]+u[2])/2-p,"px)");break;case"left":f-=u[0],d-=u[3],o="calc(100% + ".concat(u[1]+u[3]-g,"px)"),s="calc(100% + ".concat(u[0]+u[2]-p,"px)");break;case"right":o=g?"calc(100% - ".concat(g,"px)"):"100%",s=p?"calc(100% - ".concat(p,"px)"):"100%"}var v=["xfaBorder"];h(e.border)&&v.push("xfaPrintOnly");for(var y={name:"div",attributes:{class:v,style:{top:"".concat(f,"px"),left:"".concat(d,"px"),width:o,height:s}},children:[]},m=0,b=["border","borderWidth","borderColor","borderRadius","borderStyle"];m=0)){var r="padding"+("left"==("right"===e.textAlign?"right":"left")?"Left":"Right"),n=(0,i.getMeasurement)(e[r],"0px");e[r]="".concat(n-t,"px")}},t.fixURL=function(e){var t=(0,a.createValidAbsoluteUrl)(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null},t.isPrintOnly=h,t.layoutClass=function(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}},t.layoutNode=function(e,t){var r=null,a=null,i=!1;if((!e.w||!e.h)&&e.value){var o=0,s=0;e.margin&&(o=e.margin.leftInset+e.margin.rightInset,s=e.margin.topInset+e.margin.bottomInset);var c=null,u=null;e.para&&(u=Object.create(null),c=""===e.para.lineHeight?null:e.para.lineHeight,u.top=""===e.para.spaceAbove?0:e.para.spaceAbove,u.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow,u.left=""===e.para.marginLeft?0:e.para.marginLeft,u.right=""===e.para.marginRight?0:e.para.marginRight);var l=e.font;if(!l)for(var h=e[n.$getTemplateRoot](),d=e[n.$getParent]();d&&d!==h;){if(d.font){l=d.font;break}d=d[n.$getParent]()}var p=(e.w||t.width)-o,g=e[n.$globalData].fontFinder;if(e.value.exData&&e.value.exData[n.$content]&&"text/html"===e.value.exData.contentType){var v=f(e.value.exData[n.$content],l,u,c,g,p);a=v.width,r=v.height,i=v.isBroken}else{var y=e.value[n.$text]();if(y){var m=f(y,l,u,c,g,p);a=m.width,r=m.height,i=m.isBroken}}null===a||e.w||(a+=o),null===r||e.h||(r+=s)}return{w:a,h:r,isBroken:i}},t.measureToString=u,t.setAccess=function(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}},t.setFontFamily=function(e,t,r,n){if(r){var a=(0,i.stripQuotes)(e.typeface);n.fontFamily='"'.concat(a,'"');var s=r.find(a);if(s){var c=s.regular.cssFontInfo.fontFamily;c!==a&&(n.fontFamily='"'.concat(c,'"'));var u=d(t);if(u&&""!==u.lineHeight)return;if(n.lineHeight)return;var l=(0,o.selectFont)(e,s);l&&(n.lineHeight=Math.max(1.2,l.lineHeight))}}else delete n.fontFamily},t.setMinMaxDimensions=function(e,t){"position"===e[n.$getSubformParent]().layout&&(e.minW>0&&(t.minWidth=u(e.minW)),e.maxW>0&&(t.maxWidth=u(e.maxW)),e.minH>0&&(t.minHeight=u(e.minH)),e.maxH>0&&(t.maxHeight=u(e.maxH)))},t.setPara=function(e,t,r){if(r.attributes.class&&r.attributes.class.includes("xfaRich")){t&&(""===e.h&&(t.height="auto"),""===e.w&&(t.width="auto"));var a=d(e);if(a){var i=r.attributes.style;switch(i.display="flex",i.flexDirection="column",a.vAlign){case"top":i.justifyContent="start";break;case"bottom":i.justifyContent="end";break;case"middle":i.justifyContent="center"}for(var o=a[n.$toStyle](),s=0,u=Object.entries(o);s1?r-1:0),o=1;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function d(e){var t=e[n.$getTemplateRoot]()[n.$extra].paraStack;return t.length?t.at(-1):null}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontFinder=void 0,t.getMetrics=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=null;if(e){var i=(0,a.stripQuotes)(e.typeface),o=e[n.$globalData].fontFinder.find(i);r=d(e,o)}if(!r)return{lineHeight:12,lineGap:2,lineNoGap:10};var s=e.size||10,c=r.lineHeight?Math.max(t?0:1.2,r.lineHeight):1.2,u=void 0===r.lineGap?.2:r.lineGap;return{lineHeight:c*s,lineGap:u*s,lineNoGap:Math.max(1,c-u)*s}},t.selectFont=d;var n=r(206),a=r(207),i=r(2);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:null,n=c(e);try{for(n.s();!(t=n.n()).done;){var a=t.value;this.addPdfFont(a)}}catch(e){n.e(e)}finally{n.f()}var i,o=c(this.fonts.values());try{for(o.s();!(i=o.n()).done;){var s=i.value;s.regular||(s.regular=s.italic||s.bold||s.bolditalic)}}catch(e){o.e(e)}finally{o.f()}if(r&&0!==r.size){var u,l=this.fonts.get("PdfJS-Fallback-PdfJS-XFA"),f=c(r);try{for(f.s();!(u=f.n()).done;){var h=u.value;this.fonts.set(h,l)}}catch(e){f.e(e)}finally{f.f()}}}},{key:"addPdfFont",value:function(e){var t=e.cssFontInfo,r=t.fontFamily,n=this.fonts.get(r);n||(n=Object.create(null),this.fonts.set(r,n),this.defaultFont||(this.defaultFont=n));var a="",i=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?a=i>=700?"bolditalic":"italic":i>=700&&(a="bold"),a||((e.name.includes("Bold")||e.psName&&e.psName.includes("Bold"))&&(a="bold"),(e.name.includes("Italic")||e.name.endsWith("It")||e.psName&&(e.psName.includes("Italic")||e.psName.endsWith("It")))&&(a+="italic")),a||(a="regular"),n[a]=e}},{key:"getDefault",value:function(){return this.defaultFont}},{key:"find",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this.fonts.get(e)||this.cache.get(e);if(r)return r;var n=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=e.replace(n,"");if(r=this.fonts.get(a))return this.cache.set(e,r),r;a=a.toLowerCase();var o,u=[],l=c(this.fonts.entries());try{for(l.s();!(o=l.n()).done;){var f=s(o.value,2),h=f[0],d=f[1];h.replace(n,"").toLowerCase().startsWith(a)&&u.push(d)}}catch(e){l.e(e)}finally{l.f()}if(0===u.length){var p,g=c(this.fonts.entries());try{for(g.s();!(p=g.n()).done;){var v=s(p.value,2)[1];v.regular.name&&v.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(v)}}catch(e){g.e(e)}finally{g.f()}}if(0===u.length){a=a.replace(/psmt|mt/gi,"");var y,m=c(this.fonts.entries());try{for(m.s();!(y=m.n()).done;){var b=s(y.value,2),w=b[0],k=b[1];w.replace(n,"").toLowerCase().startsWith(a)&&u.push(k)}}catch(e){m.e(e)}finally{m.f()}}if(0===u.length){var S,x=c(this.fonts.values());try{for(x.s();!(S=x.n()).done;){var O=S.value;O.regular.name&&O.regular.name.replace(n,"").toLowerCase().startsWith(a)&&u.push(O)}}catch(e){x.e(e)}finally{x.f()}}return u.length>=1?(1!==u.length&&t&&(0,i.warn)("XFA - Too many choices to guess the correct font: ".concat(e)),this.cache.set(e,u[0]),u[0]):(t&&!this.warned.has(e)&&(this.warned.add(e),(0,i.warn)("XFA - Cannot find the font: ".concat(e))),null)}}],r&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function d(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}t.FontFinder=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TextMeasure=void 0;var n=r(214);function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re?(n=Math.max(n,i),i=0,a+=s,s=y,t=-1,r=0,c=!0,u=!1):(s=Math.max(y,s),r=i,i+=d,t=l):i+d>e?(a+=s,s=y,-1!==t?(l=t,n=Math.max(n,r),i=0,t=-1,r=0):(n=Math.max(n,i),i=d),c=!0,u=!1):(i+=d,s=Math.max(y,s))}return{width:1.02*(n=Math.max(n,i)),height:a+=s+this.extraHeight,isBroken:c}}}]),e}();t.TextMeasure=p},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DataHandler=void 0;var n=r(206);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=s(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||s(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0;){var r=t.at(-1),a=o(r,2),s=a[0],c=a[1];if(s+1!==c.length){var u=c[++r[0]],l=e.get(u[n.$uid]);if(l)u[n.$setValue](l);else{var f,h=i(u[n.$getAttributes]().values());try{for(h.s();!(f=h.n()).done;){var d=f.value,p=e.get(d[n.$uid]);if(p){d[n.$setValue](p);break}}}catch(e){h.e(e)}finally{h.f()}}var g=u[n.$getChildren]();g.length>0&&t.push([-1,g])}else t.pop()}var v=[''];if(this.dataset){var y,m=i(this.dataset[n.$getChildren]());try{for(m.s();!(y=m.n()).done;){var b=y.value;"data"!==b[n.$nodeName]&&b[n.$toString](v)}}catch(e){m.e(e)}finally{m.f()}}return this.data[n.$toString](v),v.push(""),v.join("")}}])&&u(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.DataHandler=l},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XFAParser=void 0;var a=r(206),i=r(195),o=r(218),s=r(2);function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,v),(e=g.call(this))._builder=new o.Builder(t),e._stack=[],e._globalData={usedTypefaces:new Set},e._ids=new Map,e._current=e._builder.buildRoot(e._ids),e._errorCode=i.XMLParserErrorCode.NoError,e._whiteRegex=/^\\s+$/,e._nbsps=/\\xa0+/g,e._richText=r,e}return t=v,(r=[{key:"parse",value:function(e){if(this.parseXml(e),this._errorCode===i.XMLParserErrorCode.NoError)return this._current[a.$finalize](),this._current.element}},{key:"onText",value:function(e){e=e.replace(this._nbsps,(function(e){return e.slice(1)+" "})),this._richText||this._current[a.$acceptWhitespace]()?this._current[a.$onText](e,this._richText):this._whiteRegex.test(e)||this._current[a.$onText](e.trim())}},{key:"onCdata",value:function(e){this._current[a.$onText](e)}},{key:"_mkAttributes",value:function(e,t){var r,n=null,i=null,o=Object.create({}),c=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=u(e))){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(c.s();!(r=c.n()).done;){var l=r.value,f=l.name,h=l.value;if("xmlns"===f)n?(0,s.warn)("XFA - multiple namespace definition in <".concat(t,">")):n=h;else if(f.startsWith("xmlns:")){var d=f.substring(6);i||(i=[]),i.push({prefix:d,value:h})}else{var p=f.indexOf(":");if(-1===p)o[f]=h;else{var g=o[a.$nsAttributes];g||(g=o[a.$nsAttributes]=Object.create(null));var v=[f.slice(0,p),f.slice(p+1)],y=v[0],m=v[1],b=g[y];b||(b=g[y]=Object.create(null)),b[m]=h}}}}catch(e){c.e(e)}finally{c.f()}return[n,i,o]}},{key:"_getNameAndPrefix",value:function(e,t){var r=e.indexOf(":");return-1===r?[e,null]:[e.substring(r+1),t?"":e.substring(0,r)]}},{key:"onBeginElement",value:function(e,t,r){var n=c(this._mkAttributes(t,e),3),i=n[0],o=n[1],s=n[2],u=c(this._getNameAndPrefix(e,this._builder.isNsAgnostic()),2),l=u[0],f=u[1],h=this._builder.build({nsPrefix:f,name:l,attributes:s,namespace:i,prefixes:o});if(h[a.$globalData]=this._globalData,r)return h[a.$finalize](),this._current[a.$onChild](h)&&h[a.$setId](this._ids),void h[a.$clean](this._builder);this._stack.push(this._current),this._current=h}},{key:"onEndElement",value:function(e){var t=this._current;if(t[a.$isCDATAXml]()&&"string"==typeof t[a.$content]){var r=new v;r._globalData=this._globalData;var n=r.parse(t[a.$content]);t[a.$content]=null,t[a.$onChild](n)}t[a.$finalize](),this._current=this._stack.pop(),this._current[a.$onChild](t)&&t[a.$setId](this._ids),t[a.$clean](this._builder)}},{key:"onError",value:function(e){this._errorCode=e}}])&&f(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),v}(i.XMLParserBase);t.XFAParser=p},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.Builder=void 0;var a=r(208),i=r(206),o=r(219),s=r(211),c=r(228),u=r(2);function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||f(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){if(e){if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]?arguments[0]:null;d(this,e),this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max.apply(Math,function(e){if(Array.isArray(e))return h(e)}(t=Object.values(a.NamespaceIds).map((function(e){return e.id})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),this._currentNamespace=r||new c.UnknownNamespace(++this._nextNsId)}return g(e,[{key:"buildRoot",value:function(e){return new k(e)}},{key:"build",value:function(e){var t=e.nsPrefix,r=e.name,n=e.attributes,s=e.namespace,c=e.prefixes,u=null!==s;if(u&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),c&&this._addNamespacePrefix(c),n.hasOwnProperty(i.$nsAttributes)){for(var f=o.NamespaceSetUp.datasets,h=n[i.$nsAttributes],d=null,p=0,g=Object.entries(h);p0}},{key:"_searchNamespace",value:function(e){var t=this._namespaces.get(e);if(t)return t;for(var r=0,n=Object.entries(a.NamespaceIds);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(r.s();!(t=r.n()).done;){var n=t.value,a=n.prefix,i=n.value,o=this._searchNamespace(i),s=this._namespacePrefixes.get(a);s||(s=[],this._namespacePrefixes.set(a,s)),s.push(o)}}catch(e){r.e(e)}finally{r.f()}}},{key:"_getNamespaceToUse",value:function(e){if(!e)return this._currentNamespace;var t=this._namespacePrefixes.get(e);return t&&t.length>0?t.at(-1):((0,u.warn)("Unknown namespace prefix: ".concat(e,".")),null)}},{key:"clean",value:function(e){var t=this,r=e.hasNamespace,n=e.prefixes,a=e.nsAgnostic;r&&(this._currentNamespace=this._namespaceStack.pop()),n&&n.forEach((function(e){var r=e.prefix;t._namespacePrefixes.get(r).pop()})),a&&this._nsAgnosticLevel--}}]),e}();t.Builder=x},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceSetUp=void 0;var n=r(220),a=r(221),i=r(222),o=r(223),s=r(224),c=r(225),u=r(211),l=r(226),f=r(227),h={config:n.ConfigNamespace,connection:a.ConnectionSetNamespace,datasets:i.DatasetsNamespace,localeSet:o.LocaleSetNamespace,signature:s.SignatureNamespace,stylesheet:c.StylesheetNamespace,template:u.TemplateNamespace,xdp:l.XdpNamespace,xhtml:f.XhtmlNamespace};t.NamespaceSetUp=h},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigNamespace=void 0;var a=r(208),i=r(206),o=r(207),s=r(2);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=1&&e<=8}))}return l(r)}(i.IntegerObject),A=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"agent",!0)).name=e.name?e.name.trim():"",n.common=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),C=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"alwaysEmbed")}return l(r)}(i.ContentObject),F=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"amd")}return l(r)}(i.StringObject),P=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"area")).level=(0,o.getInteger)({data:e.level,defaultValue:0,validate:function(e){return e>=1&&e<=3}}),n.name=(0,o.getStringOption)(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"]),n}return l(r)}(i.XFAObject),T=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"attributes",["preserve","delegate","ignore"])}return l(r)}(i.OptionObject),I=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"autoSave",["disabled","enabled"])}return l(r)}(i.OptionObject),E=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"base")}return l(r)}(i.StringObject),j=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"batchOutput")).format=(0,o.getStringOption)(e.format,["none","concat","zip","zipCompress"]),n}return l(r)}(i.XFAObject),M=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"behaviorOverride")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=new Map(this[i.$content].trim().split(/\\s+/).filter((function(e){return e.includes(":")})).map((function(e){return e.split(":",2)})))}}]),r}(i.ContentObject),_=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"cache",!0)).templateCache=null,n}return l(r)}(i.XFAObject),L=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"change")}return l(r)}(i.Option01),R=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"common",!0)).data=null,n.locale=null,n.localeSet=null,n.messaging=null,n.suppressBanner=null,n.template=null,n.validationMessaging=null,n.versionControl=null,n.log=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),N=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compress")).scope=(0,o.getStringOption)(e.scope,["imageOnly","document"]),n}return l(r)}(i.XFAObject),D=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressLogicalStructure")}return l(r)}(i.Option01),B=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"compressObjectStream")}return l(r)}(i.Option10),U=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"compression",!0)).compressLogicalStructure=null,n.compressObjectStream=null,n.level=null,n.type=null,n}return l(r)}(i.XFAObject),$=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"config",!0)).acrobat=null,n.present=null,n.trace=null,n.agent=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),X=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"conformance",["A","B"])}return l(r)}(i.OptionObject),H=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"contentCopy")}return l(r)}(i.Option01),q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"copies",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),G=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"creator")}return l(r)}(i.StringObject),z=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"currentPage",0,(function(e){return e>=0}))}return l(r)}(i.IntegerObject),W=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"data",!0)).adjustData=null,n.attributes=null,n.incrementalLoad=null,n.outputXSL=null,n.range=null,n.record=null,n.startNode=null,n.uri=null,n.window=null,n.xsl=null,n.excludeNS=new i.XFAObjectArray,n.transform=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),V=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"debug",!0)).uri=null,n}return l(r)}(i.XFAObject),Y=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"defaultTypeface")).writingScript=(0,o.getStringOption)(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"]),n}return l(r)}(i.ContentObject),K=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"destination",["pdf","pcl","ps","webClient","zpl"])}return l(r)}(i.OptionObject),J=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"documentAssembly")}return l(r)}(i.Option01),Z=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"driver",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Q=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}return l(r)}(i.OptionObject),ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"dynamicRender",["forbidden","required"])}return l(r)}(i.OptionObject),te=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"embed")}return l(r)}(i.Option01),re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encrypt")}return l(r)}(i.Option01),ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"encryption",!0)).encrypt=null,n.encryptionLevel=null,n.permissions=null,n}return l(r)}(i.XFAObject),ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"encryptionLevel",["40bit","128bit"])}return l(r)}(i.OptionObject),ie=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"enforce")}return l(r)}(i.StringObject),oe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equate")).force=(0,o.getInteger)({data:e.force,defaultValue:1,validate:function(e){return 0===e}}),n.from=e.from||"",n.to=e.to||"",n}return l(r)}(i.XFAObject),se=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"equateRange")).from=e.from||"",n.to=e.to||"",n._unicodeRange=e.unicodeRange||"",n}return l(r,[{key:"unicodeRange",get:function(){var e,t=[],r=/U\\+([0-9a-fA-F]+)/,n=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._unicodeRange.split(",").map((function(e){return e.trim()})).filter((function(e){return!!e})));try{for(n.s();!(e=n.n()).done;){var a=e.value;1===(a=a.split("-",2).map((function(e){var t=e.match(r);return t?parseInt(t[1],16):0}))).length&&a.push(a[0]),t.push(a)}}catch(e){n.e(e)}finally{n.f()}return(0,s.shadow)(this,"unicodeRange",t)}}]),r}(i.XFAObject),ce=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"exclude")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)}))}}]),r}(i.ContentObject),ue=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"excludeNS")}return l(r)}(i.StringObject),le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"flipLabel",["usePrinterSetting","on","off"])}return l(r)}(i.OptionObject),fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"fontInfo",!0)).embed=null,n.map=null,n.subsetBelow=null,n.alwaysEmbed=new i.XFAObjectArray,n.defaultTypeface=new i.XFAObjectArray,n.neverEmbed=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),he=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"formFieldFilling")}return l(r)}(i.Option01),de=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"groupParent")}return l(r)}(i.StringObject),pe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}return l(r)}(i.OptionObject),ge=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"includeXDPContent")}return l(r)}(i.StringObject),ve=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalLoad",["none","forwardOnly"])}return l(r)}(i.OptionObject),ye=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"incrementalMerge")}return l(r)}(i.Option01),me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"interactive")}return l(r)}(i.Option01),be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"jog",["usePrinterSetting","none","pageSet"])}return l(r)}(i.OptionObject),we=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"labelPrinter",!0)).name=(0,o.getStringOption)(e.name,["zpl","dpl","ipl","tcpl"]),n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),ke=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"layout",["paginate","panel"])}return l(r)}(i.OptionObject),Se=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"level",0,(function(e){return e>0}))}return l(r)}(i.IntegerObject),xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"linearized")}return l(r)}(i.Option01),Oe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"locale")}return l(r)}(i.StringObject),Ae=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"localeSet")}return l(r)}(i.StringObject),Ce=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"log",!0)).mode=null,n.threshold=null,n.to=null,n.uri=null,n}return l(r)}(i.XFAObject),Fe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"map",!0)).equate=new i.XFAObjectArray,n.equateRange=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Pe=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"mediumInfo",!0)).map=null,n}return l(r)}(i.XFAObject),Te=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"message",!0)).msgId=null,n.severity=null,n}return l(r)}(i.XFAObject),Ie=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"messaging",!0)).message=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Ee=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"mode",["append","overwrite"])}return l(r)}(i.OptionObject),je=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"modifyAnnots")}return l(r)}(i.Option01),Me=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"msgId",1,(function(e){return e>=1}))}return l(r)}(i.IntegerObject),_e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"nameAttr")}return l(r)}(i.StringObject),Le=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"neverEmbed")}return l(r)}(i.ContentObject),Re=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"numberOfCopies",null,(function(e){return e>=2&&e<=5}))}return l(r)}(i.IntegerObject),Ne=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"openAction",!0)).destination=null,n}return l(r)}(i.XFAObject),De=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"output",!0)).to=null,n.type=null,n.uri=null,n}return l(r)}(i.XFAObject),Be=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"outputBin")}return l(r)}(i.StringObject),Ue=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"outputXSL",!0)).uri=null,n}return l(r)}(i.XFAObject),$e=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"overprint",["none","both","draw","field"])}return l(r)}(i.OptionObject),Xe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"packets")}return l(r,[{key:i.$finalize,value:function(){"*"!==this[i.$content]&&(this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["config","datasets","template","xfdf","xslt"].includes(e)})))}}]),r}(i.StringObject),He=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"pageOffset")).x=(0,o.getInteger)({data:e.x,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n.y=(0,o.getInteger)({data:e.y,defaultValue:"useXDCSetting",validate:function(e){return!0}}),n}return l(r)}(i.XFAObject),qe=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"pageRange")}return l(r,[{key:i.$finalize,value:function(){for(var e=this[i.$content].trim().split(/\\s+/).map((function(e){return parseInt(e,10)})),t=[],r=0,n=e.length;r=0&&(this[i.$content]=e)}}]),r}(i.ContentObject),ft=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"relevant")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/)}}]),r}(i.ContentObject),ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"rename")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim(),(this[i.$content].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[i.$content]))&&(0,s.warn)("XFA - Rename: invalid XFA name")}}]),r}(i.ContentObject),dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"renderPolicy",["server","client"])}return l(r)}(i.OptionObject),pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"runScripts",["both","client","none","server"])}return l(r)}(i.OptionObject),gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"script",!0)).currentPage=null,n.exclude=null,n.runScripts=null,n}return l(r)}(i.XFAObject),vt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"scriptModel",["XFA","none"])}return l(r)}(i.OptionObject),yt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"severity",["ignore","error","information","trace","warning"])}return l(r)}(i.OptionObject),mt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"silentPrint",!0)).addSilentPrint=null,n.printerName=null,n}return l(r)}(i.XFAObject),bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"staple")).mode=(0,o.getStringOption)(e.mode,["usePrinterSetting","on","off"]),n}return l(r)}(i.XFAObject),wt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startNode")}return l(r)}(i.StringObject),kt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"startPage",0,(function(e){return!0}))}return l(r)}(i.IntegerObject),St=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitFormat",["html","delegate","fdf","xml","pdf"])}return l(r)}(i.OptionObject),xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"submitUrl")}return l(r)}(i.StringObject),Ot=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"subsetBelow",100,(function(e){return e>=0&&e<=100}))}return l(r)}(i.IntegerObject),At=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"suppressBanner")}return l(r)}(i.Option01),Ct=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"tagged")}return l(r)}(i.Option01),Ft=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"template",!0)).base=null,n.relevant=null,n.startPage=null,n.uri=null,n.xsl=null,n}return l(r)}(i.XFAObject),Pt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"threshold",["trace","error","information","warning"])}return l(r)}(i.OptionObject),Tt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"to",["null","memory","stderr","stdout","system","uri"])}return l(r)}(i.OptionObject),It=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"templateCache")).maxEntries=(0,o.getInteger)({data:e.maxEntries,defaultValue:5,validate:function(e){return e>=0}}),n}return l(r)}(i.XFAObject),Et=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"trace",!0)).area=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),jt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"transform",!0)).groupParent=null,n.ifEmpty=null,n.nameAttr=null,n.picture=null,n.presence=null,n.rename=null,n.whitespace=null,n}return l(r)}(i.XFAObject),Mt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}return l(r)}(i.OptionObject),_t=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"uri")}return l(r)}(i.StringObject),Lt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validate",["preSubmit","prePrint","preExecute","preSave"])}return l(r)}(i.OptionObject),Rt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validateApprovalSignatures")}return l(r,[{key:i.$finalize,value:function(){this[i.$content]=this[i.$content].trim().split(/\\s+/).filter((function(e){return["docReady","postSign"].includes(e)}))}}]),r}(i.ContentObject),Nt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}return l(r)}(i.OptionObject),Dt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}return l(r)}(i.OptionObject),Bt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"VersionControl")).outputBelow=(0,o.getStringOption)(e.outputBelow,["warn","error","update"]),n.sourceAbove=(0,o.getStringOption)(e.sourceAbove,["warn","error"]),n.sourceBelow=(0,o.getStringOption)(e.sourceBelow,["update","maintain"]),n}return l(r)}(i.XFAObject),Ut=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"viewerPreferences",!0)).ADBE_JSConsole=null,n.ADBE_JSDebugger=null,n.addViewerPreferences=null,n.duplexOption=null,n.enforce=null,n.numberOfCopies=null,n.pageRange=null,n.pickTrayByPDFSize=null,n.printScaling=null,n}return l(r)}(i.XFAObject),$t=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"webClient",!0)).name=e.name?e.name.trim():"",n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Xt=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}return l(r)}(i.OptionObject),Ht=function(e){h(r,e);var t=p(r);function r(e){return f(this,r),t.call(this,v,"window")}return l(r,[{key:i.$finalize,value:function(){var e=this[i.$content].trim().split(/\\s*,\\s*/,2).map((function(e){return parseInt(e,10)}));e.some((function(e){return isNaN(e)}))?this[i.$content]=[0,0]:(1===e.length&&e.push(e[0]),this[i.$content]=e)}}]),r}(i.ContentObject),qt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdc",!0)).uri=new i.XFAObjectArray,n.xsl=new i.XFAObjectArray,n}return l(r)}(i.XFAObject),Gt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xdp",!0)).packets=null,n}return l(r)}(i.XFAObject),zt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"xsl",!0)).debug=null,n.uri=null,n}return l(r)}(i.XFAObject),Wt=function(e){h(r,e);var t=p(r);function r(e){var n;return f(this,r),(n=t.call(this,v,"zpl",!0)).name=e.name?e.name.trim():"",n.batchOutput=null,n.flipLabel=null,n.fontInfo=null,n.xdc=null,n}return l(r)}(i.XFAObject),Vt=function(){function e(){f(this,e)}return l(e,null,[{key:a.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"acrobat",value:function(e){return new y(e)}},{key:"acrobat7",value:function(e){return new m(e)}},{key:"ADBE_JSConsole",value:function(e){return new b(e)}},{key:"ADBE_JSDebugger",value:function(e){return new w(e)}},{key:"addSilentPrint",value:function(e){return new k(e)}},{key:"addViewerPreferences",value:function(e){return new S(e)}},{key:"adjustData",value:function(e){return new x(e)}},{key:"adobeExtensionLevel",value:function(e){return new O(e)}},{key:"agent",value:function(e){return new A(e)}},{key:"alwaysEmbed",value:function(e){return new C(e)}},{key:"amd",value:function(e){return new F(e)}},{key:"area",value:function(e){return new P(e)}},{key:"attributes",value:function(e){return new T(e)}},{key:"autoSave",value:function(e){return new I(e)}},{key:"base",value:function(e){return new E(e)}},{key:"batchOutput",value:function(e){return new j(e)}},{key:"behaviorOverride",value:function(e){return new M(e)}},{key:"cache",value:function(e){return new _(e)}},{key:"change",value:function(e){return new L(e)}},{key:"common",value:function(e){return new R(e)}},{key:"compress",value:function(e){return new N(e)}},{key:"compressLogicalStructure",value:function(e){return new D(e)}},{key:"compressObjectStream",value:function(e){return new B(e)}},{key:"compression",value:function(e){return new U(e)}},{key:"config",value:function(e){return new $(e)}},{key:"conformance",value:function(e){return new X(e)}},{key:"contentCopy",value:function(e){return new H(e)}},{key:"copies",value:function(e){return new q(e)}},{key:"creator",value:function(e){return new G(e)}},{key:"currentPage",value:function(e){return new z(e)}},{key:"data",value:function(e){return new W(e)}},{key:"debug",value:function(e){return new V(e)}},{key:"defaultTypeface",value:function(e){return new Y(e)}},{key:"destination",value:function(e){return new K(e)}},{key:"documentAssembly",value:function(e){return new J(e)}},{key:"driver",value:function(e){return new Z(e)}},{key:"duplexOption",value:function(e){return new Q(e)}},{key:"dynamicRender",value:function(e){return new ee(e)}},{key:"embed",value:function(e){return new te(e)}},{key:"encrypt",value:function(e){return new re(e)}},{key:"encryption",value:function(e){return new ne(e)}},{key:"encryptionLevel",value:function(e){return new ae(e)}},{key:"enforce",value:function(e){return new ie(e)}},{key:"equate",value:function(e){return new oe(e)}},{key:"equateRange",value:function(e){return new se(e)}},{key:"exclude",value:function(e){return new ce(e)}},{key:"excludeNS",value:function(e){return new ue(e)}},{key:"flipLabel",value:function(e){return new le(e)}},{key:"fontInfo",value:function(e){return new fe(e)}},{key:"formFieldFilling",value:function(e){return new he(e)}},{key:"groupParent",value:function(e){return new de(e)}},{key:"ifEmpty",value:function(e){return new pe(e)}},{key:"includeXDPContent",value:function(e){return new ge(e)}},{key:"incrementalLoad",value:function(e){return new ve(e)}},{key:"incrementalMerge",value:function(e){return new ye(e)}},{key:"interactive",value:function(e){return new me(e)}},{key:"jog",value:function(e){return new be(e)}},{key:"labelPrinter",value:function(e){return new we(e)}},{key:"layout",value:function(e){return new ke(e)}},{key:"level",value:function(e){return new Se(e)}},{key:"linearized",value:function(e){return new xe(e)}},{key:"locale",value:function(e){return new Oe(e)}},{key:"localeSet",value:function(e){return new Ae(e)}},{key:"log",value:function(e){return new Ce(e)}},{key:"map",value:function(e){return new Fe(e)}},{key:"mediumInfo",value:function(e){return new Pe(e)}},{key:"message",value:function(e){return new Te(e)}},{key:"messaging",value:function(e){return new Ie(e)}},{key:"mode",value:function(e){return new Ee(e)}},{key:"modifyAnnots",value:function(e){return new je(e)}},{key:"msgId",value:function(e){return new Me(e)}},{key:"nameAttr",value:function(e){return new _e(e)}},{key:"neverEmbed",value:function(e){return new Le(e)}},{key:"numberOfCopies",value:function(e){return new Re(e)}},{key:"openAction",value:function(e){return new Ne(e)}},{key:"output",value:function(e){return new De(e)}},{key:"outputBin",value:function(e){return new Be(e)}},{key:"outputXSL",value:function(e){return new Ue(e)}},{key:"overprint",value:function(e){return new $e(e)}},{key:"packets",value:function(e){return new Xe(e)}},{key:"pageOffset",value:function(e){return new He(e)}},{key:"pageRange",value:function(e){return new qe(e)}},{key:"pagination",value:function(e){return new Ge(e)}},{key:"paginationOverride",value:function(e){return new ze(e)}},{key:"part",value:function(e){return new We(e)}},{key:"pcl",value:function(e){return new Ve(e)}},{key:"pdf",value:function(e){return new Ye(e)}},{key:"pdfa",value:function(e){return new Ke(e)}},{key:"permissions",value:function(e){return new Je(e)}},{key:"pickTrayByPDFSize",value:function(e){return new Ze(e)}},{key:"picture",value:function(e){return new Qe(e)}},{key:"plaintextMetadata",value:function(e){return new et(e)}},{key:"presence",value:function(e){return new tt(e)}},{key:"present",value:function(e){return new rt(e)}},{key:"print",value:function(e){return new nt(e)}},{key:"printHighQuality",value:function(e){return new at(e)}},{key:"printScaling",value:function(e){return new it(e)}},{key:"printerName",value:function(e){return new ot(e)}},{key:"producer",value:function(e){return new st(e)}},{key:"ps",value:function(e){return new ct(e)}},{key:"range",value:function(e){return new ut(e)}},{key:"record",value:function(e){return new lt(e)}},{key:"relevant",value:function(e){return new ft(e)}},{key:"rename",value:function(e){return new ht(e)}},{key:"renderPolicy",value:function(e){return new dt(e)}},{key:"runScripts",value:function(e){return new pt(e)}},{key:"script",value:function(e){return new gt(e)}},{key:"scriptModel",value:function(e){return new vt(e)}},{key:"severity",value:function(e){return new yt(e)}},{key:"silentPrint",value:function(e){return new mt(e)}},{key:"staple",value:function(e){return new bt(e)}},{key:"startNode",value:function(e){return new wt(e)}},{key:"startPage",value:function(e){return new kt(e)}},{key:"submitFormat",value:function(e){return new St(e)}},{key:"submitUrl",value:function(e){return new xt(e)}},{key:"subsetBelow",value:function(e){return new Ot(e)}},{key:"suppressBanner",value:function(e){return new At(e)}},{key:"tagged",value:function(e){return new Ct(e)}},{key:"template",value:function(e){return new Ft(e)}},{key:"templateCache",value:function(e){return new It(e)}},{key:"threshold",value:function(e){return new Pt(e)}},{key:"to",value:function(e){return new Tt(e)}},{key:"trace",value:function(e){return new Et(e)}},{key:"transform",value:function(e){return new jt(e)}},{key:"type",value:function(e){return new Mt(e)}},{key:"uri",value:function(e){return new _t(e)}},{key:"validate",value:function(e){return new Lt(e)}},{key:"validateApprovalSignatures",value:function(e){return new Rt(e)}},{key:"validationMessaging",value:function(e){return new Nt(e)}},{key:"version",value:function(e){return new Dt(e)}},{key:"versionControl",value:function(e){return new Bt(e)}},{key:"viewerPreferences",value:function(e){return new Ut(e)}},{key:"webClient",value:function(e){return new $t(e)}},{key:"whitespace",value:function(e){return new Xt(e)}},{key:"window",value:function(e){return new Ht(e)}},{key:"xdc",value:function(e){return new qt(e)}},{key:"xdp",value:function(e){return new Gt(e)}},{key:"xsl",value:function(e){return new zt(e)}},{key:"zpl",value:function(e){return new Wt(e)}}]),e}();t.ConfigNamespace=Vt},(e,t,r)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ConnectionSetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetsNamespace=void 0;var a=r(206),i=r(208);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleSetNamespace=void 0;var a=r(208),i=r(206),o=r(207);function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.SignatureNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.StylesheetNamespace=void 0;var a=r(208),i=r(206);function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XdpNamespace=void 0;var a=r(208),i=r(206);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.XhtmlNamespace=void 0;var a=r(206),i=r(208),o=r(213),s=r(207);function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function m(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]&&arguments[1]?this[k]=!0:(e=e.replace(A,""),this.style.includes("xfa-spacerun:yes")||(e=e.replace(O," "))),e&&(this[a.$content]+=e)}},{key:a.$pushGlyphs,value:function(e){var t,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Object.create(null),i={top:NaN,bottom:NaN,left:NaN,right:NaN},o=null,c=y(this.style.split(";").map((function(e){return e.split(":",2)})));try{for(c.s();!(t=c.n()).done;){var u=v(t.value,2),l=u[0],f=u[1];switch(l){case"font-family":n.typeface=(0,s.stripQuotes)(f);break;case"font-size":n.size=(0,s.getMeasurement)(f);break;case"font-weight":n.weight=f;break;case"font-style":n.posture=f;break;case"letter-spacing":n.letterSpacing=(0,s.getMeasurement)(f);break;case"margin":var h=f.split(/ \\t/).map((function(e){return(0,s.getMeasurement)(e)}));switch(h.length){case 1:i.top=i.bottom=i.left=i.right=h[0];break;case 2:i.top=i.bottom=h[0],i.left=i.right=h[1];break;case 3:i.top=h[0],i.bottom=h[2],i.left=i.right=h[1];break;case 4:i.top=h[0],i.left=h[1],i.bottom=h[2],i.right=h[3]}break;case"margin-top":i.top=(0,s.getMeasurement)(f);break;case"margin-bottom":i.bottom=(0,s.getMeasurement)(f);break;case"margin-left":i.left=(0,s.getMeasurement)(f);break;case"margin-right":i.right=(0,s.getMeasurement)(f);break;case"line-height":o=(0,s.getMeasurement)(f)}}}catch(e){c.e(e)}finally{c.f()}if(e.pushData(n,i,o),this[a.$content])e.addString(this[a.$content]);else{var d,p=y(this[a.$getChildren]());try{for(p.s();!(d=p.n()).done;){var g=d.value;"#text"!==g[a.$nodeName]?g[a.$pushGlyphs](e):e.addString(g[a.$content])}}catch(e){p.e(e)}finally{p.f()}}r&&e.popFont()}},{key:a.$toHTML,value:function(e){var t,r=[];return this[a.$extra]={children:r},this[a.$childrenToHTML]({}),0!==r.length||this[a.$content]?(t=this[k]?this[a.$content]?this[a.$content].replace(C,"\\n"):void 0:this[a.$content]||void 0,s.HTMLResult.success({name:this[a.$nodeName],attributes:{href:this.href,style:F(this.style,this,this[k])},children:r,value:t})):s.HTMLResult.EMPTY}}]),r}(a.XmlObject),I=function(e){h(r,e);var t=p(r);function r(e){var n;return c(this,r),(n=t.call(this,e,"a")).href=(0,o.fixURL)(e.href)||"",n}return l(r)}(T),E=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"b")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({weight:"bold"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),j=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"body")}return l(r,[{key:a.$toHTML,value:function(e){var t=f(g(r.prototype),a.$toHTML,this).call(this,e),n=t.html;return n?(n.name="div",n.attributes.class=["xfaRich"],t):s.HTMLResult.EMPTY}}]),r}(T),M=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"br")}return l(r,[{key:a.$text,value:function(){return"\\n"}},{key:a.$pushGlyphs,value:function(e){e.addString("\\n")}},{key:a.$toHTML,value:function(e){return s.HTMLResult.success({name:"br"})}}]),r}(T),_=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"html")}return l(r,[{key:a.$toHTML,value:function(e){var t=[];if(this[a.$extra]={children:t},this[a.$childrenToHTML]({}),0===t.length)return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[a.$content]||""});if(1===t.length){var r=t[0];if(r.attributes&&r.attributes.class.includes("xfaRich"))return s.HTMLResult.success(r)}return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}]),r}(T),L=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"i")}return l(r,[{key:a.$pushGlyphs,value:function(e){e.pushFont({posture:"italic"}),f(g(r.prototype),a.$pushGlyphs,this).call(this,e),e.popFont()}}]),r}(T),R=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"li")}return l(r)}(T),N=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ol")}return l(r)}(T),D=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"p")}return l(r,[{key:a.$pushGlyphs,value:function(e){f(g(r.prototype),a.$pushGlyphs,this).call(this,e,!1),e.addString("\\n"),e.addPara(),e.popFont()}},{key:a.$text,value:function(){return this[a.$getParent]()[a.$getChildren]().at(-1)===this?f(g(r.prototype),a.$text,this).call(this):f(g(r.prototype),a.$text,this).call(this)+"\\n"}}]),r}(T),B=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"span")}return l(r)}(T),U=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sub")}return l(r)}(T),$=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"sup")}return l(r)}(T),X=function(e){h(r,e);var t=p(r);function r(e){return c(this,r),t.call(this,e,"ul")}return l(r)}(T),H=function(){function e(){c(this,e)}return l(e,null,[{key:i.$buildXFAObject,value:function(t,r){if(e.hasOwnProperty(t))return e[t](r)}},{key:"a",value:function(e){return new I(e)}},{key:"b",value:function(e){return new E(e)}},{key:"body",value:function(e){return new j(e)}},{key:"br",value:function(e){return new M(e)}},{key:"html",value:function(e){return new _(e)}},{key:"i",value:function(e){return new L(e)}},{key:"li",value:function(e){return new R(e)}},{key:"ol",value:function(e){return new N(e)}},{key:"p",value:function(e){return new D(e)}},{key:"span",value:function(e){return new B(e)}},{key:"sub",value:function(e){return new U(e)}},{key:"sup",value:function(e){return new $(e)}},{key:"ul",value:function(e){return new X(e)}}]),e}();t.XhtmlNamespace=H},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnknownNamespace=void 0;var n=r(208),a=r(206);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){for(var r=0;r{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetReader=void 0;var a=r(2),i=r(135),o=r(195);function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.XRef=void 0;var n=r(2),a=r(134),i=r(135),o=r(146),s=r(136),c=r(196);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(){l=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};c(y,i,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,i)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,s){var c=h(e[n],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==u(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function f(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function h(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){f(i,n,a,o,s,"next",e)}function s(e){f(i,n,a,o,s,"throw",e)}o(void 0)}))}}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&void 0!==arguments[0]&&arguments[0];o?((0,n.warn)("Indexing all PDF objects"),e=this.indexObjects()):e=this.readXRef(),e.assignXref(this),this.trailer=e;try{t=e.get("Encrypt")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Encrypt" reference: "'.concat(e,'".'))}if(t instanceof a.Dict){var s=e.get("ID"),u=s&&s.length?s[0]:"";t.suppressEncryption=!0,this.encrypt=new c.CipherTransformFactory(t,u,this.pdfManager.password)}try{r=e.get("Root")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Root" reference: "'.concat(e,'".'))}if(r instanceof a.Dict)try{if(r.get("Pages")instanceof a.Dict)return void(this.root=r)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('XRef.parse - Invalid "Pages" reference: "'.concat(e,'".'))}if(!o)throw new i.XRefParseException;throw new n.InvalidPDFException("Invalid Root reference.")}},{key:"processXRefTable",value:function(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});var t=this.readXRefTable(e);if(!(0,a.isCmd)(t,"trailer"))throw new n.FormatError("Invalid XRef table: could not find trailer dictionary");var r=e.getObj();if(r instanceof a.Dict||!r.dict||(r=r.dict),!(r instanceof a.Dict))throw new n.FormatError("Invalid XRef table: could not parse trailer dictionary");return delete this.tableState,r}},{key:"readXRefTable",value:function(e){var t,r=e.lexer.stream,i=this.tableState;for(r.pos=i.streamPos,e.buf1=i.parserBuf1,e.buf2=i.parserBuf2;;){if(!("firstEntryNum"in i)||!("entryCount"in i)){if((0,a.isCmd)(t=e.getObj(),"trailer"))break;i.firstEntryNum=t,i.entryCount=e.getObj()}var o=i.firstEntryNum,s=i.entryCount;if(!Number.isInteger(o)||!Number.isInteger(s))throw new n.FormatError("Invalid XRef table: wrong types in subsection header");for(var c=i.entryNum;c0;){var c=d(s,2),u=c[0],l=c[1];if(!Number.isInteger(u)||!Number.isInteger(l))throw new n.FormatError("Invalid XRef range fields: ".concat(u,", ").concat(l));if(!Number.isInteger(a)||!Number.isInteger(i)||!Number.isInteger(o))throw new n.FormatError("Invalid XRef entry fields length: ".concat(u,", ").concat(l));for(var f=t.entryNum;f=e.length);)r+=String.fromCharCode(n),n=e[t];return r}function t(e,t,r){for(var n=r.length,a=e.length,i=0;t=n)break;t++,i++}return i}var r=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer)\\b/g,s=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,u=new Uint8Array([116,114,97,105,108,101,114]),l=new Uint8Array([115,116,97,114,116,120,114,101,102]),f=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();var h=this.stream;h.pos=0;for(var d,p,g=h.getBytes(),v=(0,n.bytesToString)(g),y=g.length,m=h.start,b=[],w=[];m=y)break;k=g[m]}while(10!==k&&13!==k);else++m}for(var L=0,R=w;L0&&void 0!==arguments[0]&&arguments[0],t=this.stream,r=new Set;this.startXRefQueue.length;){try{var c=this.startXRefQueue[0];if(r.has(c)){(0,n.warn)("readXRef - skipping XRef table since it was already parsed."),this.startXRefQueue.shift();continue}r.add(c),t.pos=c+t.start;var u=new o.Parser({lexer:new o.Lexer(t),xref:this,allowStreams:!0}),l=u.getObj(),f=void 0;if((0,a.isCmd)(l,"xref")){if(f=this.processXRefTable(u),this.topDict||(this.topDict=f),l=f.get("XRefStm"),Number.isInteger(l)){var h=l;h in this.xrefstms||(this.xrefstms[h]=1,this.startXRefQueue.push(h))}}else{if(!Number.isInteger(l))throw new n.FormatError("Invalid XRef stream header");if(!(Number.isInteger(u.getObj())&&(0,a.isCmd)(u.getObj(),"obj")&&(l=u.getObj())instanceof s.BaseStream))throw new n.FormatError("Invalid XRef stream");if(f=this.processXRefStream(l),this.topDict||(this.topDict=f),!f)throw new n.FormatError("Failed to read XRef stream")}l=f.get("Prev"),Number.isInteger(l)?this.startXRefQueue.push(l):l instanceof a.Ref&&this.startXRefQueue.push(l.num)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.info)("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new i.XRefParseException}},{key:"getEntry",value:function(e){var t=this.entries[e];return t&&!t.free&&t.offset?t:null}},{key:"fetchIfRef",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e instanceof a.Ref?this.fetch(e,t):e}},{key:"fetch",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!(e instanceof a.Ref))throw new Error("ref object is not a reference");var r=e.num,i=this._cacheMap.get(r);if(void 0!==i)return i instanceof a.Dict&&!i.objId&&(i.objId=e.toString()),i;var o=this.getEntry(r);if(null===o)return this._cacheMap.set(r,o),o;if(this._pendingRefs.has(e))return this._pendingRefs.remove(e),(0,n.warn)("Ignoring circular reference: ".concat(e,".")),a.CIRCULAR_REF;this._pendingRefs.put(e);try{o=o.uncompressed?this.fetchUncompressed(e,o,t):this.fetchCompressed(e,o,t),this._pendingRefs.remove(e)}catch(t){throw this._pendingRefs.remove(e),t}return o instanceof a.Dict?o.objId=e.toString():o instanceof s.BaseStream&&(o.dict.objId=e.toString()),o}},{key:"fetchUncompressed",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],c=e.gen,u=e.num;if(t.gen!==c){var l="Inconsistent generation in XRef: ".concat(e);if(this._generationFallback&&t.gen{Object.defineProperty(t,"__esModule",{value:!0}),t.MessageHandler=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var c=this.desiredSize;this.desiredSize-=o,c>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),i.postMessage({sourceName:r,targetName:a,stream:4,streamId:t,chunk:e},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:3,streamId:t}),delete o.streamSinks[t])},error:function(e){(0,n.assert)(e instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,i.postMessage({sourceName:r,targetName:a,stream:5,streamId:t,reason:c(e)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[t]=u,new Promise((function(t){t(s(e.data,u))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:8,streamId:t,reason:c(e)})}))}},{key:"_processStreamMessage",value:function(e){var t=e.streamId,r=this.sourceName,a=e.sourceName,i=this.comObj,o=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case 8:e.success?o.startCall.resolve():o.startCall.reject(c(e.reason));break;case 7:e.success?o.pullCall.resolve():o.pullCall.reject(c(e.reason));break;case 6:if(!s){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=e.desiredSize,new Promise((function(e){e(s.onPull&&s.onPull())})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:7,streamId:t,reason:c(e)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(e.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,t);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(c(e.reason)),this._deleteStreamController(o,t);break;case 2:e.success?o.cancelCall.resolve():o.cancelCall.reject(c(e.reason)),this._deleteStreamController(o,t);break;case 1:if(!s)break;new Promise((function(t){t(s.onCancel&&s.onCancel(c(e.reason)))})).then((function(){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:r,targetName:a,stream:2,streamId:t,reason:c(e)})})),s.sinkCapability.reject(c(e.reason)),s.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=a().mark((function e(t,r){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.allSettled([t.startCall&&t.startCall.promise,t.pullCall&&t.pullCall.promise,t.cancelCall&&t.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return e.stop()}}),e,this)})),u=function(){var e=this,t=arguments;return new Promise((function(r,n){var a=s.apply(e,t);function o(e){i(a,r,n,o,c,"next",e)}function c(e){i(a,r,n,o,c,"throw",e)}o(void 0)}))},function(e,t){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.MessageHandler=u},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFWorkerStream=void 0;var n=r(2);function a(){a=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,a){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),s=new F(a||[]);return n(o,"_invoke",{value:x(e,r,s)}),o}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=f;var d={};function p(){}function g(){}function v(){}var y={};l(y,o,(function(){return this}));var m=Object.getPrototypeOf,b=m&&m(m(P([])));b&&b!==t&&r.call(b,o)&&(y=b);var w=v.prototype=p.prototype=Object.create(y);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function a(n,i,o,c){var u=h(e[n],e,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==s(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){a("next",e,o,c)}),(function(e){a("throw",e,o,c)})):t.resolve(f).then((function(e){l.value=e,o(l)}),(function(e){return a("throw",e,o,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){a(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function x(e,t,r){var n="suspendedStart";return function(a,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw i;return{value:void 0,done:!0}}for(r.method=a,r.arg=i;;){var o=r.delegate;if(o){var s=O(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=h(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function O(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,O(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=h(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,d;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function P(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;C(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:P(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},e}function i(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function s(e){i(o,n,a,s,c,"next",e)}function c(e){i(o,n,a,s,c,"throw",e)}s(void 0)}))}}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}(this._rangeRequestReaders.slice(0));try{for(r.s();!(t=r.n()).done;)t.value.cancel(e)}catch(e){r.e(e)}finally{r.f()}}}]),e}();t.PDFWorkerStream=h;var d=function(){function e(t){var r=this;u(this,e),this._msgHandler=t,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;var n=this._msgHandler.sendWithStream("GetReader");this._reader=n.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((function(e){r._isStreamingSupported=e.isStreamingSupported,r._isRangeSupported=e.isRangeSupported,r._contentLength=e.contentLength}))}var t;return f(e,[{key:"headersReady",get:function(){return this._headersReady}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}(),p=function(){function e(t,r,n){u(this,e),this._msgHandler=n,this.onProgress=null;var a=this._msgHandler.sendWithStream("GetRangeReader",{begin:t,end:r});this._reader=a.getReader()}var t;return f(e,[{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(t=o(a().mark((function e(){var t,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._reader.read();case 2:if(t=e.sent,r=t.value,!t.done){e.next=7;break}return e.abrupt("return",{value:void 0,done:!0});case 7:return e.abrupt("return",{value:r.buffer,done:!1});case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"cancel",value:function(e){this._reader.cancel(e)}}]),e}()}],t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"WorkerMessageHandler",{enumerable:!0,get:function(){return t.WorkerMessageHandler}});var t=r(1)})(),n})(),"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf.worker",[],t):"object"==typeof exports?exports["pdfjs-dist/build/pdf.worker"]=t():e["pdfjs-dist/build/pdf.worker"]=e.pdfjsWorker=t();`,he=`/*! For license information please see pdf.js.LICENSE.txt */ +var __webpack_exports__={},root,factory;root=globalThis,factory=()=>(()=>{var __webpack_modules__=[,(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||i(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){if(t){if("string"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)return null;try{if(r&&"string"==typeof t){if(r.addDefaultProtocol&&t.startsWith("www.")){var n=t.match(/\\./g);n&&n.length>=2&&(t="http://".concat(t))}if(r.tryConvertEncoding)try{t=R(t)}catch(t){}}var i=e?new URL(t,e):new URL(t);if(function(t){if(!t)return!1;switch(t.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(i))return i}catch(t){}return null},e.getModificationDate=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[t.getUTCFullYear().toString(),(t.getUTCMonth()+1).toString().padStart(2,"0"),t.getUTCDate().toString().padStart(2,"0"),t.getUTCHours().toString().padStart(2,"0"),t.getUTCMinutes().toString().padStart(2,"0"),t.getUTCSeconds().toString().padStart(2,"0")].join("")},e.getVerbosityLevel=function(){return v},e.info=function(t){v>=p.INFOS&&console.log("Info: ".concat(t))},e.isArrayBuffer=function(t){return"object"===o(t)&&null!==t&&void 0!==t.byteLength},e.isArrayEqual=function(t,e){if(t.length!==e.length)return!1;for(var r=0,n=t.length;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(t);try{for(a.s();!(e=a.n()).done;){var o=(r=e.value,2,function(t){if(Array.isArray(t))return t}(r)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||i(r,2)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=o[0],l=o[1];n[s]=l}}catch(t){a.e(t)}finally{a.f()}return n},e.objectSize=function(t){return Object.keys(t).length},e.setVerbosityLevel=function(t){Number.isInteger(t)&&(v=t)},e.shadow=g,e.string32=function(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)},e.stringToBytes=P,e.stringToPDFString=function(t){var e;if(t[0]>="ï"&&("þ"===t[0]&&"ÿ"===t[1]?e="utf-16be":"ÿ"===t[0]&&"þ"===t[1]?e="utf-16le":"ï"===t[0]&&"»"===t[1]&&"¿"===t[2]&&(e="utf-8"),e))try{var r=new TextDecoder(e,{fatal:!0}),n=P(t);return r.decode(n)}catch(t){y('stringToPDFString: "'.concat(t,'".'))}for(var i=[],a=0,o=t.length;a=p.WARNINGS&&console.log("Warning: ".concat(t))}function m(t){throw new Error(t)}function g(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(t,e,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}var b=function(){function t(e,r){this.constructor===t&&m("Cannot initialize BaseException."),this.message=e,this.name=r}return t.prototype=new Error,t.constructor=t,t}();e.BaseException=b;var _=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"PasswordException")).code=n,i}return l(r)}(b);e.PasswordException=_;var w=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnknownErrorException")).details=n,i}return l(r)}(b);e.UnknownErrorException=w;var A=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"InvalidPDFException")}return l(r)}(b);e.InvalidPDFException=A;var k=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"MissingPDFException")}return l(r)}(b);e.MissingPDFException=k;var S=function(t){c(r,t);var e=f(r);function r(t,n){var i;return u(this,r),(i=e.call(this,t,"UnexpectedResponseException")).status=n,i}return l(r)}(b);e.UnexpectedResponseException=S;var x=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"FormatError")}return l(r)}(b);e.FormatError=x;var E=function(t){c(r,t);var e=f(r);function r(t){return u(this,r),e.call(this,t,"AbortException")}return l(r)}(b);function P(t){"string"!=typeof t&&m("Invalid argument for stringToBytes");for(var e=t.length,r=new Uint8Array(e),n=0;nt[2]&&(e[0]=t[2],e[2]=t[0]),t[1]>t[3]&&(e[1]=t[3],e[3]=t[1]),e}},{key:"intersect",value:function(t,e){var r=Math.max(Math.min(t[0],t[2]),Math.min(e[0],e[2])),n=Math.min(Math.max(t[0],t[2]),Math.max(e[0],e[2]));if(r>n)return null;var i=Math.max(Math.min(t[1],t[3]),Math.min(e[1],e[3])),a=Math.min(Math.max(t[1],t[3]),Math.max(e[1],e[3]));return i>a?null:[r,i,n,a]}},{key:"bezierBoundingBox",value:function(t,e,r,i,a,o,s,l){for(var u,c,h,f,d,p,v,y,m=[],g=[[],[]],b=0;b<2;++b)if(0===b?(c=6*t-12*r+6*a,u=-3*t+9*r-9*a+3*s,h=3*r-3*t):(c=6*e-12*i+6*o,u=-3*e+9*i-9*o+3*l,h=3*i-3*e),Math.abs(u)<1e-12){if(Math.abs(c)<1e-12)continue;0<(f=-h/c)&&f<1&&m.push(f)}else v=c*c-4*h*u,y=Math.sqrt(v),v<0||(0<(d=(-c+y)/(2*u))&&d<1&&m.push(d),0<(p=(-c-y)/(2*u))&&p<1&&m.push(p));for(var _,w=m.length,A=w;w--;)_=1-(f=m[w]),g[0][w]=_*_*_*t+3*_*_*f*r+3*_*f*f*a+f*f*f*s,g[1][w]=_*_*_*e+3*_*_*f*i+3*_*f*f*o+f*f*f*l;return g[0][A]=t,g[1][A]=e,g[0][A+1]=s,g[1][A+1]=l,g[0].length=g[1].length=A+2,[Math.min.apply(Math,n(g[0])),Math.min.apply(Math,n(g[1])),Math.max.apply(Math,n(g[0])),Math.max.apply(Math,n(g[1]))]}}]),t}();e.Util=F;var M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function R(t){return decodeURIComponent(escape(t))}},(t,e,r)=>{var n=r(3);!globalThis.btoa&&n.isNodeJS&&(globalThis.btoa=function(t){return Buffer.from(t,"binary").toString("base64")}),!globalThis.atob&&n.isNodeJS&&(globalThis.atob=function(t){return Buffer.from(t,"base64").toString("binary")}),!globalThis.DOMMatrix&&n.isNodeJS&&(globalThis.DOMMatrix=require("canvas").DOMMatrix),!globalThis.ReadableStream&&n.isNodeJS&&(globalThis.ReadableStream=require("web-streams-polyfill/dist/ponyfill.js").ReadableStream),Array.prototype.at||r(4),Uint8Array.prototype.at||r(78),globalThis.structuredClone||r(88)},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.isNodeJS=void 0;var n=!("object"!==("undefined"==typeof process?"undefined":r(process))||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type);e.isNodeJS=n},(t,e,r)=>{r(5);var n=r(77);t.exports=n("Array","at")},(t,e,r)=>{var n=r(6),i=r(43),a=r(67),o=r(65),s=r(72);n({target:"Array",proto:!0},{at:function(t){var e=i(this),r=a(e),n=o(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}}),s("at")},(t,e,r)=>{var n=r(7),i=r(8).f,a=r(47),o=r(51),s=r(41),l=r(59),u=r(71);t.exports=function(t,e){var r,c,h,f,d,p=t.target,v=t.global,y=t.stat;if(r=v?n:y?n[p]||s(p,{}):(n[p]||{}).prototype)for(c in e){if(f=e[c],h=t.dontCallGetSet?(d=i(r,c))&&d.value:r[c],!u(v?c:p+(y?".":"#")+c,t.forced)&&void 0!==h){if(typeof f==typeof h)continue;l(f,h)}(t.sham||h&&h.sham)&&a(f,"sham",!0),o(r,c,f,t)}}},t=>{var e=function(t){return t&&t.Math==Math&&t};t.exports=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof global&&global)||function(){return this}()||Function("return this")()},(t,e,r)=>{var n=r(9),i=r(11),a=r(13),o=r(14),s=r(15),l=r(21),u=r(42),c=r(45),h=Object.getOwnPropertyDescriptor;e.f=n?h:function(t,e){if(t=s(t),e=l(e),c)try{return h(t,e)}catch(t){}if(u(t,e))return o(!i(a.f,t,e),t[e])}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},(t,e,r)=>{var n=r(12),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},(t,e)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);e.f=i?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},(t,e,r)=>{var n=r(16),i=r(19);t.exports=function(t){return n(i(t))}},(t,e,r)=>{var n=r(17),i=r(10),a=r(18),o=Object,s=n("".split);t.exports=i((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"==a(t)?s(t,""):o(t)}:o},(t,e,r)=>{var n=r(12),i=Function.prototype,a=i.call,o=n&&i.bind.bind(a,a);t.exports=n?o:function(t){return function(){return a.apply(t,arguments)}}},(t,e,r)=>{var n=r(17),i=n({}.toString),a=n("".slice);t.exports=function(t){return a(i(t),8,-1)}},(t,e,r)=>{var n=r(20),i=TypeError;t.exports=function(t){if(n(t))throw i("Can't call method on "+t);return t}},t=>{t.exports=function(t){return null==t}},(t,e,r)=>{var n=r(22),i=r(26);t.exports=function(t){var e=n(t,"string");return i(e)?e:e+""}},(t,e,r)=>{var n=r(11),i=r(23),a=r(26),o=r(33),s=r(36),l=r(37),u=TypeError,c=l("toPrimitive");t.exports=function(t,e){if(!i(t)||a(t))return t;var r,l=o(t,c);if(l){if(void 0===e&&(e="default"),r=n(l,t,e),!i(r)||a(r))return r;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},(t,e,r)=>{var n=r(24),i=r(25),a=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:n(t)||t===a}:function(t){return"object"==typeof t?null!==t:n(t)}},(t,e,r)=>{var n=r(25),i=n.all;t.exports=n.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},t=>{var e="object"==typeof document&&document.all,r=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:r}},(t,e,r)=>{var n=r(27),i=r(24),a=r(28),o=r(29),s=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return i(e)&&a(e.prototype,s(t))}},(t,e,r)=>{var n=r(7),i=r(24);t.exports=function(t,e){return arguments.length<2?(r=n[t],i(r)?r:void 0):n[t]&&n[t][e];var r}},(t,e,r)=>{var n=r(17);t.exports=n({}.isPrototypeOf)},(t,e,r)=>{var n=r(30);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(t,e,r)=>{var n=r(31),i=r(10);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(t,e,r)=>{var n,i,a=r(7),o=r(32),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(i=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(i=+n[1]),t.exports=i},(t,e,r)=>{var n=r(27);t.exports=n("navigator","userAgent")||""},(t,e,r)=>{var n=r(34),i=r(20);t.exports=function(t,e){var r=t[e];return i(r)?void 0:n(r)}},(t,e,r)=>{var n=r(24),i=r(35),a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not a function")}},t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},(t,e,r)=>{var n=r(11),i=r(24),a=r(23),o=TypeError;t.exports=function(t,e){var r,s;if("string"===e&&i(r=t.toString)&&!a(s=n(r,t)))return s;if(i(r=t.valueOf)&&!a(s=n(r,t)))return s;if("string"!==e&&i(r=t.toString)&&!a(s=n(r,t)))return s;throw o("Can't convert object to primitive value")}},(t,e,r)=>{var n=r(7),i=r(38),a=r(42),o=r(44),s=r(30),l=r(29),u=i("wks"),c=n.Symbol,h=c&&c.for,f=l?c:c&&c.withoutSetter||o;t.exports=function(t){if(!a(u,t)||!s&&"string"!=typeof u[t]){var e="Symbol."+t;s&&a(c,t)?u[t]=c[t]:u[t]=l&&h?h(e):f(e)}return u[t]}},(t,e,r)=>{var n=r(39),i=r(40);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},t=>{t.exports=!1},(t,e,r)=>{var n=r(7),i=r(41),a="__core-js_shared__",o=n[a]||i(a,{});t.exports=o},(t,e,r)=>{var n=r(7),i=Object.defineProperty;t.exports=function(t,e){try{i(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},(t,e,r)=>{var n=r(17),i=r(43),a=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return a(i(t),e)}},(t,e,r)=>{var n=r(19),i=Object;t.exports=function(t){return i(n(t))}},(t,e,r)=>{var n=r(17),i=0,a=Math.random(),o=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+a,36)}},(t,e,r)=>{var n=r(9),i=r(10),a=r(46);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},(t,e,r)=>{var n=r(7),i=r(23),a=n.document,o=i(a)&&i(a.createElement);t.exports=function(t){return o?a.createElement(t):{}}},(t,e,r)=>{var n=r(9),i=r(48),a=r(14);t.exports=n?function(t,e,r){return i.f(t,e,a(1,r))}:function(t,e,r){return t[e]=r,t}},(t,e,r)=>{var n=r(9),i=r(45),a=r(49),o=r(50),s=r(21),l=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,h="enumerable",f="configurable",d="writable";e.f=n?a?function(t,e,r){if(o(t),e=s(e),o(r),"function"==typeof t&&"prototype"===e&&"value"in r&&d in r&&!r[d]){var n=c(t,e);n&&n[d]&&(t[e]=r.value,r={configurable:f in r?r[f]:n[f],enumerable:h in r?r[h]:n[h],writable:!1})}return u(t,e,r)}:u:function(t,e,r){if(o(t),e=s(e),o(r),i)try{return u(t,e,r)}catch(t){}if("get"in r||"set"in r)throw l("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},(t,e,r)=>{var n=r(9),i=r(10);t.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(t,e,r)=>{var n=r(23),i=String,a=TypeError;t.exports=function(t){if(n(t))return t;throw a(i(t)+" is not an object")}},(t,e,r)=>{var n=r(24),i=r(48),a=r(52),o=r(41);t.exports=function(t,e,r,s){s||(s={});var l=s.enumerable,u=void 0!==s.name?s.name:e;if(n(r)&&a(r,u,s),s.global)l?t[e]=r:o(e,r);else{try{s.unsafe?t[e]&&(l=!0):delete t[e]}catch(t){}l?t[e]=r:i.f(t,e,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},(t,e,r)=>{var n=r(10),i=r(24),a=r(42),o=r(9),s=r(53).CONFIGURABLE,l=r(54),u=r(55),c=u.enforce,h=u.get,f=Object.defineProperty,d=o&&!n((function(){return 8!==f((function(){}),"length",{value:8}).length})),p=String(String).split("String"),v=t.exports=function(t,e,r){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!a(t,"name")||s&&t.name!==e)&&(o?f(t,"name",{value:e,configurable:!0}):t.name=e),d&&r&&a(r,"arity")&&t.length!==r.arity&&f(t,"length",{value:r.arity});try{r&&a(r,"constructor")&&r.constructor?o&&f(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var n=c(t);return a(n,"source")||(n.source=p.join("string"==typeof e?e:"")),t};Function.prototype.toString=v((function(){return i(this)&&h(this).source||l(this)}),"toString")},(t,e,r)=>{var n=r(9),i=r(42),a=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=i(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!n||n&&o(a,"name").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},(t,e,r)=>{var n=r(17),i=r(24),a=r(40),o=n(Function.toString);i(a.inspectSource)||(a.inspectSource=function(t){return o(t)}),t.exports=a.inspectSource},(t,e,r)=>{var n,i,a,o=r(56),s=r(7),l=r(23),u=r(47),c=r(42),h=r(40),f=r(57),d=r(58),p="Object already initialized",v=s.TypeError,y=s.WeakMap;if(o||h.state){var m=h.state||(h.state=new y);m.get=m.get,m.has=m.has,m.set=m.set,n=function(t,e){if(m.has(t))throw v(p);return e.facade=t,m.set(t,e),e},i=function(t){return m.get(t)||{}},a=function(t){return m.has(t)}}else{var g=f("state");d[g]=!0,n=function(t,e){if(c(t,g))throw v(p);return e.facade=t,u(t,g,e),e},i=function(t){return c(t,g)?t[g]:{}},a=function(t){return c(t,g)}}t.exports={set:n,get:i,has:a,enforce:function(t){return a(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!l(e)||(r=i(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return r}}}},(t,e,r)=>{var n=r(7),i=r(24),a=n.WeakMap;t.exports=i(a)&&/native code/.test(String(a))},(t,e,r)=>{var n=r(38),i=r(44),a=n("keys");t.exports=function(t){return a[t]||(a[t]=i(t))}},t=>{t.exports={}},(t,e,r)=>{var n=r(42),i=r(60),a=r(8),o=r(48);t.exports=function(t,e,r){for(var s=i(e),l=o.f,u=a.f,c=0;c{var n=r(27),i=r(17),a=r(61),o=r(70),s=r(50),l=i([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=a.f(s(t)),r=o.f;return r?l(e,r(t)):e}},(t,e,r)=>{var n=r(62),i=r(69).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},(t,e,r)=>{var n=r(17),i=r(42),a=r(15),o=r(63).indexOf,s=r(58),l=n([].push);t.exports=function(t,e){var r,n=a(t),u=0,c=[];for(r in n)!i(s,r)&&i(n,r)&&l(c,r);for(;e.length>u;)i(n,r=e[u++])&&(~o(c,r)||l(c,r));return c}},(t,e,r)=>{var n=r(15),i=r(64),a=r(67),o=function(t){return function(e,r,o){var s,l=n(e),u=a(l),c=i(o,u);if(t&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===r)return t||c||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},(t,e,r)=>{var n=r(65),i=Math.max,a=Math.min;t.exports=function(t,e){var r=n(t);return r<0?i(r+e,0):a(r,e)}},(t,e,r)=>{var n=r(66);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},t=>{var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},(t,e,r)=>{var n=r(68);t.exports=function(t){return n(t.length)}},(t,e,r)=>{var n=r(65),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(t,e)=>{e.f=Object.getOwnPropertySymbols},(t,e,r)=>{var n=r(10),i=r(24),a=/#|\\.prototype\\./,o=function(t,e){var r=l[s(t)];return r==c||r!=u&&(i(e)?n(e):!!e)},s=o.normalize=function(t){return String(t).replace(a,".").toLowerCase()},l=o.data={},u=o.NATIVE="N",c=o.POLYFILL="P";t.exports=o},(t,e,r)=>{var n=r(37),i=r(73),a=r(48).f,o=n("unscopables"),s=Array.prototype;null==s[o]&&a(s,o,{configurable:!0,value:i(null)}),t.exports=function(t){s[o][t]=!0}},(t,e,r)=>{var n,i=r(50),a=r(74),o=r(69),s=r(58),l=r(76),u=r(46),c=r(57),h="prototype",f="script",d=c("IE_PROTO"),p=function(){},v=function(t){return"<"+f+">"+t+""},y=function(t){t.write(v("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e,r;m="undefined"!=typeof document?document.domain&&n?y(n):(e=u("iframe"),r="java"+f+":",e.style.display="none",l.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write(v("document.F=Object")),t.close(),t.F):y(n);for(var i=o.length;i--;)delete m[h][o[i]];return m()};s[d]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(p[h]=i(t),r=new p,p[h]=null,r[d]=t):r=m(),void 0===e?r:a.f(r,e)}},(t,e,r)=>{var n=r(9),i=r(49),a=r(48),o=r(50),s=r(15),l=r(75);e.f=n&&!i?Object.defineProperties:function(t,e){o(t);for(var r,n=s(e),i=l(e),u=i.length,c=0;u>c;)a.f(t,r=i[c++],n[r]);return t}},(t,e,r)=>{var n=r(62),i=r(69);t.exports=Object.keys||function(t){return n(t,i)}},(t,e,r)=>{var n=r(27);t.exports=n("document","documentElement")},(t,e,r)=>{var n=r(7),i=r(17);t.exports=function(t,e){return i(n[t].prototype[e])}},(t,e,r)=>{r(79)},(t,e,r)=>{var n=r(80),i=r(67),a=r(65),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(t){var e=o(this),r=i(e),n=a(t),s=n>=0?n:r+n;return s<0||s>=r?void 0:e[s]}))},(t,e,r)=>{var n,i,a,o=r(81),s=r(9),l=r(7),u=r(24),c=r(23),h=r(42),f=r(82),d=r(35),p=r(47),v=r(51),y=r(48).f,m=r(28),g=r(84),b=r(86),_=r(37),w=r(44),A=r(55),k=A.enforce,S=A.get,x=l.Int8Array,E=x&&x.prototype,P=l.Uint8ClampedArray,T=P&&P.prototype,C=x&&g(x),O=E&&g(E),F=Object.prototype,M=l.TypeError,R=_("toStringTag"),I=w("TYPED_ARRAY_TAG"),j="TypedArrayConstructor",L=o&&!!b&&"Opera"!==f(l.opera),D=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},U={BigInt64Array:8,BigUint64Array:8},W=function(t){var e=g(t);if(c(e)){var r=S(e);return r&&h(r,j)?r[j]:W(e)}},G=function(t){if(!c(t))return!1;var e=f(t);return h(N,e)||h(U,e)};for(n in N)(a=(i=l[n])&&i.prototype)?k(a)[j]=i:L=!1;for(n in U)(a=(i=l[n])&&i.prototype)&&(k(a)[j]=i);if((!L||!u(C)||C===Function.prototype)&&(C=function(){throw M("Incorrect invocation")},L))for(n in N)l[n]&&b(l[n],C);if((!L||!O||O===F)&&(O=C.prototype,L))for(n in N)l[n]&&b(l[n].prototype,O);if(L&&g(T)!==O&&b(T,O),s&&!h(O,R))for(n in D=!0,y(O,R,{get:function(){return c(this)?this[I]:void 0}}),N)l[n]&&p(l[n],I,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_TAG:D&&I,aTypedArray:function(t){if(G(t))return t;throw M("Target is not a typed array")},aTypedArrayConstructor:function(t){if(u(t)&&(!b||m(C,t)))return t;throw M(d(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,r,n){if(s){if(r)for(var i in N){var a=l[i];if(a&&h(a.prototype,t))try{delete a.prototype[t]}catch(r){try{a.prototype[t]=e}catch(t){}}}O[t]&&!r||v(O,t,r?e:L&&E[t]||e,n)}},exportTypedArrayStaticMethod:function(t,e,r){var n,i;if(s){if(b){if(r)for(n in N)if((i=l[n])&&h(i,t))try{delete i[t]}catch(t){}if(C[t]&&!r)return;try{return v(C,t,r?e:L&&C[t]||e)}catch(t){}}for(n in N)!(i=l[n])||i[t]&&!r||v(i,t,e)}},getTypedArrayConstructor:W,isView:function(t){if(!c(t))return!1;var e=f(t);return"DataView"===e||h(N,e)||h(U,e)},isTypedArray:G,TypedArray:C,TypedArrayPrototype:O}},t=>{t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(t,e,r)=>{var n=r(83),i=r(24),a=r(18),o=r(37)("toStringTag"),s=Object,l="Arguments"==a(function(){return arguments}());t.exports=n?a:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=s(t),o))?r:l?a(e):"Object"==(n=a(e))&&i(e.callee)?"Arguments":n}},(t,e,r)=>{var n={};n[r(37)("toStringTag")]="z",t.exports="[object z]"===String(n)},(t,e,r)=>{var n=r(42),i=r(24),a=r(43),o=r(57),s=r(85),l=o("IE_PROTO"),u=Object,c=u.prototype;t.exports=s?u.getPrototypeOf:function(t){var e=a(t);if(n(e,l))return e[l];var r=e.constructor;return i(r)&&e instanceof r?r.prototype:e instanceof u?c:null}},(t,e,r)=>{var n=r(10);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},(t,e,r)=>{var n=r(17),i=r(50),a=r(87);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return i(r),a(n),e?t(r,n):r.__proto__=n,r}}():void 0)},(t,e,r)=>{var n=r(24),i=String,a=TypeError;t.exports=function(t){if("object"==typeof t||n(t))return t;throw a("Can't set "+i(t)+" as a prototype")}},(t,e,r)=>{r(89),r(96),r(98),r(121),r(123);var n=r(132);t.exports=n.structuredClone},(t,e,r)=>{var n=r(15),i=r(72),a=r(90),o=r(55),s=r(48).f,l=r(91),u=r(95),c=r(39),h=r(9),f="Array Iterator",d=o.set,p=o.getterFor(f);t.exports=l(Array,"Array",(function(t,e){d(this,{type:f,target:n(t),index:0,kind:e})}),(function(){var t=p(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,u(void 0,!0)):u("keys"==r?n:"values"==r?e[n]:[n,e[n]],!1)}),"values");var v=a.Arguments=a.Array;if(i("keys"),i("values"),i("entries"),!c&&h&&"values"!==v.name)try{s(v,"name",{value:"values"})}catch(t){}},t=>{t.exports={}},(t,e,r)=>{var n=r(6),i=r(11),a=r(39),o=r(53),s=r(24),l=r(92),u=r(84),c=r(86),h=r(94),f=r(47),d=r(51),p=r(37),v=r(90),y=r(93),m=o.PROPER,g=o.CONFIGURABLE,b=y.IteratorPrototype,_=y.BUGGY_SAFARI_ITERATORS,w=p("iterator"),A="keys",k="values",S="entries",x=function(){return this};t.exports=function(t,e,r,o,p,y,E){l(r,e,o);var P,T,C,O=function(t){if(t===p&&j)return j;if(!_&&t in R)return R[t];switch(t){case A:case k:case S:return function(){return new r(this,t)}}return function(){return new r(this)}},F=e+" Iterator",M=!1,R=t.prototype,I=R[w]||R["@@iterator"]||p&&R[p],j=!_&&I||O(p),L="Array"==e&&R.entries||I;if(L&&(P=u(L.call(new t)))!==Object.prototype&&P.next&&(a||u(P)===b||(c?c(P,b):s(P[w])||d(P,w,x)),h(P,F,!0,!0),a&&(v[F]=x)),m&&p==k&&I&&I.name!==k&&(!a&&g?f(R,"name",k):(M=!0,j=function(){return i(I,this)})),p)if(T={values:O(k),keys:y?j:O(A),entries:O(S)},E)for(C in T)(_||M||!(C in R))&&d(R,C,T[C]);else n({target:e,proto:!0,forced:_||M},T);return a&&!E||R[w]===j||d(R,w,j,{name:p}),v[e]=j,T}},(t,e,r)=>{var n=r(93).IteratorPrototype,i=r(73),a=r(14),o=r(94),s=r(90),l=function(){return this};t.exports=function(t,e,r,u){var c=e+" Iterator";return t.prototype=i(n,{next:a(+!u,r)}),o(t,c,!1,!0),s[c]=l,t}},(t,e,r)=>{var n,i,a,o=r(10),s=r(24),l=r(23),u=r(73),c=r(84),h=r(51),f=r(37),d=r(39),p=f("iterator"),v=!1;[].keys&&("next"in(a=[].keys())?(i=c(c(a)))!==Object.prototype&&(n=i):v=!0),!l(n)||o((function(){var t={};return n[p].call(t)!==t}))?n={}:d&&(n=u(n)),s(n[p])||h(n,p,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:v}},(t,e,r)=>{var n=r(48).f,i=r(42),a=r(37)("toStringTag");t.exports=function(t,e,r){t&&!r&&(t=t.prototype),t&&!i(t,a)&&n(t,a,{configurable:!0,value:e})}},t=>{t.exports=function(t,e){return{value:t,done:e}}},(t,e,r)=>{var n=r(83),i=r(51),a=r(97);n||i(Object.prototype,"toString",a,{unsafe:!0})},(t,e,r)=>{var n=r(83),i=r(82);t.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},(t,e,r)=>{r(99)},(t,e,r)=>{r(100)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n=r(6),i=r(7),a=r(17),o=r(71),s=r(51),l=r(101),u=r(108),c=r(115),h=r(24),f=r(20),d=r(23),p=r(10),v=r(116),y=r(94),m=r(117);t.exports=function(t,e,r){var g=-1!==t.indexOf("Map"),b=-1!==t.indexOf("Weak"),_=g?"set":"add",w=i[t],A=w&&w.prototype,k=w,S={},x=function(t){var e=a(A[t]);s(A,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return b&&!d(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(b&&!d(t))&&e(this,0===t?0:t)}:function(t,r){return e(this,0===t?0:t,r),this})};if(o(t,!h(w)||!(b||A.forEach&&!p((function(){(new w).entries().next()})))))k=r.getConstructor(e,t,g,_),l.enable();else if(o(t,!0)){var E=new k,P=E[_](b?{}:-0,1)!=E,T=p((function(){E.has(1)})),C=v((function(t){new w(t)})),O=!b&&p((function(){for(var t=new w,e=5;e--;)t[_](e,e);return!t.has(-0)}));C||((k=e((function(t,e){c(t,A);var r=m(new w,t,k);return f(e)||u(e,r[_],{that:r,AS_ENTRIES:g}),r}))).prototype=A,A.constructor=k),(T||O)&&(x("delete"),x("has"),g&&x("get")),(O||P)&&x(_),b&&A.clear&&delete A.clear}return S[t]=k,n({global:!0,constructor:!0,forced:k!=w},S),y(k,t),b||r.setStrong(k,t,g),k}},(t,e,r)=>{var n=r(6),i=r(17),a=r(58),o=r(23),s=r(42),l=r(48).f,u=r(61),c=r(102),h=r(105),f=r(44),d=r(107),p=!1,v=f("meta"),y=0,m=function(t){l(t,v,{value:{objectID:"O"+y++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},p=!0;var t=u.f,e=i([].splice),r={};r[v]=1,t(r).length&&(u.f=function(r){for(var n=t(r),i=0,a=n.length;i{var n=r(18),i=r(15),a=r(61).f,o=r(103),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"Window"==n(t)?function(t){try{return a(t)}catch(t){return o(s)}}(t):a(i(t))}},(t,e,r)=>{var n=r(64),i=r(67),a=r(104),o=Array,s=Math.max;t.exports=function(t,e,r){for(var l=i(t),u=n(e,l),c=n(void 0===r?l:r,l),h=o(s(c-u,0)),f=0;u{var n=r(21),i=r(48),a=r(14);t.exports=function(t,e,r){var o=n(e);o in t?i.f(t,o,a(0,r)):t[o]=r}},(t,e,r)=>{var n=r(10),i=r(23),a=r(18),o=r(106),s=Object.isExtensible,l=n((function(){s(1)}));t.exports=l||o?function(t){return!!i(t)&&(!o||"ArrayBuffer"!=a(t))&&(!s||s(t))}:s},(t,e,r)=>{var n=r(10);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},(t,e,r)=>{var n=r(10);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},(t,e,r)=>{var n=r(109),i=r(11),a=r(50),o=r(35),s=r(111),l=r(67),u=r(28),c=r(112),h=r(113),f=r(114),d=TypeError,p=function(t,e){this.stopped=t,this.result=e},v=p.prototype;t.exports=function(t,e,r){var y,m,g,b,_,w,A,k=r&&r.that,S=!(!r||!r.AS_ENTRIES),x=!(!r||!r.IS_RECORD),E=!(!r||!r.IS_ITERATOR),P=!(!r||!r.INTERRUPTED),T=n(e,k),C=function(t){return y&&f(y,"normal",t),new p(!0,t)},O=function(t){return S?(a(t),P?T(t[0],t[1],C):T(t[0],t[1])):P?T(t,C):T(t)};if(x)y=t.iterator;else if(E)y=t;else{if(!(m=h(t)))throw d(o(t)+" is not iterable");if(s(m)){for(g=0,b=l(t);b>g;g++)if((_=O(t[g]))&&u(v,_))return _;return new p(!1)}y=c(t,m)}for(w=x?t.next:y.next;!(A=i(w,y)).done;){try{_=O(A.value)}catch(t){f(y,"throw",t)}if("object"==typeof _&&_&&u(v,_))return _}return new p(!1)}},(t,e,r)=>{var n=r(110),i=r(34),a=r(12),o=n(n.bind);t.exports=function(t,e){return i(t),void 0===e?t:a?o(t,e):function(){return t.apply(e,arguments)}}},(t,e,r)=>{var n=r(18),i=r(17);t.exports=function(t){if("Function"===n(t))return i(t)}},(t,e,r)=>{var n=r(37),i=r(90),a=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[a]===t)}},(t,e,r)=>{var n=r(11),i=r(34),a=r(50),o=r(35),s=r(113),l=TypeError;t.exports=function(t,e){var r=arguments.length<2?s(t):e;if(i(r))return a(n(r,t));throw l(o(t)+" is not iterable")}},(t,e,r)=>{var n=r(82),i=r(33),a=r(20),o=r(90),s=r(37)("iterator");t.exports=function(t){if(!a(t))return i(t,s)||i(t,"@@iterator")||o[n(t)]}},(t,e,r)=>{var n=r(11),i=r(50),a=r(33);t.exports=function(t,e,r){var o,s;i(t);try{if(!(o=a(t,"return"))){if("throw"===e)throw r;return r}o=n(o,t)}catch(t){s=!0,o=t}if("throw"===e)throw r;if(s)throw o;return i(o),r}},(t,e,r)=>{var n=r(28),i=TypeError;t.exports=function(t,e){if(n(e,t))return t;throw i("Incorrect invocation")}},(t,e,r)=>{var n=r(37)("iterator"),i=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},t(a)}catch(t){}return r}},(t,e,r)=>{var n=r(24),i=r(23),a=r(86);t.exports=function(t,e,r){var o,s;return a&&n(o=e.constructor)&&o!==r&&i(s=o.prototype)&&s!==r.prototype&&a(t,s),t}},(t,e,r)=>{var n=r(48).f,i=r(73),a=r(119),o=r(109),s=r(115),l=r(20),u=r(108),c=r(91),h=r(95),f=r(120),d=r(9),p=r(101).fastKey,v=r(55),y=v.set,m=v.getterFor;t.exports={getConstructor:function(t,e,r,c){var h=t((function(t,n){s(t,f),y(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),d||(t.size=0),l(n)||u(n,t[c],{that:t,AS_ENTRIES:r})})),f=h.prototype,v=m(e),g=function(t,e,r){var n,i,a=v(t),o=b(t,e);return o?o.value=r:(a.last=o={index:i=p(e,!0),key:e,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=o),n&&(n.next=o),d?a.size++:t.size++,"F"!==i&&(a.index[i]=o)),t},b=function(t,e){var r,n=v(t),i=p(e);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key==e)return r};return a(f,{clear:function(){for(var t=v(this),e=t.index,r=t.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete e[r.index],r=r.next;t.first=t.last=void 0,d?t.size=0:this.size=0},delete:function(t){var e=this,r=v(e),n=b(e,t);if(n){var i=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=i),i&&(i.previous=a),r.first==n&&(r.first=i),r.last==n&&(r.last=a),d?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=v(this),n=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!b(this,t)}}),a(f,r?{get:function(t){var e=b(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),d&&n(f,"size",{get:function(){return v(this).size}}),h},setStrong:function(t,e,r){var n=e+" Iterator",i=m(e),a=m(n);c(t,e,(function(t,e){y(this,{type:n,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=a(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?h("keys"==e?r.key:"values"==e?r.value:[r.key,r.value],!1):(t.target=void 0,h(void 0,!0))}),r?"entries":"values",!r,!0),f(e)}}},(t,e,r)=>{var n=r(51);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},(t,e,r)=>{var n=r(27),i=r(48),a=r(37),o=r(9),s=a("species");t.exports=function(t){var e=n(t),r=i.f;o&&e&&!e[s]&&r(e,s,{configurable:!0,get:function(){return this}})}},(t,e,r)=>{r(122)},(t,e,r)=>{r(100)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r(118))},(t,e,r)=>{var n,i=r(39),a=r(6),o=r(7),s=r(27),l=r(17),u=r(10),c=r(44),h=r(24),f=r(124),d=r(20),p=r(23),v=r(26),y=r(108),m=r(50),g=r(82),b=r(42),_=r(104),w=r(47),A=r(67),k=r(125),S=r(126),x=r(128),E=r(31),P=r(129),T=r(130),C=r(131),O=o.Object,F=o.Date,M=o.Error,R=o.EvalError,I=o.RangeError,j=o.ReferenceError,L=o.SyntaxError,D=o.TypeError,N=o.URIError,U=o.PerformanceMark,W=o.WebAssembly,G=W&&W.CompileError||M,B=W&&W.LinkError||M,q=W&&W.RuntimeError||M,H=s("DOMException"),z=s("Set"),V=s("Map"),X=V.prototype,Y=l(X.has),K=l(X.get),J=l(X.set),Q=l(z.prototype.add),$=s("Object","keys"),Z=l([].push),tt=l((!0).valueOf),et=l(1..valueOf),rt=l("".valueOf),nt=l(F.prototype.getTime),it=c("structuredClone"),at="DataCloneError",ot="Transferring",st=function(t){return!u((function(){var e=new o.Set([7]),r=t(e),n=t(O(7));return r==e||!r.has(7)||"object"!=typeof n||7!=n}))&&t},lt=function(t,e){return!u((function(){var r=new e,n=t({a:r,b:r});return!(n&&n.a===n.b&&n.a instanceof e&&n.a.stack===r.stack)}))},ut=o.structuredClone,ct=i||!lt(ut,M)||!lt(ut,H)||(n=ut,!!u((function(){var t=n(new o.AggregateError([1],it,{cause:3}));return"AggregateError"!=t.name||1!=t.errors[0]||t.message!=it||3!=t.cause}))),ht=!ut&&st((function(t){return new U(it,{detail:t}).detail})),ft=st(ut)||ht,dt=function(t){throw new H("Uncloneable type: "+t,at)},pt=function(t,e){throw new H((e||"Cloning")+" of "+t+" cannot be properly polyfilled in this engine",at)},vt=function(t,e){if(v(t)&&dt("Symbol"),!p(t))return t;if(e){if(Y(e,t))return K(e,t)}else e=new V;var r,n,i,a,l,u,c,f,d,y,m=g(t),k=!1;switch(m){case"Array":i=[],k=!0;break;case"Object":i={},k=!0;break;case"Map":i=new V,k=!0;break;case"Set":i=new z,k=!0;break;case"RegExp":i=new RegExp(t.source,S(t));break;case"Error":switch(n=t.name){case"AggregateError":i=s("AggregateError")([]);break;case"EvalError":i=R();break;case"RangeError":i=I();break;case"ReferenceError":i=j();break;case"SyntaxError":i=L();break;case"TypeError":i=D();break;case"URIError":i=N();break;case"CompileError":i=G();break;case"LinkError":i=B();break;case"RuntimeError":i=q();break;default:i=M()}k=!0;break;case"DOMException":i=new H(t.message,t.name),k=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":r=o[m],p(r)||pt(m),i=new r(vt(t.buffer,e),t.byteOffset,"DataView"===m?t.byteLength:t.length);break;case"DOMQuad":try{i=new DOMQuad(vt(t.p1,e),vt(t.p2,e),vt(t.p3,e),vt(t.p4,e))}catch(e){ft?i=ft(t):pt(m)}break;case"FileList":if(a=function(){var t;try{t=new o.DataTransfer}catch(e){try{t=new o.ClipboardEvent("").clipboardData}catch(t){}}return t&&t.items&&t.files?t:null}()){for(l=0,u=A(t);l92||C&&E>94||P&&E>97)return!1;var t=new ArrayBuffer(8),e=ut(t,{transfer:[t]});return 0!=t.byteLength||8!=e.byteLength}));a({global:!0,enumerable:!0,sham:!yt,forced:ct},{structuredClone:function(t){var e,r=k(arguments.length,1)>1&&!d(arguments[1])?m(arguments[1]):void 0,n=r?r.transfer:void 0;return void 0!==n&&function(t,e){if(!p(t))throw D("Transfer option cannot be converted to a sequence");var r=[];y(t,(function(t){Z(r,m(t))}));var n,i,a,s,l,u,c=0,d=A(r);if(yt)for(s=ut(r,{transfer:r});c{var n=r(17),i=r(10),a=r(24),o=r(82),s=r(27),l=r(54),u=function(){},c=[],h=s("Reflect","construct"),f=/^\\s*(?:class|function)\\b/,d=n(f.exec),p=!f.exec(u),v=function(t){if(!a(t))return!1;try{return h(u,c,t),!0}catch(t){return!1}},y=function(t){if(!a(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(f,l(t))}catch(t){return!0}};y.sham=!0,t.exports=!h||i((function(){var t;return v(v.call)||!v(Object)||!v((function(){t=!0}))||t}))?y:v},t=>{var e=TypeError;t.exports=function(t,r){if(t{var n=r(11),i=r(42),a=r(28),o=r(127),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in s||i(t,"flags")||!a(s,t)?e:n(o,t)}},(t,e,r)=>{var n=r(50);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},(t,e,r)=>{var n=r(10),i=r(14);t.exports=!n((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},(t,e,r)=>{var n=r(130),i=r(131);t.exports=!n&&!i&&"object"==typeof window&&"object"==typeof document},t=>{t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(t,e,r)=>{var n=r(18),i=r(7);t.exports="process"==n(i.process)},(t,e,r)=>{var n=r(7);t.exports=n},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.build=exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,exports.getDocument=getDocument,exports.setPDFNetworkStreamFactory=setPDFNetworkStreamFactory,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(134),_display_utils=__w_pdfjs_require__(137),_font_loader=__w_pdfjs_require__(140),_canvas=__w_pdfjs_require__(141),_worker_options=__w_pdfjs_require__(144),_is_node=__w_pdfjs_require__(3),_message_handler=__w_pdfjs_require__(145),_metadata=__w_pdfjs_require__(146),_optional_content_config=__w_pdfjs_require__(147),_transport_stream=__w_pdfjs_require__(148),_xfa_text=__w_pdfjs_require__(149);function _classPrivateMethodInitSpec(t,e){_checkPrivateRedeclaration(t,e),e.add(t)}function _classPrivateMethodGet(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _createForOfIteratorHelper(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_unsupportedIterableToArray(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function _regeneratorRuntime(){_regeneratorRuntime=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function u(t,e,r,i){var a=e&&e.prototype instanceof f?e:f,o=Object.create(a.prototype),s=new x(i||[]);return n(o,"_invoke",{value:w(t,r,s)}),o}function c(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var h={};function f(){}function d(){}function p(){}var v={};l(v,a,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(E([])));m&&m!==e&&r.call(m,a)&&(v=m);var g=p.prototype=f.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function i(n,a,o,s){var l=c(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==_typeof(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function w(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=A(o,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=c(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function A(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,A(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var i=c(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,h;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,h):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function k(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(k,this),this.reset(!0)}function E(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;S(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},t}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;_classCallCheck(this,t),this.length=e,this.initialData=r,this.progressiveDone=n,this.contentDispositionFilename=i,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=(0,_util.createPromiseCapability)()}return _createClass(t,[{key:"addRangeListener",value:function(t){this._rangeListeners.push(t)}},{key:"addProgressListener",value:function(t){this._progressListeners.push(t)}},{key:"addProgressiveReadListener",value:function(t){this._progressiveReadListeners.push(t)}},{key:"addProgressiveDoneListener",value:function(t){this._progressiveDoneListeners.push(t)}},{key:"onDataRange",value:function(t,e){var r,n=_createForOfIteratorHelper(this._rangeListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t,e)}catch(t){n.e(t)}finally{n.f()}}},{key:"onDataProgress",value:function(t,e){var r=this;this._readyCapability.promise.then((function(){var n,i=_createForOfIteratorHelper(r._progressListeners);try{for(i.s();!(n=i.n()).done;)(0,n.value)(t,e)}catch(t){i.e(t)}finally{i.f()}}))}},{key:"onDataProgressiveRead",value:function(t){var e=this;this._readyCapability.promise.then((function(){var r,n=_createForOfIteratorHelper(e._progressiveReadListeners);try{for(n.s();!(r=n.n()).done;)(0,r.value)(t)}catch(t){n.e(t)}finally{n.f()}}))}},{key:"onDataProgressiveDone",value:function(){var t=this;this._readyCapability.promise.then((function(){var e,r=_createForOfIteratorHelper(t._progressiveDoneListeners);try{for(r.s();!(e=r.n()).done;)(0,e.value)()}catch(t){r.e(t)}finally{r.f()}}))}},{key:"transportReady",value:function(){this._readyCapability.resolve()}},{key:"requestDataRange",value:function(t,e){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}},{key:"abort",value:function(){}}]),t}();exports.PDFDataRangeTransport=PDFDataRangeTransport;var PDFDocumentProxy=function(){function t(e,r){_classCallCheck(this,t),this._pdfInfo=e,this._transport=r}return _createClass(t,[{key:"annotationStorage",get:function(){return this._transport.annotationStorage}},{key:"numPages",get:function(){return this._pdfInfo.numPages}},{key:"fingerprints",get:function(){return this._pdfInfo.fingerprints}},{key:"stats",get:function(){return(0,_display_utils.deprecated)("The PDFDocumentProxy stats property will be removed in the future."),this._transport.stats}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"allXfaHtml",get:function(){return this._transport._htmlForXfa}},{key:"getPage",value:function(t){return this._transport.getPage(t)}},{key:"getPageIndex",value:function(t){return this._transport.getPageIndex(t)}},{key:"getDestinations",value:function(){return this._transport.getDestinations()}},{key:"getDestination",value:function(t){return this._transport.getDestination(t)}},{key:"getPageLabels",value:function(){return this._transport.getPageLabels()}},{key:"getPageLayout",value:function(){return this._transport.getPageLayout()}},{key:"getPageMode",value:function(){return this._transport.getPageMode()}},{key:"getViewerPreferences",value:function(){return this._transport.getViewerPreferences()}},{key:"getOpenAction",value:function(){return this._transport.getOpenAction()}},{key:"getAttachments",value:function(){return this._transport.getAttachments()}},{key:"getJavaScript",value:function(){return this._transport.getJavaScript()}},{key:"getJSActions",value:function(){return this._transport.getDocJSActions()}},{key:"getOutline",value:function(){return this._transport.getOutline()}},{key:"getOptionalContentConfig",value:function(){return this._transport.getOptionalContentConfig()}},{key:"getPermissions",value:function(){return this._transport.getPermissions()}},{key:"getMetadata",value:function(){return this._transport.getMetadata()}},{key:"getMarkInfo",value:function(){return this._transport.getMarkInfo()}},{key:"getData",value:function(){return this._transport.getData()}},{key:"saveDocument",value:function(){return this._transport.saveDocument()}},{key:"getDownloadInfo",value:function(){return this._transport.downloadInfoCapability.promise}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._transport.startCleanup(t||this.isPureXfa)}},{key:"destroy",value:function(){return this.loadingTask.destroy()}},{key:"loadingParams",get:function(){return this._transport.loadingParams}},{key:"loadingTask",get:function(){return this._transport.loadingTask}},{key:"getFieldObjects",value:function(){return this._transport.getFieldObjects()}},{key:"hasJSActions",value:function(){return this._transport.hasJSActions()}},{key:"getCalculationOrderIds",value:function(){return this._transport.getCalculationOrderIds()}}]),t}();exports.PDFDocumentProxy=PDFDocumentProxy;var PDFPageProxy=function(){function t(e,r,n,i){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];_classCallCheck(this,t),this._pageIndex=e,this._pageInfo=r,this._ownerDocument=i,this._transport=n,this._stats=a?new _display_utils.StatTimer:null,this._pdfBug=a,this.commonObjs=n.commonObjs,this.objs=new PDFObjects,this._bitmaps=new Set,this.cleanupAfterRender=!1,this.pendingCleanup=!1,this._intentStates=new Map,this.destroyed=!1}var e;return _createClass(t,[{key:"pageNumber",get:function(){return this._pageIndex+1}},{key:"rotate",get:function(){return this._pageInfo.rotate}},{key:"ref",get:function(){return this._pageInfo.ref}},{key:"userUnit",get:function(){return this._pageInfo.userUnit}},{key:"view",get:function(){return this._pageInfo.view}},{key:"getViewport",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.scale,r=t.rotation,n=void 0===r?this.rotate:r,i=t.offsetX,a=void 0===i?0:i,o=t.offsetY,s=void 0===o?0:o,l=t.dontFlip,u=void 0!==l&&l;return new _display_utils.PageViewport({viewBox:this.view,scale:e,rotation:n,offsetX:a,offsetY:s,dontFlip:u})}},{key:"getAnnotations",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).intent,e=void 0===t?"display":t,r=this._transport.getRenderingIntent(e);return this._transport.getAnnotations(this._pageIndex,r.renderingIntent)}},{key:"getJSActions",value:function(){return this._transport.getPageJSActions(this._pageIndex)}},{key:"isPureXfa",get:function(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}},{key:"getXfa",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(null===(e=this._transport._htmlForXfa)||void 0===e?void 0:e.children[this._pageIndex])||null);case 1:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"render",value:function(t){var e,r,n=this,i=t.canvasContext,a=t.viewport,o=t.intent,s=void 0===o?"display":o,l=t.annotationMode,u=void 0===l?_util.AnnotationMode.ENABLE:l,c=t.transform,h=void 0===c?null:c,f=t.canvasFactory,d=void 0===f?null:f,p=t.background,v=void 0===p?null:p,y=t.optionalContentConfigPromise,m=void 0===y?null:y,g=t.annotationCanvasMap,b=void 0===g?null:g,_=t.pageColors,w=void 0===_?null:_,A=t.printAnnotationStorage,k=void 0===A?null:A;null===(e=this._stats)||void 0===e||e.time("Overall");var S=this._transport.getRenderingIntent(s,u,k);this.pendingCleanup=!1,m||(m=this._transport.getOptionalContentConfig());var x=this._intentStates.get(S.cacheKey);x||(x=Object.create(null),this._intentStates.set(S.cacheKey,x)),x.streamReaderCancelTimeout&&(clearTimeout(x.streamReaderCancelTimeout),x.streamReaderCancelTimeout=null);var E,P=d||new DefaultCanvasFactory({ownerDocument:this._ownerDocument}),T=!!(S.renderingIntent&_util.RenderingIntentFlag.PRINT);x.displayReadyCapability||(x.displayReadyCapability=(0,_util.createPromiseCapability)(),x.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(E=this._stats)||void 0===E||E.time("Page Request"),this._pumpOperatorList(S));var C=function(t){var e,r;x.renderTasks.delete(O),(n.cleanupAfterRender||T)&&(n.pendingCleanup=!0),n._tryCleanup(),t?(O.capability.reject(t),n._abortOperatorList({intentState:x,reason:t instanceof Error?t:new Error(t)})):O.capability.resolve(),null===(e=n._stats)||void 0===e||e.timeEnd("Rendering"),null===(r=n._stats)||void 0===r||r.timeEnd("Overall")},O=new InternalRenderTask({callback:C,params:{canvasContext:i,viewport:a,transform:h,background:v},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:b,operatorList:x.operatorList,pageIndex:this._pageIndex,canvasFactory:P,useRequestAnimationFrame:!T,pdfBug:this._pdfBug,pageColors:w});((r=x).renderTasks||(r.renderTasks=new Set)).add(O);var F=O.task;return Promise.all([x.displayReadyCapability.promise,m]).then((function(t){var e,r=_slicedToArray(t,2),i=r[0],a=r[1];n.pendingCleanup?C():(null===(e=n._stats)||void 0===e||e.time("Rendering"),O.initializeGraphics({transparency:i,optionalContentConfig:a}),O.operatorListChanged())})).catch(C),F}},{key:"getOperatorList",value:function(){var t,e,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=n.intent,a=void 0===i?"display":i,o=n.annotationMode,s=void 0===o?_util.AnnotationMode.ENABLE:o,l=n.printAnnotationStorage,u=void 0===l?null:l,c=this._transport.getRenderingIntent(a,s,u,!0),h=this._intentStates.get(c.cacheKey);return h||(h=Object.create(null),this._intentStates.set(c.cacheKey,h)),h.opListReadCapability||((t=Object.create(null)).operatorListChanged=function(){h.operatorList.lastChunk&&(h.opListReadCapability.resolve(h.operatorList),h.renderTasks.delete(t))},h.opListReadCapability=(0,_util.createPromiseCapability)(),((e=h).renderTasks||(e.renderTasks=new Set)).add(t),h.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},null===(r=this._stats)||void 0===r||r.time("Page Request"),this._pumpOperatorList(c)),h.opListReadCapability.promise}},{key:"streamTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.disableCombineTextItems,r=void 0!==e&&e,n=t.includeMarkedContent,i=void 0!==n&&n;return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,combineTextItems:!0!==r,includeMarkedContent:!0===i},{highWaterMark:100,size:function(t){return t.items.length}})}},{key:"getTextContent",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._transport._htmlForXfa)return this.getXfa().then((function(t){return _xfa_text.XfaText.textContent(t)}));var e=this.streamTextContent(t);return new Promise((function(t,r){var n=e.getReader(),i={items:[],styles:Object.create(null)};!function e(){n.read().then((function(r){var n,a=r.value;r.done?t(i):(Object.assign(i.styles,a.styles),(n=i.items).push.apply(n,_toConsumableArray(a.items)),e())}),r)}()}))}},{key:"getStructTree",value:function(){return this._transport.getStructTree(this._pageIndex)}},{key:"_destroy",value:function(){this.destroyed=!0;var t,e=[],r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(t=r.n()).done;){var n=t.value;if(this._abortOperatorList({intentState:n,reason:new Error("Page was destroyed."),force:!0}),!n.opListReadCapability){var i,a=_createForOfIteratorHelper(n.renderTasks);try{for(a.s();!(i=a.n()).done;){var o=i.value;e.push(o.completed),o.cancel()}}catch(t){a.e(t)}finally{a.f()}}}}catch(t){r.e(t)}finally{r.f()}this.objs.clear();var s,l=_createForOfIteratorHelper(this._bitmaps);try{for(l.s();!(s=l.n()).done;)s.value.close()}catch(t){l.e(t)}finally{l.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,Promise.all(e)}},{key:"cleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.pendingCleanup=!0,this._tryCleanup(t)}},{key:"_tryCleanup",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.pendingCleanup)return!1;var e,r=_createForOfIteratorHelper(this._intentStates.values());try{for(r.s();!(e=r.n()).done;){var n=e.value,i=n.renderTasks,a=n.operatorList;if(i.size>0||!a.lastChunk)return!1}}catch(t){r.e(t)}finally{r.f()}this._intentStates.clear(),this.objs.clear(),t&&this._stats&&(this._stats=new _display_utils.StatTimer);var o,s=_createForOfIteratorHelper(this._bitmaps);try{for(s.s();!(o=s.n()).done;)o.value.close()}catch(t){s.e(t)}finally{s.f()}return this._bitmaps.clear(),this.pendingCleanup=!1,!0}},{key:"_startRenderPage",value:function(t,e){var r,n,i=this._intentStates.get(e);i&&(null===(r=this._stats)||void 0===r||r.timeEnd("Page Request"),null===(n=i.displayReadyCapability)||void 0===n||n.resolve(t))}},{key:"_renderPageChunk",value:function(t,e){for(var r=0,n=t.length;r0)return;if(n instanceof _display_utils.RenderingCancelledException){var o=RENDERING_CANCELLED_TIMEOUT;return n.extraDelay>0&&n.extraDelay<1e3&&(o+=n.extraDelay),void(r.streamReaderCancelTimeout=setTimeout((function(){r.streamReaderCancelTimeout=null,e._abortOperatorList({intentState:r,reason:n,force:!0})}),o))}}if(r.streamReader.cancel(new _util.AbortException(n.message)).catch((function(){})),r.streamReader=null,!this._transport.destroyed){var s,l=_createForOfIteratorHelper(this._intentStates);try{for(l.s();!(s=l.n()).done;){var u=_slicedToArray(s.value,2),c=u[0];if(u[1]===r){this._intentStates.delete(c);break}}}catch(t){l.e(t)}finally{l.f()}this.cleanup()}}}},{key:"stats",get:function(){return this._stats}}]),t}();exports.PDFPageProxy=PDFPageProxy;var _listeners=new WeakMap,_deferred=new WeakMap,LoopbackPort=function(){function t(){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_listeners,{writable:!0,value:[]}),_classPrivateFieldInitSpec(this,_deferred,{writable:!0,value:Promise.resolve()})}return _createClass(t,[{key:"postMessage",value:function(t,e){var r=this,n={data:structuredClone(t,e)};_classPrivateFieldGet(this,_deferred).then((function(){var t,e=_createForOfIteratorHelper(_classPrivateFieldGet(r,_listeners));try{for(e.s();!(t=e.n()).done;)t.value.call(r,n)}catch(t){e.e(t)}finally{e.f()}}))}},{key:"addEventListener",value:function(t,e){_classPrivateFieldGet(this,_listeners).push(e)}},{key:"removeEventListener",value:function(t,e){var r=_classPrivateFieldGet(this,_listeners).indexOf(e);_classPrivateFieldGet(this,_listeners).splice(r,1)}},{key:"terminate",value:function(){_classPrivateFieldGet(this,_listeners).length=0}}]),t}();exports.LoopbackPort=LoopbackPort;var PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};if(exports.PDFWorkerUtil=PDFWorkerUtil,_is_node.isNodeJS&&"function"==typeof require)PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if("object"===("undefined"==typeof document?"undefined":_typeof(document))){var _document,_document$currentScri,pdfjsFilePath=null===(_document=document)||void 0===_document||null===(_document$currentScri=_document.currentScript)||void 0===_document$currentScri?void 0:_document$currentScri.src;pdfjsFilePath&&(PDFWorkerUtil.fallbackWorkerSrc=pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(t,e){var r;try{if(!(r=new URL(t)).origin||"null"===r.origin)return!1}catch(t){return!1}var n=new URL(e,r);return r.origin===n.origin},PDFWorkerUtil.createCDNWrapper=function(t){var e='importScripts("'.concat(t,'");');return URL.createObjectURL(new Blob([e]))};var PDFWorker=function(){function PDFWorker(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.name,r=void 0===e?null:e,n=t.port,i=void 0===n?null:n,a=t.verbosity,o=void 0===a?(0,_util.getVerbosityLevel)():a;if(_classCallCheck(this,PDFWorker),i&&_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).has(i))throw new Error("Cannot use more than one PDFWorker per port.");if(this.name=r,this.destroyed=!1,this.verbosity=o,this._readyCapability=(0,_util.createPromiseCapability)(),this._port=null,this._webWorker=null,this._messageHandler=null,i)return _classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).set(i,this),void this._initializeFromPort(i);this._initialize()}return _createClass(PDFWorker,[{key:"promise",get:function(){return this._readyCapability.promise}},{key:"port",get:function(){return this._port}},{key:"messageHandler",get:function(){return this._messageHandler}},{key:"_initializeFromPort",value:function(t){this._port=t,this._messageHandler=new _message_handler.MessageHandler("main","worker",t),this._messageHandler.on("ready",(function(){})),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}},{key:"_initialize",value:function(){var t=this;if(!PDFWorkerUtil.isWorkerDisabled&&!PDFWorker._mainThreadWorkerMessageHandler){var e=PDFWorker.workerSrc;try{PDFWorkerUtil.isSameOrigin(window.location.href,e)||(e=PDFWorkerUtil.createCDNWrapper(new URL(e,window.location).href));var r=new Worker(e),n=new _message_handler.MessageHandler("main","worker",r),i=function(){r.removeEventListener("error",a),n.destroy(),r.terminate(),t.destroyed?t._readyCapability.reject(new Error("Worker was destroyed")):t._setupFakeWorker()},a=function(){t._webWorker||i()};r.addEventListener("error",a),n.on("test",(function(e){r.removeEventListener("error",a),t.destroyed?i():e?(t._messageHandler=n,t._port=r,t._webWorker=r,t._readyCapability.resolve(),n.send("configure",{verbosity:t.verbosity})):(t._setupFakeWorker(),n.destroy(),r.terminate())})),n.on("ready",(function(e){if(r.removeEventListener("error",a),t.destroyed)i();else try{o()}catch(e){t._setupFakeWorker()}}));var o=function(){var t=new Uint8Array;n.send("test",t,[t.buffer])};return void o()}catch(t){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}},{key:"_setupFakeWorker",value:function(){var t=this;PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),PDFWorker._setupFakeWorkerGlobal.then((function(e){if(t.destroyed)t._readyCapability.reject(new Error("Worker was destroyed"));else{var r=new LoopbackPort;t._port=r;var n="fake".concat(PDFWorkerUtil.fakeWorkerId++),i=new _message_handler.MessageHandler(n+"_worker",n,r);e.setup(i,r);var a=new _message_handler.MessageHandler(n,n+"_worker",r);t._messageHandler=a,t._readyCapability.resolve(),a.send("configure",{verbosity:t.verbosity})}})).catch((function(e){t._readyCapability.reject(new Error('Setting up fake worker failed: "'.concat(e.message,'".')))}))}},{key:"destroy",value:function(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),_classStaticPrivateFieldSpecGet(PDFWorker,PDFWorker,_workerPorts).delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}}],[{key:"fromPort",value:function(t){if(null==t||!t.port)throw new Error("PDFWorker.fromPort - invalid method signature.");return _classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).has(t.port)?_classStaticPrivateFieldSpecGet(this,PDFWorker,_workerPorts).get(t.port):new PDFWorker(t)}},{key:"workerSrc",get:function(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(null!==PDFWorkerUtil.fallbackWorkerSrc)return _is_node.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}},{key:"_mainThreadWorkerMessageHandler",get:function(){try{var t;return(null===(t=globalThis.pdfjsWorker)||void 0===t?void 0:t.WorkerMessageHandler)||null}catch(t){return null}}},{key:"_setupFakeWorkerGlobal",get:function get(){var _this10=this,loader=function(){var _ref15=_asyncToGenerator(_regeneratorRuntime().mark((function _callee3(){var mainWorkerMessageHandler,worker;return _regeneratorRuntime().wrap((function _callee3$(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:if(mainWorkerMessageHandler=_this10._mainThreadWorkerMessageHandler,!mainWorkerMessageHandler){_context3.next=3;break}return _context3.abrupt("return",mainWorkerMessageHandler);case 3:if(!_is_node.isNodeJS||"function"!=typeof require){_context3.next=6;break}return worker=eval("require")(_this10.workerSrc),_context3.abrupt("return",worker.WorkerMessageHandler);case 6:return _context3.next=8,(0,_display_utils.loadScript)(_this10.workerSrc);case 8:return _context3.abrupt("return",window.pdfjsWorker.WorkerMessageHandler);case 9:case"end":return _context3.stop()}}),_callee3)})));return function(){return _ref15.apply(this,arguments)}}();return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}}]),PDFWorker}();exports.PDFWorker=PDFWorker;var _workerPorts={writable:!0,value:new WeakMap},_docStats=new WeakMap,_pageCache=new WeakMap,_pagePromises=new WeakMap,_metadataPromise=new WeakMap,WorkerTransport=function(){function t(e,r,n,i){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_docStats,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_pageCache,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_pagePromises,{writable:!0,value:new Map}),_classPrivateFieldInitSpec(this,_metadataPromise,{writable:!0,value:null}),this.messageHandler=e,this.loadingTask=r,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({onUnsupportedFeature:this._onUnsupportedFeature.bind(this),ownerDocument:i.ownerDocument,styleElement:i.styleElement}),this._params=i,i.useWorkerFetch||(this.CMapReaderFactory=new i.CMapReaderFactory({baseUrl:i.cMapUrl,isCompressed:i.cMapPacked}),this.StandardFontDataFactory=new i.StandardFontDataFactory({baseUrl:i.standardFontDataUrl})),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this._networkStream=n,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=(0,_util.createPromiseCapability)(),this.setupMessageHandler()}var e;return _createClass(t,[{key:"annotationStorage",get:function(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}},{key:"stats",get:function(){return _classPrivateFieldGet(this,_docStats)}},{key:"getRenderingIntent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_util.AnnotationMode.ENABLE,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=_util.RenderingIntentFlag.DISPLAY,a=null;switch(t){case"any":i=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":i=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)("getRenderingIntent - invalid intent: ".concat(t))}switch(e){case _util.AnnotationMode.DISABLE:i+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:i+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:a=((i+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE)&_util.RenderingIntentFlag.PRINT&&r instanceof _annotation_storage.PrintAnnotationStorage?r:this.annotationStorage).serializable;break;default:(0,_util.warn)("getRenderingIntent - invalid annotationMode: ".concat(e))}return n&&(i+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:i,cacheKey:"".concat(i,"_").concat(_annotation_storage.AnnotationStorage.getHash(a)),annotationStorageMap:a}}},{key:"destroy",value:function(){var t=this;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=(0,_util.createPromiseCapability)(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));var e,r=[],n=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values());try{for(n.s();!(e=n.n()).done;){var i=e.value;r.push(i._destroy())}}catch(t){n.e(t)}finally{n.f()}_classPrivateFieldGet(this,_pageCache).clear(),_classPrivateFieldGet(this,_pagePromises).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();var a=this.messageHandler.sendWithPromise("Terminate",null);return r.push(a),Promise.all(r).then((function(){t.commonObjs.clear(),t.fontLoader.clear(),_classPrivateFieldSet(t,_metadataPromise,null),t._getFieldObjectsPromise=null,t._hasJSActionsPromise=null,t._networkStream&&t._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")),t.messageHandler&&(t.messageHandler.destroy(),t.messageHandler=null),t.destroyCapability.resolve()}),this.destroyCapability.reject),this.destroyCapability.promise}},{key:"setupMessageHandler",value:function(){var t=this,e=this.messageHandler,r=this.loadingTask;e.on("GetReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetReader - no \`IPDFStream\` instance available."),t._fullReader=t._networkStream.getFullReader(),t._fullReader.onProgress=function(e){t._lastProgress={loaded:e.loaded,total:e.total}},r.onPull=function(){t._fullReader.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){t._fullReader.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}})),e.on("ReaderHeadersReady",(function(e){var n=(0,_util.createPromiseCapability)(),i=t._fullReader;return i.headersReady.then((function(){var e;i.isStreamingSupported&&i.isRangeSupported||(t._lastProgress&&(null===(e=r.onProgress)||void 0===e||e.call(r,t._lastProgress)),i.onProgress=function(t){var e;null===(e=r.onProgress)||void 0===e||e.call(r,{loaded:t.loaded,total:t.total})}),n.resolve({isStreamingSupported:i.isStreamingSupported,isRangeSupported:i.isRangeSupported,contentLength:i.contentLength})}),n.reject),n.promise})),e.on("GetRangeReader",(function(e,r){(0,_util.assert)(t._networkStream,"GetRangeReader - no \`IPDFStream\` instance available.");var n=t._networkStream.getRangeReader(e.begin,e.end);n?(r.onPull=function(){n.read().then((function(t){var e=t.value;t.done?r.close():((0,_util.assert)((0,_util.isArrayBuffer)(e),"GetRangeReader - expected an ArrayBuffer."),r.enqueue(new Uint8Array(e),1,[e]))})).catch((function(t){r.error(t)}))},r.onCancel=function(e){n.cancel(e),r.ready.catch((function(e){if(!t.destroyed)throw e}))}):r.close()})),e.on("GetDoc",(function(e){var n=e.pdfInfo;t._numPages=n.numPages,t._htmlForXfa=n.htmlForXfa,delete n.htmlForXfa,r._capability.resolve(new PDFDocumentProxy(n,t))})),e.on("DocException",(function(t){var e;switch(t.name){case"PasswordException":e=new _util.PasswordException(t.message,t.code);break;case"InvalidPDFException":e=new _util.InvalidPDFException(t.message);break;case"MissingPDFException":e=new _util.MissingPDFException(t.message);break;case"UnexpectedResponseException":e=new _util.UnexpectedResponseException(t.message,t.status);break;case"UnknownErrorException":e=new _util.UnknownErrorException(t.message,t.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}r._capability.reject(e)})),e.on("PasswordRequest",(function(e){if(t._passwordCapability=(0,_util.createPromiseCapability)(),r.onPassword)try{r.onPassword((function(e){e instanceof Error?t._passwordCapability.reject(e):t._passwordCapability.resolve({password:e})}),e.code)}catch(e){t._passwordCapability.reject(e)}else t._passwordCapability.reject(new _util.PasswordException(e.message,e.code));return t._passwordCapability.promise})),e.on("DataLoaded",(function(e){var n;null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.length,total:e.length}),t.downloadInfoCapability.resolve(e)})),e.on("StartRenderPage",(function(e){t.destroyed||_classPrivateFieldGet(t,_pageCache).get(e.pageIndex)._startRenderPage(e.transparency,e.cacheKey)})),e.on("commonobj",(function(r){var n,i=_slicedToArray(r,3),a=i[0],o=i[1],s=i[2];if(!t.destroyed&&!t.commonObjs.has(a))switch(o){case"Font":var l=t._params;if("error"in s){var u=s.error;(0,_util.warn)("Error during font loading: ".concat(u)),t.commonObjs.resolve(a,u);break}var c=null;l.pdfBug&&null!==(n=globalThis.FontInspector)&&void 0!==n&&n.enabled&&(c={registerFont:function(t,e){globalThis.FontInspector.fontAdded(t,e)}});var h=new _font_loader.FontFaceObject(s,{isEvalSupported:l.isEvalSupported,disableFontFace:l.disableFontFace,ignoreErrors:l.ignoreErrors,onUnsupportedFeature:t._onUnsupportedFeature.bind(t),fontRegistry:c});t.fontLoader.bind(h).catch((function(t){return e.sendWithPromise("FontFallback",{id:a})})).finally((function(){!l.fontExtraProperties&&h.data&&(h.data=null),t.commonObjs.resolve(a,h)}));break;case"FontPath":case"Image":t.commonObjs.resolve(a,s);break;default:throw new Error("Got unknown common object type ".concat(o))}})),e.on("obj",(function(e){var r=_slicedToArray(e,4),n=r[0],i=r[1],a=r[2],o=r[3];if(!t.destroyed){var s=_classPrivateFieldGet(t,_pageCache).get(i);if(!s.objs.has(n))switch(a){case"Image":if(s.objs.resolve(n,o),o){var l;if(o.bitmap){var u=o.bitmap;l=o.width*o.height*4,s._bitmaps.add(u)}else{var c;l=(null===(c=o.data)||void 0===c?void 0:c.length)||0}l>8e6&&(s.cleanupAfterRender=!0)}break;case"Pattern":s.objs.resolve(n,o);break;default:throw new Error("Got unknown object type ".concat(a))}}})),e.on("DocProgress",(function(e){var n;t.destroyed||null===(n=r.onProgress)||void 0===n||n.call(r,{loaded:e.loaded,total:e.total})})),e.on("DocStats",(function(e){t.destroyed||_classPrivateFieldSet(t,_docStats,Object.freeze({streamTypes:Object.freeze(e.streamTypes),fontTypes:Object.freeze(e.fontTypes)}))})),e.on("UnsupportedFeature",this._onUnsupportedFeature.bind(this)),e.on("FetchBuiltInCMap",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.CMapReaderFactory?t.CMapReaderFactory.fetch(e):Promise.reject(new Error("CMapReaderFactory not initialized, see the \`useWorkerFetch\` parameter."))})),e.on("FetchStandardFontData",(function(e){return t.destroyed?Promise.reject(new Error("Worker was destroyed.")):t.StandardFontDataFactory?t.StandardFontDataFactory.fetch(e):Promise.reject(new Error("StandardFontDataFactory not initialized, see the \`useWorkerFetch\` parameter."))}))}},{key:"_onUnsupportedFeature",value:function(t){var e,r,n=t.featureId;this.destroyed||null===(e=(r=this.loadingTask).onUnsupportedFeature)||void 0===e||e.call(r,n)}},{key:"getData",value:function(){return this.messageHandler.sendWithPromise("GetData",null)}},{key:"saveDocument",value:function(){var t,e,r=this;return this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while \`annotationStorage\` is empty, please use the getData-method instead."),this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:this.annotationStorage.serializable,filename:null!==(t=null===(e=this._fullReader)||void 0===e?void 0:e.filename)&&void 0!==t?t:null}).finally((function(){r.annotationStorage.resetModified()}))}},{key:"getPage",value:function(t){var e=this;if(!Number.isInteger(t)||t<=0||t>this._numPages)return Promise.reject(new Error("Invalid page request."));var r=t-1,n=_classPrivateFieldGet(this,_pagePromises).get(r);if(n)return n;var i=this.messageHandler.sendWithPromise("GetPage",{pageIndex:r}).then((function(t){if(e.destroyed)throw new Error("Transport destroyed");var n=new PDFPageProxy(r,t,e,e._params.ownerDocument,e._params.pdfBug);return _classPrivateFieldGet(e,_pageCache).set(r,n),n}));return _classPrivateFieldGet(this,_pagePromises).set(r,i),i}},{key:"getPageIndex",value:function(t){return"object"!==_typeof(t)||null===t||!Number.isInteger(t.num)||t.num<0||!Number.isInteger(t.gen)||t.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:t.num,gen:t.gen})}},{key:"getAnnotations",value:function(t,e){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:t,intent:e})}},{key:"getFieldObjects",value:function(){return this._getFieldObjectsPromise||(this._getFieldObjectsPromise=this.messageHandler.sendWithPromise("GetFieldObjects",null))}},{key:"hasJSActions",value:function(){return this._hasJSActionsPromise||(this._hasJSActionsPromise=this.messageHandler.sendWithPromise("HasJSActions",null))}},{key:"getCalculationOrderIds",value:function(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}},{key:"getDestinations",value:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)}},{key:"getDestination",value:function(t){return"string"!=typeof t?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:t})}},{key:"getPageLabels",value:function(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}},{key:"getPageLayout",value:function(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}},{key:"getPageMode",value:function(){return this.messageHandler.sendWithPromise("GetPageMode",null)}},{key:"getViewerPreferences",value:function(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}},{key:"getOpenAction",value:function(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}},{key:"getAttachments",value:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)}},{key:"getJavaScript",value:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)}},{key:"getDocJSActions",value:function(){return this.messageHandler.sendWithPromise("GetDocJSActions",null)}},{key:"getPageJSActions",value:function(t){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:t})}},{key:"getStructTree",value:function(t){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:t})}},{key:"getOutline",value:function(){return this.messageHandler.sendWithPromise("GetOutline",null)}},{key:"getOptionalContentConfig",value:function(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then((function(t){return new _optional_content_config.OptionalContentConfig(t)}))}},{key:"getPermissions",value:function(){return this.messageHandler.sendWithPromise("GetPermissions",null)}},{key:"getMetadata",value:function(){var t=this;return _classPrivateFieldGet(this,_metadataPromise)||_classPrivateFieldSet(this,_metadataPromise,this.messageHandler.sendWithPromise("GetMetadata",null).then((function(e){var r,n,i,a;return{info:e[0],metadata:e[1]?new _metadata.Metadata(e[1]):null,contentDispositionFilename:null!==(r=null===(n=t._fullReader)||void 0===n?void 0:n.filename)&&void 0!==r?r:null,contentLength:null!==(i=null===(a=t._fullReader)||void 0===a?void 0:a.contentLength)&&void 0!==i?i:null}})))}},{key:"getMarkInfo",value:function(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}},{key:"startCleanup",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var e,r,n,i,a=arguments;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=a.length>0&&void 0!==a[0]&&a[0],!this.destroyed){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,this.messageHandler.sendWithPromise("Cleanup",null);case 5:r=_createForOfIteratorHelper(_classPrivateFieldGet(this,_pageCache).values()),t.prev=6,r.s();case 8:if((n=r.n()).done){t.next=15;break}if((i=n.value).cleanup()){t.next=13;break}throw new Error("startCleanup: Page ".concat(i.pageNumber," is currently rendering."));case 13:t.next=8;break;case 15:t.next=20;break;case 17:t.prev=17,t.t0=t.catch(6),r.e(t.t0);case 20:return t.prev=20,r.f(),t.finish(20);case 23:this.commonObjs.clear(),e||this.fontLoader.clear(),_classPrivateFieldSet(this,_metadataPromise,null),this._getFieldObjectsPromise=null,this._hasJSActionsPromise=null;case 28:case"end":return t.stop()}}),t,this,[[6,17,20,23]])}))),function(){return e.apply(this,arguments)})},{key:"loadingParams",get:function(){var t=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:t.disableAutoFetch,enableXfa:t.enableXfa})}}]),t}(),_objs=new WeakMap,_ensureObj=new WeakSet,PDFObjects=function(){function t(){_classCallCheck(this,t),_classPrivateMethodInitSpec(this,_ensureObj),_classPrivateFieldInitSpec(this,_objs,{writable:!0,value:Object.create(null)})}return _createClass(t,[{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e){var r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);return r.capability.promise.then((function(){return e(r.data)})),null}var n=_classPrivateFieldGet(this,_objs)[t];if(null==n||!n.capability.settled)throw new Error("Requesting object that isn't resolved yet ".concat(t,"."));return n.data}},{key:"has",value:function(t){var e=_classPrivateFieldGet(this,_objs)[t];return(null==e?void 0:e.capability.settled)||!1}},{key:"resolve",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=_classPrivateMethodGet(this,_ensureObj,_ensureObj2).call(this,t);r.data=e,r.capability.resolve()}},{key:"clear",value:function(){_classPrivateFieldSet(this,_objs,Object.create(null))}}]),t}();function _ensureObj2(t){return _classPrivateFieldGet(this,_objs)[t]||(_classPrivateFieldGet(this,_objs)[t]={capability:(0,_util.createPromiseCapability)(),data:null})}var _internalRenderTask=new WeakMap,RenderTask=function(){function t(e){_classCallCheck(this,t),_classPrivateFieldInitSpec(this,_internalRenderTask,{writable:!0,value:null}),_classPrivateFieldSet(this,_internalRenderTask,e),this.onContinue=null}return _createClass(t,[{key:"promise",get:function(){return _classPrivateFieldGet(this,_internalRenderTask).capability.promise}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;_classPrivateFieldGet(this,_internalRenderTask).cancel(null,t)}},{key:"separateAnnots",get:function(){var t=_classPrivateFieldGet(this,_internalRenderTask).operatorList.separateAnnots;if(!t)return!1;var e=_classPrivateFieldGet(this,_internalRenderTask).annotationCanvasMap;return t.form||t.canvas&&(null==e?void 0:e.size)>0}}]),t}();exports.RenderTask=RenderTask;var InternalRenderTask=function(){function t(e){var r=e.callback,n=e.params,i=e.objs,a=e.commonObjs,o=e.annotationCanvasMap,s=e.operatorList,l=e.pageIndex,u=e.canvasFactory,c=e.useRequestAnimationFrame,h=void 0!==c&&c,f=e.pdfBug,d=void 0!==f&&f,p=e.pageColors,v=void 0===p?null:p;_classCallCheck(this,t),this.callback=r,this.params=n,this.objs=i,this.commonObjs=a,this.annotationCanvasMap=o,this.operatorListIdx=null,this.operatorList=s,this._pageIndex=l,this.canvasFactory=u,this._pdfBug=d,this.pageColors=v,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=!0===h&&"undefined"!=typeof window,this.cancelled=!1,this.capability=(0,_util.createPromiseCapability)(),this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=n.canvasContext.canvas}var e;return _createClass(t,[{key:"completed",get:function(){return this.capability.promise.catch((function(){}))}},{key:"initializeGraphics",value:function(e){var r,n,i=e.transparency,a=void 0!==i&&i,o=e.optionalContentConfig;if(!this.cancelled){if(this._canvas){if(_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).add(this._canvas)}this._pdfBug&&null!==(r=globalThis.StepperManager)&&void 0!==r&&r.enabled&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());var s=this.params,l=s.canvasContext,u=s.viewport,c=s.transform,h=s.background;this.gfx=new _canvas.CanvasGraphics(l,this.commonObjs,this.objs,this.canvasFactory,{optionalContentConfig:o},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:c,viewport:u,transparency:a,background:h}),this.operatorListIdx=0,this.graphicsReady=!0,null===(n=this.graphicsReadyCallback)||void 0===n||n.call(this)}}},{key:"cancel",value:function(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.running=!1,this.cancelled=!0,null===(e=this.gfx)||void 0===e||e.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback(r||new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this._pageIndex+1),"canvas",n))}},{key:"operatorListChanged",value:function(){var t;this.graphicsReady?(null===(t=this.stepper)||void 0===t||t.updateOperatorList(this.operatorList),this.running||this._continue()):this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound)}},{key:"_continue",value:function(){this.running=!0,this.cancelled||(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}},{key:"_scheduleNext",value:function(){var t=this;this._useRequestAnimationFrame?window.requestAnimationFrame((function(){t._nextBound().catch(t._cancelBound)})):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}},{key:"_next",value:(e=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.cancelled){e.next=2;break}return e.abrupt("return");case 2:this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this._canvas&&_classStaticPrivateFieldSpecGet(t,t,_canvasInUse).delete(this._canvas),this.callback()));case 4:case"end":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]),t}(),_canvasInUse={writable:!0,value:new WeakSet},version="3.2.0";exports.version=version;var build="";exports.build=build},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.PrintAnnotationStorage=e.AnnotationStorage=void 0;var i=r(1),a=r(135),o=r(139);function s(t,e){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},s(t,e)}function l(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0?(0,i.objectFromMap)(_(this,k)):null}},{key:"size",get:function(){return _(this,k).size}},{key:"resetModified",value:function(){_(this,A)&&(b(this,A,!1),"function"==typeof this.onResetModified&&this.onResetModified())}},{key:"print",get:function(){return new T(this)}},{key:"serializable",get:function(){if(0===_(this,k).size)return null;var t,e=new Map,r=h(_(this,k));try{for(r.s();!(t=r.n()).done;){var n=c(t.value,2),i=n[0],o=n[1],s=o instanceof a.AnnotationEditor?o.serialize():o;s&&e.set(i,s)}}catch(t){r.e(t)}finally{r.f()}return e}}],[{key:"getHash",value:function(t){if(!t)return"";var e,r=new o.MurmurHash3_64,n=h(t);try{for(n.s();!(e=n.n()).done;){var i=c(e.value,2),a=i[0],s=i[1];r.update("".concat(a,":").concat(JSON.stringify(s)))}}catch(t){n.e(t)}finally{n.f()}return r.hexdigest()}}]),t}();function E(){_(this,A)||(b(this,A,!0),"function"==typeof this.onSetModified&&this.onSetModified())}e.AnnotationStorage=x;var P=new WeakMap,T=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&s(t,e)}(o,t);var e,r,a=(e=o,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,i=u(e);if(r){var a=u(this).constructor;t=Reflect.construct(i,arguments,a)}else t=i.apply(this,arguments);return function(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return l(t)}(this,t)});function o(t){var e;return p(this,o),m(l(e=a.call(this)),P,{writable:!0,value:null}),b(l(e),P,structuredClone(t.serializable)),e}return y(o,[{key:"print",get:function(){(0,i.unreachable)("Should not call PrintAnnotationStorage.print")}},{key:"serializable",get:function(){return _(this,P)}}]),o}(x);e.PrintAnnotationStorage=T},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditor=void 0;var i=r(136),a=r(1);function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return s(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.KeyboardManager=e.CommandManager=e.ColorManager=e.AnnotationEditorUIManager=void 0,e.bindEvents=function(t,e,r){var n,i=_(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;e.addEventListener(a,t[a].bind(t))}}catch(t){i.e(t)}finally{i.f()}},e.opacityToHex=function(t){return Math.round(Math.min(255,Math.max(1,255*t))).toString(16).padStart(2,"0")};var i=r(1),a=r(137);function o(t){return function(t){if(Array.isArray(t))return A(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||w(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e,r){return(e=p(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||w(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){y(t,e),e.add(t)}function c(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function w(t,e){if(t){if("string"==typeof t)return A(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(t,e):void 0}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:128;h(this,t),v(this,x,{writable:!0,value:[]}),v(this,E,{writable:!0,value:!1}),v(this,P,{writable:!0,value:void 0}),v(this,T,{writable:!0,value:-1}),m(this,P,e)}return d(t,[{key:"add",value:function(t){var e=t.cmd,r=t.undo,n=t.mustExec,i=t.type,a=void 0===i?NaN:i,o=t.overwriteIfSameType,s=void 0!==o&&o,l=t.keepUndo,u=void 0!==l&&l;if(n&&e(),!g(this,E)){var c={cmd:e,undo:r,type:a};if(-1===g(this,T))return g(this,x).length>0&&(g(this,x).length=0),m(this,T,0),void g(this,x).push(c);if(s&&g(this,x)[g(this,T)].type===a)return u&&(c.undo=g(this,x)[g(this,T)].undo),void(g(this,x)[g(this,T)]=c);var h=g(this,T)+1;h===g(this,P)?g(this,x).splice(0,1):(m(this,T,h),h{Object.defineProperty(e,"__esModule",{value:!0}),e.StatTimer=e.RenderingCancelledException=e.PixelsPerInch=e.PageViewport=e.PDFDateString=e.DOMStandardFontDataFactory=e.DOMSVGFactory=e.DOMCanvasFactory=e.DOMCMapReaderFactory=e.AnnotationPrefix=void 0,e.deprecated=function(t){console.log("Deprecated API usage: "+t)},e.getColorValues=function(t){var e=document.createElement("span");e.style.visibility="hidden",document.body.append(e);var r,n=s(t.keys());try{for(n.s();!(r=n.n()).done;){var i=r.value;e.style.color=i;var a=window.getComputedStyle(e).color;t.set(i,I(a))}}catch(t){n.e(t)}finally{n.f()}e.remove()},e.getCurrentTransform=function(t){var e=t.getTransform();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getCurrentTransformInverse=function(t){var e=t.getTransform().invertSelf();return[e.a,e.b,e.c,e.d,e.e,e.f]},e.getFilenameFromUrl=function(t){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])){var e=t.split(/[#?]/,1);t=(1,function(t){if(Array.isArray(t))return t}(r=e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next,0;!(l=(n=a.call(r)).done)&&(s.push(n.value),1!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(r)||l(r,1)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0]}var r;return t.substring(t.lastIndexOf("/")+1)},e.getPdfFilenameFromUrl=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"document.pdf";if("string"!=typeof t)return e;if(C(t))return(0,i.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),e;var r=/[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i,n=/^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/.exec(t),a=r.exec(n[1])||r.exec(n[2])||r.exec(n[3]);if(a&&(a=a[0]).includes("%"))try{a=r.exec(decodeURIComponent(a))[0]}catch(t){}return a||e},e.getRGB=I,e.getXfaPageViewport=function(t,e){var r=e.scale,n=void 0===r?1:r,i=e.rotation,a=void 0===i?0:i,o=t.attributes.style,s=o.width,l=o.height,u=[0,0,parseInt(s),parseInt(l)];return new P({viewBox:u,scale:n,rotation:a})},e.isDataScheme=C,e.isPdfFile=function(t){return"string"==typeof t&&/\\.pdf$/i.test(t)},e.isValidFetchUrl=M,e.loadScript=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(r,n){var i=document.createElement("script");i.src=t,i.onload=function(t){e&&i.remove(),r(t)},i.onerror=function(){n(new Error("Cannot load script at: ".concat(i.src)))},(document.head||document.documentElement).append(i)}))},e.setLayerDimensions=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e instanceof P){var i=e.rawDims,a=i.pageWidth,o=i.pageHeight,s=t.style,l="calc(var(--scale-factor) * ".concat(a,"px)"),u="calc(var(--scale-factor) * ".concat(o,"px)");r&&e.rotation%180!=0?(s.width=u,s.height=l):(s.width=l,s.height=u)}n&&t.setAttribute("data-main-rotation",e.rotation)};var n=r(138),i=r(1);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,s,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==o(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:{}).ownerDocument,i=void 0===n?globalThis.document:n;return m(this,r),(t=e.call(this))._document=i,t}return y(r,[{key:"_createCanvas",value:function(t,e){var r=this._document.createElement("canvas");return r.width=t,r.height=e,r}}]),r}(n.BaseCanvasFactory);function A(t){return k.apply(this,arguments)}function k(){var t;return t=a().mark((function t(e){var r,n,o=arguments;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=o.length>1&&void 0!==o[1]&&o[1],!M(e,document.baseURI)){t.next=21;break}return t.next=4,fetch(e);case 4:if((n=t.sent).ok){t.next=7;break}throw new Error(n.statusText);case 7:if(!r){t.next=15;break}return t.t1=Uint8Array,t.next=11,n.arrayBuffer();case 11:t.t2=t.sent,t.t0=new t.t1(t.t2),t.next=20;break;case 15:return t.t3=i.stringToBytes,t.next=18,n.text();case 18:t.t4=t.sent,t.t0=(0,t.t3)(t.t4);case 20:return t.abrupt("return",t.t0);case 21:return t.abrupt("return",new Promise((function(t,n){var a=new XMLHttpRequest;a.open("GET",e,!0),r&&(a.responseType="arraybuffer"),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){var e;if((200===a.status||0===a.status)&&(r&&a.response?e=new Uint8Array(a.response):!r&&a.responseText&&(e=(0,i.stringToBytes)(a.responseText)),e))return void t(e);n(new Error(a.statusText))}},a.send(null)})));case 22:case"end":return t.stop()}}),t)})),k=function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))},k.apply(this,arguments)}e.DOMCanvasFactory=w;var S=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t,e){return A(t,this.isCompressed).then((function(t){return{cMapData:t,compressionType:e}}))}}]),r}(n.BaseCMapReaderFactory);e.DOMCMapReaderFactory=S;var x=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_fetchData",value:function(t){return A(t,!0)}}]),r}(n.BaseStandardFontDataFactory);e.DOMStandardFontDataFactory=x;var E=function(t){h(r,t);var e=d(r);function r(){return m(this,r),e.apply(this,arguments)}return y(r,[{key:"_createSVG",value:function(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}}]),r}(n.BaseSVGFactory);e.DOMSVGFactory=E;var P=function(){function t(e){var r=e.viewBox,n=e.scale,i=e.rotation,a=e.offsetX,o=void 0===a?0:a,s=e.offsetY,l=void 0===s?0:s,u=e.dontFlip,c=void 0!==u&&u;m(this,t),this.viewBox=r,this.scale=n,this.rotation=i,this.offsetX=o,this.offsetY=l;var h,f,d,p,v,y,g,b,_=(r[2]+r[0])/2,w=(r[3]+r[1])/2;switch((i%=360)<0&&(i+=360),i){case 180:h=-1,f=0,d=0,p=1;break;case 90:h=0,f=1,d=1,p=0;break;case 270:h=0,f=-1,d=-1,p=0;break;case 0:h=1,f=0,d=0,p=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}c&&(d=-d,p=-p),0===h?(v=Math.abs(w-r[1])*n+o,y=Math.abs(_-r[0])*n+l,g=(r[3]-r[1])*n,b=(r[2]-r[0])*n):(v=Math.abs(_-r[0])*n+o,y=Math.abs(w-r[1])*n+l,g=(r[2]-r[0])*n,b=(r[3]-r[1])*n),this.transform=[h*n,f*n,d*n,p*n,v-h*n*_-d*n*w,y-f*n*_-p*n*w],this.width=g,this.height=b}return y(t,[{key:"rawDims",get:function(){var t=this.viewBox;return(0,i.shadow)(this,"rawDims",{pageWidth:t[2]-t[0],pageHeight:t[3]-t[1],pageX:t[0],pageY:t[1]})}},{key:"clone",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.scale,n=void 0===r?this.scale:r,i=e.rotation,a=void 0===i?this.rotation:i,o=e.offsetX,s=void 0===o?this.offsetX:o,l=e.offsetY,u=void 0===l?this.offsetY:l,c=e.dontFlip,h=void 0!==c&&c;return new t({viewBox:this.viewBox.slice(),scale:n,rotation:a,offsetX:s,offsetY:u,dontFlip:h})}},{key:"convertToViewportPoint",value:function(t,e){return i.Util.applyTransform([t,e],this.transform)}},{key:"convertToViewportRectangle",value:function(t){var e=i.Util.applyTransform([t[0],t[1]],this.transform),r=i.Util.applyTransform([t[2],t[3]],this.transform);return[e[0],e[1],r[0],r[1]]}},{key:"convertToPdfPoint",value:function(t,e){return i.Util.applyInverseTransform([t,e],this.transform)}}]),t}();e.PageViewport=P;var T=function(t){h(r,t);var e=d(r);function r(t,n){var i,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return m(this,r),(i=e.call(this,t,"RenderingCancelledException")).type=n,i.extraDelay=a,i}return y(r)}(i.BaseException);function C(t){for(var e=t.length,r=0;r=1&&n<=12?n-1:0;var i=parseInt(e[3],10);i=i>=1&&i<=31?i:1;var a=parseInt(e[4],10);a=a>=0&&a<=23?a:0;var o=parseInt(e[5],10);o=o>=0&&o<=59?o:0;var s=parseInt(e[6],10);s=s>=0&&s<=59?s:0;var l=e[7]||"Z",u=parseInt(e[8],10);u=u>=0&&u<=23?u:0;var c=parseInt(e[9],10)||0;return c=c>=0&&c<=59?c:0,"-"===l?(a+=u,o+=c):"+"===l&&(a-=u,o-=c),new Date(Date.UTC(r,n,i,a,o,s))}}]),t}();function I(t){if(t.startsWith("#")){var e=parseInt(t.slice(1),16);return[(16711680&e)>>16,(65280&e)>>8,255&e]}return t.startsWith("rgb(")?t.slice(4,-1).split(",").map((function(t){return parseInt(t)})):t.startsWith("rgba(")?t.slice(5,-1).split(",").map((function(t){return parseInt(t)})).slice(0,3):((0,i.warn)('Not a valid color format: "'.concat(t,'"')),[0,0,0])}e.PDFDateString=R},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.BaseStandardFontDataFactory=e.BaseSVGFactory=e.BaseCanvasFactory=e.BaseCMapReaderFactory=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var o=t.apply(e,r);function s(t){a(o,n,i,s,l,"next",t)}function l(t){a(o,n,i,s,l,"throw",t)}s(void 0)}))}}function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function u(t,e){for(var r=0;r2&&void 0!==arguments[2]&&arguments[2];if(t<=0||e<=0)throw new Error("Invalid SVG dimensions");var n=this._createSVG("svg:svg");return n.setAttribute("version","1.1"),r||(n.setAttribute("width","".concat(t,"px")),n.setAttribute("height","".concat(e,"px"))),n.setAttribute("preserveAspectRatio","none"),n.setAttribute("viewBox","0 0 ".concat(t," ").concat(e)),n}},{key:"createElement",value:function(t){if("string"!=typeof t)throw new Error("Invalid SVG element type");return this._createSVG(t)}},{key:"_createSVG",value:function(t){(0,n.unreachable)("Abstract method \`_createSVG\` called.")}}]),t}();e.BaseSVGFactory=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MurmurHash3_64=void 0;var n=r(1);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){for(var r=0;r>>8,e[r++]=255&o)}}else{if(!(0,n.isArrayBuffer)(t))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");r=(e=t.slice()).byteLength}for(var u=r>>2,c=r-4*u,h=new Uint32Array(e.buffer,0,u),f=0,d=0,p=this.h1,v=this.h2,y=3432918353,m=461845907,g=11601,b=13715,_=0;_>>17)*m&s|f*b&l)<<13|p>>>19)+3864292196:v=5*(v=(v^=d=(d=(d=(d=h[_])*y&s|d*g&l)<<15|d>>>17)*m&s|d*b&l)<<13|v>>>19)+3864292196;switch(f=0,c){case 3:f^=e[4*u+2]<<16;case 2:f^=e[4*u+1]<<8;case 1:f=(f=(f=(f^=e[4*u])*y&s|f*g&l)<<15|f>>>17)*m&s|f*b&l,1&u?p^=f:v^=f}this.h1=p,this.h2=v}},{key:"hexdigest",value:function(){var t=this.h1,e=this.h2;return t=3981806797*(t^=e>>>1)&s|36045*t&l,t=444984403*(t^=(e=4283543511*e&s|(2950163797*(e<<16|t>>>16)&s)>>>16)>>>1)&s|60499*t&l,((t^=(e=3301882366*e&s|(3120437893*(e<<16|t>>>16)&s)>>>16)>>>1)>>>0).toString(16).padStart(8,"0")+(e>>>0).toString(16).padStart(8,"0")}}])&&a(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MurmurHash3_64=u},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontLoader=e.FontFaceObject=void 0;var n=r(1),i=r(3);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function o(){o=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,s,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,s)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,o,s,l){var u=f(t[n],t,o);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==a(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var o;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return o=o?o.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function s(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&e[0].done;){var t=e.shift();setTimeout(t.callback,0)}},callback:t};return e.push(r),r}},{key:"_loadTestFont",get:function(){var t=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,n.shadow)(this,"_loadTestFont",t)}},{key:"_prepareFontLoadEvent",value:function(t,e){function r(t,e){return t.charCodeAt(e)<<24|t.charCodeAt(e+1)<<16|t.charCodeAt(e+2)<<8|255&t.charCodeAt(e+3)}function i(t,e,r,n){return t.substring(0,e)+n+t.substring(e+r)}var a,o,s=this._document.createElement("canvas");s.width=1,s.height=1;var l=s.getContext("2d"),u=0,c="lt".concat(Date.now()).concat(this.loadTestFontId++),h=this._loadTestFont,f=1482184792,d=r(h=i(h,976,c.length,c),16);for(a=0,o=c.length-3;a30)return(0,n.warn)("Load test font never loaded."),void r();l.font="30px "+e,l.fillText(".",0,20),l.getImageData(0,0,1,1).data[3]>0?r():setTimeout(t.bind(null,e,r))}(c,(function(){y.remove(),e.complete()}))}}]),t}();e.FontLoader=d;var p=function(){function t(e,r){var n=r.isEvalSupported,i=void 0===n||n,a=r.disableFontFace,o=void 0!==a&&a,s=r.ignoreErrors,l=void 0!==s&&s,u=r.onUnsupportedFeature,h=r.fontRegistry,f=void 0===h?null:h;for(var d in c(this,t),this.compiledGlyphs=Object.create(null),e)this[d]=e[d];this.isEvalSupported=!1!==i,this.disableFontFace=!0===o,this.ignoreErrors=!0===l,this._onUnsupportedFeature=u,this.fontRegistry=f}return f(t,[{key:"createNativeFontFace",value:function(){var t,e;if(!this.data||this.disableFontFace)return null;if(this.cssFontInfo){var r={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(r.style="oblique ".concat(this.cssFontInfo.italicAngle,"deg")),e=new FontFace(this.cssFontInfo.fontFamily,this.data,r)}else e=new FontFace(this.loadedName,this.data,{});return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this),e}},{key:"createFontFaceRule",value:function(){var t;if(!this.data||this.disableFontFace)return null;var e,r=(0,n.bytesToString)(this.data),i="url(data:".concat(this.mimetype,";base64,").concat(btoa(r),");");if(this.cssFontInfo){var a="font-weight: ".concat(this.cssFontInfo.fontWeight,";");this.cssFontInfo.italicAngle&&(a+="font-style: oblique ".concat(this.cssFontInfo.italicAngle,"deg;")),e='@font-face {font-family:"'.concat(this.cssFontInfo.fontFamily,'";').concat(a,"src:").concat(i,"}")}else e='@font-face {font-family:"'.concat(this.loadedName,'";src:').concat(i,"}");return null===(t=this.fontRegistry)||void 0===t||t.registerFont(this,i),e}},{key:"getPathGenerator",value:function(t,e){if(void 0!==this.compiledGlyphs[e])return this.compiledGlyphs[e];var r;try{r=t.get(this.loadedName+"_path_"+e)}catch(t){if(!this.ignoreErrors)throw t;return this._onUnsupportedFeature({featureId:n.UNSUPPORTED_FEATURES.errorFontGetPath}),(0,n.warn)('getPathGenerator - ignoring character: "'.concat(t,'".')),this.compiledGlyphs[e]=function(t,e){}}if(this.isEvalSupported&&n.FeatureTest.isEvalSupported){var i,a=[],o=l(r);try{for(o.s();!(i=o.n()).done;){var s=i.value,u=void 0!==s.args?s.args.join(","):"";a.push("c.",s.cmd,"(",u,");\\n")}}catch(t){o.e(t)}finally{o.f()}return this.compiledGlyphs[e]=new Function("c","size",a.join(""))}return this.compiledGlyphs[e]=function(t,e){var n,i=l(r);try{for(i.s();!(n=i.n()).done;){var a=n.value;"scale"===a.cmd&&(a.args=[e,-e]),t[a.cmd].apply(t,a.args)}}catch(t){i.e(t)}finally{i.f()}}}}]),t}();e.FontFaceObject=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CanvasGraphics=void 0;var n=r(1),i=r(137),a=r(142),o=r(143),s=r(3);function l(t){return function(t){if(Array.isArray(t))return d(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||f(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function c(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=f(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||f(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[this.minX,this.minY,this.maxX,this.maxY];if(t===a.PathType.STROKE){e||(0,n.unreachable)("Stroke bounding box must include transform.");var i=n.Util.singularValueDecompose2dScale(e),o=i[0]*this.lineWidth/2,s=i[1]*this.lineWidth/2;r[0]-=o,r[1]-=s,r[2]+=o,r[3]+=s}return r}},{key:"updateClipFromPath",value:function(){var t=n.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(t||[0,0,0,0])}},{key:"isEmptyClip",value:function(){return this.minX===1/0}},{key:"startNewPathAndClipBox",value:function(t){this.clipBox=t,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}},{key:"getClippedPathBoundingBox",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.PathType.FILL,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return n.Util.intersect(this.clipBox,this.getPathBoundingBox(t,e))}}]),t}();function S(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if("undefined"!=typeof ImageData&&e instanceof ImageData)t.putImageData(e,0,0);else{var i,a,o,s,l,u,c,h,f,d=e.height,p=e.width,v=d%_,y=(d-v)/_,m=0===v?y:y+1,g=t.createImageData(p,_),b=0,w=e.data,A=g.data;if(r)switch(r.length){case 1:u=r[0],c=r[0],h=r[0],f=r[0];break;case 4:u=r[0],c=r[1],h=r[2],f=r[3]}if(e.kind===n.ImageKind.GRAYSCALE_1BPP){var k=w.byteLength,S=new Uint32Array(A.buffer,0,A.byteLength>>2),x=S.length,E=p+7>>3,P=4294967295,T=n.FeatureTest.isLittleEndian?4278190080:255;if(f&&255===f[0]&&0===f[255]){var C=[T,P];P=C[0],T=C[1]}for(a=0;aE?p:8*O-7,R=-8&M,I=0,j=0;F>=1}for(;i=y&&(l=p*(s=v)),i=0,o=l;o--;)A[i++]=w[b++],A[i++]=w[b++],A[i++]=w[b++],A[i++]=255;if(U)for(var W=0;W>8,t[a-2]=t[a-2]*o+r*s>>8,t[a-1]=t[a-1]*o+n*s>>8}}}function C(t,e,r){for(var n=t.length,i=3;i>8]>>8:e[i]*a>>16}}function F(t,e){var r=n.Util.singularValueDecompose2dScale(t);r[0]=Math.fround(r[0]),r[1]=Math.fround(r[1]);var a=Math.fround((globalThis.devicePixelRatio||1)*i.PixelsPerInch.PDF_TO_CSS_UNITS);return void 0!==e?e:r[0]<=a||r[1]<=a}var M=["butt","round","square"],R=["miter","round","bevel"],I={},j={},L=new WeakSet,D=function(){function t(e,r,n,i,a,o,s){var l,u,c=a.optionalContentConfig,h=a.markedContentStack,f=void 0===h?null:h;v(this,t),function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(l=this,u=L),u.add(l),this.ctx=e,this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=r,this.objs=n,this.canvasFactory=i,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=f||[],this.optionalContentConfig=c,this.cachedCanvases=new w(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=o,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.backgroundColor=(null==s?void 0:s.background)||null,this.foregroundColor=(null==s?void 0:s.foreground)||null,this._cachedScaleForStroking=null,this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}return m(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"beginDrawing",value:function(t){var e,r,n=t.transform,a=t.viewport,o=t.transparency,s=void 0!==o&&o,u=t.background,c=void 0===u?null:u,f=this.ctx.canvas.width,d=this.ctx.canvas.height,p=c||"#ffffff";if(this.ctx.save(),this.foregroundColor&&this.backgroundColor){this.ctx.fillStyle=this.foregroundColor;var v=this.foregroundColor=this.ctx.fillStyle;this.ctx.fillStyle=this.backgroundColor;var y,m,g=this.backgroundColor=this.ctx.fillStyle;if(this.ctx.fillStyle=p,y="string"==typeof(m=this.ctx.fillStyle)&&/^#[0-9A-Fa-f]{6}$/.test(m),"#000000"===v&&"#ffffff"===g||v===g||!y)this.foregroundColor=this.backgroundColor=null;else{var b=h((0,i.getRGB)(m),3),_=b[0],w=b[1],A=b[2],k=function(t){return(t/=255)<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)},S=Math.round(.2126*k(_)+.7152*k(w)+.0722*k(A));this.selectColor=function(t,e,r){var n=.2126*k(t)+.7152*k(e)+.0722*k(r);return Math.round(n)===S?g:v}}}if(this.ctx.fillStyle=this.backgroundColor||p,this.ctx.fillRect(0,0,f,d),this.ctx.restore(),s){var x,E=this.cachedCanvases.getCanvas("transparent",f,d);this.compositeCtx=this.ctx,this.transparentCanvas=E.canvas,this.ctx=E.context,this.ctx.save(),(x=this.ctx).transform.apply(x,l((0,i.getCurrentTransform)(this.compositeCtx)))}this.ctx.save(),P(this.ctx,this.foregroundColor),n&&((r=this.ctx).transform.apply(r,l(n)),this.outputScaleX=n[0],this.outputScaleY=n[0]),(e=this.ctx).transform.apply(e,l(a.transform)),this.viewportScale=a.scale,this.baseTransform=(0,i.getCurrentTransform)(this.ctx)}},{key:"executeOperatorList",value:function(t,e,r,i){var a=t.argsArray,o=t.fnArray,s=e||0,l=a.length;if(l===s)return s;for(var u,h=l-s>10&&"function"==typeof r,f=h?Date.now()+15:0,d=0,p=this.commonObjs,v=this.objs;;){if(void 0!==i&&s===i.nextBreakPoint)return i.breakIt(s,r),s;if((u=o[s])!==n.OPS.dependency)this[u].apply(this,a[s]);else{var y,m=c(a[s]);try{for(m.s();!(y=m.n()).done;){var g=y.value,b=g.startsWith("g_")?p:v;if(!b.has(g))return b.get(g,r),s}}catch(t){m.e(t)}finally{m.f()}}if(++s===l)return s;if(h&&++d>10){if(Date.now()>f)return r(),s;d=0}}}},{key:"endDrawing",value:function(){u(this,L,N).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();var t,e=c(this._cachedBitmapsMap.values());try{for(e.s();!(t=e.n()).done;){var r,n=t.value,i=c(n.values());try{for(i.s();!(r=i.n()).done;){var a=r.value;"undefined"!=typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement&&(a.width=a.height=0)}}catch(t){i.e(t)}finally{i.f()}n.clear()}}catch(t){e.e(t)}finally{e.f()}this._cachedBitmapsMap.clear()}},{key:"_scaleImage",value:function(t,e){for(var r,n,i=t.width,a=t.height,o=Math.max(Math.hypot(e[0],e[1]),1),s=Math.max(Math.hypot(e[2],e[3]),1),l=i,u=a,c="prescale1";o>2&&l>1||s>2&&u>1;){var h=l,f=u;o>2&&l>1&&(o/=l/(h=Math.ceil(l/2))),s>2&&u>1&&(s/=u/(f=Math.ceil(u/2))),(n=(r=this.cachedCanvases.getCanvas(c,h,f)).context).clearRect(0,0,h,f),n.drawImage(t,0,0,l,u,0,0,h,f),t=r.canvas,l=h,u=f,c="prescale1"===c?"prescale2":"prescale1"}return{img:t,paintWidth:l,paintHeight:u}}},{key:"_createMaskCanvas",value:function(t){var e,r,o,s,u=this.ctx,c=t.width,h=t.height,f=this.current.fillColor,d=this.current.patternFill,p=(0,i.getCurrentTransform)(u);if((t.bitmap||t.data)&&t.count>1){var v=t.bitmap||t.data.buffer;r=JSON.stringify(d?p:[p.slice(0,4),f]),(e=this._cachedBitmapsMap.get(v))||(e=new Map,this._cachedBitmapsMap.set(v,e));var y=e.get(r);if(y&&!d)return{canvas:y,offsetX:Math.round(Math.min(p[0],p[2])+p[4]),offsetY:Math.round(Math.min(p[1],p[3])+p[5])};o=y}o||x((s=this.cachedCanvases.getCanvas("maskCanvas",c,h)).context,t);var m=n.Util.transform(p,[1/c,0,0,-1/h,0,0]);m=n.Util.transform(m,[1,0,0,1,0,-h]);var g=n.Util.applyTransform([0,0],m),b=n.Util.applyTransform([c,h],m),_=n.Util.normalizeRect([g[0],g[1],b[0],b[1]]),w=Math.round(_[2]-_[0])||1,k=Math.round(_[3]-_[1])||1,S=this.cachedCanvases.getCanvas("fillCanvas",w,k),E=S.context,P=Math.min(g[0],b[0]),T=Math.min(g[1],b[1]);E.translate(-P,-T),E.transform.apply(E,l(m)),o||(o=(o=this._scaleImage(s.canvas,(0,i.getCurrentTransformInverse)(E))).img,e&&d&&e.set(r,o)),E.imageSmoothingEnabled=F((0,i.getCurrentTransform)(E),t.interpolate),A(E,o,0,0,o.width,o.height,0,0,c,h),E.globalCompositeOperation="source-in";var C=n.Util.transform((0,i.getCurrentTransformInverse)(E),[1,0,0,1,-P,-T]);return E.fillStyle=d?f.getPattern(u,this,C,a.PathType.FILL):f,E.fillRect(0,0,c,h),e&&!d&&(this.cachedCanvases.delete("fillCanvas"),e.set(r,S.canvas)),{canvas:S.canvas,offsetX:Math.round(P),offsetY:Math.round(T)}}},{key:"setLineWidth",value:function(t){t!==this.current.lineWidth&&(this._cachedScaleForStroking=null),this.current.lineWidth=t,this.ctx.lineWidth=t}},{key:"setLineCap",value:function(t){this.ctx.lineCap=M[t]}},{key:"setLineJoin",value:function(t){this.ctx.lineJoin=R[t]}},{key:"setMiterLimit",value:function(t){this.ctx.miterLimit=t}},{key:"setDash",value:function(t,e){var r=this.ctx;void 0!==r.setLineDash&&(r.setLineDash(t),r.lineDashOffset=e)}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=c(t);try{for(r.s();!(e=r.n()).done;){var n=h(e.value,2),i=n[0],a=n[1];switch(i){case"LW":this.setLineWidth(a);break;case"LC":this.setLineCap(a);break;case"LJ":this.setLineJoin(a);break;case"ML":this.setMiterLimit(a);break;case"D":this.setDash(a[0],a[1]);break;case"RI":this.setRenderingIntent(a);break;case"FL":this.setFlatness(a);break;case"Font":this.setFont(a[0],a[1]);break;case"CA":this.current.strokeAlpha=a;break;case"ca":this.current.fillAlpha=a,this.ctx.globalAlpha=a;break;case"BM":this.ctx.globalCompositeOperation=a;break;case"SMask":this.current.activeSMask=a?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.current.transferMaps=a}}}catch(t){r.e(t)}finally{r.f()}}},{key:"inSMaskMode",get:function(){return!!this.suspendedCtx}},{key:"checkSMaskState",value:function(){var t=this.inSMaskMode;this.current.activeSMask&&!t?this.beginSMaskMode():!this.current.activeSMask&&t&&this.endSMaskMode()}},{key:"beginSMaskMode",value:function(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");var t=this.ctx.canvas.width,e=this.ctx.canvas.height,r="smaskGroupAt"+this.groupLevel,n=this.cachedCanvases.getCanvas(r,t,e);this.suspendedCtx=this.ctx,this.ctx=n.context;var a=this.ctx;a.setTransform.apply(a,l((0,i.getCurrentTransform)(this.suspendedCtx))),E(this.suspendedCtx,a),function(t,e){if(t._removeMirroring)throw new Error("Context is already forwarding operations.");t.__originalSave=t.save,t.__originalRestore=t.restore,t.__originalRotate=t.rotate,t.__originalScale=t.scale,t.__originalTranslate=t.translate,t.__originalTransform=t.transform,t.__originalSetTransform=t.setTransform,t.__originalResetTransform=t.resetTransform,t.__originalClip=t.clip,t.__originalMoveTo=t.moveTo,t.__originalLineTo=t.lineTo,t.__originalBezierCurveTo=t.bezierCurveTo,t.__originalRect=t.rect,t.__originalClosePath=t.closePath,t.__originalBeginPath=t.beginPath,t._removeMirroring=function(){t.save=t.__originalSave,t.restore=t.__originalRestore,t.rotate=t.__originalRotate,t.scale=t.__originalScale,t.translate=t.__originalTranslate,t.transform=t.__originalTransform,t.setTransform=t.__originalSetTransform,t.resetTransform=t.__originalResetTransform,t.clip=t.__originalClip,t.moveTo=t.__originalMoveTo,t.lineTo=t.__originalLineTo,t.bezierCurveTo=t.__originalBezierCurveTo,t.rect=t.__originalRect,t.closePath=t.__originalClosePath,t.beginPath=t.__originalBeginPath,delete t._removeMirroring},t.save=function(){e.save(),this.__originalSave()},t.restore=function(){e.restore(),this.__originalRestore()},t.translate=function(t,r){e.translate(t,r),this.__originalTranslate(t,r)},t.scale=function(t,r){e.scale(t,r),this.__originalScale(t,r)},t.transform=function(t,r,n,i,a,o){e.transform(t,r,n,i,a,o),this.__originalTransform(t,r,n,i,a,o)},t.setTransform=function(t,r,n,i,a,o){e.setTransform(t,r,n,i,a,o),this.__originalSetTransform(t,r,n,i,a,o)},t.resetTransform=function(){e.resetTransform(),this.__originalResetTransform()},t.rotate=function(t){e.rotate(t),this.__originalRotate(t)},t.clip=function(t){e.clip(t),this.__originalClip(t)},t.moveTo=function(t,r){e.moveTo(t,r),this.__originalMoveTo(t,r)},t.lineTo=function(t,r){e.lineTo(t,r),this.__originalLineTo(t,r)},t.bezierCurveTo=function(t,r,n,i,a,o){e.bezierCurveTo(t,r,n,i,a,o),this.__originalBezierCurveTo(t,r,n,i,a,o)},t.rect=function(t,r,n,i){e.rect(t,r,n,i),this.__originalRect(t,r,n,i)},t.closePath=function(){e.closePath(),this.__originalClosePath()},t.beginPath=function(){e.beginPath(),this.__originalBeginPath()}}(a,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}},{key:"endSMaskMode",value:function(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),E(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}},{key:"compose",value:function(t){if(this.current.activeSMask){t?(t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.ceil(t[2]),t[3]=Math.ceil(t[3])):t=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];var e=this.current.activeSMask;(function(t,e,r,n){var i=n[0],a=n[1],o=n[2]-i,s=n[3]-a;0!==o&&0!==s&&(function(t,e,r,n,i,a,o,s,l,u,c){var h,f=!!a,d=f?a[0]:0,p=f?a[1]:0,v=f?a[2]:0;h="Luminosity"===i?O:C;for(var y=Math.min(n,Math.ceil(1048576/r)),m=0;m0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.strokeColor;e.globalAlpha=this.current.strokeAlpha,this.contentVisible&&("object"===p(r)&&null!=r&&r.getPattern?(e.save(),e.strokeStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.STROKE),this.rescaleAndStroke(!1),e.restore()):this.rescaleAndStroke(!0)),t&&this.consumePath(this.current.getClippedPathBoundingBox()),e.globalAlpha=this.current.fillAlpha}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"fill",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.ctx,r=this.current.fillColor,n=!1;this.current.patternFill&&(e.save(),e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.FILL),n=!0);var o=this.current.getClippedPathBoundingBox();this.contentVisible&&null!==o&&(this.pendingEOFill?(e.fill("evenodd"),this.pendingEOFill=!1):e.fill()),n&&e.restore(),t&&this.consumePath(o)}},{key:"eoFill",value:function(){this.pendingEOFill=!0,this.fill()}},{key:"fillStroke",value:function(){this.fill(!1),this.stroke(!1),this.consumePath()}},{key:"eoFillStroke",value:function(){this.pendingEOFill=!0,this.fillStroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}},{key:"endPath",value:function(){this.consumePath()}},{key:"clip",value:function(){this.pendingClip=I}},{key:"eoClip",value:function(){this.pendingClip=j}},{key:"beginText",value:function(){this.current.textMatrix=n.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"endText",value:function(){var t=this.pendingTextPaths,e=this.ctx;if(void 0!==t){e.save(),e.beginPath();var r,n=c(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.setTransform.apply(e,l(i.transform)),e.translate(i.x,i.y),i.addToPath(e,i.fontSize)}}catch(t){n.e(t)}finally{n.f()}e.restore(),e.clip(),e.beginPath(),delete this.pendingTextPaths}else e.beginPath()}},{key:"setCharSpacing",value:function(t){this.current.charSpacing=t}},{key:"setWordSpacing",value:function(t){this.current.wordSpacing=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setFont",value:function(t,e){var r=this.commonObjs.get(t),i=this.current;if(!r)throw new Error("Can't find font for ".concat(t));if(i.fontMatrix=r.fontMatrix||n.FONT_IDENTITY_MATRIX,0!==i.fontMatrix[0]&&0!==i.fontMatrix[3]||(0,n.warn)("Invalid font matrix for font "+t),e<0?(e=-e,i.fontDirection=-1):i.fontDirection=1,this.current.font=r,this.current.fontSize=e,!r.isType3Font){var a=r.loadedName||"sans-serif",o="normal";r.black?o="900":r.bold&&(o="bold");var s=r.italic?"italic":"normal",l='"'.concat(a,'", ').concat(r.fallbackName),u=e;e<16?u=16:e>100&&(u=100),this.current.fontSizeScale=e/u,this.ctx.font="".concat(s," ").concat(o," ").concat(u,"px ").concat(l)}}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"moveText",value:function(t,e){this.current.x=this.current.lineX+=t,this.current.y=this.current.lineY+=e}},{key:"setLeadingMoveText",value:function(t,e){this.setLeading(-e),this.moveText(t,e)}},{key:"setTextMatrix",value:function(t,e,r,n,i,a){this.current.textMatrix=[t,e,r,n,i,a],this.current.textMatrixScale=Math.hypot(t,e),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}},{key:"nextLine",value:function(){this.moveText(0,this.current.leading)}},{key:"paintChar",value:function(t,e,r,a){var o,s=this.ctx,u=this.current,c=u.font,h=u.textRenderingMode,f=u.fontSize/u.fontSizeScale,d=h&n.TextRenderingMode.FILL_STROKE_MASK,p=!!(h&n.TextRenderingMode.ADD_TO_PATH_FLAG),v=u.patternFill&&!c.missingFile;(c.disableFontFace||p||v)&&(o=c.getPathGenerator(this.commonObjs,t)),c.disableFontFace||v?(s.save(),s.translate(e,r),s.beginPath(),o(s,f),a&&s.setTransform.apply(s,l(a)),d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fill(),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.stroke(),s.restore()):(d!==n.TextRenderingMode.FILL&&d!==n.TextRenderingMode.FILL_STROKE||s.fillText(t,e,r),d!==n.TextRenderingMode.STROKE&&d!==n.TextRenderingMode.FILL_STROKE||s.strokeText(t,e,r)),p&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,i.getCurrentTransform)(s),x:e,y:r,fontSize:f,addToPath:o})}},{key:"isFontSubpixelAAEnabled",get:function(){var t=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10).context;t.scale(1.5,1),t.fillText("I",0,10);for(var e=t.getImageData(0,0,10,10).data,r=!1,i=3;i0&&e[i]<255){r=!0;break}return(0,n.shadow)(this,"isFontSubpixelAAEnabled",r)}},{key:"showText",value:function(t){var e=this.current,r=e.font;if(r.isType3Font)return this.showType3Text(t);var o=e.fontSize;if(0!==o){var s,u=this.ctx,h=e.fontSizeScale,f=e.charSpacing,d=e.wordSpacing,p=e.fontDirection,v=e.textHScale*p,y=t.length,m=r.vertical,g=m?1:-1,b=r.defaultVMetrics,_=o*e.fontMatrix[0],w=e.textRenderingMode===n.TextRenderingMode.FILL&&!r.disableFontFace&&!e.patternFill;if(u.save(),u.transform.apply(u,l(e.textMatrix)),u.translate(e.x,e.y+e.textRise),p>0?u.scale(v,-1):u.scale(v,1),e.patternFill){u.save();var A=e.fillColor.getPattern(u,this,(0,i.getCurrentTransformInverse)(u),a.PathType.FILL);s=(0,i.getCurrentTransform)(u),u.restore(),u.fillStyle=A}var k=e.lineWidth,S=e.textMatrixScale;if(0===S||0===k){var x=e.textRenderingMode&n.TextRenderingMode.FILL_STROKE_MASK;x!==n.TextRenderingMode.STROKE&&x!==n.TextRenderingMode.FILL_STROKE||(k=this.getSinglePixelWidth())}else k/=S;if(1!==h&&(u.scale(h,h),k/=h),u.lineWidth=k,r.isInvalidPDFjsFont){var E,P=[],T=0,C=c(t);try{for(C.s();!(E=C.n()).done;){var O=E.value;P.push(O.unicode),T+=O.width}}catch(t){C.e(t)}finally{C.f()}return u.fillText(P.join(""),0,0),e.x+=T*_*v,u.restore(),void this.compose()}var F,M=0;for(F=0;F0){var H=1e3*u.measureText(L).width/o*h;if(W1&&void 0!==arguments[1]?arguments[1]:null;return this.cachedPatterns.has(t)?e=this.cachedPatterns.get(t):(e=(0,a.getShadingPattern)(this.objs.get(t)),this.cachedPatterns.set(t,e)),r&&(e.matrix=r),e}},{key:"shadingFill",value:function(t){if(this.contentVisible){var e=this.ctx;this.save();var r=this._getPattern(t);e.fillStyle=r.getPattern(e,this,(0,i.getCurrentTransformInverse)(e),a.PathType.SHADING);var o=(0,i.getCurrentTransformInverse)(e);if(o){var s=e.canvas,l=s.width,u=s.height,c=n.Util.applyTransform([0,0],o),h=n.Util.applyTransform([0,u],o),f=n.Util.applyTransform([l,0],o),d=n.Util.applyTransform([l,u],o),p=Math.min(c[0],h[0],f[0],d[0]),v=Math.min(c[1],h[1],f[1],d[1]),y=Math.max(c[0],h[0],f[0],d[0]),m=Math.max(c[1],h[1],f[1],d[1]);this.ctx.fillRect(p,v,y-p,m-v)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}}},{key:"beginInlineImage",value:function(){(0,n.unreachable)("Should not call beginInlineImage")}},{key:"beginImageData",value:function(){(0,n.unreachable)("Should not call beginImageData")}},{key:"paintFormXObjectBegin",value:function(t,e){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(t)&&6===t.length&&this.transform.apply(this,l(t)),this.baseTransform=(0,i.getCurrentTransform)(this.ctx),e)){var r=e[2]-e[0],n=e[3]-e[1];this.ctx.rect(e[0],e[1],r,n),this.current.updateRectMinMax((0,i.getCurrentTransform)(this.ctx),e),this.clip(),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}},{key:"beginGroup",value:function(t){if(this.contentVisible){this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);var e=this.ctx;t.isolated||(0,n.info)("TODO: Support non-isolated groups."),t.knockout&&(0,n.warn)("Knockout groups not supported.");var r=(0,i.getCurrentTransform)(e);if(t.matrix&&e.transform.apply(e,l(t.matrix)),!t.bbox)throw new Error("Bounding box is required.");var a=n.Util.getAxialAlignedBoundingBox(t.bbox,(0,i.getCurrentTransform)(e)),o=[0,0,e.canvas.width,e.canvas.height];a=n.Util.intersect(a,o)||[0,0,0,0];var s=Math.floor(a[0]),u=Math.floor(a[1]),c=Math.max(Math.ceil(a[2])-s,1),h=Math.max(Math.ceil(a[3])-u,1),f=1,d=1;c>g&&(f=c/g,c=g),h>g&&(d=h/g,h=g),this.current.startNewPathAndClipBox([0,0,c,h]);var p="groupAt"+this.groupLevel;t.smask&&(p+="_smask_"+this.smaskCounter++%2);var v=this.cachedCanvases.getCanvas(p,c,h),y=v.context;y.scale(1/f,1/d),y.translate(-s,-u),y.transform.apply(y,l(r)),t.smask?this.smaskStack.push({canvas:v.canvas,context:y,offsetX:s,offsetY:u,scaleX:f,scaleY:d,subtype:t.smask.subtype,backdrop:t.smask.backdrop,transferMap:t.smask.transferMap||null,startTransformInverse:null}):(e.setTransform(1,0,0,1,0,0),e.translate(s,u),e.scale(f,d),e.save()),E(e,y),this.ctx=y,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(e),this.groupLevel++}}},{key:"endGroup",value:function(t){if(this.contentVisible){this.groupLevel--;var e=this.ctx,r=this.groupStack.pop();if(this.ctx=r,this.ctx.imageSmoothingEnabled=!1,t.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{var a;this.ctx.restore();var o=(0,i.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),(a=this.ctx).setTransform.apply(a,l(o));var s=n.Util.getAxialAlignedBoundingBox([0,0,e.canvas.width,e.canvas.height],o);this.ctx.drawImage(e.canvas,0,0),this.ctx.restore(),this.compose(s)}}}},{key:"beginAnnotation",value:function(t,e,r,a,o){var s;if(u(this,L,N).call(this),P(this.ctx,this.foregroundColor),this.ctx.save(),this.save(),this.baseTransform&&(s=this.ctx).setTransform.apply(s,l(this.baseTransform)),Array.isArray(e)&&4===e.length){var c=e[2]-e[0],f=e[3]-e[1];if(o&&this.annotationCanvasMap){(r=r.slice())[4]-=e[0],r[5]-=e[1],(e=e.slice())[0]=e[1]=0,e[2]=c,e[3]=f;var d=h(n.Util.singularValueDecompose2dScale((0,i.getCurrentTransform)(this.ctx)),2),p=d[0],v=d[1],y=this.viewportScale,m=Math.ceil(c*this.outputScaleX*y),g=Math.ceil(f*this.outputScaleY*y);this.annotationCanvas=this.canvasFactory.create(m,g);var b=this.annotationCanvas,_=b.canvas,w=b.context;this.annotationCanvasMap.set(t,_),this.annotationCanvas.savedCtx=this.ctx,this.ctx=w,this.ctx.setTransform(p,0,0,-v,0,f*v),P(this.ctx,this.foregroundColor)}else P(this.ctx,this.foregroundColor),this.ctx.rect(e[0],e[1],c,f),this.ctx.clip(),this.endPath()}this.current=new k(this.ctx.canvas.width,this.ctx.canvas.height),this.transform.apply(this,l(r)),this.transform.apply(this,l(a))}},{key:"endAnnotation",value:function(){this.annotationCanvas&&(this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}},{key:"paintImageMaskXObject",value:function(t){if(this.contentVisible){var e=t.count;(t=this.getObject(t.data,t)).count=e;var r=this.ctx,n=this.processingType3;if(n&&(void 0===n.compiled&&(n.compiled=function(t){var e=t.width,r=t.height;if(e>b||r>b)return null;var n,i,a,o,s=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),l=e+1,u=new Uint8Array(l*(r+1)),h=e+7&-8,f=new Uint8Array(h*r),d=0,p=c(t.data);try{for(p.s();!(o=p.n()).done;)for(var v=o.value,y=128;y>0;)f[d++]=v&y?0:255,y>>=1}catch(t){p.e(t)}finally{p.f()}var m=0;for(0!==f[d=0]&&(u[0]=1,++m),i=1;i>2)+(f[d+1]?4:0)+(f[d-h+1]?8:0)]&&(u[a+i]=s[g],++m),d++;if(f[d-h]!==f[d]&&(u[a+i]=f[d]?2:4,++m),m>1e3)return null}for(a=n*l,0!==f[d=h*(r-1)]&&(u[a]=8,++m),i=1;i1e3)return null;var _=new Int32Array([0,l,-1,0,-l,0,0,0,1]),w=new Path2D;for(n=0;m&&n<=r;n++){for(var A=n*l,k=A+e;A>4,u[A]&=x>>2|x<<2),w.lineTo(A%l,A/l|0),u[A]||--m}while(S!==A);--n}}return f=null,u=null,function(t){t.save(),t.scale(1/e,-1/r),t.translate(0,-r),t.fill(w),t.beginPath(),t.restore()}}(t)),n.compiled))n.compiled(r);else{var i=this._createMaskCanvas(t),a=i.canvas;r.save(),r.setTransform(1,0,0,1,0,0),r.drawImage(a,i.offsetX,i.offsetY),r.restore(),this.compose()}}}},{key:"paintImageMaskXObjectRepeat",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4?arguments[4]:void 0,s=arguments.length>5?arguments[5]:void 0;if(this.contentVisible){t=this.getObject(t.data,t);var l=this.ctx;l.save();var u=(0,i.getCurrentTransform)(l);l.transform(e,r,a,o,0,0);var c=this._createMaskCanvas(t);l.setTransform(1,0,0,1,c.offsetX-u[4],c.offsetY-u[5]);for(var f=0,d=s.length;ff?h/f:1,e=c>f?c/f:1}}this._cachedScaleForStroking=[t,e]}return this._cachedScaleForStroking}},{key:"rescaleAndStroke",value:function(t){var e=this.ctx,r=this.current.lineWidth,n=h(this.getScaleForStroking(),2),a=n[0],o=n[1];if(e.lineWidth=r||1,1!==a||1!==o){var s,u,c;t&&(s=(0,i.getCurrentTransform)(e),u=e.getLineDash().slice(),c=e.lineDashOffset),e.scale(a,o);var f=Math.max(a,o);e.setLineDash(e.getLineDash().map((function(t){return t/f}))),e.lineDashOffset/=f,e.stroke(),t&&(e.setTransform.apply(e,l(s)),e.setLineDash(u),e.lineDashOffset=c)}else e.stroke()}},{key:"isContentVisible",value:function(){for(var t=this.markedContentStack.length-1;t>=0;t--)if(!this.markedContentStack[t].visible)return!1;return!0}}]),t}();function N(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)}for(var U in e.CanvasGraphics=D,n.OPS)void 0!==D.prototype[U]&&(D.prototype[n.OPS[U]]=D.prototype[U])},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.TilingPattern=e.PathType=void 0,e.getShadingPattern=function(t){switch(t[0]){case"RadialAxial":return new w(t);case"Mesh":return new S(t);case"Dummy":return new x}throw new Error("Unknown IR type: ".concat(t[0]))};var n=r(1),i=r(137),a=r(3);function o(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||l(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=l(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);ru[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l),u[n+1]>u[i+1]&&(l=n,n=i,i=l,l=o,o=s,s=l),u[r+1]>u[n+1]&&(l=r,r=n,n=l,l=a,a=o,o=l);var d=(u[r]+e.offsetX)*e.scaleX,p=(u[r+1]+e.offsetY)*e.scaleY,v=(u[n]+e.offsetX)*e.scaleX,y=(u[n+1]+e.offsetY)*e.scaleY,m=(u[i]+e.offsetX)*e.scaleX,g=(u[i+1]+e.offsetY)*e.scaleY;if(!(p>=g))for(var b,_,w,A,k,S,x,E,P=c[a],T=c[a+1],C=c[a+2],O=c[o],F=c[o+1],M=c[o+2],R=c[s],I=c[s+1],j=c[s+2],L=Math.round(p),D=Math.round(g),N=L;N<=D;N++){if(Ng?1:y===g?0:(y-N)/(y-g)),_=O-(O-R)*W,w=F-(F-I)*W,A=M-(M-j)*W}var G=void 0;k=d-(d-m)*(G=Ng?1:(p-N)/(p-g)),S=P-(P-R)*G,x=T-(T-I)*G,E=C-(C-j)*G;for(var B=Math.round(Math.min(b,k)),q=Math.round(Math.max(b,k)),H=f*N+4*B,z=B;z<=q;z++)(G=(b-z)/(b-k))<0?G=0:G>1&&(G=1),h[H++]=_-(_-S)*G|0,h[H++]=w-(w-x)*G|0,h[H++]=A-(A-E)*G|0,h[H++]=255}}function k(t,e,r){var n,i,a=e.coords,o=e.colors;switch(e.type){case"lattice":var s=e.verticesPerRow,l=Math.floor(a.length/s)-1,u=s-1;for(n=0;n=i?a=i:n=a/e,{scale:n,size:a}}},{key:"clipBbox",value:function(t,e,r,n,a){var o=n-e,s=a-r;t.ctx.rect(e,r,o,s),t.current.updateRectMinMax((0,i.getCurrentTransform)(t.ctx),[e,r,n,a]),t.clip(),t.endPath()}},{key:"setFillAndStrokeStyleToContext",value:function(t,e,r){var i=t.ctx,a=t.current;switch(e){case 1:var o=this.ctx;i.fillStyle=o.fillStyle,i.strokeStyle=o.strokeStyle,a.fillColor=o.fillStyle,a.strokeColor=o.strokeStyle;break;case 2:var s=n.Util.makeHexColor(r[0],r[1],r[2]);i.fillStyle=s,i.strokeStyle=s,a.fillColor=s,a.strokeColor=s;break;default:throw new n.FormatError("Unsupported paint type: ".concat(e))}}},{key:"getPattern",value:function(t,e,r,i){var a=r;i!==g.SHADING&&(a=n.Util.transform(a,e.baseTransform),this.matrix&&(a=n.Util.transform(a,this.matrix)));var o=this.createPatternCanvas(e),s=new DOMMatrix(a);s=(s=s.translate(o.offsetX,o.offsetY)).scale(1/o.scaleX,1/o.scaleY);var l=t.createPattern(o.canvas,"repeat");return l.setTransform(s),l}}],[{key:"MAX_PATTERN_SIZE",get:function(){return(0,n.shadow)(this,"MAX_PATTERN_SIZE",3e3)}}]),t}();e.TilingPattern=E},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.applyMaskImageData=function(t){var e,r=t.src,a=t.srcPos,o=void 0===a?0:a,s=t.dest,l=t.destPos,u=void 0===l?0:l,c=t.width,h=t.height,f=t.inverseDecode,d=void 0!==f&&f,p=n.FeatureTest.isLittleEndian?4278190080:255,v=function(t){if(Array.isArray(t))return t}(e=d?[0,p]:[p,0])||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{for(a=(r=r.call(t)).next;!(l=(n=a.call(r)).done)&&(s.push(n.value),2!==s.length);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e)||function(t,e){if(t){if("string"==typeof t)return i(t,2);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,2):void 0}}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),y=v[0],m=v[1],g=c>>3,b=7&c,_=r.length;s=new Uint32Array(s.buffer);for(var w=0;wt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalWorkerOptions=void 0;var r=Object.create(null);e.GlobalWorkerOptions=r,r.workerPort=void 0===r.workerPort?null:r.workerPort,r.workerSrc=void 0===r.workerSrc?"":r.workerSrc},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.MessageHandler=void 0;var n=r(1);function i(){i=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,l){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==s(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,l)}),(function(t){i("throw",t,o,l)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,l)}))}l(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function a(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function o(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(!this.isCancelled){var l=this.desiredSize;this.desiredSize-=o,l>0&&this.desiredSize<=0&&(this.sinkCapability=(0,n.createPromiseCapability)(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:r,targetName:i,stream:4,streamId:e,chunk:t},s)}},close:function(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:3,streamId:e}),delete o.streamSinks[e])},error:function(t){(0,n.assert)(t instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:i,stream:5,streamId:e,reason:l(t)}))},sinkCapability:(0,n.createPromiseCapability)(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:t.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[e]=u,new Promise((function(e){e(s(t.data,u))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:8,streamId:e,reason:l(t)})}))}},{key:"_processStreamMessage",value:function(t){var e=t.streamId,r=this.sourceName,i=t.sourceName,a=this.comObj,o=this.streamControllers[e],s=this.streamSinks[e];switch(t.stream){case 8:t.success?o.startCall.resolve():o.startCall.reject(l(t.reason));break;case 7:t.success?o.pullCall.resolve():o.pullCall.reject(l(t.reason));break;case 6:if(!s){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0});break}s.desiredSize<=0&&t.desiredSize>0&&s.sinkCapability.resolve(),s.desiredSize=t.desiredSize,new Promise((function(t){t(s.onPull&&s.onPull())})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:7,streamId:e,reason:l(t)})}));break;case 4:if((0,n.assert)(o,"enqueue should have stream controller"),o.isClosed)break;o.controller.enqueue(t.chunk);break;case 3:if((0,n.assert)(o,"close should have stream controller"),o.isClosed)break;o.isClosed=!0,o.controller.close(),this._deleteStreamController(o,e);break;case 5:(0,n.assert)(o,"error should have stream controller"),o.controller.error(l(t.reason)),this._deleteStreamController(o,e);break;case 2:t.success?o.cancelCall.resolve():o.cancelCall.reject(l(t.reason)),this._deleteStreamController(o,e);break;case 1:if(!s)break;new Promise((function(e){e(s.onCancel&&s.onCancel(l(t.reason)))})).then((function(){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,success:!0})}),(function(t){a.postMessage({sourceName:r,targetName:i,stream:2,streamId:e,reason:l(t)})})),s.sinkCapability.reject(l(t.reason)),s.isCancelled=!0,delete this.streamSinks[e];break;default:throw new Error("Unexpected stream case")}}},{key:"_deleteStreamController",value:(s=i().mark((function t(e,r){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.allSettled([e.startCall&&e.startCall.promise,e.pullCall&&e.pullCall.promise,e.cancelCall&&e.cancelCall.promise]);case 2:delete this.streamControllers[r];case 3:case"end":return t.stop()}}),t,this)})),u=function(){var t=this,e=arguments;return new Promise((function(r,n){var i=s.apply(t,e);function o(t){a(i,r,n,o,l,"next",t)}function l(t){a(i,r,n,o,l,"throw",t)}o(void 0)}))},function(t,e){return u.apply(this,arguments)})},{key:"destroy",value:function(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}],r&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.MessageHandler=u},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Metadata=void 0;var i=r(1);function a(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.OptionalContentConfig=void 0;var i=r(1),a=r(139);function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1])||arguments[1];y(this,A).has(t)?(y(this,A).get(t)._setVisible(g,!!e),v(this,w,null)):(0,i.warn)("Optional content group not found: ".concat(t))}},{key:"hasInitialVisibility",get:function(){return this.getHash()===y(this,k)}},{key:"getOrder",value:function(){return y(this,A).size?y(this,S)?y(this,S).slice():function(t){if(Array.isArray(t))return l(t)}(t=y(this,A).keys())||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||s(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}():null;var t}},{key:"getGroups",value:function(){return y(this,A).size>0?(0,i.objectFromMap)(y(this,A)):null}},{key:"getGroup",value:function(t){return y(this,A).get(t)||null}},{key:"getHash",value:function(){if(null!==y(this,w))return y(this,w);var t,e,r,n=new a.MurmurHash3_64,i=o(y(this,A));try{for(i.s();!(t=i.n()).done;){var l=(e=t.value,r=2,function(t){if(Array.isArray(t))return t}(e)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(e,r)||s(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=l[0],c=l[1];n.update("".concat(u,":").concat(c.visible))}}catch(t){i.e(t)}finally{i.f()}return v(this,w,n.hexdigest())}}]),t}();function P(t){var e=t.length;if(e<2)return!0;for(var r=t[0],n=1;n{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFDataTransportStream=void 0;var n=r(1),i=r(137);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0){var o=new Uint8Array(a).buffer;this._queuedChunks.push(o)}this._pdfDataRangeTransport=r,this._isStreamingSupported=!e.disableStream,this._isRangeSupported=!e.disableRange,this._contentLength=e.length,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((function(t,e){i._onReceiveData({begin:t,chunk:e})})),this._pdfDataRangeTransport.addProgressListener((function(t,e){i._onProgress({loaded:t,total:e})})),this._pdfDataRangeTransport.addProgressiveReadListener((function(t){i._onReceiveData({chunk:t})})),this._pdfDataRangeTransport.addProgressiveDoneListener((function(){i._onProgressiveDone()})),this._pdfDataRangeTransport.transportReady()}return d(t,[{key:"_onReceiveData",value:function(t){var e=new Uint8Array(t.chunk).buffer;if(void 0===t.begin)this._fullRequestReader?this._fullRequestReader._enqueue(e):this._queuedChunks.push(e);else{var r=this._rangeReaders.some((function(r){return r._begin===t.begin&&(r._enqueue(e),!0)}));(0,n.assert)(r,"_onReceiveData - no \`PDFDataTransportStreamRangeReader\` instance found.")}}},{key:"_progressiveDataLength",get:function(){var t,e;return null!==(t=null===(e=this._fullRequestReader)||void 0===e?void 0:e._loaded)&&void 0!==t?t:0}},{key:"_onProgress",value:function(t){var e,r,n,i;void 0===t.total?null===(e=this._rangeReaders[0])||void 0===e||null===(r=e.onProgress)||void 0===r||r.call(e,{loaded:t.loaded}):null===(n=this._fullRequestReader)||void 0===n||null===(i=n.onProgress)||void 0===i||i.call(n,{loaded:t.loaded,total:t.total})}},{key:"_onProgressiveDone",value:function(){var t;null===(t=this._fullRequestReader)||void 0===t||t.progressiveDone(),this._progressiveDone=!0}},{key:"_removeRangeReader",value:function(t){var e=this._rangeReaders.indexOf(t);e>=0&&this._rangeReaders.splice(e,1)}},{key:"getFullReader",value:function(){(0,n.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");var t=this._queuedChunks;return this._queuedChunks=null,new v(this,t,this._progressiveDone,this._contentDispositionFilename)}},{key:"getRangeReader",value:function(t,e){if(e<=this._progressiveDataLength)return null;var r=new y(this,t,e);return this._pdfDataRangeTransport.requestDataRange(t,e),this._rangeReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=u(this._rangeReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}this._pdfDataRangeTransport.abort()}}]),t}();e.PDFDataTransportStream=p;var v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;h(this,t),this._stream=e,this._done=n||!1,this._filename=(0,i.isPdfFile)(a)?a:null,this._queuedChunks=r||[],this._loaded=0;var o,s=u(this._queuedChunks);try{for(s.s();!(o=s.n()).done;){var l=o.value;this._loaded+=l.byteLength}}catch(t){s.e(t)}finally{s.f()}this._requests=[],this._headersReady=Promise.resolve(),e._fullRequestReader=this,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){this._done||(this._requests.length>0?this._requests.shift().resolve({value:t,done:!1}):this._queuedChunks.push(t),this._loaded+=t.byteLength)}},{key:"headersReady",get:function(){return this._headersReady}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._stream._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._stream._isStreamingSupported}},{key:"contentLength",get:function(){return this._stream._contentLength}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(this._queuedChunks.length>0)){t.next=3;break}return e=this._queuedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 3:if(!this._done){t.next=5;break}return t.abrupt("return",{value:void 0,done:!0});case 5:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 8:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}},{key:"progressiveDone",value:function(){this._done||(this._done=!0)}}]),t}(),y=function(){function t(e,r,n){h(this,t),this._stream=e,this._begin=r,this._end=n,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}var e;return d(t,[{key:"_enqueue",value:function(t){if(!this._done){if(0===this._requests.length)this._queuedChunk=t;else{this._requests.shift().resolve({value:t,done:!1});var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._queuedChunk){t.next=4;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 4:if(!this._done){t.next=6;break}return t.abrupt("return",{value:void 0,done:!0});case 6:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 9:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=u(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._stream._removeRangeReader(this)}}]),t}()},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}(i.children);try{for(u.s();!(l=u.n()).done;)e(l.value)}catch(t){u.e(t)}finally{u.f()}}}}(e),i}},{key:"shouldBuildText",value:function(t){return!("textarea"===t||"input"===t||"option"===t||"select"===t)}}],null&&i(e.prototype,null),r&&i(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaText=a},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.NodeStandardFontDataFactory=e.NodeCanvasFactory=e.NodeCMapReaderFactory=void 0;var i=r(138);function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var r=0;r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.TextLayerRenderTask=void 0,e.renderTextLayer=function(t){t.textContentSource||!t.textContent&&!t.textContentStream||((0,a.deprecated)("The TextLayerRender \`textContent\`/\`textContentStream\` parameters will be removed in the future, please use \`textContentSource\` instead."),t.textContentSource=t.textContent||t.textContentStream);var e=new p(t);return e._render(),e},e.updateTextLayer=function(t){var e=t.container,r=t.viewport,n=t.textDivs,i=t.textDivProperties,o=t.isOffscreenCanvasSupported,l=t.mustRotate,u=void 0===l||l,c=t.mustRescale,f=void 0===c||c;if(u&&(0,a.setLayerDimensions)(e,{rotation:r.rotation}),f){var p,v=h(0,o),y={prevFontSize:null,prevFontFamily:null,div:null,scale:r.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:v},m=s(n);try{for(m.s();!(p=m.n()).done;){var g=p.value;y.properties=i.get(g),y.div=g,d(y)}}catch(t){m.e(t)}finally{m.f()}}};var i=r(1),a=r(137);function o(t,e){for(var r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=0;f-=4)if(l[f]>0){o=Math.ceil(f/4/u);break}n.clearRect(0,0,u,u),n.strokeText("A",0,u),a=0;for(var d=0,p=(l=n.getImageData(0,0,u,u).data).length;d0){a=u-Math.floor(d/4/u);break}if(n.canvas.width=n.canvas.height=0,a){var v=a/(a+o);return c.set(t,v),v}return c.set(t,.8),.8}(l.fontFamily,t._isOffscreenCanvasSupported);0===s?(f=o[4],d=o[5]-v):(f=o[4]+v*Math.sin(s),d=o[5]-v*Math.cos(s));var y="calc(var(--scale-factor)*",m=n.style;t._container===t._rootContainer?(m.left="".concat((100*f/t._pageWidth).toFixed(2),"%"),m.top="".concat((100*d/t._pageHeight).toFixed(2),"%")):(m.left="".concat(y).concat(f.toFixed(2),"px)"),m.top="".concat(y).concat(d.toFixed(2),"px)")),m.fontSize="".concat(y).concat(p.toFixed(2),"px)"),m.fontFamily=l.fontFamily,a.fontSize=p,n.setAttribute("role","presentation"),n.textContent=e.str,n.dir=e.dir,t._fontInspectorEnabled&&(n.dataset.fontName=e.fontName),0!==s&&(a.angle=s*(180/Math.PI));var g=!1;if(e.str.length>1)g=!0;else if(" "!==e.str&&e.transform[0]!==e.transform[3]){var b=Math.abs(e.transform[0]),_=Math.abs(e.transform[3]);b!==_&&Math.max(b,_)/Math.min(b,_)>1.5&&(g=!0)}g&&(a.canvasWidth=l.vertical?e.height:e.width),t._textDivProperties.set(n,a),t._isReadableStream&&t._layoutText(n)}function d(t){var e=t.div,r=t.scale,n=t.properties,i=t.ctx,a=t.prevFontSize,o=t.prevFontFamily,s=e.style,l="";if(0!==n.canvasWidth&&n.hasText){var u=s.fontFamily,c=n.canvasWidth,h=n.fontSize;a===h&&o===u||(i.font="".concat(h*r,"px ").concat(u),t.prevFontSize=h,t.prevFontFamily=u);var f=i.measureText(e.textContent).width;f>0&&(l="scaleX(".concat(c*r/f,")"))}0!==n.angle&&(l="rotate(".concat(n.angle,"deg) ").concat(l)),l.length>0&&(s.transform=l)}var p=function(){function t(e){var r,n=this,o=e.textContentSource,s=e.container,l=e.viewport,u=e.textDivs,c=e.textDivProperties,f=e.textContentItemsStr,d=e.isOffscreenCanvasSupported;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._textContentSource=o,this._isReadableStream=o instanceof ReadableStream,this._container=this._rootContainer=s,this._textDivs=u||[],this._textContentItemsStr=f||[],this._fontInspectorEnabled=!(null===(r=globalThis.FontInspector)||void 0===r||!r.enabled),this._reader=null,this._textDivProperties=c||new WeakMap,this._canceled=!1,this._capability=(0,i.createPromiseCapability)(),this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:l.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:h(0,d)};var p=l.rawDims,v=p.pageWidth,y=p.pageHeight,m=p.pageX,g=p.pageY;this._transform=[1,0,0,-1,-m,g+y],this._pageWidth=v,this._pageHeight=y,(0,a.setLayerDimensions)(s,l),this._capability.promise.finally((function(){n._layoutTextParams=null})).catch((function(){}))}var e,r;return e=t,(r=[{key:"promise",get:function(){return this._capability.promise}},{key:"cancel",value:function(){this._canceled=!0,this._reader&&(this._reader.cancel(new i.AbortException("TextLayer task cancelled.")).catch((function(){})),this._reader=null),this._capability.reject(new i.AbortException("TextLayer task cancelled."))}},{key:"_processItems",value:function(t,e){var r,n=s(t);try{for(n.s();!(r=n.n()).done;){var i=r.value;if(void 0!==i.str)this._textContentItemsStr.push(i.str),f(this,i,e);else if("beginMarkedContentProps"===i.type||"beginMarkedContent"===i.type){var a=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),null!==i.id&&this._container.setAttribute("id","".concat(i.id)),a.append(this._container)}else"endMarkedContent"===i.type&&(this._container=this._container.parentNode)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_layoutText",value:function(t){var e=this._layoutTextParams.properties=this._textDivProperties.get(t);if(this._layoutTextParams.div=t,d(this._layoutTextParams),e.hasText&&this._container.append(t),e.hasEOL){var r=document.createElement("br");r.setAttribute("role","presentation"),this._container.append(r)}}},{key:"_render",value:function(){var t=this,e=(0,i.createPromiseCapability)(),r=Object.create(null);if(this._isReadableStream)this._reader=this._textContentSource.getReader(),function n(){t._reader.read().then((function(i){var a=i.value;i.done?e.resolve():(Object.assign(r,a.styles),t._processItems(a.items,r),n())}),e.reject)}();else{if(!this._textContentSource)throw new Error('No "textContentSource" parameter specified.');var n=this._textContentSource,a=n.items,o=n.styles;this._processItems(a,o),e.resolve()}e.promise.then((function(){r=null,function(t){if(!t._canceled){var e=t._textDivs,r=t._capability;if(e.length>1e5)r.resolve();else{if(!t._isReadableStream){var n,i=s(e);try{for(i.s();!(n=i.n()).done;){var a=n.value;t._layoutText(a)}}catch(t){i.e(t)}finally{i.f()}}r.resolve()}}}(t)}),this._capability.reject)}}])&&o(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.TextLayerRenderTask=p},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationEditorLayer=void 0;var i=r(1),a=r(136),o=r(153),s=r(154),l=r(137);function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:m(this,C).getMode();y(this,R,N).call(this),t===i.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),m(this,C).unselectAll(),this.div.classList.toggle("freeTextEditing",t===i.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",t===i.AnnotationEditorType.INK)}},{key:"addInkEditorIfNeeded",value:function(t){if(t||m(this,C).getMode()===i.AnnotationEditorType.INK){if(!t){var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n=e.value;if(n.isEmpty())return void n.setInBackground()}}catch(t){r.e(t)}finally{r.f()}}y(this,M,D).call(this,{offsetX:0,offsetY:0}).setInBackground()}}},{key:"setEditingState",value:function(t){m(this,C).setEditingState(t)}},{key:"addCommands",value:function(t){m(this,C).addCommands(t)}},{key:"enable",value:function(){this.div.style.pointerEvents="auto";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.enableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"disable",value:function(){this.div.style.pointerEvents="none";var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;)t.value.disableEditing()}catch(t){e.e(t)}finally{e.f()}}},{key:"setActiveEditor",value:function(t){m(this,C).getActive()!==t&&m(this,C).setActiveEditor(t)}},{key:"enableClick",value:function(){this.div.addEventListener("pointerdown",m(this,x)),this.div.addEventListener("pointerup",m(this,S))}},{key:"disableClick",value:function(){this.div.removeEventListener("pointerdown",m(this,x)),this.div.removeEventListener("pointerup",m(this,S))}},{key:"attach",value:function(t){m(this,E).set(t.id,t)}},{key:"detach",value:function(t){var e;m(this,E).delete(t.id),null===(e=m(this,A))||void 0===e||e.removePointerInTextLayer(t.contentDiv)}},{key:"remove",value:function(t){var e=this;m(this,C).removeEditor(t),this.detach(t),t.div.style.display="none",setTimeout((function(){t.div.style.display="",t.div.remove(),t.isAttachedToDOM=!1,document.activeElement===document.body&&m(e,C).focusMainContainer()}),0),m(this,T)||this.addInkEditorIfNeeded(!1)}},{key:"add",value:function(t){if(y(this,O,j).call(this,t),m(this,C).addEditor(t),this.attach(t),!t.isAttachedToDOM){var e=t.render();this.div.append(e),t.isAttachedToDOM=!0}this.moveEditorInDOM(t),t.onceAdded(),m(this,C).addToAnnotationStorage(t)}},{key:"moveEditorInDOM",value:function(t){var e;null===(e=m(this,A))||void 0===e||e.moveElementInDOM(this.div,t.div,t.contentDiv,!0)}},{key:"addOrRebuild",value:function(t){t.needsToBeRebuilt()?t.rebuild():this.add(t)}},{key:"addANewEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!0})}},{key:"addUndoableEditor",value:function(t){var e=this;this.addCommands({cmd:function(){e.addOrRebuild(t)},undo:function(){t.remove()},mustExec:!1})}},{key:"getNextId",value:function(){return m(this,C).getId()}},{key:"deserialize",value:function(t){switch(t.annotationType){case i.AnnotationEditorType.FREETEXT:return o.FreeTextEditor.deserialize(t,this,m(this,C));case i.AnnotationEditorType.INK:return s.InkEditor.deserialize(t,this,m(this,C))}return null}},{key:"setSelected",value:function(t){m(this,C).setSelected(t)}},{key:"toggleSelected",value:function(t){m(this,C).toggleSelected(t)}},{key:"isSelected",value:function(t){return m(this,C).isSelected(t)}},{key:"unselect",value:function(t){m(this,C).unselect(t)}},{key:"pointerup",value:function(t){var e=i.FeatureTest.platform.isMac;0!==t.button||t.ctrlKey&&e||t.target===this.div&&m(this,P)&&(g(this,P,!1),m(this,k)?y(this,M,D).call(this,t):g(this,k,!0))}},{key:"pointerdown",value:function(t){var e=i.FeatureTest.platform.isMac;if(!(0!==t.button||t.ctrlKey&&e)&&t.target===this.div){g(this,P,!0);var r=m(this,C).getActive();g(this,k,!r||r.isEmpty())}}},{key:"drop",value:function(t){var e=t.dataTransfer.getData("text/plain"),r=m(this,C).getEditor(e);if(r){t.preventDefault(),t.dataTransfer.dropEffect="move",y(this,O,j).call(this,r);var n=this.div.getBoundingClientRect(),i=t.clientX-n.x,a=t.clientY-n.y;r.translate(i-r.startX,a-r.startY),this.moveEditorInDOM(r),r.div.focus()}}},{key:"dragover",value:function(t){t.preventDefault()}},{key:"destroy",value:function(){var t;(null===(t=m(this,C).getActive())||void 0===t?void 0:t.parent)===this&&m(this,C).setActiveEditor(null);var e,r=u(m(this,E).values());try{for(r.s();!(e=r.n()).done;){var n,i=e.value;null===(n=m(this,A))||void 0===n||n.removePointerInTextLayer(i.contentDiv),i.setParent(null),i.isAttachedToDOM=!1,i.div.remove()}}catch(t){r.e(t)}finally{r.f()}this.div=null,m(this,E).clear(),m(this,C).removeLayer(this)}},{key:"render",value:function(t){var e=t.viewport;this.viewport=e,(0,l.setLayerDimensions)(this.div,e),(0,a.bindEvents)(this,this.div,["dragover","drop"]);var r,n=u(m(this,C).getEditors(this.pageIndex));try{for(n.s();!(r=n.n()).done;){var i=r.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}this.updateMode()}},{key:"update",value:function(t){var e=t.viewport;m(this,C).commitOrRemove(),this.viewport=e,(0,l.setLayerDimensions)(this.div,{rotation:e.rotation}),this.updateMode()}},{key:"pageDimensions",get:function(){var t=this.viewport.rawDims;return[t.pageWidth,t.pageHeight]}}],r&&h(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();function j(t){var e;t.parent!==this&&(this.attach(t),null===(e=t.parent)||void 0===e||e.detach(t),t.setParent(this),t.div&&t.isAttachedToDOM&&(t.div.remove(),this.div.append(t.div)))}function L(t){switch(m(this,C).getMode()){case i.AnnotationEditorType.FREETEXT:return new o.FreeTextEditor(t);case i.AnnotationEditorType.INK:return new s.InkEditor(t)}return null}function D(t){var e=this.getNextId(),r=y(this,F,L).call(this,{parent:this,id:e,x:t.offsetX,y:t.offsetY,uiManager:m(this,C)});return r&&this.add(r),r}function N(){g(this,T,!0);var t,e=u(m(this,E).values());try{for(e.s();!(t=e.n()).done;){var r=t.value;r.isEmpty()&&r.remove()}}catch(t){e.e(t)}finally{e.f()}g(this,T,!1)}e.AnnotationEditorLayer=I,_=I,(w=d(w="_initialized"))in _?Object.defineProperty(_,w,{value:false,enumerable:!0,configurable:!0,writable:!0}):_[w]=false},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.FreeTextEditor=void 0;var i=r(1),a=r(136),o=r(135);function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=u(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||u(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){if(t){if("string"==typeof t)return c(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.InkEditor=void 0,Object.defineProperty(e,"fitCurve",{enumerable:!0,get:function(){return o.fitCurve}});var i=r(1),a=r(135),o=r(155),s=r(136);function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=h(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||h(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||h(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){if(t){if("string"==typeof t)return f(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r.01&&(e=Math.ceil(t/P(this,M)),this.setDims(t,e));var i=c(this.parentDimensions,2),a=i[0],o=i[1];this.width=t/a,this.height=e/o,P(this,U)&&C(this,at,Tt).call(this,t,e),C(this,it,Pt).call(this),C(this,tt,kt).call(this),this.canvas.style.visibility="visible"}}},{key:"serialize",value:function(){if(this.isEmpty())return null;var t=this.getRect(0,0),e=this.rotation%180==0?t[3]-t[1]:t[2]-t[0],r=a.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:i.AnnotationEditorType.INK,color:r,thickness:this.thickness,opacity:this.opacity,paths:C(this,st,Ft).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,e),pageIndex:this.pageIndex,rect:t,rotation:this.rotation}}}])&&v(e.prototype,r),o&&v(e,o),Object.defineProperty(e,"prototype",{writable:!1}),d}(a.AnnotationEditor);function vt(t){var e=this,r=this.thickness;this.addCommands({cmd:function(){e.thickness=t,C(e,ft,Lt).call(e)},undo:function(){e.thickness=r,C(e,ft,Lt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})}function yt(t){var e=this,r=this.color;this.addCommands({cmd:function(){e.color=t,C(e,tt,kt).call(e)},undo:function(){e.color=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})}function mt(t){var e=this;t/=100;var r=this.opacity;this.addCommands({cmd:function(){e.opacity=t,C(e,tt,kt).call(e)},undo:function(){e.opacity=r,C(e,tt,kt).call(e)},mustExec:!0,type:i.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})}function gt(){var t=this.parentRotation,e=c(this.parentDimensions,2),r=e[0],n=e[1];switch(t){case 90:return[0,n,n,r];case 180:return[r,n,r,n];case 270:return[r,0,n,r];default:return[0,0,r,n]}}function bt(){var t=this.ctx,e=this.color,r=this.opacity,n=this.thickness,i=this.parentScale,a=this.scaleFactor;t.lineWidth=n*i/a,t.lineCap="round",t.lineJoin="round",t.miterLimit=10,t.strokeStyle="".concat(e).concat((0,s.opacityToHex)(r))}function _t(t,e){var r,n=this;this.isEditing=!0,P(this,W)||(E(this,W,!0),C(this,it,Pt).call(this),this.thickness||(this.thickness=pt._defaultThickness),this.color||(this.color=pt._defaultColor||a.AnnotationEditor._defaultLineColor),null!==(r=this.opacity)&&void 0!==r||(this.opacity=pt._defaultOpacity)),this.currentPath.push([t,e]),E(this,G,null),C(this,J,bt).call(this),this.ctx.beginPath(),this.ctx.moveTo(t,e),E(this,z,(function(){var t;P(n,z)&&(P(n,G)&&(n.isEmpty()?(n.ctx.setTransform(1,0,0,1,0,0),n.ctx.clearRect(0,0,n.canvas.width,n.canvas.height)):C(n,tt,kt).call(n),(t=n.ctx).lineTo.apply(t,u(P(n,G))),E(n,G,null),n.ctx.stroke()),window.requestAnimationFrame(P(n,z)))})),window.requestAnimationFrame(P(this,z))}function wt(t,e){var r=c(this.currentPath.at(-1),2),n=r[0],i=r[1];t===n&&e===i||(this.currentPath.push([t,e]),E(this,G,[t,e]))}function At(t,e){var r=this;this.ctx.closePath(),E(this,z,null),t=Math.min(Math.max(t,0),this.canvas.width),e=Math.min(Math.max(e,0),this.canvas.height);var n,i=c(this.currentPath.at(-1),2),a=i[0],s=i[1];if(t===a&&e===s||this.currentPath.push([t,e]),1!==this.currentPath.length)n=(0,o.fitCurve)(this.currentPath,30,null);else{var l=[t,e];n=[[l,l.slice(),l.slice(),l]]}var u=x(pt,pt,Ot).call(pt,n);this.currentPath.length=0,this.addCommands({cmd:function(){r.paths.push(n),r.bezierPath2D.push(u),r.rebuild()},undo:function(){r.paths.pop(),r.bezierPath2D.pop(),0===r.paths.length?r.remove():(r.canvas||(C(r,rt,xt).call(r),C(r,nt,Et).call(r)),C(r,ft,Lt).call(r))},mustExec:!0})}function kt(){if(this.isEmpty())C(this,ot,Ct).call(this);else{C(this,J,bt).call(this);var t=this.canvas,e=this.ctx;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height),C(this,ot,Ct).call(this);var r,n=l(this.bezierPath2D);try{for(n.s();!(r=n.n()).done;){var i=r.value;e.stroke(i)}}catch(t){n.e(t)}finally{n.f()}}}function St(t){C(this,Z,At).call(this,t.offsetX,t.offsetY),this.canvas.removeEventListener("pointerleave",P(this,L)),this.canvas.removeEventListener("pointermove",P(this,j)),this.addToAnnotationStorage()}function xt(){var t=this;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",pt._l10nPromise.get("editor_ink_canvas_aria_label").then((function(e){var r;return null===(r=t.canvas)||void 0===r?void 0:r.setAttribute("aria-label",e)})),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")}function Et(){var t=this,e=null;E(this,B,new ResizeObserver((function(r){var n=r[0].contentRect;n.width&&n.height&&(null!==e&&clearTimeout(e),e=setTimeout((function(){t.fixDims(),e=null}),F),t.setDimensions(n.width,n.height))}))),P(this,B).observe(this.div)}function Pt(){if(P(this,W)){var t=c(this.parentDimensions,2),e=t[0],r=t[1];this.canvas.width=Math.ceil(this.width*e),this.canvas.height=Math.ceil(this.height*r),C(this,ot,Ct).call(this)}}function Tt(t,e){var r=C(this,ht,jt).call(this),n=(t-r)/P(this,I),i=(e-r)/P(this,R);this.scaleFactor=Math.min(n,i)}function Ct(){var t=C(this,ht,jt).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+t,this.translationY*this.scaleFactor+t)}function Ot(t){for(var e=new Path2D,r=0,n=t.length;r0&&void 0!==arguments[0]&&arguments[0];if(!this.isEmpty())if(P(this,U)){var e=C(this,ct,It).call(this),r=C(this,ht,jt).call(this);E(this,I,Math.max(O,e[2]-e[0])),E(this,R,Math.max(O,e[3]-e[1]));var n=Math.ceil(r+P(this,I)*this.scaleFactor),i=Math.ceil(r+P(this,R)*this.scaleFactor),a=c(this.parentDimensions,2),o=a[0],s=a[1];this.width=n/o,this.height=i/s,E(this,M,n/i),C(this,dt,Dt).call(this);var l=this.translationX,u=this.translationY;this.translationX=-e[0],this.translationY=-e[1],C(this,it,Pt).call(this),C(this,tt,kt).call(this),E(this,q,n),E(this,H,i),this.setDims(n,i);var h=t?r/this.scaleFactor/2:0;this.translate(l-this.translationX-h,u-this.translationY-h)}else C(this,tt,kt).call(this)}function Dt(){var t=this.div.style;P(this,M)>=1?(t.minHeight="".concat(O,"px"),t.minWidth="".concat(Math.round(P(this,M)*O),"px")):(t.minWidth="".concat(O,"px"),t.minHeight="".concat(Math.round(O/P(this,M)),"px"))}e.InkEditor=pt,w(pt,"_defaultColor",null),w(pt,"_defaultOpacity",1),w(pt,"_defaultThickness",1),w(pt,"_l10nPromise",void 0),w(pt,"_type","ink")},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fitCurve=void 0;var n=r(156);e.fitCurve=n},t=>{function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,r){for(var n=0;nt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.9999&&x<1.0001)break}d=f,y=p}if(_=[],(m=v.subtract(t[p-1],t[p+1])).every((function(t){return 0===t}))){var E=[-(m=v.subtract(t[p-1],t[p]))[1],m[0]];m[0]=E[0],m[1]=E[1]}return g=v.normalize(m),b=v.mulItems(g,-1),(_=_.concat(l(t.slice(0,p+1),e,g,n,i))).concat(l(t.slice(p),b,r,n,i))}function u(t,e,r,n,i,o){var s,l,u;s=function(t,e,r,n){var i,a,o,s,l,u,c,h,f,d,p,m,g,b,_,w,A,k=t[0],S=t[t.length-1];for(i=[k,null,null,S],a=v.zeros_Xx2x2(e.length),g=0,b=e.length;gi&&(i=n,a=s);return[i,a]}(t,s,e),h=a(c,2);return l=h[0],u=h[1],o&&o({bez:s,points:t,params:e,maxErr:l,maxPoint:u}),[s,l,u]}function c(t,e,r){return r.map((function(r,n){return h(t,e[n],r)}))}function h(t,e,r){var n=v.subtract(y.q(t,r),e),i=y.qprime(t,r),a=v.mulMatrix(n,i),o=v.sum(v.squareItems(i))+2*v.mulMatrix(n,y.qprimeprime(t,r));return 0===o?r:r-a/o}var f=function(t,e){for(var r,n=[0],i=t[0],a=0,o=1;o<=e;o++)r=y.q(t,o/e),a+=v.vectorLen(v.subtract(r,i)),n.push(a),i=r;return n.map((function(t){return t/a}))};function d(t,e,r,n){if(e<0)return 0;if(e>1)return 1;for(var i,a,o,s,l=1;l<=n;l++)if(e<=r[l]){o=(l-1)/n,a=l/n,s=(e-(i=r[l-1]))/(r[l]-i)*(a-o)+o;break}return s}function p(t,e){return v.normalize(v.subtract(t,e))}var v=function(){function t(){r(this,t)}return i(t,null,[{key:"zeros_Xx2x2",value:function(t){for(var e=[];t--;)e.push([0,0]);return e}},{key:"mulItems",value:function(t,e){return t.map((function(t){return t*e}))}},{key:"mulMatrix",value:function(t,e){return t.reduce((function(t,r,n){return t+r*e[n]}),0)}},{key:"subtract",value:function(t,e){return t.map((function(t,r){return t-e[r]}))}},{key:"addArrays",value:function(t,e){return t.map((function(t,r){return t+e[r]}))}},{key:"addItems",value:function(t,e){return t.map((function(t){return t+e}))}},{key:"sum",value:function(t){return t.reduce((function(t,e){return t+e}))}},{key:"dot",value:function(e,r){return t.mulMatrix(e,r)}},{key:"vectorLen",value:function(t){return Math.hypot.apply(Math,function(t){if(Array.isArray(t))return s(t)}(e=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());var e}},{key:"divItems",value:function(t,e){return t.map((function(t){return t/e}))}},{key:"squareItems",value:function(t){return t.map((function(t){return t*t}))}},{key:"normalize",value:function(t){return this.divItems(t,this.vectorLen(t))}}]),t}(),y=function(){function t(){r(this,t)}return i(t,null,[{key:"q",value:function(t,e){var r=1-e,n=v.mulItems(t[0],r*r*r),i=v.mulItems(t[1],3*r*r*e),a=v.mulItems(t[2],3*r*e*e),o=v.mulItems(t[3],e*e*e);return v.addArrays(v.addArrays(n,i),v.addArrays(a,o))}},{key:"qprime",value:function(t,e){var r=1-e,n=v.mulItems(v.subtract(t[1],t[0]),3*r*r),i=v.mulItems(v.subtract(t[2],t[1]),6*r*e),a=v.mulItems(v.subtract(t[3],t[2]),3*e*e);return v.addArrays(v.addArrays(n,i),a)}},{key:"qprimeprime",value:function(t,e){return v.addArrays(v.mulItems(v.addArrays(v.subtract(t[2],v.mulItems(t[1],2)),t[0]),6*(1-e)),v.mulItems(v.addArrays(v.subtract(t[3],v.mulItems(t[2],2)),t[1]),6*e))}}]),t}();t.exports=function(t,e,r){if(!Array.isArray(t))throw new TypeError("First argument should be an array");if(t.forEach((function(e){if(!Array.isArray(e)||e.some((function(t){return"number"!=typeof t}))||e.length!==t[0].length)throw Error("Each point should be an array of numbers. Each point should have the same amount of numbers.")})),(t=t.filter((function(e,r){return 0===r||!e.every((function(e,n){return e===t[r-1][n]}))}))).length<2)return[];var n=t.length,i=p(t[1],t[0]),a=p(t[n-2],t[n-1]);return l(t,i,a,e,r)},t.exports.fitCubic=l,t.exports.createTangent=p},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AnnotationLayer=void 0;var n=r(1),i=r(137),a=r(134),o=r(158),s=r(159);function l(t,e,r){return function(t,e){if(t!==e)throw new TypeError("Private static access of wrong provenance")}(t,e),r}function u(){return u="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=v(t)););return t}(t,e);if(n){var i=Object.getOwnPropertyDescriptor(n,e);return i.get?i.get.call(arguments.length<3?t:r):i.value}},u.apply(this,arguments)}function c(t){return function(t){if(Array.isArray(t))return w(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&f(t,e)}function f(t,e){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},f(t,e)}function d(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=v(t);if(e){var i=v(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===A(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return p(t)}(this,r)}}function p(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}function y(t,e){!function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(t,e),e.add(t)}function m(t,e,r){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return r}function g(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=_(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function b(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||_(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(t,e){if(t){if("string"==typeof t)return w(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(t,e):void 0}}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{},n=r.isRenderable,i=void 0!==n&&n,a=r.ignoreBorder,o=void 0!==a&&a,s=r.createQuadrilaterals,l=void 0!==s&&s;k(this,t),this.isRenderable=i,this.data=e.data,this.layer=e.layer,this.page=e.page,this.viewport=e.viewport,this.linkService=e.linkService,this.downloadManager=e.downloadManager,this.imageResourcesPath=e.imageResourcesPath,this.renderForms=e.renderForms,this.svgFactory=e.svgFactory,this.annotationStorage=e.annotationStorage,this.enableScripting=e.enableScripting,this.hasJSActions=e.hasJSActions,this._fieldObjects=e.fieldObjects,i&&(this.container=this._createContainer(o)),l&&(this.quadrilaterals=this._createQuadrilaterals(o))}return x(t,[{key:"_createContainer",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.data,r=this.page,i=this.viewport,a=document.createElement("section");a.setAttribute("data-annotation-id",e.id);var o=i.rawDims,s=o.pageWidth,l=o.pageHeight,u=o.pageX,c=o.pageY,h=C(e.rect),f=h.width,d=h.height,p=n.Util.normalizeRect([e.rect[0],r.view[3]-e.rect[1]+r.view[1],e.rect[2],r.view[3]-e.rect[3]+r.view[1]]);if(!t&&e.borderStyle.width>0){a.style.borderWidth="".concat(e.borderStyle.width,"px");var v=e.borderStyle.horizontalCornerRadius,y=e.borderStyle.verticalCornerRadius;if(v>0||y>0){var m="calc(".concat(v,"px * var(--scale-factor)) / calc(").concat(y,"px * var(--scale-factor))");a.style.borderRadius=m}else if(this instanceof H){var g="calc(".concat(f,"px * var(--scale-factor)) / calc(").concat(d,"px * var(--scale-factor))");a.style.borderRadius=g}switch(e.borderStyle.style){case n.AnnotationBorderStyleType.SOLID:a.style.borderStyle="solid";break;case n.AnnotationBorderStyleType.DASHED:a.style.borderStyle="dashed";break;case n.AnnotationBorderStyleType.BEVELED:(0,n.warn)("Unimplemented border style: beveled");break;case n.AnnotationBorderStyleType.INSET:(0,n.warn)("Unimplemented border style: inset");break;case n.AnnotationBorderStyleType.UNDERLINE:a.style.borderBottomStyle="solid"}var b=e.borderColor||null;b?a.style.borderColor=n.Util.makeHexColor(0|b[0],0|b[1],0|b[2]):a.style.borderWidth=0}a.style.left="".concat(100*(p[0]-u)/s,"%"),a.style.top="".concat(100*(p[1]-c)/l,"%");var _=e.rotation;return e.hasOwnCanvas||0===_?(a.style.width="".concat(100*f/s,"%"),a.style.height="".concat(100*d/l,"%")):this.setRotation(_,a),a}},{key:"setRotation",value:function(t){var e,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.container,i=this.viewport.rawDims,a=i.pageWidth,o=i.pageHeight,s=C(this.data.rect),l=s.width,u=s.height;t%180==0?(e=100*l/a,r=100*u/o):(e=100*u/a,r=100*l/o),n.style.width="".concat(e,"%"),n.style.height="".concat(r,"%"),n.setAttribute("data-main-rotation",(360-t)%360)}},{key:"_commonActions",get:function(){var t=this,e=function(t,e,r){var n=r.detail[t];r.target.style[e]=o.ColorConverters["".concat(n[0],"_HTML")](n.slice(1))};return(0,n.shadow)(this,"_commonActions",{display:function(e){var r=e.detail.display%2==1;t.container.style.visibility=r?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:r,print:0===e.detail.display||3===e.detail.display})},print:function(e){t.annotationStorage.setValue(t.data.id,{print:e.detail.print})},hidden:function(e){t.container.style.visibility=e.detail.hidden?"hidden":"visible",t.annotationStorage.setValue(t.data.id,{hidden:e.detail.hidden})},focus:function(t){setTimeout((function(){return t.target.focus({preventScroll:!1})}),0)},userName:function(t){t.target.title=t.detail.userName},readonly:function(t){t.detail.readonly?t.target.setAttribute("readonly",""):t.target.removeAttribute("readonly")},required:function(e){t._setRequired(e.target,e.detail.required)},bgColor:function(t){e("bgColor","backgroundColor",t)},fillColor:function(t){e("fillColor","backgroundColor",t)},fgColor:function(t){e("fgColor","color",t)},textColor:function(t){e("textColor","color",t)},borderColor:function(t){e("borderColor","borderColor",t)},strokeColor:function(t){e("strokeColor","borderColor",t)},rotation:function(e){var r=e.detail.rotation;t.setRotation(r),t.annotationStorage.setValue(t.data.id,{rotation:r})}})}},{key:"_dispatchEventFromSandbox",value:function(t,e){for(var r=this._commonActions,n=0,i=Object.keys(e.detail);n0&&void 0!==arguments[0]&&arguments[0];if(!this.data.quadPoints)return null;var e,r=[],n=this.data.rect,i=g(this.data.quadPoints);try{for(i.s();!(e=i.n()).done;){var a=e.value;this.data.rect=[a[2].x,a[2].y,a[1].x,a[1].y],r.push(this._createContainer(t))}}catch(t){i.e(t)}finally{i.f()}return this.data.rect=n,r}},{key:"_createPopup",value:function(t,e){var r=this.container;this.quadrilaterals&&(t=t||this.quadrilaterals,r=this.quadrilaterals[0]),t||((t=document.createElement("div")).className="popupTriggerArea",r.append(t));var n=new Y({container:r,trigger:t,color:e.color,titleObj:e.titleObj,modificationDate:e.modificationDate,contentsObj:e.contentsObj,richText:e.richText,hideWrapper:!0}).render();n.style.left="100%",r.append(n)}},{key:"_renderQuadrilaterals",value:function(t){var e,r=g(this.quadrilaterals);try{for(r.s();!(e=r.n()).done;)e.value.className=t}catch(t){r.e(t)}finally{r.f()}return this.quadrilaterals}},{key:"render",value:function(){(0,n.unreachable)("Abstract method \`AnnotationElement.render\` called")}},{key:"_getElementsByName",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[];if(this._fieldObjects){var i=this._fieldObjects[t];if(i){var a,o=g(i);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.page,u=s.id,c=s.exportValues;if(-1!==l&&u!==e){var h="string"==typeof c?c:null,f=document.querySelector('[data-element-id="'.concat(u,'"]'));!f||T.has(f)?r.push({id:u,exportValue:h,domElement:f}):(0,n.warn)("_getElementsByName - element not allowed: ".concat(u))}}}catch(t){o.e(t)}finally{o.f()}}return r}var d,p=g(document.getElementsByName(t));try{for(p.s();!(d=p.n()).done;){var v=d.value,y=v.exportValue,m=v.getAttribute("data-element-id");m!==e&&T.has(v)&&r.push({id:m,exportValue:y,domElement:v})}}catch(t){p.e(t)}finally{p.f()}return r}}]),t}(),M=new WeakSet,R=new WeakSet,I=function(t){h(r,t);var e=d(r);function r(t){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return k(this,r),y(p(n=e.call(this,t,{isRenderable:!0,ignoreBorder:!(null==i||!i.ignoreBorder),createQuadrilaterals:!0})),R),y(p(n),M),n.isTooltipOnly=t.data.isTooltipOnly,n}return x(r,[{key:"render",value:function(){var t=this.data,e=this.linkService,r=document.createElement("a");r.setAttribute("data-element-id",t.id);var n=!1;return t.url?(e.addLinkAttributes(r,t.url,t.newWindow),n=!0):t.action?(this._bindNamedAction(r,t.action),n=!0):t.attachment?(this._bindAttachment(r,t.attachment),n=!0):t.setOCGState?(m(this,R,L).call(this,r,t.setOCGState),n=!0):t.dest?(this._bindLink(r,t.dest),n=!0):(t.actions&&(t.actions.Action||t.actions["Mouse Up"]||t.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(r,t),n=!0),t.resetForm?(this._bindResetFormAction(r,t.resetForm),n=!0):this.isTooltipOnly&&!n&&(this._bindLink(r,""),n=!0)),this.quadrilaterals?this._renderQuadrilaterals("linkAnnotation").map((function(t,e){var n=0===e?r:r.cloneNode();return t.append(n),t})):(this.container.className="linkAnnotation",n&&this.container.append(r),this.container)}},{key:"_bindLink",value:function(t,e){var r=this;t.href=this.linkService.getDestinationHash(e),t.onclick=function(){return e&&r.linkService.goToDestination(e),!1},(e||""===e)&&m(this,M,j).call(this)}},{key:"_bindNamedAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){return r.linkService.executeNamedAction(e),!1},m(this,M,j).call(this)}},{key:"_bindAttachment",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){var t;return null===(t=r.downloadManager)||void 0===t||t.openOrDownloadData(r.container,e.content,e.filename),!1},m(this,M,j).call(this)}},{key:"_bindJSAction",value:function(t,e){var r=this;t.href=this.linkService.getAnchorUrl("");for(var n=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]),i=function(){var i=o[a],s=n.get(i);if(!s)return"continue";t[s]=function(){var t;return null===(t=r.linkService.eventBus)||void 0===t||t.dispatch("dispatcheventinsandbox",{source:r,detail:{id:e.id,name:i}}),!1}},a=0,o=Object.keys(e.actions);ao&&(a=a.slice(0,o));var s={userValue:a,formattedValue:null,lastCommittedValue:null,commitKey:1};this.data.multiLine?((n=document.createElement("textarea")).textContent=a,this.data.doNotScroll&&(n.style.overflowY="hidden")):((n=document.createElement("input")).type="text",n.setAttribute("value",a),this.data.doNotScroll&&(n.style.overflowX="hidden")),T.add(n),n.setAttribute("data-element-id",r),n.disabled=this.data.readOnly,n.name=this.data.fieldName,n.tabIndex=P,this._setRequired(n,this.data.required),o&&(n.maxLength=o),n.addEventListener("input",(function(i){e.setValue(r,{value:i.target.value}),t.setPropertyOnSiblings(n,"value",i.target.value,"value")})),n.addEventListener("resetform",(function(e){var r,i=null!==(r=t.data.defaultFieldValue)&&void 0!==r?r:"";n.value=s.userValue=i,s.formattedValue=null}));var l=function(t){var e=s.formattedValue;null!=e&&(t.target.value=e),t.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){var u;n.addEventListener("focus",(function(t){var e=t.target;s.userValue&&(e.value=s.userValue),s.lastCommittedValue=e.value,s.commitKey=1})),n.addEventListener("updatefromsandbox",(function(n){var i={value:function(t){var n;s.userValue=null!==(n=t.detail.value)&&void 0!==n?n:"",e.setValue(r,{value:s.userValue.toString()}),t.target.value=s.userValue},formattedValue:function(t){var n=t.detail.formattedValue;s.formattedValue=n,null!=n&&t.target!==document.activeElement&&(t.target.value=n),e.setValue(r,{formattedValue:n})},selRange:function(t){var e;(e=t.target).setSelectionRange.apply(e,c(t.detail.selRange))},charLimit:function(n){var i,a=n.detail.charLimit,o=n.target;if(0!==a){o.setAttribute("maxLength",a);var l=s.userValue;!l||l.length<=a||(l=l.slice(0,a),o.value=s.userValue=l,e.setValue(r,{value:l}),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:l,willCommit:!0,commitKey:1,selStart:o.selectionStart,selEnd:o.selectionEnd}}))}else o.removeAttribute("maxLength")}};t._dispatchEventFromSandbox(i,n)})),n.addEventListener("keydown",(function(e){var n;s.commitKey=1;var i=-1;if("Escape"===e.key?i=0:"Enter"!==e.key||t.data.multiLine?"Tab"===e.key&&(s.commitKey=3):i=2,-1!==i){var a=e.target.value;s.lastCommittedValue!==a&&(s.lastCommittedValue=a,s.userValue=a,null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:a,willCommit:!0,commitKey:i,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}}))}}));var h=l;l=null,n.addEventListener("blur",(function(e){if(e.relatedTarget){var n,i=e.target.value;s.userValue=i,s.lastCommittedValue!==i&&(null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:i,willCommit:!0,commitKey:s.commitKey,selStart:e.target.selectionStart,selEnd:e.target.selectionEnd}})),h(e)}})),null!==(u=this.data.actions)&&void 0!==u&&u.Keystroke&&n.addEventListener("beforeinput",(function(e){var n;s.lastCommittedValue=null;var i=e.data,a=e.target,o=a.value,l=a.selectionStart,u=a.selectionEnd,c=l,h=u;switch(e.inputType){case"deleteWordBackward":var f=o.substring(0,l).match(/\\w*[^\\w]*$/);f&&(c-=f[0].length);break;case"deleteWordForward":var d=o.substring(l).match(/^[^\\w]*\\w*/);d&&(h+=d[0].length);break;case"deleteContentBackward":l===u&&(c-=1);break;case"deleteContentForward":l===u&&(h+=1)}e.preventDefault(),null===(n=t.linkService.eventBus)||void 0===n||n.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:o,change:i||"",willCommit:!1,selStart:c,selEnd:h}})})),this._setEventListeners(n,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.value}))}if(l&&n.addEventListener("blur",l),this.data.comb){var f=(this.data.rect[2]-this.data.rect[0])/o;n.classList.add("comb"),n.style.letterSpacing="calc(".concat(f,"px * var(--scale-factor) - 1ch)")}}else(n=document.createElement("div")).textContent=this.data.fieldValue,n.style.verticalAlign="middle",n.style.display="table-cell";return this._setTextStyle(n),this._setBackgroundColor(n),this._setDefaultPropertiesFromJS(n),this.container.append(n),this.container}}]),r}(G),q=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this,e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.exportValue===r.fieldValue}).value;"string"==typeof i&&(i="Off"!==i,e.setValue(n,{value:i})),this.container.className="buttonWidgetAnnotation checkBox";var a=document.createElement("input");return T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="checkbox",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.setAttribute("exportValue",r.exportValue),a.tabIndex=P,a.addEventListener("change",(function(i){var a,o=i.target,s=o.name,l=o.checked,u=g(t._getElementsByName(s,n));try{for(u.s();!(a=u.n()).done;){var c=a.value,h=l&&c.exportValue===r.exportValue;c.domElement&&(c.domElement.checked=h),e.setValue(c.id,{value:h})}}catch(t){u.e(t)}finally{u.f()}e.setValue(n,{value:l})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue||"Off";t.target.checked=e===r.exportValue})),this.enableScripting&&this.hasJSActions&&(a.addEventListener("updatefromsandbox",(function(r){var i={value:function(t){t.target.checked="Off"!==t.detail.value,e.setValue(n,{value:t.target.checked})}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))),this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),H=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="buttonWidgetAnnotation radioButton";var e=this.annotationStorage,r=this.data,n=r.id,i=e.getValue(n,{value:r.fieldValue===r.buttonValue}).value;"string"==typeof i&&(i=i!==r.buttonValue,e.setValue(n,{value:i}));var a=document.createElement("input");if(T.add(a),a.setAttribute("data-element-id",n),a.disabled=r.readOnly,this._setRequired(a,this.data.required),a.type="radio",a.name=r.fieldName,i&&a.setAttribute("checked",!0),a.tabIndex=P,a.addEventListener("change",(function(r){var i,a=r.target,o=a.name,s=a.checked,l=g(t._getElementsByName(o,n));try{for(l.s();!(i=l.n()).done;){var u=i.value;e.setValue(u.id,{value:!1})}}catch(t){l.e(t)}finally{l.f()}e.setValue(n,{value:s})})),a.addEventListener("resetform",(function(t){var e=r.defaultFieldValue;t.target.checked=null!=e&&e===r.buttonValue})),this.enableScripting&&this.hasJSActions){var o=r.buttonValue;a.addEventListener("updatefromsandbox",(function(r){var i={value:function(r){var i,a=o===r.detail.value,s=g(t._getElementsByName(r.target.name));try{for(s.s();!(i=s.n()).done;){var l=i.value,u=a&&l.id===n;l.domElement&&(l.domElement.checked=u),e.setValue(l.id,{value:u})}}catch(t){s.e(t)}finally{s.f()}}};t._dispatchEventFromSandbox(i,r)})),this._setEventListeners(a,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],(function(t){return t.target.checked}))}return this._setBackgroundColor(a),this._setDefaultPropertiesFromJS(a),this.container.append(a),this.container}}]),r}(G),z=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{ignoreBorder:t.data.hasAppearance})}return x(r,[{key:"render",value:function(){var t=this,e=u(v(r.prototype),"render",this).call(this);e.className="buttonWidgetAnnotation pushButton",this.data.alternativeText&&(e.title=this.data.alternativeText);var n=e.lastChild;return this.enableScripting&&this.hasJSActions&&n&&(this._setDefaultPropertiesFromJS(n),n.addEventListener("updatefromsandbox",(function(e){t._dispatchEventFromSandbox({},e)}))),e}}]),r}(I),V=function(t){h(r,t);var e=d(r);function r(t){return k(this,r),e.call(this,t,{isRenderable:t.renderForms})}return x(r,[{key:"render",value:function(){var t=this;this.container.className="choiceWidgetAnnotation";var e=this.annotationStorage,r=this.data.id,n=e.getValue(r,{value:this.data.fieldValue}),i=document.createElement("select");T.add(i),i.setAttribute("data-element-id",r),i.disabled=this.data.readOnly,this._setRequired(i,this.data.required),i.name=this.data.fieldName,i.tabIndex=P;var a=this.data.combo&&this.data.options.length>0;this.data.combo||(i.size=this.data.options.length,this.data.multiSelect&&(i.multiple=!0)),i.addEventListener("resetform",(function(e){var r,n=t.data.defaultFieldValue,a=g(i.options);try{for(a.s();!(r=a.n()).done;){var o=r.value;o.selected=o.value===n}}catch(t){a.e(t)}finally{a.f()}}));var o,s=g(this.data.options);try{for(s.s();!(o=s.n()).done;){var l=o.value,u=document.createElement("option");u.textContent=l.displayValue,u.value=l.exportValue,n.value.includes(l.exportValue)&&(u.setAttribute("selected",!0),a=!1),i.append(u)}}catch(t){s.e(t)}finally{s.f()}var c=null;if(a){var h=document.createElement("option");h.value=" ",h.setAttribute("hidden",!0),h.setAttribute("selected",!0),i.prepend(h),c=function(){h.remove(),i.removeEventListener("input",c),c=null},i.addEventListener("input",c)}var f=function(t){var e=t?"value":"textContent",r=i.options;return i.multiple?Array.prototype.filter.call(r,(function(t){return t.selected})).map((function(t){return t[e]})):-1===r.selectedIndex?null:r[r.selectedIndex][e]},d=f(!1),p=function(t){var e=t.target.options;return Array.prototype.map.call(e,(function(t){return{displayValue:t.textContent,exportValue:t.value}}))};return this.enableScripting&&this.hasJSActions?(i.addEventListener("updatefromsandbox",(function(n){var a={value:function(t){var n;null===(n=c)||void 0===n||n();var a,o=t.detail.value,s=new Set(Array.isArray(o)?o:[o]),l=g(i.options);try{for(l.s();!(a=l.n()).done;){var u=a.value;u.selected=s.has(u.value)}}catch(t){l.e(t)}finally{l.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},multipleSelection:function(t){i.multiple=!0},remove:function(t){var n=i.options,a=t.detail.remove;if(n[a].selected=!1,i.remove(a),n.length>0){var o=Array.prototype.findIndex.call(n,(function(t){return t.selected}));-1===o&&(n[0].selected=!0)}e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},clear:function(t){for(;0!==i.length;)i.remove(0);e.setValue(r,{value:null,items:[]}),d=f(!1)},insert:function(t){var n=t.detail.insert,a=n.index,o=n.displayValue,s=n.exportValue,l=i.children[a],u=document.createElement("option");u.textContent=o,u.value=s,l?l.before(u):i.append(u),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},items:function(t){for(var n=t.detail.items;0!==i.length;)i.remove(0);var a,o=g(n);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.displayValue,u=s.exportValue,c=document.createElement("option");c.textContent=l,c.value=u,i.append(c)}}catch(t){o.e(t)}finally{o.f()}i.options.length>0&&(i.options[0].selected=!0),e.setValue(r,{value:f(!0),items:p(t)}),d=f(!1)},indices:function(t){var n,i=new Set(t.detail.indices),a=g(t.target.options);try{for(a.s();!(n=a.n()).done;){var o=n.value;o.selected=i.has(o.index)}}catch(t){a.e(t)}finally{a.f()}e.setValue(r,{value:f(!0)}),d=f(!1)},editable:function(t){t.target.disabled=!t.detail.editable}};t._dispatchEventFromSandbox(a,n)})),i.addEventListener("input",(function(n){var i,a=f(!0);e.setValue(r,{value:a}),n.preventDefault(),null===(i=t.linkService.eventBus)||void 0===i||i.dispatch("dispatcheventinsandbox",{source:t,detail:{id:r,name:"Keystroke",value:d,changeEx:a,willCommit:!1,commitKey:1,keyDown:!1}})})),this._setEventListeners(i,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"]],(function(t){return t.target.checked}))):i.addEventListener("input",(function(t){e.setValue(r,{value:f(!0)})})),this.data.combo&&this._setTextStyle(i),this._setBackgroundColor(i),this._setDefaultPropertiesFromJS(i),this.container.append(i),this.container}}]),r}(G),X=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=t.data,s=!r.IGNORE_TYPES.has(o.parentType)&&!!(null!==(n=o.titleObj)&&void 0!==n&&n.str||null!==(i=o.contentsObj)&&void 0!==i&&i.str||null!==(a=o.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:s})}return x(r,[{key:"render",value:function(){this.container.className="popupAnnotation";var t=this.layer.querySelectorAll('[data-annotation-id="'.concat(this.data.parentId,'"]'));if(0===t.length)return this.container;var e=new Y({container:this.container,trigger:Array.from(t),color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText}),r=this.page,i=n.Util.normalizeRect([this.data.parentRect[0],r.view[3]-this.data.parentRect[1]+r.view[1],this.data.parentRect[2],r.view[3]-this.data.parentRect[3]+r.view[1]]),a=i[0]+this.data.parentRect[2]-this.data.parentRect[0],o=i[1],s=this.viewport.rawDims,l=s.pageWidth,u=s.pageHeight,c=s.pageX,h=s.pageY;return this.container.style.left="".concat(100*(a-c)/l,"%"),this.container.style.top="".concat(100*(o-h)/u,"%"),this.container.append(e.render()),this.container}}]),r}(F);D=X,N="IGNORE_TYPES",U=new Set(["Line","Square","Circle","PolyLine","Polygon","Ink"]),(N=E(N))in D?Object.defineProperty(D,N,{value:U,enumerable:!0,configurable:!0,writable:!0}):D[N]=U;var Y=function(){function t(e){k(this,t),this.container=e.container,this.trigger=e.trigger,this.color=e.color,this.titleObj=e.titleObj,this.modificationDate=e.modificationDate,this.contentsObj=e.contentsObj,this.richText=e.richText,this.hideWrapper=e.hideWrapper||!1,this.pinned=!1}return x(t,[{key:"render",value:function(){var t,e,r=document.createElement("div");r.className="popupWrapper",this.hideElement=this.hideWrapper?r:this.container,this.hideElement.hidden=!0;var a=document.createElement("div");a.className="popup";var o=this.color;if(o){var l=.7*(255-o[0])+o[0],u=.7*(255-o[1])+o[1],c=.7*(255-o[2])+o[2];a.style.backgroundColor=n.Util.makeHexColor(0|l,0|u,0|c)}var h=document.createElement("h1");h.dir=this.titleObj.dir,h.textContent=this.titleObj.str,a.append(h);var f=i.PDFDateString.toDateObject(this.modificationDate);if(f){var d=document.createElement("span");d.className="popupDate",d.textContent="{{date}}, {{time}}",d.dataset.l10nId="annotation_date_string",d.dataset.l10nArgs=JSON.stringify({date:f.toLocaleDateString(),time:f.toLocaleTimeString()}),a.append(d)}if(null===(t=this.richText)||void 0===t||!t.str||null!==(e=this.contentsObj)&&void 0!==e&&e.str&&this.contentsObj.str!==this.richText.str){var p=this._formatContents(this.contentsObj);a.append(p)}else s.XfaLayer.render({xfaHtml:this.richText.html,intent:"richText",div:a}),a.lastChild.className="richText popupContent";Array.isArray(this.trigger)||(this.trigger=[this.trigger]);var v,y=g(this.trigger);try{for(y.s();!(v=y.n()).done;){var m=v.value;m.addEventListener("click",this._toggle.bind(this)),m.addEventListener("mouseover",this._show.bind(this,!1)),m.addEventListener("mouseout",this._hide.bind(this,!1))}}catch(t){y.e(t)}finally{y.f()}return a.addEventListener("click",this._hide.bind(this,!0)),r.append(a),r}},{key:"_formatContents",value:function(t){var e=t.str,r=t.dir,n=document.createElement("p");n.className="popupContent",n.dir=r;for(var i=e.split(/(?:\\r\\n?|\\n)/),a=0,o=i.length;a0&&void 0!==arguments[0]&&arguments[0]&&(this.pinned=!0),this.hideElement.hidden&&(this.hideElement.hidden=!1,this.container.style.zIndex=parseInt(this.container.style.zIndex)+1e3)}},{key:"_hide",value:function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.pinned=!1),this.hideElement.hidden||this.pinned||(this.hideElement.hidden=!0,this.container.style.zIndex=parseInt(this.container.style.zIndex)-1e3)}}]),t}(),K=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).textContent=t.data.textContent,o}return x(r,[{key:"render",value:function(){if(this.container.className="freeTextAnnotation",this.textContent){var t=document.createElement("div");t.className="annotationTextContent",t.setAttribute("role","comment");var e,r=g(this.textContent);try{for(r.s();!(e=r.n()).done;){var n=e.value,i=document.createElement("span");i.textContent=n,t.append(i)}}catch(t){r.e(t)}finally{r.f()}this.container.append(t)}return this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),J=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="lineAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=this.svgFactory.createElement("svg:line");return a.setAttribute("x1",t.rect[2]-t.lineCoordinates[0]),a.setAttribute("y1",t.rect[3]-t.lineCoordinates[1]),a.setAttribute("x2",t.rect[2]-t.lineCoordinates[2]),a.setAttribute("y2",t.rect[3]-t.lineCoordinates[3]),a.setAttribute("stroke-width",t.borderStyle.width||1),a.setAttribute("stroke","transparent"),a.setAttribute("fill","transparent"),i.append(a),this.container.append(i),this._createPopup(a,t),this.container}}]),r}(F),Q=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="squareAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:rect");return o.setAttribute("x",a/2),o.setAttribute("y",a/2),o.setAttribute("width",r-a),o.setAttribute("height",n-a),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),$=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){this.container.className="circleAnnotation";var t=this.data,e=C(t.rect),r=e.width,n=e.height,i=this.svgFactory.create(r,n,!0),a=t.borderStyle.width,o=this.svgFactory.createElement("svg:ellipse");return o.setAttribute("cx",r/2),o.setAttribute("cy",n/2),o.setAttribute("rx",r/2-a/2),o.setAttribute("ry",n/2-a/2),o.setAttribute("stroke-width",a||1),o.setAttribute("stroke","transparent"),o.setAttribute("fill","transparent"),i.append(o),this.container.append(i),this._createPopup(o,t),this.container}}]),r}(F),Z=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="polylineAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=[],s=g(e.vertices);try{for(s.s();!(t=s.n()).done;){var l=t.value,u=l.x-e.rect[0],c=e.rect[3]-l.y;o.push(u+","+c)}}catch(t){s.e(t)}finally{s.f()}o=o.join(" ");var h=this.svgFactory.createElement(this.svgElementName);return h.setAttribute("points",o),h.setAttribute("stroke-width",e.borderStyle.width||1),h.setAttribute("stroke","transparent"),h.setAttribute("fill","transparent"),a.append(h),this.container.append(a),this._createPopup(h,e),this.container}}]),r}(F),tt=function(t){h(r,t);var e=d(r);function r(t){var n;return k(this,r),(n=e.call(this,t)).containerClassName="polygonAnnotation",n.svgElementName="svg:polygon",n}return x(r)}(Z),et=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="caretAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),rt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a,o;k(this,r);var s=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return(o=e.call(this,t,{isRenderable:s,ignoreBorder:!0})).containerClassName="inkAnnotation",o.svgElementName="svg:polyline",o}return x(r,[{key:"render",value:function(){this.container.className=this.containerClassName;var t,e=this.data,r=C(e.rect),n=r.width,i=r.height,a=this.svgFactory.create(n,i,!0),o=g(e.inkLists);try{for(o.s();!(t=o.n()).done;){var s,l=t.value,u=[],c=g(l);try{for(c.s();!(s=c.n()).done;){var h=s.value,f=h.x-e.rect[0],d=e.rect[3]-h.y;u.push("".concat(f,",").concat(d))}}catch(t){c.e(t)}finally{c.f()}u=u.join(" ");var p=this.svgFactory.createElement(this.svgElementName);p.setAttribute("points",u),p.setAttribute("stroke-width",e.borderStyle.width||1),p.setAttribute("stroke","transparent"),p.setAttribute("fill","transparent"),this._createPopup(p,e),a.append(p)}}catch(t){o.e(t)}finally{o.f()}return this.container.append(a),this.container}}]),r}(F),nt=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("highlightAnnotation"):(this.container.className="highlightAnnotation",this.container)}}]),r}(F),it=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("underlineAnnotation"):(this.container.className="underlineAnnotation",this.container)}}]),r}(F),at=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("squigglyAnnotation"):(this.container.className="squigglyAnnotation",this.container)}}]),r}(F),ot=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0,createQuadrilaterals:!0})}return x(r,[{key:"render",value:function(){return this.data.hasPopup||this._createPopup(null,this.data),this.quadrilaterals?this._renderQuadrilaterals("strikeoutAnnotation"):(this.container.className="strikeoutAnnotation",this.container)}}]),r}(F),st=function(t){h(r,t);var e=d(r);function r(t){var n,i,a;k(this,r);var o=!!(t.data.hasPopup||null!==(n=t.data.titleObj)&&void 0!==n&&n.str||null!==(i=t.data.contentsObj)&&void 0!==i&&i.str||null!==(a=t.data.richText)&&void 0!==a&&a.str);return e.call(this,t,{isRenderable:o,ignoreBorder:!0})}return x(r,[{key:"render",value:function(){return this.container.className="stampAnnotation",this.data.hasPopup||this._createPopup(null,this.data),this.container}}]),r}(F),lt=function(t){h(r,t);var e=d(r);function r(t){var n,a;k(this,r);var o=(a=e.call(this,t,{isRenderable:!0})).data.file,s=o.filename,l=o.content;return a.filename=(0,i.getFilenameFromUrl)(s,!0),a.content=l,null===(n=a.linkService.eventBus)||void 0===n||n.dispatch("fileattachmentannotation",{source:p(a),filename:s,content:l}),a}return x(r,[{key:"render",value:function(){var t,e,r;return this.container.className="fileAttachmentAnnotation",this.data.hasAppearance?r=document.createElement("div"):(r=document.createElement("img")).src="".concat(this.imageResourcesPath,"annotation-").concat(/paperclip/i.test(this.data.name)?"paperclip":"pushpin",".svg"),r.className="popupTriggerArea",r.addEventListener("dblclick",this._download.bind(this)),!this.data.hasPopup&&(null!==(t=this.data.titleObj)&&void 0!==t&&t.str||null!==(e=this.data.contentsObj)&&void 0!==e&&e.str||this.data.richText)&&this._createPopup(r,this.data),this.container.append(r),this.container}},{key:"_download",value:function(){var t;null===(t=this.downloadManager)||void 0===t||t.openOrDownloadData(this.container,this.content,this.filename)}}]),r}(F),ut=function(){function t(){k(this,t)}return x(t,null,[{key:"render",value:function(e){var r=e.annotations,o=e.div,s=e.viewport,u=e.accessibilityManager;(0,i.setLayerDimensions)(o,s);var c,h={data:null,layer:o,page:e.page,viewport:s,linkService:e.linkService,downloadManager:e.downloadManager,imageResourcesPath:e.imageResourcesPath||"",renderForms:!1!==e.renderForms,svgFactory:new i.DOMSVGFactory,annotationStorage:e.annotationStorage||new a.AnnotationStorage,enableScripting:!0===e.enableScripting,hasJSActions:e.hasJSActions,fieldObjects:e.fieldObjects},f=0,d=g(r);try{for(d.s();!(c=d.n()).done;){var p=c.value;if(p.annotationType!==n.AnnotationType.POPUP){var v=C(p.rect),y=v.width,m=v.height;if(y<=0||m<=0)continue}h.data=p;var b=O.create(h);if(b.isRenderable){var _=b.render();if(p.hidden&&(_.style.visibility="hidden"),Array.isArray(_)){var w,A=g(_);try{for(A.s();!(w=A.n()).done;){var k=w.value;k.style.zIndex=f++,l(t,t,ct).call(t,k,p.id,o,u)}}catch(t){A.e(t)}finally{A.f()}}else _.style.zIndex=f++,b instanceof X?o.prepend(_):l(t,t,ct).call(t,_,p.id,o,u)}}}catch(t){d.e(t)}finally{d.f()}l(this,t,ht).call(this,o,e.annotationCanvasMap)}},{key:"update",value:function(e){var r=e.annotationCanvasMap,n=e.div,a=e.viewport;(0,i.setLayerDimensions)(n,{rotation:a.rotation}),l(this,t,ht).call(this,n,r),n.hidden=!1}}]),t}();function ct(t,e,r,n){var a=t.firstChild||t;a.id="".concat(i.AnnotationPrefix).concat(e),r.append(t),null==n||n.moveElementInDOM(r,t,a,!1)}function ht(t,e){if(e){var r,n=g(e);try{for(n.s();!(r=n.n()).done;){var i=b(r.value,2),a=i[0],o=i[1],s=t.querySelector('[data-annotation-id="'.concat(a,'"]'));if(s){var l=s.firstChild;l?"CANVAS"===l.nodeName?l.replaceWith(o):l.before(o):s.append(o)}}}catch(t){n.e(t)}finally{n.f()}e.clear()}}e.AnnotationLayer=ut},(t,e)=>{function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.XfaLayer=void 0;var n=r(149);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||s(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=s(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){l=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0;){var d,p,v=a(u.at(-1),3),y=v[0],m=v[1],g=v[2];if(m+1!==y.children.length){var b=y.children[++u.at(-1)[1]];if(null!==b){var _=b.name;if("#text"!==_){var w=void 0;if(w=null!==(d=b)&&void 0!==d&&null!==(p=d.attributes)&&void 0!==p&&p.xmlns?document.createElementNS(b.attributes.xmlns,_):document.createElement(_),g.append(w),b.attributes&&this.setAttributes({html:w,element:b,storage:e,intent:s,linkService:r}),b.children&&b.children.length>0)u.push([b,-1,w]);else if(b.value){var A=document.createTextNode(b.value);n.XfaText.shouldBuildText(_)&&f.push(A),w.append(A)}}else{var k=document.createTextNode(b.value);f.push(k),g.append(k)}}}else u.pop()}var S,x=o(c.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"));try{for(x.s();!(S=x.n()).done;)S.value.setAttribute("readOnly",!0)}catch(t){x.e(t)}finally{x.f()}return{textDivs:f}}},{key:"update",value:function(t){var e="matrix(".concat(t.viewport.transform.join(","),")");t.div.style.transform=e,t.div.hidden=!1}}],null&&u(e.prototype,null),r&&u(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();e.XfaLayer=c},(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.SVGGraphics=void 0;var i=r(137),a=r(1),o=r(3);function s(t){return function(t){if(Array.isArray(t))return h(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||c(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||c(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=c(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function c(t,e){if(t){if("string"==typeof t)return h(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(t,e):void 0}}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(URL.createObjectURL&&"undefined"!=typeof Blob&&!r)return URL.createObjectURL(new Blob([t],{type:e}));for(var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="data:".concat(e,";base64,"),a=0,o=t.length;a>2]+n[(3&s)<<4|l>>4]+n[a+1>6:64]+n[a+2>1&2147483647:n>>1&2147483647;e[r]=n}function s(t,r,n,i){var a=i,o=r.length;n[a]=o>>24&255,n[a+1]=o>>16&255,n[a+2]=o>>8&255,n[a+3]=255&o,n[a+=4]=255&t.charCodeAt(0),n[a+1]=255&t.charCodeAt(1),n[a+2]=255&t.charCodeAt(2),n[a+3]=255&t.charCodeAt(3),a+=4,n.set(r,a);var s=function(t,r,n){for(var i=-1,a=r;a>>8^e[o]}return-1^i}(n,i+4,a+=r.length);n[a]=s>>24&255,n[a+1]=s>>16&255,n[a+2]=s>>8&255,n[a+3]=255&s}function l(t){var e=t.length,r=65535,n=Math.ceil(e/r),i=new Uint8Array(2+e+5*n+4),a=0;i[a++]=120,i[a++]=156;for(var o=0;e>r;)i[a++]=0,i[a++]=255,i[a++]=255,i[a++]=0,i[a++]=0,i.set(t.subarray(o,o+r),a),a+=r,o+=r,e-=r;i[a++]=1,i[a++]=255&e,i[a++]=e>>8&255,i[a++]=255&~e,i[a++]=(65535&~e)>>8&255,i.set(t.subarray(o),a),a+=t.length-o;var s=function(t,e,r){for(var n=1,i=0,a=0;a>24&255,i[a++]=s>>16&255,i[a++]=s>>8&255,i[a++]=255&s,i}return function(e,r,n){return function(e,r,n,i){var u,c,h,f=e.width,d=e.height,p=e.data;switch(r){case a.ImageKind.GRAYSCALE_1BPP:c=0,u=1,h=f+7>>3;break;case a.ImageKind.RGB_24BPP:c=2,u=8,h=3*f;break;case a.ImageKind.RGBA_32BPP:c=6,u=8,h=4*f;break;default:throw new Error("invalid format")}for(var v=new Uint8Array((1+h)*d),y=0,m=0,g=0;g>24&255,f>>16&255,f>>8&255,255&f,d>>24&255,d>>16&255,d>>8&255,255&d,u,c,0,0,0]),A=function(t){if(!o.isNodeJS)return l(t);try{var e;e=parseInt(process.versions.node)>=8?t:Buffer.from(t);var r=require("zlib").deflateSync(e,{level:9});return r instanceof Uint8Array?r:new Uint8Array(r)}catch(t){(0,a.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+t)}return l(t)}(v),S=t.length+36+w.length+A.length,x=new Uint8Array(S),E=0;return x.set(t,E),s("IHDR",w,x,E+=t.length),s("IDATA",A,x,E+=12+w.length),E+=12+A.length,s("IEND",new Uint8Array(0),x,E),k(x,"image/png",n)}(e,void 0===e.kind?a.ImageKind.GRAYSCALE_1BPP:e.kind,r,n)}}(),x=function(){function t(){p(this,t),this.fontSizeScale=1,this.fontWeight=b,this.fontSize=0,this.textMatrix=a.IDENTITY_MATRIX,this.fontMatrix=a.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=a.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=_,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}return d(t,[{key:"clone",value:function(){return Object.create(this)}},{key:"setCurrentPoint",value:function(t,e){this.x=t,this.y=e}}]),t}(),E=0,P=0,T=0;e.SVGGraphics=v=function(){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var o in p(this,t),(0,i.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new i.DOMSVGFactory,this.current=new x,this.transformMatrix=a.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=e,this.objs=r,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!n,this._operatorIdMapping=[],a.OPS)this._operatorIdMapping[a.OPS[o]]=o}return d(t,[{key:"getObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"string"==typeof t?t.startsWith("g_")?this.commonObjs.get(t):this.objs.get(t):e}},{key:"save",value:function(){this.transformStack.push(this.transformMatrix);var t=this.current;this.extraStack.push(t),this.current=t.clone()}},{key:"restore",value:function(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}},{key:"group",value:function(t){this.save(),this.executeOpTree(t),this.restore()}},{key:"loadDependencies",value:function(t){for(var e=this,r=t.fnArray,n=t.argsArray,i=0,o=r.length;i0&&(this.current.lineWidth=t)}},{key:"setLineCap",value:function(t){this.current.lineCap=w[t]}},{key:"setLineJoin",value:function(t){this.current.lineJoin=A[t]}},{key:"setMiterLimit",value:function(t){this.current.miterLimit=t}},{key:"setStrokeAlpha",value:function(t){this.current.strokeAlpha=t}},{key:"setStrokeRGBColor",value:function(t,e,r){this.current.strokeColor=a.Util.makeHexColor(t,e,r)}},{key:"setFillAlpha",value:function(t){this.current.fillAlpha=t}},{key:"setFillRGBColor",value:function(t,e,r){this.current.fillColor=a.Util.makeHexColor(t,e,r),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}},{key:"setStrokeColorN",value:function(t){this.current.strokeColor=this._makeColorN_Pattern(t)}},{key:"setFillColorN",value:function(t){this.current.fillColor=this._makeColorN_Pattern(t)}},{key:"shadingFill",value:function(t){var e=this.viewport.width,r=this.viewport.height,n=a.Util.inverseTransform(this.transformMatrix),i=a.Util.applyTransform([0,0],n),o=a.Util.applyTransform([0,r],n),s=a.Util.applyTransform([e,0],n),l=a.Util.applyTransform([e,r],n),u=Math.min(i[0],o[0],s[0],l[0]),c=Math.min(i[1],o[1],s[1],l[1]),h=Math.max(i[0],o[0],s[0],l[0]),f=Math.max(i[1],o[1],s[1],l[1]),d=this.svgFactory.createElement("svg:rect");d.setAttributeNS(null,"x",u),d.setAttributeNS(null,"y",c),d.setAttributeNS(null,"width",h-u),d.setAttributeNS(null,"height",f-c),d.setAttributeNS(null,"fill",this._makeShadingPattern(t)),this.current.fillAlpha<1&&d.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(d)}},{key:"_makeColorN_Pattern",value:function(t){return"TilingPattern"===t[0]?this._makeTilingPattern(t):this._makeShadingPattern(t)}},{key:"_makeTilingPattern",value:function(t){var e=t[1],r=t[2],n=t[3]||a.IDENTITY_MATRIX,i=l(t[4],4),o=i[0],u=i[1],c=i[2],h=i[3],f=t[5],d=t[6],p=t[7],v="shading".concat(T++),y=l(a.Util.normalizeRect([].concat(s(a.Util.applyTransform([o,u],n)),s(a.Util.applyTransform([c,h],n)))),4),m=y[0],g=y[1],b=y[2],_=y[3],w=l(a.Util.singularValueDecompose2dScale(n),2),A=f*w[0],k=d*w[1],S=this.svgFactory.createElement("svg:pattern");S.setAttributeNS(null,"id",v),S.setAttributeNS(null,"patternUnits","userSpaceOnUse"),S.setAttributeNS(null,"width",A),S.setAttributeNS(null,"height",k),S.setAttributeNS(null,"x","".concat(m)),S.setAttributeNS(null,"y","".concat(g));var x=this.svg,E=this.transformMatrix,P=this.current.fillColor,C=this.current.strokeColor,O=this.svgFactory.create(b-m,_-g);if(this.svg=O,this.transformMatrix=n,2===p){var F=a.Util.makeHexColor.apply(a.Util,s(e));this.current.fillColor=F,this.current.strokeColor=F}return this.executeOpTree(this.convertOpList(r)),this.svg=x,this.transformMatrix=E,this.current.fillColor=P,this.current.strokeColor=C,S.append(O.childNodes[0]),this.defs.append(S),"url(#".concat(v,")")}},{key:"_makeShadingPattern",value:function(t){switch("string"==typeof t&&(t=this.objs.get(t)),t[0]){case"RadialAxial":var e,r="shading".concat(T++),n=t[3];switch(t[1]){case"axial":var i=t[4],o=t[5];(e=this.svgFactory.createElement("svg:linearGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"x1",i[0]),e.setAttributeNS(null,"y1",i[1]),e.setAttributeNS(null,"x2",o[0]),e.setAttributeNS(null,"y2",o[1]);break;case"radial":var s=t[4],l=t[5],c=t[6],h=t[7];(e=this.svgFactory.createElement("svg:radialGradient")).setAttributeNS(null,"id",r),e.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),e.setAttributeNS(null,"cx",l[0]),e.setAttributeNS(null,"cy",l[1]),e.setAttributeNS(null,"r",h),e.setAttributeNS(null,"fx",s[0]),e.setAttributeNS(null,"fy",s[1]),e.setAttributeNS(null,"fr",c);break;default:throw new Error("Unknown RadialAxial type: ".concat(t[1]))}var f,d=u(n);try{for(d.s();!(f=d.n()).done;){var p=f.value,v=this.svgFactory.createElement("svg:stop");v.setAttributeNS(null,"offset",p[0]),v.setAttributeNS(null,"stop-color",p[1]),e.append(v)}}catch(t){d.e(t)}finally{d.f()}return this.defs.append(e),"url(#".concat(r,")");case"Mesh":return(0,a.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error("Unknown IR type: ".concat(t[0]))}}},{key:"setDash",value:function(t,e){this.current.dashArray=t,this.current.dashPhase=e}},{key:"constructPath",value:function(t,e){var r,n=this.current,i=n.x,o=n.y,s=[],l=0,c=u(t);try{for(c.s();!(r=c.n()).done;)switch(0|r.value){case a.OPS.rectangle:i=e[l++],o=e[l++];var h=e[l++],f=e[l++],d=i+h,p=o+f;s.push("M",y(i),y(o),"L",y(d),y(o),"L",y(d),y(p),"L",y(i),y(p),"Z");break;case a.OPS.moveTo:i=e[l++],o=e[l++],s.push("M",y(i),y(o));break;case a.OPS.lineTo:i=e[l++],o=e[l++],s.push("L",y(i),y(o));break;case a.OPS.curveTo:i=e[l+4],o=e[l+5],s.push("C",y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3]),y(i),y(o)),l+=6;break;case a.OPS.curveTo2:s.push("C",y(i),y(o),y(e[l]),y(e[l+1]),y(e[l+2]),y(e[l+3])),i=e[l+2],o=e[l+3],l+=4;break;case a.OPS.curveTo3:i=e[l+2],o=e[l+3],s.push("C",y(e[l]),y(e[l+1]),y(i),y(o),y(i),y(o)),l+=4;break;case a.OPS.closePath:s.push("Z")}}catch(t){c.e(t)}finally{c.f()}s=s.join(" "),n.path&&t.length>0&&t[0]!==a.OPS.rectangle&&t[0]!==a.OPS.moveTo?s=n.path.getAttributeNS(null,"d")+s:(n.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(n.path)),n.path.setAttributeNS(null,"d",s),n.path.setAttributeNS(null,"fill","none"),n.element=n.path,n.setCurrentPoint(i,o)}},{key:"endPath",value:function(){var t=this.current;if(t.path=null,this.pendingClip)if(t.element){var e="clippath".concat(E++),r=this.svgFactory.createElement("svg:clipPath");r.setAttributeNS(null,"id",e),r.setAttributeNS(null,"transform",m(this.transformMatrix));var n=t.element.cloneNode(!0);if("evenodd"===this.pendingClip?n.setAttributeNS(null,"clip-rule","evenodd"):n.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,r.append(n),this.defs.append(r),t.activeClipUrl){t.clipGroup=null;var i,a=u(this.extraStack);try{for(a.s();!(i=a.n()).done;)i.value.clipGroup=null}catch(t){a.e(t)}finally{a.f()}r.setAttributeNS(null,"clip-path",t.activeClipUrl)}t.activeClipUrl="url(#".concat(e,")"),this.tgrp=null}else this.pendingClip=null}},{key:"clip",value:function(t){this.pendingClip=t}},{key:"closePath",value:function(){var t=this.current;if(t.path){var e="".concat(t.path.getAttributeNS(null,"d"),"Z");t.path.setAttributeNS(null,"d",e)}}},{key:"setLeading",value:function(t){this.current.leading=-t}},{key:"setTextRise",value:function(t){this.current.textRise=t}},{key:"setTextRenderingMode",value:function(t){this.current.textRenderingMode=t}},{key:"setHScale",value:function(t){this.current.textHScale=t/100}},{key:"setRenderingIntent",value:function(t){}},{key:"setFlatness",value:function(t){}},{key:"setGState",value:function(t){var e,r=u(t);try{for(r.s();!(e=r.n()).done;){var n=l(e.value,2),i=n[0],o=n[1];switch(i){case"LW":this.setLineWidth(o);break;case"LC":this.setLineCap(o);break;case"LJ":this.setLineJoin(o);break;case"ML":this.setMiterLimit(o);break;case"D":this.setDash(o[0],o[1]);break;case"RI":this.setRenderingIntent(o);break;case"FL":this.setFlatness(o);break;case"Font":this.setFont(o);break;case"CA":this.setStrokeAlpha(o);break;case"ca":this.setFillAlpha(o);break;default:(0,a.warn)("Unimplemented graphic state operator ".concat(i))}}}catch(t){r.e(t)}finally{r.f()}}},{key:"fill",value:function(){var t=this.current;t.element&&(t.element.setAttributeNS(null,"fill",t.fillColor),t.element.setAttributeNS(null,"fill-opacity",t.fillAlpha),this.endPath())}},{key:"stroke",value:function(){var t=this.current;t.element&&(this._setStrokeAttributes(t.element),t.element.setAttributeNS(null,"fill","none"),this.endPath())}},{key:"_setStrokeAttributes",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=this.current,n=r.dashArray;1!==e&&n.length>0&&(n=n.map((function(t){return e*t}))),t.setAttributeNS(null,"stroke",r.strokeColor),t.setAttributeNS(null,"stroke-opacity",r.strokeAlpha),t.setAttributeNS(null,"stroke-miterlimit",y(r.miterLimit)),t.setAttributeNS(null,"stroke-linecap",r.lineCap),t.setAttributeNS(null,"stroke-linejoin",r.lineJoin),t.setAttributeNS(null,"stroke-width",y(e*r.lineWidth)+"px"),t.setAttributeNS(null,"stroke-dasharray",n.map(y).join(" ")),t.setAttributeNS(null,"stroke-dashoffset",y(e*r.dashPhase)+"px")}},{key:"eoFill",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}},{key:"fillStroke",value:function(){this.stroke(),this.fill()}},{key:"eoFillStroke",value:function(){var t;null===(t=this.current.element)||void 0===t||t.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}},{key:"closeStroke",value:function(){this.closePath(),this.stroke()}},{key:"closeFillStroke",value:function(){this.closePath(),this.fillStroke()}},{key:"closeEOFillStroke",value:function(){this.closePath(),this.eoFillStroke()}},{key:"paintSolidColorImageMask",value:function(){var t=this.svgFactory.createElement("svg:rect");t.setAttributeNS(null,"x","0"),t.setAttributeNS(null,"y","0"),t.setAttributeNS(null,"width","1px"),t.setAttributeNS(null,"height","1px"),t.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(t)}},{key:"paintImageXObject",value:function(t){var e=this.getObject(t);e?this.paintInlineImageXObject(e):(0,a.warn)("Dependent image with object ID ".concat(t," is not ready yet"))}},{key:"paintInlineImageXObject",value:function(t,e){var r=t.width,n=t.height,i=S(t,this.forceDataSchema,!!e),a=this.svgFactory.createElement("svg:rect");a.setAttributeNS(null,"x","0"),a.setAttributeNS(null,"y","0"),a.setAttributeNS(null,"width",y(r)),a.setAttributeNS(null,"height",y(n)),this.current.element=a,this.clip("nonzero");var o=this.svgFactory.createElement("svg:image");o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i),o.setAttributeNS(null,"x","0"),o.setAttributeNS(null,"y",y(-n)),o.setAttributeNS(null,"width",y(r)+"px"),o.setAttributeNS(null,"height",y(n)+"px"),o.setAttributeNS(null,"transform","scale(".concat(y(1/r)," ").concat(y(-1/n),")")),e?e.append(o):this._ensureTransformGroup().append(o)}},{key:"paintImageMaskXObject",value:function(t){var e=this.getObject(t.data,t);if(e.bitmap)(0,a.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the \`isOffscreenCanvasSupported\` API parameter is disabled.");else{var r=this.current,n=e.width,i=e.height,o=r.fillColor;r.maskId="mask".concat(P++);var s=this.svgFactory.createElement("svg:mask");s.setAttributeNS(null,"id",r.maskId);var l=this.svgFactory.createElement("svg:rect");l.setAttributeNS(null,"x","0"),l.setAttributeNS(null,"y","0"),l.setAttributeNS(null,"width",y(n)),l.setAttributeNS(null,"height",y(i)),l.setAttributeNS(null,"fill",o),l.setAttributeNS(null,"mask","url(#".concat(r.maskId,")")),this.defs.append(s),this._ensureTransformGroup().append(l),this.paintInlineImageXObject(e,s)}}},{key:"paintFormXObjectBegin",value:function(t,e){if(Array.isArray(t)&&6===t.length&&this.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e){var r=e[2]-e[0],n=e[3]-e[1],i=this.svgFactory.createElement("svg:rect");i.setAttributeNS(null,"x",e[0]),i.setAttributeNS(null,"y",e[1]),i.setAttributeNS(null,"width",y(r)),i.setAttributeNS(null,"height",y(n)),this.current.element=i,this.clip("nonzero"),this.endPath()}}},{key:"paintFormXObjectEnd",value:function(){}},{key:"_initialize",value:function(t){var e=this.svgFactory.create(t.width,t.height),r=this.svgFactory.createElement("svg:defs");e.append(r),this.defs=r;var n=this.svgFactory.createElement("svg:g");return n.setAttributeNS(null,"transform",m(t.transform)),e.append(n),this.svg=n,e}},{key:"_ensureClipGroup",value:function(){if(!this.current.clipGroup){var t=this.svgFactory.createElement("svg:g");t.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(t),this.current.clipGroup=t}return this.current.clipGroup}},{key:"_ensureTransformGroup",value:function(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",m(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNodeStream=void 0;var n=r(1),i=r(162);function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&o(t,e)}function o(t,e){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=l(t);if(e){var i=l(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return function(t,e){if(e&&("object"===f(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(this,r)}}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(){u=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function c(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var d={};function p(){}function v(){}function y(){}var m={};l(m,a,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,a)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=h(t[n],t,a);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==f(c)&&r.call(c,"__await")?e.resolve(c.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(c).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=h(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=h(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function c(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function h(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function o(t){c(a,n,i,o,s,"next",t)}function s(t){c(a,n,i,o,s,"throw",t)}o(void 0)}))}}function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNodeStream=A;var k=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null;var r=e.source;this._contentLength=r.length,this._loaded=0,this._filename=null,this._disableRange=r.disableRange||!1,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!r.disableStream,this._isRangeSupported=!r.disableRange,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)(),this._headersCapability=(0,n.createPromiseCapability)()}var e;return y(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new n.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}(),S=function(){function t(e){p(this,t),this._url=e.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=(0,n.createPromiseCapability)();var r=e.source;this._isStreamingSupported=!r.disableStream}var e;return y(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=h(u().mark((function t(){var e,r,i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:if(!this._done){t.next=4;break}return t.abrupt("return",{value:void 0,done:!0});case 4:if(!this._storedError){t.next=6;break}throw this._storedError;case 6:if(null!==(r=this._readableStream.read())){t.next=10;break}return this._readCapability=(0,n.createPromiseCapability)(),t.abrupt("return",this.read());case 10:return this._loaded+=r.length,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),i=new Uint8Array(r).buffer,t.abrupt("return",{value:i,done:!1});case 14:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._readableStream?this._readableStream.destroy(t):this._error(t)}},{key:"_error",value:function(t){this._storedError=t,this._readCapability.resolve()}},{key:"_setReadableStream",value:function(t){var e=this;this._readableStream=t,t.on("readable",(function(){e._readCapability.resolve()})),t.on("end",(function(){t.destroy(),e._done=!0,e._readCapability.resolve()})),t.on("error",(function(t){e._error(t)})),this._storedError&&this._readableStream.destroy(this._storedError)}}]),t}();function x(t,e){return{protocol:t.protocol,auth:t.auth,host:t.hostname,port:t.port,path:t.path,method:"GET",headers:e}}var E=function(t){a(r,t);var e=s(r);function r(t){var a;p(this,r);var o=function(e){if(404===e.statusCode){var r=new n.MissingPDFException('Missing PDF "'.concat(a._url,'".'));return a._storedError=r,void a._headersCapability.reject(r)}a._headersCapability.resolve(),a._setReadableStream(e);var o=function(t){return a._readableStream.headers[t.toLowerCase()]},s=(0,i.validateRangeRequestCapabilities)({getResponseHeader:o,isHttp:t.isHttp,rangeChunkSize:a._rangeChunkSize,disableRange:a._disableRange}),l=s.allowRangeRequests,u=s.suggestedLength;a._isRangeSupported=l,a._contentLength=u||a._contentLength,a._filename=(0,i.extractFilenameFromHeader)(o)};return(a=e.call(this,t))._request=null,"http:"===a._url.protocol?a._request=g.request(x(a._url,t.httpHeaders),o):a._request=b.request(x(a._url,t.httpHeaders),o),a._request.on("error",(function(t){a._storedError=t,a._headersCapability.reject(t)})),a._request.end(),a}return y(r)}(k),P=function(t){a(r,t);var e=s(r);function r(t,i,a){var o;for(var s in p(this,r),(o=e.call(this,t))._httpHeaders={},t.httpHeaders){var l=t.httpHeaders[s];void 0!==l&&(o._httpHeaders[s]=l)}o._httpHeaders.Range="bytes=".concat(i,"-").concat(a-1);var u=function(t){if(404!==t.statusCode)o._setReadableStream(t);else{var e=new n.MissingPDFException('Missing PDF "'.concat(o._url,'".'));o._storedError=e}};return o._request=null,"http:"===o._url.protocol?o._request=g.request(x(o._url,o._httpHeaders),u):o._request=b.request(x(o._url,o._httpHeaders),u),o._request.on("error",(function(t){o._storedError=t})),o._request.end(),o}return y(r)}(S),T=function(t){a(r,t);var e=s(r);function r(t){var i;p(this,r),i=e.call(this,t);var a=decodeURIComponent(i._url.path);return w.test(i._url.href)&&(a=a.replace(/^\\//,"")),m.lstat(a,(function(t,e){if(t)return"ENOENT"===t.code&&(t=new n.MissingPDFException('Missing PDF "'.concat(a,'".'))),i._storedError=t,void i._headersCapability.reject(t);i._contentLength=e.size,i._setReadableStream(m.createReadStream(a)),i._headersCapability.resolve()})),i}return y(r)}(k),C=function(t){a(r,t);var e=s(r);function r(t,n,i){var a;p(this,r),a=e.call(this,t);var o=decodeURIComponent(a._url.path);return w.test(a._url.href)&&(o=o.replace(/^\\//,"")),a._setReadableStream(m.createReadStream(o,{start:n,end:i-1})),a}return y(r)}(S)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.createResponseStatusError=function(t,e){return 404===t||0===t&&e.startsWith("file:")?new n.MissingPDFException('Missing PDF "'+e+'".'):new n.UnexpectedResponseException("Unexpected server response (".concat(t,') while retrieving PDF "').concat(e,'".'),t)},e.extractFilenameFromHeader=function(t){var e=t("Content-Disposition");if(e){var r=(0,i.getFilenameFromContentDispositionHeader)(e);if(r.includes("%"))try{r=decodeURIComponent(r)}catch(t){}if((0,a.isPdfFile)(r))return r}return null},e.validateRangeRequestCapabilities=function(t){var e=t.getResponseHeader,r=t.isHttp,n=t.rangeChunkSize,i=t.disableRange,a={allowRangeRequests:!1,suggestedLength:void 0},o=parseInt(e("Content-Length"),10);return Number.isInteger(o)?(a.suggestedLength=o,o<=2*n||i||!r||"bytes"!==e("Accept-Ranges")||"identity"!==(e("Content-Encoding")||"identity")||(a.allowRangeRequests=!0),a):a},e.validateResponseStatus=function(t){return 200===t||206===t};var n=r(1),i=r(163),a=r(137)},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.getFilenameFromContentDispositionHeader=function(t){var e=!0,r=s("filename\\\\*","i").exec(t);if(r){var a=c(r=r[1]);return u(a=f(a=h(a=unescape(a))))}if(r=function(t){for(var e,r=[],n=s("filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)","ig");null!==(e=n.exec(t));){var a=i(e,4),o=a[1],l=a[2],u=a[3];if((o=parseInt(o,10))in r){if(0===o)break}else r[o]=[l,u]}for(var f=[],d=0;dt.length)&&(e=t.length);for(var r=0,n=new Array(e);r{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFNetworkStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};u(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var l=f(t[n],t,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==c(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,s)}))}s(l.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{};h(this,t),this.url=e,this.isHttp=/^https?:/i.test(e),this.httpHeaders=this.isHttp&&r.httpHeaders||Object.create(null),this.withCredentials=r.withCredentials||!1,this.getXhr=r.getXhr||function(){return new XMLHttpRequest},this.currXhrId=0,this.pendingRequests=Object.create(null)}return d(t,[{key:"requestRange",value:function(t,e,r){var n={begin:t,end:e};for(var i in r)n[i]=r[i];return this.request(n)}},{key:"requestFull",value:function(t){return this.request(t)}},{key:"request",value:function(t){var e=this.getXhr(),r=this.currXhrId++,n=this.pendingRequests[r]={xhr:e};for(var i in e.open("GET",this.url, !0),e.withCredentials=this.withCredentials,this.httpHeaders){var a=this.httpHeaders[i];void 0!==a&&e.setRequestHeader(i,a)}return this.isHttp&&"begin"in t&&"end"in t?(e.setRequestHeader("Range","bytes=".concat(t.begin,"-").concat(t.end-1)),n.expectedStatus=206):n.expectedStatus=200,e.responseType="arraybuffer",t.onError&&(e.onerror=function(r){t.onError(e.status)}),e.onreadystatechange=this.onStateChange.bind(this,r),e.onprogress=this.onProgress.bind(this,r),n.onHeadersReceived=t.onHeadersReceived,n.onDone=t.onDone,n.onError=t.onError,n.onProgress=t.onProgress,e.send(null),r}},{key:"onProgress",value:function(t,e){var r,n=this.pendingRequests[t];n&&(null===(r=n.onProgress)||void 0===r||r.call(n,e))}},{key:"onStateChange",value:function(t,e){var r=this.pendingRequests[t];if(r){var i=r.xhr;if(i.readyState>=2&&r.onHeadersReceived&&(r.onHeadersReceived(),delete r.onHeadersReceived),4===i.readyState&&t in this.pendingRequests)if(delete this.pendingRequests[t],0===i.status&&this.isHttp){var a;null===(a=r.onError)||void 0===a||a.call(r,i.status)}else{var o=i.status||200;if(200===o&&206===r.expectedStatus||o===r.expectedStatus){var s=function(t){var e=t.response;return"string"!=typeof e?e:(0,n.stringToBytes)(e).buffer}(i);if(206===o){var l=i.getResponseHeader("Content-Range"),u=/bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(l);r.onDone({begin:parseInt(u[1],10),chunk:s})}else if(s)r.onDone({begin:0,chunk:s});else{var c;null===(c=r.onError)||void 0===c||c.call(r,i.status)}}else{var h;null===(h=r.onError)||void 0===h||h.call(r,i.status)}}}}},{key:"getRequestXhr",value:function(t){return this.pendingRequests[t].xhr}},{key:"isPendingRequest",value:function(t){return t in this.pendingRequests}},{key:"abortRequest",value:function(t){var e=this.pendingRequests[t].xhr;delete this.pendingRequests[t],e.abort()}}]),t}(),v=function(){function t(e){h(this,t),this._source=e,this._manager=new p(e.url,{httpHeaders:e.httpHeaders,withCredentials:e.withCredentials}),this._rangeChunkSize=e.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}return d(t,[{key:"_onRangeRequestReaderClosed",value:function(t){var e=this._rangeRequestReaders.indexOf(t);e>=0&&this._rangeRequestReaders.splice(e,1)}},{key:"getFullReader",value:function(){return(0,n.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new y(this._manager,this._source),this._fullRequestReader}},{key:"getRangeReader",value:function(t,e){var r=new m(this._manager,t,e);return r.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(r),r}},{key:"cancelAllRequests",value:function(t){var e;null===(e=this._fullRequestReader)||void 0===e||e.cancel(t);var r,n=l(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFNetworkStream=v;var y=function(){function t(e,r){h(this,t),this._manager=e;var i={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=r.url,this._fullRequestId=e.requestFull(i),this._headersReceivedCapability=(0,n.createPromiseCapability)(),this._disableRange=r.disableRange||!1,this._contentLength=r.length,this._rangeChunkSize=r.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}var e;return d(t,[{key:"_onHeadersReceived",value:function(){var t=this._fullRequestId,e=this._manager.getRequestXhr(t),r=function(t){return e.getResponseHeader(t)},n=(0,i.validateRangeRequestCapabilities)({getResponseHeader:r,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange}),a=n.allowRangeRequests,o=n.suggestedLength;a&&(this._isRangeSupported=!0),this._contentLength=o||this._contentLength,this._filename=(0,i.extractFilenameFromHeader)(r),this._isRangeSupported&&this._manager.abortRequest(t),this._headersReceivedCapability.resolve()}},{key:"_onDone",value:function(t){if(t&&(this._requests.length>0?this._requests.shift().resolve({value:t.chunk,done:!1}):this._cachedChunks.push(t.chunk)),this._done=!0,!(this._cachedChunks.length>0)){var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0}}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url),this._headersReceivedCapability.reject(this._storedError);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._cachedChunks.length=0}},{key:"_onProgress",value:function(t){var e;null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded,total:t.lengthComputable?t.total:this._contentLength})}},{key:"filename",get:function(){return this._filename}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"contentLength",get:function(){return this._contentLength}},{key:"headersReady",get:function(){return this._headersReceivedCapability.promise}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(!(this._cachedChunks.length>0)){t.next=5;break}return e=this._cachedChunks.shift(),t.abrupt("return",{value:e,done:!1});case 5:if(!this._done){t.next=7;break}return t.abrupt("return",{value:void 0,done:!0});case 7:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 10:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0,this._headersReceivedCapability.reject(t);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}]),t}(),m=function(){function t(e,r,n){h(this,t),this._manager=e;var i={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=e.url,this._requestId=e.requestRange(r,n,i),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}var e;return d(t,[{key:"_close",value:function(){var t;null===(t=this.onClosed)||void 0===t||t.call(this,this)}},{key:"_onDone",value:function(t){var e=t.chunk;this._requests.length>0?this._requests.shift().resolve({value:e,done:!1}):this._queuedChunk=e,this._done=!0;var r,n=l(this._requests);try{for(n.s();!(r=n.n()).done;)r.value.resolve({value:void 0,done:!0})}catch(t){n.e(t)}finally{n.f()}this._requests.length=0,this._close()}},{key:"_onError",value:function(t){this._storedError=(0,i.createResponseStatusError)(t,this._url);var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.reject(this._storedError)}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._queuedChunk=null}},{key:"_onProgress",value:function(t){var e;this.isStreamingSupported||null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:t.loaded})}},{key:"isStreamingSupported",get:function(){return!1}},{key:"read",value:(e=s(a().mark((function t(){var e,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._storedError){t.next=2;break}throw this._storedError;case 2:if(null===this._queuedChunk){t.next=6;break}return e=this._queuedChunk,this._queuedChunk=null,t.abrupt("return",{value:e,done:!1});case 6:if(!this._done){t.next=8;break}return t.abrupt("return",{value:void 0,done:!0});case 8:return r=(0,n.createPromiseCapability)(),this._requests.push(r),t.abrupt("return",r.promise);case 11:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){this._done=!0;var e,r=l(this._requests);try{for(r.s();!(e=r.n()).done;)e.value.resolve({value:void 0,done:!0})}catch(t){r.e(t)}finally{r.f()}this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}]),t}()},(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.PDFFetchStream=void 0;var n=r(1),i=r(162);function a(){a=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function c(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,r){return t[e]=r}}function h(t,e,r,i){var a=e&&e.prototype instanceof p?e:p,o=Object.create(a.prototype),s=new P(i||[]);return n(o,"_invoke",{value:k(t,r,s)}),o}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=h;var d={};function p(){}function v(){}function y(){}var m={};c(m,o,(function(){return this}));var g=Object.getPrototypeOf,b=g&&g(g(T([])));b&&b!==e&&r.call(b,o)&&(m=b);var _=y.prototype=p.prototype=Object.create(m);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function i(n,a,o,s){var u=f(t[n],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==l(h)&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,o,s)}),(function(t){i("throw",t,o,s)})):e.resolve(h).then((function(t){c.value=t,o(c)}),(function(t){return i("throw",t,o,s)}))}s(u.arg)}var a;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){i(t,r,e,n)}))}return a=a?a.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(i,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw a;return{value:void 0,done:!0}}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=S(o,r);if(s){if(s===d)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var l=f(t,e,r);if("normal"===l.type){if(n=r.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n="completed",r.method="throw",r.arg=l.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var i=f(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var a=i.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function T(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:T(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),d}},t}function o(t,e,r,n,i,a,o){try{var s=t[a](o),l=s.value}catch(t){return void r(t)}s.done?e(l):Promise.resolve(l).then(n,i)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function s(t){o(a,n,i,s,l,"next",t)}function l(t){o(a,n,i,s,l,"throw",t)}s(void 0)}))}}function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}(this._rangeRequestReaders.slice(0));try{for(n.s();!(r=n.n()).done;)r.value.cancel(t)}catch(t){n.e(t)}finally{n.f()}}}]),t}();e.PDFFetchStream=v;var y=function(){function t(e){var r=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0,this._filename=null;var a=e.source;this._withCredentials=a.withCredentials||!1,this._contentLength=a.length,this._headersCapability=(0,n.createPromiseCapability)(),this._disableRange=a.disableRange||!1,this._rangeChunkSize=a.rangeChunkSize,this._rangeChunkSize||this._disableRange||(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!a.disableStream,this._isRangeSupported=!a.disableRange,this._headers=p(this._stream.httpHeaders);var o=a.url;fetch(o,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,o);r._reader=t.body.getReader(),r._headersCapability.resolve();var e=function(e){return t.headers.get(e)},a=(0,i.validateRangeRequestCapabilities)({getResponseHeader:e,isHttp:r._stream.isHttp,rangeChunkSize:r._rangeChunkSize,disableRange:r._disableRange}),s=a.allowRangeRequests,l=a.suggestedLength;r._isRangeSupported=s,r._contentLength=l||r._contentLength,r._filename=(0,i.extractFilenameFromHeader)(e),!r._isStreamingSupported&&r._isRangeSupported&&r.cancel(new n.AbortException("Streaming is disabled."))})).catch(this._headersCapability.reject),this.onProgress=null}var e;return f(t,[{key:"headersReady",get:function(){return this._headersCapability.promise}},{key:"filename",get:function(){return this._filename}},{key:"contentLength",get:function(){return this._contentLength}},{key:"isRangeSupported",get:function(){return this._isRangeSupported}},{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._headersCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded,total:this._contentLength}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}(),m=function(){function t(e,r,a){var o=this;c(this,t),this._stream=e,this._reader=null,this._loaded=0;var s=e.source;this._withCredentials=s.withCredentials||!1,this._readCapability=(0,n.createPromiseCapability)(),this._isStreamingSupported=!s.disableStream,this._abortController=new AbortController,this._headers=p(this._stream.httpHeaders),this._headers.append("Range","bytes=".concat(r,"-").concat(a-1));var l=s.url;fetch(l,d(this._headers,this._withCredentials,this._abortController)).then((function(t){if(!(0,i.validateResponseStatus)(t.status))throw(0,i.createResponseStatusError)(t.status,l);o._readCapability.resolve(),o._reader=t.body.getReader()})).catch(this._readCapability.reject),this.onProgress=null}var e;return f(t,[{key:"isStreamingSupported",get:function(){return this._isStreamingSupported}},{key:"read",value:(e=s(a().mark((function t(){var e,r,n,i,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._readCapability.promise;case 2:return t.next=4,this._reader.read();case 4:if(r=t.sent,n=r.value,!(i=r.done)){t.next=9;break}return t.abrupt("return",{value:n,done:i});case 9:return this._loaded+=n.byteLength,null===(e=this.onProgress)||void 0===e||e.call(this,{loaded:this._loaded}),o=new Uint8Array(n).buffer,t.abrupt("return",{value:o,done:!1});case 13:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"cancel",value:function(t){var e;null===(e=this._reader)||void 0===e||e.cancel(t),this._abortController.abort()}}]),t}()}],__webpack_module_cache__={};function __w_pdfjs_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](r,r.exports,__w_pdfjs_require__),r.exports}var __nested_webpack_exports__={};return(()=>{var t=__nested_webpack_exports__;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AbortException",{enumerable:!0,get:function(){return e.AbortException}}),Object.defineProperty(t,"AnnotationEditorLayer",{enumerable:!0,get:function(){return a.AnnotationEditorLayer}}),Object.defineProperty(t,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return e.AnnotationEditorParamsType}}),Object.defineProperty(t,"AnnotationEditorType",{enumerable:!0,get:function(){return e.AnnotationEditorType}}),Object.defineProperty(t,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return o.AnnotationEditorUIManager}}),Object.defineProperty(t,"AnnotationLayer",{enumerable:!0,get:function(){return s.AnnotationLayer}}),Object.defineProperty(t,"AnnotationMode",{enumerable:!0,get:function(){return e.AnnotationMode}}),Object.defineProperty(t,"CMapCompressionType",{enumerable:!0,get:function(){return e.CMapCompressionType}}),Object.defineProperty(t,"GlobalWorkerOptions",{enumerable:!0,get:function(){return l.GlobalWorkerOptions}}),Object.defineProperty(t,"InvalidPDFException",{enumerable:!0,get:function(){return e.InvalidPDFException}}),Object.defineProperty(t,"MissingPDFException",{enumerable:!0,get:function(){return e.MissingPDFException}}),Object.defineProperty(t,"OPS",{enumerable:!0,get:function(){return e.OPS}}),Object.defineProperty(t,"PDFDataRangeTransport",{enumerable:!0,get:function(){return r.PDFDataRangeTransport}}),Object.defineProperty(t,"PDFDateString",{enumerable:!0,get:function(){return n.PDFDateString}}),Object.defineProperty(t,"PDFWorker",{enumerable:!0,get:function(){return r.PDFWorker}}),Object.defineProperty(t,"PasswordResponses",{enumerable:!0,get:function(){return e.PasswordResponses}}),Object.defineProperty(t,"PermissionFlag",{enumerable:!0,get:function(){return e.PermissionFlag}}),Object.defineProperty(t,"PixelsPerInch",{enumerable:!0,get:function(){return n.PixelsPerInch}}),Object.defineProperty(t,"RenderingCancelledException",{enumerable:!0,get:function(){return n.RenderingCancelledException}}),Object.defineProperty(t,"SVGGraphics",{enumerable:!0,get:function(){return c.SVGGraphics}}),Object.defineProperty(t,"UNSUPPORTED_FEATURES",{enumerable:!0,get:function(){return e.UNSUPPORTED_FEATURES}}),Object.defineProperty(t,"UnexpectedResponseException",{enumerable:!0,get:function(){return e.UnexpectedResponseException}}),Object.defineProperty(t,"Util",{enumerable:!0,get:function(){return e.Util}}),Object.defineProperty(t,"VerbosityLevel",{enumerable:!0,get:function(){return e.VerbosityLevel}}),Object.defineProperty(t,"XfaLayer",{enumerable:!0,get:function(){return h.XfaLayer}}),Object.defineProperty(t,"build",{enumerable:!0,get:function(){return r.build}}),Object.defineProperty(t,"createPromiseCapability",{enumerable:!0,get:function(){return e.createPromiseCapability}}),Object.defineProperty(t,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return e.createValidAbsoluteUrl}}),Object.defineProperty(t,"getDocument",{enumerable:!0,get:function(){return r.getDocument}}),Object.defineProperty(t,"getFilenameFromUrl",{enumerable:!0,get:function(){return n.getFilenameFromUrl}}),Object.defineProperty(t,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return n.getPdfFilenameFromUrl}}),Object.defineProperty(t,"getXfaPageViewport",{enumerable:!0,get:function(){return n.getXfaPageViewport}}),Object.defineProperty(t,"isDataScheme",{enumerable:!0,get:function(){return n.isDataScheme}}),Object.defineProperty(t,"isPdfFile",{enumerable:!0,get:function(){return n.isPdfFile}}),Object.defineProperty(t,"loadScript",{enumerable:!0,get:function(){return n.loadScript}}),Object.defineProperty(t,"renderTextLayer",{enumerable:!0,get:function(){return i.renderTextLayer}}),Object.defineProperty(t,"setLayerDimensions",{enumerable:!0,get:function(){return n.setLayerDimensions}}),Object.defineProperty(t,"shadow",{enumerable:!0,get:function(){return e.shadow}}),Object.defineProperty(t,"updateTextLayer",{enumerable:!0,get:function(){return i.updateTextLayer}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return r.version}});var e=__w_pdfjs_require__(1),r=__w_pdfjs_require__(133),n=__w_pdfjs_require__(137),i=__w_pdfjs_require__(151),a=__w_pdfjs_require__(152),o=__w_pdfjs_require__(136),s=__w_pdfjs_require__(157),l=__w_pdfjs_require__(144),u=__w_pdfjs_require__(3),c=__w_pdfjs_require__(160),h=__w_pdfjs_require__(159);if(u.isNodeJS){var f=__w_pdfjs_require__(161).PDFNodeStream;(0,r.setPDFNetworkStreamFactory)((function(t){return new f(t)}))}else{var d=__w_pdfjs_require__(164).PDFNetworkStream,p=__w_pdfjs_require__(165).PDFFetchStream;(0,r.setPDFNetworkStreamFactory)((function(t){return(0,n.isValidFetchUrl)(t.url)?new p(t):new d(t)}))}})(),__nested_webpack_exports__})(),"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf",[],factory):"object"==typeof exports?exports["pdfjs-dist/build/pdf"]=factory():root["pdfjs-dist/build/pdf"]=root.pdfjsLib=factory();`;function de(e){var t,a,p,s,o;for(t="",p=e.length,a=0;a=1&&s<=127?t+=e.charAt(a):s>2047?(o=224|s>>12&15,t+=String.fromCharCode(o),o=128|s>>6&63,t+=String.fromCharCode(o),o=128|s>>0&63,t+=String.fromCharCode(o)):(o=192|s>>6&31,t+=String.fromCharCode(o),o=128|s>>0&63,t+=String.fromCharCode(o));return t}var y="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function pe(e){var t,a,p,s,o,v;for(p=e.length,a=0,t="";a>2),t+=y.charAt((s&3)<<4),t+="==";break}if(o=e.charCodeAt(a++),a==p){t+=y.charAt(s>>2),t+=y.charAt((s&3)<<4|(o&240)>>4),t+=y.charAt((o&15)<<2),t+="=";break}v=e.charCodeAt(a++),t+=y.charAt(s>>2),t+=y.charAt((s&3)<<4|(o&240)>>4),t+=y.charAt((o&15)<<2|(v&192)>>6),t+=y.charAt(v&63)}return t}function U(e){return pe(de(e))}const ve=`data:text/javascript;base64,${U(he)}`,ge=`data:text/javascript;base64,${U(fe)}`;let D=!1,N=!1;const ye=Z({name:"VueOfficePdf",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},staticFileUrl:{type:String,default:"https://unpkg.com/pdfjs-dist@3.1.81/"},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:t}){let a=null,p=null;const s=w(null),o=w(null),v=w([]),T=w(0);let m=0,F=0,b=0,j=0,k=6,C=0,S=0,_=null;ee(()=>{a!==null&&(a.destroy(),a=null,p=null,_&&clearTimeout(_))});function X(){return Y(ve).then(()=>{if(window.pdfjsLib&&!N)N=!0,window.pdfjsLib.GlobalWorkerOptions.workerSrc=ge;else return Promise.reject("window.pdfjsLib未找到")})}function H(){return new Promise(i=>{const n=()=>{window.pdfjsLib?i():_=setTimeout(n,10)};n()})}function I(){return window.pdfjsLib?Promise.resolve():D?H():(D=!0,X())}function M(){o.value.innerHTML=""}function R(){if(!e.src){M(),t("error",new Error("src不能为空"));return}p=window.pdfjsLib.getDocument({url:z(e.src),httpHeaders:e.requestOptions&&e.requestOptions.headers,withCredentials:e.requestOptions&&e.requestOptions.withCredentials,cMapUrl:`${e.staticFileUrl.endsWith("/")?e.staticFileUrl:e.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...J(e.options,["width"])}),p.promise.then(i=>{a&&a.destroy(),a=i,$(a).then(n=>{m=a.numPages,j=s.value.getBoundingClientRect().height,F=n.width,b=n.height,C=n.canvasWidth,S=n.canvasHeight;let u=e.options.gap||10;k=Math.ceil(j/(b+u))+4;let r=(b+u)*m-u;o.value.style.height=r+"px",M(),P(1,Math.min(m,k))})}).catch(i=>{t("error",i)})}function $(i){return i.getPage(1).then(n=>{const u=n.getViewport({scale:2}),r=window.devicePixelRatio>2?1.5:2;let h=Math.floor(u.width*r),l=Math.floor(u.height*r),d=Math.floor(u.width),c=Math.floor(u.height);if(e.options.width){let g=e.options.width/d;d=Math.floor(e.options.width),c=Math.floor(c*g)}let f=o.value.getBoundingClientRect().width-20;if(d>f){let g=f/d;d=Math.floor(f),c=Math.floor(c*g)}return{width:d,height:c,canvasWidth:h,canvasHeight:l}}).catch(n=>{t("error",n)})}const q=K.debounce(function(i){const{scrollTop:n}=i.target;let u=parseInt(getComputedStyle(o.value).paddingTop)||0;const r=e.options.gap||10,h=Math.max(Math.floor(Math.max(n-u,0)/(b+r))-1,1),l=Math.min(h+k-1,m);P(h,l)},60);function x(i){let n=parseInt(getComputedStyle(o.value).paddingTop)||0,u=e.options.gap||10;const r=document.createElement("canvas");return r.style.position="absolute",r.style.top=(i-1)*(b+u)+n+"px",r.style.left="50%",r.style.transform="translate(-50%)",r.style.backgroundColor="#fff",r.setAttribute("data-id",i),r.width=C,r.height=S,r.style.width=`${F}px`,r.style.height=`${b}px`,r}function P(i,n){let u=o.value,r=[...u.childNodes],h=[];if(u.childNodes.length===0)for(let l=i;l<=n;l++){let d=x(l);u.appendChild(d),h.push(A(l,d))}else{let l=+r[0].getAttribute("data-id"),d=+r[r.length-1].getAttribute("data-id");if(nd)for(let c=i;c<=n;c++){let f=x(c);u.appendChild(f),h.push(A(c,f))}if(i=l){let c=r[0];for(let f=l-1;f>=i;f--){let g=x(f);u.insertBefore(g,c),c=g,h.push(A(f,g))}}for(let c=0;c<=d-l;c++){let f=+r[c].getAttribute("data-id");(fn)&&u.removeChild(r[c])}if(n>d&&i<=d)for(let c=d+1;c<=n;c++){let f=x(c);u.appendChild(f),h.push(A(c,f))}}Promise.all(h).then(l=>{t("rendered")}).catch(l=>{t("error",l)})}function A(i,n){return a.getPage(i).then(u=>{const r=u.getViewport({scale:2});let h=window.devicePixelRatio>2?1.5:2;if(C*r.height!==S*r.width){let f=Math.floor(r.width*h),g=Math.floor(r.height*h),E=S/g;h=h*E,n.width=f*E,n.style.width=parseInt(n.style.width)*E+"px"}const l=n.getContext("2d"),d=h!==1?[h,0,0,h,0,0]:null;return u.render({canvasContext:l,transform:d,viewport:r}).promise})}function G(){P(1,Math.min(m,k))}te(()=>{e.src&&I().then(R).catch(i=>{console.warn(i)})}),re(()=>e.src,()=>{I().then(R).catch(i=>{console.warn(i)})});function W(i){a&&a._transport&&a._transport.getData().then(n=>{V(i||`vue-office-pdf-${new Date().getTime()}.pdf`,n.buffer)})}return{containerRef:s,wrapperRef:o,rootRef:v,numPages:T,save:W,onScrollPdf:q,rerender:G}}}),me={ref:"wrapperRef",class:"vue-office-pdf-wrapper",style:{background:"gray",padding:"30px 0",position:"relative","box-sizing":"content-box"}};function be(e,t,a,p,s,o){return B(),ne("div",{class:"vue-office-pdf",ref:"containerRef",style:{"text-align":"center","overflow-y":"auto",position:"relative"},onScroll:t[0]||(t[0]=(...v)=>e.onScrollPdf&&e.onScrollPdf(...v))},[ae("div",me,null,512),ie(e.$slots,"default")],544)}const O=Q(ye,[["render",be]]);O.install=function(e){e.component(O.name,O)};const Ae={__name:"PdfDemo",setup(e){function t(){L.hideLoading()}function a(v){console.log("出差",v),L.hideLoading()}const p=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.pdf",s=w();window.docxRef=s;const o={headers:{"component-name":"VueOfficePdf"}};return(v,T)=>(B(),oe(le,{accept:".pdf",placeholder:"请输入pdf文件地址","default-src":p},{default:se(m=>[ce(ue(O),{ref_key:"docxRef",ref:s,src:m.src,style:{flex:"1",height:"0"},"request-options":o,onRendered:t,onError:a},null,8,["src"])]),_:1}))}};export{Ae as default}; diff --git a/examples/dist/assets/PreviewWrapper-079442e3.js b/examples/dist/assets/PreviewWrapper-079442e3.js new file mode 100644 index 0000000..9e30f00 --- /dev/null +++ b/examples/dist/assets/PreviewWrapper-079442e3.js @@ -0,0 +1 @@ +import{r as u,m as C,_ as I,w as N,l as n,a as d,c as k,u as t,g as i,f as r,p as g,q as S,e as h,s as y,k as V,t as A,v as R,b as T}from"./index-bf0149c5.js";function $(e){const p=u("url"),a=u(e),o=u(e),l=u(typeof e=="string"?e.endsWith(".xls"):!1),c=u([]);function x(_){l.value=_.name.endsWith("xls");let f=new FileReader;return f.onload=s=>{let v=s.target.result;o.value=v},f.readAsArrayBuffer(_),!1}return{type:p,inputSrc:a,src:o,xls:l,fileList:c,beforeUpload:x}}let w=u(!1),B;function q(e){B=C.loading(e,0),w.value=!0}function E(){w.value===!0&&(B(),w.value=!1)}const F={loading:w,showLoading:q,hideLoading:E};function j(){return location.href.includes("test")}const z=e=>(A("data-v-0bd825a5"),e=e(),R(),e),D={class:"preview-wrapper"},G={key:0,class:"operate-area"},H=z(()=>T("div",{class:"preview-wrapper-main"},null,-1)),J={__name:"PreviewWrapper",props:{accept:String,placeholder:String,defaultSrc:String},setup(e){const p=e,{type:a,inputSrc:o,src:l,xls:c,fileList:x,beforeUpload:_}=$(p.defaultSrc);return N(l,()=>{F.showLoading()},{immediate:!0}),(f,s)=>{const v=n("a-radio-button"),L=n("a-radio-group"),U=n("a-input"),b=n("a-button"),W=n("upload-outlined"),P=n("a-upload");return d(),k("div",D,[t(j)()?y("",!0):(d(),k("div",G,[i(L,{value:t(a),"onUpdate:value":s[0]||(s[0]=m=>S(a)?a.value=m:null),"button-style":"solid"},{default:r(()=>[i(v,{value:"url"},{default:r(()=>[g("远程文件地址")]),_:1}),i(v,{value:"upload"},{default:r(()=>[g("上传本地文件")]),_:1})]),_:1},8,["value"]),t(a)==="url"?(d(),h(U,{key:0,value:t(o),"onUpdate:value":s[1]||(s[1]=m=>S(o)?o.value=m:null),placeholder:p.placeholder,style:{width:"600px","margin-left":"10px"}},null,8,["value","placeholder"])):y("",!0),t(a)==="url"?(d(),h(b,{key:1,type:"primary",style:{"margin-left":"10px"},onClick:s[2]||(s[2]=m=>{l.value=t(o),c.value=t(o).endsWith("xls")})},{default:r(()=>[g(" 预览 ")]),_:1})):y("",!0),t(a)!=="url"?(d(),h(P,{key:2,accept:p.accept,action:"",beforeUpload:t(_),"file-list":[]},{default:r(()=>[i(b,{style:{"margin-left":"10px"}},{default:r(()=>[i(W),g(" 选择文件 ")]),_:1})]),_:1},8,["accept","beforeUpload"])):y("",!0)])),V(f.$slots,"default",{src:t(l),xls:t(c)},void 0,!0),H])}}},M=I(J,[["__scopeId","data-v-0bd825a5"]]);export{M as P,F as u}; diff --git a/examples/dist/assets/docx-471e1e1f.js b/examples/dist/assets/docx-471e1e1f.js new file mode 100644 index 0000000..26992bd --- /dev/null +++ b/examples/dist/assets/docx-471e1e1f.js @@ -0,0 +1,97 @@ +import{x as _e}from"./index-bf0149c5.js";import{c as ke}from"./_commonjs-dynamic-modules-302442b1.js";var Ce={exports:{}},xe={exports:{}};/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/var Pe;function Be(){return Pe||(Pe=1,function(ne,ce){(function(T){ne.exports=T()})(function(){return function T(L,B,S){function v(r,m){if(!B[r]){if(!L[r]){var f=typeof ke=="function"&&ke;if(!m&&f)return f(r,!0);if(e)return e(r,!0);var a=new Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}var i=B[r]={exports:{}};L[r][0].call(i.exports,function(y){var h=L[r][1][y];return v(h||y)},i,i.exports,T,L,B,S)}return B[r].exports}for(var e=typeof ke=="function"&&ke,u=0;u>2,i=(3&r)<<4|m>>4,y=1>6:64,h=2>4,m=(15&a)<<4|(i=e.indexOf(u.charAt(h++)))>>2,f=(3&i)<<6|(y=e.indexOf(u.charAt(h++))),g[d++]=r,i!==64&&(g[d++]=m),y!==64&&(g[d++]=f);return g}},{"./support":30,"./utils":32}],2:[function(T,L,B){var S=T("./external"),v=T("./stream/DataWorker"),e=T("./stream/Crc32Probe"),u=T("./stream/DataLengthProbe");function r(m,f,a,i,y){this.compressedSize=m,this.uncompressedSize=f,this.crc32=a,this.compression=i,this.compressedContent=y}r.prototype={getContentWorker:function(){var m=new v(S.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),f=this;return m.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),m},getCompressedWorker:function(){return new v(S.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(m,f,a){return m.pipe(new e).pipe(new u("uncompressedSize")).pipe(f.compressWorker(a)).pipe(new u("compressedSize")).withStreamInfo("compression",f)},L.exports=r},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(T,L,B){var S=T("./stream/GenericWorker");B.STORE={magic:"\0\0",compressWorker:function(){return new S("STORE compression")},uncompressWorker:function(){return new S("STORE decompression")}},B.DEFLATE=T("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(T,L,B){var S=T("./utils"),v=function(){for(var e,u=[],r=0;r<256;r++){e=r;for(var m=0;m<8;m++)e=1&e?3988292384^e>>>1:e>>>1;u[r]=e}return u}();L.exports=function(e,u){return e!==void 0&&e.length?S.getTypeOf(e)!=="string"?function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m[h])];return-1^r}(0|u,e,e.length,0):function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m.charCodeAt(h))];return-1^r}(0|u,e,e.length,0):0}},{"./utils":32}],5:[function(T,L,B){B.base64=!1,B.binary=!1,B.dir=!1,B.createFolders=!0,B.date=null,B.compression=null,B.compressionOptions=null,B.comment=null,B.unixPermissions=null,B.dosPermissions=null},{}],6:[function(T,L,B){var S=null;S=typeof Promise<"u"?Promise:T("lie"),L.exports={Promise:S}},{lie:37}],7:[function(T,L,B){var S=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=T("pako"),e=T("./utils"),u=T("./stream/GenericWorker"),r=S?"uint8array":"array";function m(f,a){u.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=a,this.meta={}}B.magic="\b\0",e.inherits(m,u),m.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(e.transformTo(r,f.data),!1)},m.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},m.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},m.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(a){f.push({data:a,meta:f.meta})}},B.compressWorker=function(f){return new m("Deflate",f)},B.uncompressWorker=function(){return new m("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(T,L,B){function S(i,y){var h,d="";for(h=0;h>>=8;return d}function v(i,y,h,d,p,g){var w,P,n=i.file,s=i.compression,t=g!==r.utf8encode,l=e.transformTo("string",g(n.name)),b=e.transformTo("string",r.utf8encode(n.name)),k=n.comment,E=e.transformTo("string",g(k)),_=e.transformTo("string",r.utf8encode(k)),C=b.length!==n.name.length,o=_.length!==k.length,R="",V="",F="",q=n.dir,W=n.date,Y={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(Y.crc32=i.crc32,Y.compressedSize=i.compressedSize,Y.uncompressedSize=i.uncompressedSize);var z=0;y&&(z|=8),t||!C&&!o||(z|=2048);var O=0,J=0;q&&(O|=16),p==="UNIX"?(J=798,O|=function(Z,ae){var le=Z;return Z||(le=ae?16893:33204),(65535&le)<<16}(n.unixPermissions,q)):(J=20,O|=function(Z){return 63&(Z||0)}(n.dosPermissions)),w=W.getUTCHours(),w<<=6,w|=W.getUTCMinutes(),w<<=5,w|=W.getUTCSeconds()/2,P=W.getUTCFullYear()-1980,P<<=4,P|=W.getUTCMonth()+1,P<<=5,P|=W.getUTCDate(),C&&(V=S(1,1)+S(m(l),4)+b,R+="up"+S(V.length,2)+V),o&&(F=S(1,1)+S(m(E),4)+_,R+="uc"+S(F.length,2)+F);var X="";return X+=` +\0`,X+=S(z,2),X+=s.magic,X+=S(w,2),X+=S(P,2),X+=S(Y.crc32,4),X+=S(Y.compressedSize,4),X+=S(Y.uncompressedSize,4),X+=S(l.length,2),X+=S(R.length,2),{fileRecord:f.LOCAL_FILE_HEADER+X+l+R,dirRecord:f.CENTRAL_FILE_HEADER+S(J,2)+X+S(E.length,2)+"\0\0\0\0"+S(O,4)+S(d,4)+l+R+E}}var e=T("../utils"),u=T("../stream/GenericWorker"),r=T("../utf8"),m=T("../crc32"),f=T("../signature");function a(i,y,h,d){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=d,this.streamFiles=i,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}e.inherits(a,u),a.prototype.push=function(i){var y=i.meta.percent||0,h=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(i):(this.bytesWritten+=i.data.length,u.prototype.push.call(this,{data:i.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-d-1))/h:100}}))},a.prototype.openedSource=function(i){this.currentSourceOffset=this.bytesWritten,this.currentFile=i.file.name;var y=this.streamFiles&&!i.file.dir;if(y){var h=v(i,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},a.prototype.closedSource=function(i){this.accumulate=!1;var y=this.streamFiles&&!i.file.dir,h=v(i,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:function(d){return f.DATA_DESCRIPTOR+S(d.crc32,4)+S(d.compressedSize,4)+S(d.uncompressedSize,4)}(i),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},a.prototype.flush=function(){for(var i=this.bytesWritten,y=0;y=this.index;u--)r=(r<<8)+this.byteAt(u);return this.index+=e,r},readString:function(e){return S.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},L.exports=v},{"../utils":32}],19:[function(T,L,B){var S=T("./Uint8ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(T,L,B){var S=T("./DataReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},v.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},v.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./DataReader":18}],21:[function(T,L,B){var S=T("./ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(T,L,B){var S=T("../utils"),v=T("../support"),e=T("./ArrayReader"),u=T("./StringReader"),r=T("./NodeBufferReader"),m=T("./Uint8ArrayReader");L.exports=function(f){var a=S.getTypeOf(f);return S.checkSupport(a),a!=="string"||v.uint8array?a==="nodebuffer"?new r(f):v.uint8array?new m(S.transformTo("uint8array",f)):new e(S.transformTo("array",f)):new u(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(T,L,B){B.LOCAL_FILE_HEADER="PK",B.CENTRAL_FILE_HEADER="PK",B.CENTRAL_DIRECTORY_END="PK",B.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",B.ZIP64_CENTRAL_DIRECTORY_END="PK",B.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(T,L,B){var S=T("./GenericWorker"),v=T("../utils");function e(u){S.call(this,"ConvertWorker to "+u),this.destType=u}v.inherits(e,S),e.prototype.processChunk=function(u){this.push({data:v.transformTo(this.destType,u.data),meta:u.meta})},L.exports=e},{"../utils":32,"./GenericWorker":28}],25:[function(T,L,B){var S=T("./GenericWorker"),v=T("../crc32");function e(){S.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}T("../utils").inherits(e,S),e.prototype.processChunk=function(u){this.streamInfo.crc32=v(u.data,this.streamInfo.crc32||0),this.push(u)},L.exports=e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}S.inherits(e,v),e.prototype.processChunk=function(u){if(u){var r=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=r+u.data.length}v.prototype.processChunk.call(this,u)},L.exports=e},{"../utils":32,"./GenericWorker":28}],27:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataWorker");var r=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(m){r.dataIsReady=!0,r.data=m,r.max=m&&m.length||0,r.type=S.getTypeOf(m),r.isPaused||r._tickAndRepeat()},function(m){r.error(m)})}S.inherits(e,v),e.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},e.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,S.delay(this._tickAndRepeat,[],this)),!0)},e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(S.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,r=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,r);break;case"uint8array":u=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":u=this.data.slice(this.index,r)}return this.index=r,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},L.exports=e},{"../utils":32,"./GenericWorker":28}],28:[function(T,L,B){function S(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}S.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,e){return this._listeners[v].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,e){if(this._listeners[v])for(var u=0;u "+v:v}},L.exports=S},{}],29:[function(T,L,B){var S=T("../utils"),v=T("./ConvertWorker"),e=T("./GenericWorker"),u=T("../base64"),r=T("../support"),m=T("../external"),f=null;if(r.nodestream)try{f=T("../nodejs/NodejsStreamOutputAdapter")}catch{}function a(y,h){return new m.Promise(function(d,p){var g=[],w=y._internalType,P=y._outputType,n=y._mimeType;y.on("data",function(s,t){g.push(s),h&&h(t)}).on("error",function(s){g=[],p(s)}).on("end",function(){try{var s=function(t,l,b){switch(t){case"blob":return S.newBlob(S.transformTo("arraybuffer",l),b);case"base64":return u.encode(l);default:return S.transformTo(t,l)}}(P,function(t,l){var b,k=0,E=null,_=0;for(b=0;b"u")B.blob=!1;else{var S=new ArrayBuffer(0);try{B.blob=new Blob([S],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(S),B.blob=v.getBlob("application/zip").size===0}catch{B.blob=!1}}}try{B.nodestream=!!T("readable-stream").Readable}catch{B.nodestream=!1}},{"readable-stream":16}],31:[function(T,L,B){for(var S=T("./utils"),v=T("./support"),e=T("./nodejsUtils"),u=T("./stream/GenericWorker"),r=new Array(256),m=0;m<256;m++)r[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;r[254]=r[254]=1;function f(){u.call(this,"utf-8 decode"),this.leftOver=null}function a(){u.call(this,"utf-8 encode")}B.utf8encode=function(i){return v.nodebuffer?e.newBufferFrom(i,"utf-8"):function(y){var h,d,p,g,w,P=y.length,n=0;for(g=0;g>>6:(d<65536?h[w++]=224|d>>>12:(h[w++]=240|d>>>18,h[w++]=128|d>>>12&63),h[w++]=128|d>>>6&63),h[w++]=128|63&d);return h}(i)},B.utf8decode=function(i){return v.nodebuffer?S.transformTo("nodebuffer",i).toString("utf-8"):function(y){var h,d,p,g,w=y.length,P=new Array(2*w);for(h=d=0;h>10&1023,P[d++]=56320|1023&p)}return P.length!==d&&(P.subarray?P=P.subarray(0,d):P.length=d),S.applyFromCharCode(P)}(i=S.transformTo(v.uint8array?"uint8array":"array",i))},S.inherits(f,u),f.prototype.processChunk=function(i){var y=S.transformTo(v.uint8array?"uint8array":"array",i.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var d=function(g,w){var P;for((w=w||g.length)>g.length&&(w=g.length),P=w-1;0<=P&&(192&g[P])==128;)P--;return P<0||P===0?w:P+r[g[P]]>w?P:w}(y),p=y;d!==y.length&&(v.uint8array?(p=y.subarray(0,d),this.leftOver=y.subarray(d,y.length)):(p=y.slice(0,d),this.leftOver=y.slice(d,y.length))),this.push({data:B.utf8decode(p),meta:i.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:B.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},B.Utf8DecodeWorker=f,S.inherits(a,u),a.prototype.processChunk=function(i){this.push({data:B.utf8encode(i.data),meta:i.meta})},B.Utf8EncodeWorker=a},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(T,L,B){var S=T("./support"),v=T("./base64"),e=T("./nodejsUtils"),u=T("./external");function r(h){return h}function m(h,d){for(var p=0;p>8;this.dir=!!(16&this.externalFileAttributes),i==0&&(this.dosPermissions=63&this.externalFileAttributes),i==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var i=S(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=i.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=i.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=i.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=i.readInt(4))}},readExtraFields:function(i){var y,h,d,p=i.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});i.index+4>>6:(i<65536?a[d++]=224|i>>>12:(a[d++]=240|i>>>18,a[d++]=128|i>>>12&63),a[d++]=128|i>>>6&63),a[d++]=128|63&i);return a},B.buf2binstring=function(f){return m(f,f.length)},B.binstring2buf=function(f){for(var a=new S.Buf8(f.length),i=0,y=a.length;i>10&1023,g[y++]=56320|1023&h)}return m(g,y)},B.utf8border=function(f,a){var i;for((a=a||f.length)>f.length&&(a=f.length),i=a-1;0<=i&&(192&f[i])==128;)i--;return i<0||i===0?a:i+u[f[i]]>a?i:a}},{"./common":41}],43:[function(T,L,B){L.exports=function(S,v,e,u){for(var r=65535&S|0,m=S>>>16&65535|0,f=0;e!==0;){for(e-=f=2e3>>1:v>>>1;e[u]=v}return e}();L.exports=function(v,e,u,r){var m=S,f=r+u;v^=-1;for(var a=r;a>>8^m[255&(v^e[a])];return-1^v}},{}],46:[function(T,L,B){var S,v=T("../utils/common"),e=T("./trees"),u=T("./adler32"),r=T("./crc32"),m=T("./messages"),f=0,a=4,i=0,y=-2,h=-1,d=4,p=2,g=8,w=9,P=286,n=30,s=19,t=2*P+1,l=15,b=3,k=258,E=k+b+1,_=42,C=113,o=1,R=2,V=3,F=4;function q(c,I){return c.msg=m[I],I}function W(c){return(c<<1)-(4c.avail_out&&(M=c.avail_out),M!==0&&(v.arraySet(c.output,I.pending_buf,I.pending_out,M,c.next_out),c.next_out+=M,I.pending_out+=M,c.total_out+=M,c.avail_out-=M,I.pending-=M,I.pending===0&&(I.pending_out=0))}function O(c,I){e._tr_flush_block(c,0<=c.block_start?c.block_start:-1,c.strstart-c.block_start,I),c.block_start=c.strstart,z(c.strm)}function J(c,I){c.pending_buf[c.pending++]=I}function X(c,I){c.pending_buf[c.pending++]=I>>>8&255,c.pending_buf[c.pending++]=255&I}function Z(c,I){var M,A,x=c.max_chain_length,D=c.strstart,j=c.prev_length,U=c.nice_match,N=c.strstart>c.w_size-E?c.strstart-(c.w_size-E):0,H=c.window,G=c.w_mask,$=c.prev,K=c.strstart+k,re=H[D+j-1],ee=H[D+j];c.prev_length>=c.good_match&&(x>>=2),U>c.lookahead&&(U=c.lookahead);do if(H[(M=I)+j]===ee&&H[M+j-1]===re&&H[M]===H[D]&&H[++M]===H[D+1]){D+=2,M++;do;while(H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&DN&&--x!=0);return j<=c.lookahead?j:c.lookahead}function ae(c){var I,M,A,x,D,j,U,N,H,G,$=c.w_size;do{if(x=c.window_size-c.lookahead-c.strstart,c.strstart>=$+($-E)){for(v.arraySet(c.window,c.window,$,$,0),c.match_start-=$,c.strstart-=$,c.block_start-=$,I=M=c.hash_size;A=c.head[--I],c.head[I]=$<=A?A-$:0,--M;);for(I=M=$;A=c.prev[--I],c.prev[I]=$<=A?A-$:0,--M;);x+=$}if(c.strm.avail_in===0)break;if(j=c.strm,U=c.window,N=c.strstart+c.lookahead,H=x,G=void 0,G=j.avail_in,H=b)for(D=c.strstart-c.insert,c.ins_h=c.window[D],c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b)if(A=e._tr_tally(c,c.strstart-c.match_start,c.match_length-b),c.lookahead-=c.match_length,c.match_length<=c.max_lazy_match&&c.lookahead>=b){for(c.match_length--;c.strstart++,c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b&&c.match_length<=c.prev_length){for(x=c.strstart+c.lookahead-b,A=e._tr_tally(c,c.strstart-1-c.prev_match,c.prev_length-b),c.lookahead-=c.prev_length-1,c.prev_length-=2;++c.strstart<=x&&(c.ins_h=(c.ins_h<c.pending_buf_size-5&&(M=c.pending_buf_size-5);;){if(c.lookahead<=1){if(ae(c),c.lookahead===0&&I===f)return o;if(c.lookahead===0)break}c.strstart+=c.lookahead,c.lookahead=0;var A=c.block_start+M;if((c.strstart===0||c.strstart>=A)&&(c.lookahead=c.strstart-A,c.strstart=A,O(c,!1),c.strm.avail_out===0)||c.strstart-c.block_start>=c.w_size-E&&(O(c,!1),c.strm.avail_out===0))return o}return c.insert=0,I===a?(O(c,!0),c.strm.avail_out===0?V:F):(c.strstart>c.block_start&&(O(c,!1),c.strm.avail_out),o)}),new te(4,4,8,4,le),new te(4,5,16,8,le),new te(4,6,32,32,le),new te(4,4,16,16,Q),new te(8,16,32,32,Q),new te(8,16,128,128,Q),new te(8,32,128,256,Q),new te(32,128,258,1024,Q),new te(32,258,258,4096,Q)],B.deflateInit=function(c,I){return he(c,I,g,15,8,0)},B.deflateInit2=he,B.deflateReset=de,B.deflateResetKeep=se,B.deflateSetHeader=function(c,I){return c&&c.state?c.state.wrap!==2?y:(c.state.gzhead=I,i):y},B.deflate=function(c,I){var M,A,x,D;if(!c||!c.state||5>8&255),J(A,A.gzhead.time>>16&255),J(A,A.gzhead.time>>24&255),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,255&A.gzhead.os),A.gzhead.extra&&A.gzhead.extra.length&&(J(A,255&A.gzhead.extra.length),J(A,A.gzhead.extra.length>>8&255)),A.gzhead.hcrc&&(c.adler=r(c.adler,A.pending_buf,A.pending,0)),A.gzindex=0,A.status=69):(J(A,0),J(A,0),J(A,0),J(A,0),J(A,0),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,3),A.status=C);else{var j=g+(A.w_bits-8<<4)<<8;j|=(2<=A.strategy||A.level<2?0:A.level<6?1:A.level===6?2:3)<<6,A.strstart!==0&&(j|=32),j+=31-j%31,A.status=C,X(A,j),A.strstart!==0&&(X(A,c.adler>>>16),X(A,65535&c.adler)),c.adler=1}if(A.status===69)if(A.gzhead.extra){for(x=A.pending;A.gzindex<(65535&A.gzhead.extra.length)&&(A.pending!==A.pending_buf_size||(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending!==A.pending_buf_size));)J(A,255&A.gzhead.extra[A.gzindex]),A.gzindex++;A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),A.gzindex===A.gzhead.extra.length&&(A.gzindex=0,A.status=73)}else A.status=73;if(A.status===73)if(A.gzhead.name){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.gzindex=0,A.status=91)}else A.status=91;if(A.status===91)if(A.gzhead.comment){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.status=103)}else A.status=103;if(A.status===103&&(A.gzhead.hcrc?(A.pending+2>A.pending_buf_size&&z(c),A.pending+2<=A.pending_buf_size&&(J(A,255&c.adler),J(A,c.adler>>8&255),c.adler=0,A.status=C)):A.status=C),A.pending!==0){if(z(c),c.avail_out===0)return A.last_flush=-1,i}else if(c.avail_in===0&&W(I)<=W(M)&&I!==a)return q(c,-5);if(A.status===666&&c.avail_in!==0)return q(c,-5);if(c.avail_in!==0||A.lookahead!==0||I!==f&&A.status!==666){var U=A.strategy===2?function(N,H){for(var G;;){if(N.lookahead===0&&(ae(N),N.lookahead===0)){if(H===f)return o;break}if(N.match_length=0,G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++,G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):A.strategy===3?function(N,H){for(var G,$,K,re,ee=N.window;;){if(N.lookahead<=k){if(ae(N),N.lookahead<=k&&H===f)return o;if(N.lookahead===0)break}if(N.match_length=0,N.lookahead>=b&&0N.lookahead&&(N.match_length=N.lookahead)}if(N.match_length>=b?(G=e._tr_tally(N,1,N.match_length-b),N.lookahead-=N.match_length,N.strstart+=N.match_length,N.match_length=0):(G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++),G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):S[A.level].func(A,I);if(U!==V&&U!==F||(A.status=666),U===o||U===V)return c.avail_out===0&&(A.last_flush=-1),i;if(U===R&&(I===1?e._tr_align(A):I!==5&&(e._tr_stored_block(A,0,0,!1),I===3&&(Y(A.head),A.lookahead===0&&(A.strstart=0,A.block_start=0,A.insert=0))),z(c),c.avail_out===0))return A.last_flush=-1,i}return I!==a?i:A.wrap<=0?1:(A.wrap===2?(J(A,255&c.adler),J(A,c.adler>>8&255),J(A,c.adler>>16&255),J(A,c.adler>>24&255),J(A,255&c.total_in),J(A,c.total_in>>8&255),J(A,c.total_in>>16&255),J(A,c.total_in>>24&255)):(X(A,c.adler>>>16),X(A,65535&c.adler)),z(c),0=M.w_size&&(D===0&&(Y(M.head),M.strstart=0,M.block_start=0,M.insert=0),H=new v.Buf8(M.w_size),v.arraySet(H,I,G-M.w_size,M.w_size,0),I=H,G=M.w_size),j=c.avail_in,U=c.next_in,N=c.input,c.avail_in=G,c.next_in=0,c.input=I,ae(M);M.lookahead>=b;){for(A=M.strstart,x=M.lookahead-(b-1);M.ins_h=(M.ins_h<>>=b=l>>>24,w-=b,(b=l>>>16&255)===0)R[m++]=65535&l;else{if(!(16&b)){if(!(64&b)){l=P[(65535&l)+(g&(1<>>=b,w-=b),w<15&&(g+=o[u++]<>>=b=l>>>24,w-=b,!(16&(b=l>>>16&255))){if(!(64&b)){l=n[(65535&l)+(g&(1<>>=b,w-=b,(b=m-f)>3,g&=(1<<(w-=k<<3))-1,S.next_in=u,S.next_out=m,S.avail_in=u>>24&255)+(_>>>8&65280)+((65280&_)<<8)+((255&_)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new S.Buf16(320),this.work=new S.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function w(_){var C;return _&&_.state?(C=_.state,_.total_in=_.total_out=C.total=0,_.msg="",C.wrap&&(_.adler=1&C.wrap),C.mode=y,C.last=0,C.havedict=0,C.dmax=32768,C.head=null,C.hold=0,C.bits=0,C.lencode=C.lendyn=new S.Buf32(h),C.distcode=C.distdyn=new S.Buf32(d),C.sane=1,C.back=-1,a):i}function P(_){var C;return _&&_.state?((C=_.state).wsize=0,C.whave=0,C.wnext=0,w(_)):i}function n(_,C){var o,R;return _&&_.state?(R=_.state,C<0?(o=0,C=-C):(o=1+(C>>4),C<48&&(C&=15)),C&&(C<8||15=F.wsize?(S.arraySet(F.window,C,o-F.wsize,F.wsize,0),F.wnext=0,F.whave=F.wsize):(R<(V=F.wsize-F.wnext)&&(V=R),S.arraySet(F.window,C,o-R,V,F.wnext),(R-=V)?(S.arraySet(F.window,C,o-R,R,0),F.wnext=R,F.whave=F.wsize):(F.wnext+=V,F.wnext===F.wsize&&(F.wnext=0),F.whave>>8&255,o.check=e(o.check,D,2,0),O=z=0,o.mode=2;break}if(o.flags=0,o.head&&(o.head.done=!1),!(1&o.wrap)||(((255&z)<<8)+(z>>8))%31){_.msg="incorrect header check",o.mode=30;break}if((15&z)!=8){_.msg="unknown compression method",o.mode=30;break}if(O-=4,c=8+(15&(z>>>=4)),o.wbits===0)o.wbits=c;else if(c>o.wbits){_.msg="invalid window size",o.mode=30;break}o.dmax=1<>8&1),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=3;case 3:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>8&255,D[2]=z>>>16&255,D[3]=z>>>24&255,o.check=e(o.check,D,4,0)),O=z=0,o.mode=4;case 4:for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>8),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=5;case 5:if(1024&o.flags){for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>>8&255,o.check=e(o.check,D,2,0)),O=z=0}else o.head&&(o.head.extra=null);o.mode=6;case 6:if(1024&o.flags&&(W<(Z=o.length)&&(Z=W),Z&&(o.head&&(c=o.head.extra_len-o.length,o.head.extra||(o.head.extra=new Array(o.head.extra_len)),S.arraySet(o.head.extra,R,F,Z,c)),512&o.flags&&(o.check=e(o.check,R,Z,F)),W-=Z,F+=Z,o.length-=Z),o.length))break e;o.length=0,o.mode=7;case 7:if(2048&o.flags){if(W===0)break e;for(Z=0;c=R[F+Z++],o.head&&c&&o.length<65536&&(o.head.name+=String.fromCharCode(c)),c&&Z>9&1,o.head.done=!0),_.adler=o.check=0,o.mode=12;break;case 10:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>=7&O,O-=7&O,o.mode=27;break}for(;O<3;){if(W===0)break e;W--,z+=R[F++]<>>=1)){case 0:o.mode=14;break;case 1:if(k(o),o.mode=20,C!==6)break;z>>>=2,O-=2;break e;case 2:o.mode=17;break;case 3:_.msg="invalid block type",o.mode=30}z>>>=2,O-=2;break;case 14:for(z>>>=7&O,O-=7&O;O<32;){if(W===0)break e;W--,z+=R[F++]<>>16^65535)){_.msg="invalid stored block lengths",o.mode=30;break}if(o.length=65535&z,O=z=0,o.mode=15,C===6)break e;case 15:o.mode=16;case 16:if(Z=o.length){if(W>>=5,O-=5,o.ndist=1+(31&z),z>>>=5,O-=5,o.ncode=4+(15&z),z>>>=4,O-=4,286>>=3,O-=3}for(;o.have<19;)o.lens[j[o.have++]]=0;if(o.lencode=o.lendyn,o.lenbits=7,M={bits:o.lenbits},I=r(0,o.lens,0,19,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid code lengths set",o.mode=30;break}o.have=0,o.mode=19;case 19:for(;o.have>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=Q,O-=Q,o.lens[o.have++]=oe;else{if(oe===16){for(A=Q+2;O>>=Q,O-=Q,o.have===0){_.msg="invalid bit length repeat",o.mode=30;break}c=o.lens[o.have-1],Z=3+(3&z),z>>>=2,O-=2}else if(oe===17){for(A=Q+3;O>>=Q)),z>>>=3,O-=3}else{for(A=Q+7;O>>=Q)),z>>>=7,O-=7}if(o.have+Z>o.nlen+o.ndist){_.msg="invalid bit length repeat",o.mode=30;break}for(;Z--;)o.lens[o.have++]=c}}if(o.mode===30)break;if(o.lens[256]===0){_.msg="invalid code -- missing end-of-block",o.mode=30;break}if(o.lenbits=9,M={bits:o.lenbits},I=r(m,o.lens,0,o.nlen,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid literal/lengths set",o.mode=30;break}if(o.distbits=6,o.distcode=o.distdyn,M={bits:o.distbits},I=r(f,o.lens,o.nlen,o.ndist,o.distcode,0,o.work,M),o.distbits=M.bits,I){_.msg="invalid distances set",o.mode=30;break}if(o.mode=20,C===6)break e;case 20:o.mode=21;case 21:if(6<=W&&258<=Y){_.next_out=q,_.avail_out=Y,_.next_in=F,_.avail_in=W,o.hold=z,o.bits=O,u(_,X),q=_.next_out,V=_.output,Y=_.avail_out,F=_.next_in,R=_.input,W=_.avail_in,z=o.hold,O=o.bits,o.mode===12&&(o.back=-1);break}for(o.back=0;te=(x=o.lencode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,o.length=oe,te===0){o.mode=26;break}if(32&te){o.back=-1,o.mode=12;break}if(64&te){_.msg="invalid literal/length code",o.mode=30;break}o.extra=15&te,o.mode=22;case 22:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}o.was=o.length,o.mode=23;case 23:for(;te=(x=o.distcode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,64&te){_.msg="invalid distance code",o.mode=30;break}o.offset=oe,o.extra=15&te,o.mode=24;case 24:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}if(o.offset>o.dmax){_.msg="invalid distance too far back",o.mode=30;break}o.mode=25;case 25:if(Y===0)break e;if(Z=X-Y,o.offset>Z){if((Z=o.offset-Z)>o.whave&&o.sane){_.msg="invalid distance too far back",o.mode=30;break}ae=Z>o.wnext?(Z-=o.wnext,o.wsize-Z):o.wnext-Z,Z>o.length&&(Z=o.length),le=o.window}else le=V,ae=q-o.offset,Z=o.length;for(Yt?(b=ae[le+d[C]],O[J+d[C]]):(b=96,0),g=1<<_-q,o=w=1<>q)+(w-=g)]=l<<24|b<<16|k|0,w!==0;);for(g=1<<_-1;z&g;)g>>=1;if(g!==0?(z&=g-1,z+=g):z=0,C++,--X[_]==0){if(_===R)break;_=f[a+d[C]]}if(V<_&&(z&n)!==P){for(q===0&&(q=V),s+=o,W=1<<(F=_-q);F+q>>7)]}function J(x,D){x.pending_buf[x.pending++]=255&D,x.pending_buf[x.pending++]=D>>>8&255}function X(x,D,j){x.bi_valid>p-j?(x.bi_buf|=D<>p-x.bi_valid,x.bi_valid+=j-p):(x.bi_buf|=D<>>=1,j<<=1,0<--D;);return j>>>1}function le(x,D,j){var U,N,H=new Array(d+1),G=0;for(U=1;U<=d;U++)H[U]=G=G+j[U-1]<<1;for(N=0;N<=D;N++){var $=x[2*N+1];$!==0&&(x[2*N]=ae(H[$]++,$))}}function Q(x){var D;for(D=0;D>1;1<=j;j--)se(x,H,j);for(N=K;j=x.heap[1],x.heap[1]=x.heap[x.heap_len--],se(x,H,1),U=x.heap[1],x.heap[--x.heap_max]=j,x.heap[--x.heap_max]=U,H[2*N]=H[2*j]+H[2*U],x.depth[N]=(x.depth[j]>=x.depth[U]?x.depth[j]:x.depth[U])+1,H[2*j+1]=H[2*U+1]=N,x.heap[1]=N++,se(x,H,1),2<=x.heap_len;);x.heap[--x.heap_max]=x.heap[1],function(ee,ue){var me,pe,ge,ie,ye,we,fe=ue.dyn_tree,Se=ue.max_code,Te=ue.stat_desc.static_tree,Ee=ue.stat_desc.has_stree,De=ue.stat_desc.extra_bits,Ae=ue.stat_desc.extra_base,be=ue.stat_desc.max_length,ve=0;for(ie=0;ie<=d;ie++)ee.bl_count[ie]=0;for(fe[2*ee.heap[ee.heap_max]+1]=0,me=ee.heap_max+1;me>=7;N>>=1)if(1&re&&$.dyn_ltree[2*K]!==0)return v;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return e;for(K=32;K>>3,(H=x.static_len+3+7>>>3)<=N&&(N=H)):N=H=j+5,j+4<=N&&D!==-1?A(x,D,j,U):x.strategy===4||H===N?(X(x,2+(U?1:0),3),de(x,E,_)):(X(x,4+(U?1:0),3),function($,K,re,ee){var ue;for(X($,K-257,5),X($,re-1,5),X($,ee-4,4),ue=0;ue>>8&255,x.pending_buf[x.d_buf+2*x.last_lit+1]=255&D,x.pending_buf[x.l_buf+x.last_lit]=255&j,x.last_lit++,D===0?x.dyn_ltree[2*j]++:(x.matches++,D--,x.dyn_ltree[2*(o[j]+f+1)]++,x.dyn_dtree[2*O(D)]++),x.last_lit===x.lit_bufsize-1},B._tr_align=function(x){X(x,2,3),Z(x,w,E),function(D){D.bi_valid===16?(J(D,D.bi_buf),D.bi_buf=0,D.bi_valid=0):8<=D.bi_valid&&(D.pending_buf[D.pending++]=255&D.bi_buf,D.bi_buf>>=8,D.bi_valid-=8)}(x)}},{"../utils/common":41}],53:[function(T,L,B){L.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(T,L,B){(function(S){(function(v,e){if(!v.setImmediate){var u,r,m,f,a=1,i={},y=!1,h=v.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(v);d=d&&d.setTimeout?d:v,u={}.toString.call(v.process)==="[object process]"?function(P){process.nextTick(function(){g(P)})}:function(){if(v.postMessage&&!v.importScripts){var P=!0,n=v.onmessage;return v.onmessage=function(){P=!1},v.postMessage("","*"),v.onmessage=n,P}}()?(f="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",w,!1):v.attachEvent("onmessage",w),function(P){v.postMessage(f+P,"*")}):v.MessageChannel?((m=new MessageChannel).port1.onmessage=function(P){g(P.data)},function(P){m.port2.postMessage(P)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,function(P){var n=h.createElement("script");n.onreadystatechange=function(){g(P),n.onreadystatechange=null,r.removeChild(n),n=null},r.appendChild(n)}):function(P){setTimeout(g,0,P)},d.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var n=new Array(arguments.length-1),s=0;s"u"?S===void 0?this:S:self)}).call(this,typeof _e<"u"?_e:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(xe)),xe.exports}(function(ne,ce){(function(T,L){ne.exports=L(Be())})(globalThis,T=>(()=>{var L={438:(v,e,u)=>{u.r(e),u.d(e,{default:()=>g});var r=u(537),m=u.n(r),f=u(645),a=u.n(f),i=u(806),y=u.n(i),h=new URL(u(583),u.b),d=a()(m()),p=y()(h);d.push([v.id,`@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${p})}`,"",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:[`@namespace "http://www.w3.org/1998/Math/MathML";\r +\r +math {\r + display: inline-block;\r + line-height: initial;\r +}\r +\r +mfrac {\r + display: inline-block;\r + vertical-align: -50%;\r + text-align: center;\r +\r + &>:first-child {\r + border-bottom: solid thin currentColor;\r + }\r +\r + &>* {\r + display: block;\r + }\r +}\r +\r +msub {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: sub;\r + }\r +}\r +\r +msup {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: super;\r + }\r +}\r +\r +munder, mover, munderover {\r + display: inline-flex;\r + flex-flow: column nowrap;\r + vertical-align: middle;\r + text-align: center;\r +\r + &>:not(:first-child) {\r + font-size: smaller;\r + }\r +}\r +\r +munderover {\r + &>:last-child { order: -1; }\r +}\r +\r +mroot, msqrt {\r + position: relative;\r + display: inline-block;\r + border-top: solid thin currentColor; \r + margin-top: 0.5px;\r + vertical-align: middle; \r + margin-left: 1ch; \r +\r + &:before {\r + content: "";\r + display: inline-block;\r + position: absolute;\r + width: 1ch;\r + left: -1ch;\r + top: -1px;\r + bottom: 0;\r + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");\r + }\r +}`],sourceRoot:""}]);const g=d.toString()},645:v=>{v.exports=function(e){var u=[];return u.toString=function(){return this.map(function(r){var m="",f=r[5]!==void 0;return r[4]&&(m+="@supports (".concat(r[4],") {")),r[2]&&(m+="@media ".concat(r[2]," {")),f&&(m+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),m+=e(r),f&&(m+="}"),r[2]&&(m+="}"),r[4]&&(m+="}"),m}).join("")},u.i=function(r,m,f,a,i){typeof r=="string"&&(r=[[null,r,void 0]]);var y={};if(f)for(var h=0;h0?" ".concat(g[5]):""," {").concat(g[1],"}")),g[5]=i),m&&(g[2]&&(g[1]="@media ".concat(g[2]," {").concat(g[1],"}")),g[2]=m),a&&(g[4]?(g[1]="@supports (".concat(g[4],") {").concat(g[1],"}"),g[4]=a):g[4]="".concat(a)),u.push(g))}},u}},806:v=>{v.exports=function(e,u){return u||(u={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),u.hash&&(e+=u.hash),/["'() \t\n]|(%20)/.test(e)||u.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},537:v=>{v.exports=function(e){var u=e[1],r=e[3];if(!r)return u;if(typeof btoa=="function"){var m=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),f="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(m),a="/*# ".concat(f," */");return[u].concat([a]).join(` +`)}return[u].join(` +`)}},522:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlPackage=void 0;const r=u(626),m=u(472),f=u(593),a=u(461);class i{constructor(h,d){this._zip=h,this.options=d,this.xmlParser=new m.XmlParser}get(h){return this._zip.files[function(d){return d.startsWith("/")?d.substr(1):d}(h)]}update(h,d){this._zip.file(h,d)}static async load(h,d){const p=await r.loadAsync(h);return new i(p,d)}save(h="blob"){return this._zip.generateAsync({type:h})}load(h,d="string"){var p,g;return(g=(p=this.get(h))===null||p===void 0?void 0:p.async(d))!==null&&g!==void 0?g:Promise.resolve(null)}async loadRelationships(h=null){let d="_rels/.rels";if(h!=null){const[g,w]=(0,f.splitPath)(h);d=`${g}_rels/${w}.rels`}const p=await this.load(d);return p?(0,a.parseRelationships)(this.parseXmlDocument(p).firstElementChild,this.xmlParser):null}parseXmlDocument(h){return(0,m.parseXmlString)(h,this.options.trimXmlDeclaration)}}e.OpenXmlPackage=i},530:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Part=void 0;const r=u(472);e.Part=class{constructor(m,f){this._package=m,this.path=f}async load(){this.rels=await this._package.loadRelationships(this.path);const m=await this._package.load(this.path),f=this._package.parseXmlDocument(m);this._package.options.keepOrigin&&(this._xmlDocument=f),this.parseXml(f.firstElementChild)}save(){this._package.update(this.path,(0,r.serializeXmlString)(this._xmlDocument))}parseXml(m){}}},461:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.parseRelationships=e.RelationshipTypes=void 0,function(r){r.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",r.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",r.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",r.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",r.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",r.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",r.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",r.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",r.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",r.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",r.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",r.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",r.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",r.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",r.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",r.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",r.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties"}(u||(e.RelationshipTypes=u={})),e.parseRelationships=function(r,m){return m.elements(r).map(f=>({id:m.attr(f,"Id"),type:m.attr(f,"Type"),target:m.attr(f,"Target"),targetMode:m.attr(f,"TargetMode")}))}},168:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentParser=e.autos=void 0;const r=u(120),m=u(109),f=u(59),a=u(472),i=u(488),y=u(172),h=u(149),d=u(320);e.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const p=[],g={oMath:r.DomType.MmlMath,oMathPara:r.DomType.MmlMathParagraph,f:r.DomType.MmlFraction,func:r.DomType.MmlFunction,fName:r.DomType.MmlFunctionName,num:r.DomType.MmlNumerator,den:r.DomType.MmlDenominator,rad:r.DomType.MmlRadical,deg:r.DomType.MmlDegree,e:r.DomType.MmlBase,sSup:r.DomType.MmlSuperscript,sSub:r.DomType.MmlSubscript,sPre:r.DomType.MmlPreSubSuper,sup:r.DomType.MmlSuperArgument,sub:r.DomType.MmlSubArgument,d:r.DomType.MmlDelimiter,nary:r.DomType.MmlNary,eqArr:r.DomType.MmlEquationArray,lim:r.DomType.MmlLimit,limLow:r.DomType.MmlLimitLower,m:r.DomType.MmlMatrix,mr:r.DomType.MmlMatrixRow,box:r.DomType.MmlBox,bar:r.DomType.MmlBar,groupChr:r.DomType.MmlGroupChar};e.DocumentParser=class{constructor(s){this.options=Object.assign({ignoreWidth:!1,debug:!1},s)}parseNotes(s,t,l){var b=[];for(let k of a.default.elements(s,t)){const E=new l;E.id=a.default.attr(k,"id"),E.noteType=a.default.attr(k,"type"),E.children=this.parseBodyElements(k),b.push(E)}return b}parseDocumentFile(s){var t=a.default.element(s,"body"),l=a.default.element(s,"background"),b=a.default.element(t,"sectPr");return{type:r.DomType.Document,children:this.parseBodyElements(t),props:b?(0,f.parseSectionProperties)(b,a.default):{},cssStyle:l?this.parseBackground(l):{}}}parseBackground(s){var t={},l=P.colorAttr(s,"color");return l&&(t["background-color"]=l),t}parseBodyElements(s){var t=[];for(let l of a.default.elements(s))switch(l.localName){case"p":t.push(this.parseParagraph(l));break;case"tbl":t.push(this.parseTable(l));break;case"sdt":t.push(...this.parseSdt(l,b=>this.parseBodyElements(b)))}return t}parseStylesFile(s){var t=[];return P.foreach(s,l=>{switch(l.localName){case"style":t.push(this.parseStyle(l));break;case"docDefaults":t.push(this.parseDefaultStyles(l))}}),t}parseDefaultStyles(s){var t={id:null,name:null,target:null,basedOn:null,styles:[]};return P.foreach(s,l=>{switch(l.localName){case"rPrDefault":var b=a.default.element(l,"rPr");b&&t.styles.push({target:"span",values:this.parseDefaultProperties(b,{})});break;case"pPrDefault":var k=a.default.element(l,"pPr");k&&t.styles.push({target:"p",values:this.parseDefaultProperties(k,{})})}}),t}parseStyle(s){var t={id:a.default.attr(s,"styleId"),isDefault:a.default.boolAttr(s,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(a.default.attr(s,"type")){case"paragraph":t.target="p";break;case"table":t.target="table";break;case"character":t.target="span"}return P.foreach(s,l=>{switch(l.localName){case"basedOn":t.basedOn=a.default.attr(l,"val");break;case"name":t.name=a.default.attr(l,"val");break;case"link":t.linked=a.default.attr(l,"val");break;case"next":t.next=a.default.attr(l,"val");break;case"aliases":t.aliases=a.default.attr(l,"val").split(",");break;case"pPr":t.styles.push({target:"p",values:this.parseDefaultProperties(l,{})}),t.paragraphProps=(0,m.parseParagraphProperties)(l,a.default);break;case"rPr":t.styles.push({target:"span",values:this.parseDefaultProperties(l,{})}),t.runProps=(0,i.parseRunProperties)(l,a.default);break;case"tblPr":case"tcPr":t.styles.push({target:"td",values:this.parseDefaultProperties(l,{})});break;case"tblStylePr":for(let b of this.parseTableStyle(l))t.styles.push(b);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${l.localName}`)}}),t}parseTableStyle(s){var t=[],l=a.default.attr(s,"type"),b="",k="";switch(l){case"firstRow":k=".first-row",b="tr.first-row td";break;case"lastRow":k=".last-row",b="tr.last-row td";break;case"firstCol":k=".first-col",b="td.first-col";break;case"lastCol":k=".last-col",b="td.last-col";break;case"band1Vert":k=":not(.no-vband)",b="td.odd-col";break;case"band2Vert":k=":not(.no-vband)",b="td.even-col";break;case"band1Horz":k=":not(.no-hband)",b="tr.odd-row";break;case"band2Horz":k=":not(.no-hband)",b="tr.even-row";break;default:return[]}return P.foreach(s,E=>{switch(E.localName){case"pPr":t.push({target:`${b} p`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"rPr":t.push({target:`${b} span`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"tblPr":case"tcPr":t.push({target:b,mod:k,values:this.parseDefaultProperties(E,{})})}}),t}parseNumberingFile(s){var t=[],l={},b=[];return P.foreach(s,k=>{switch(k.localName){case"abstractNum":this.parseAbstractNumbering(k,b).forEach(C=>t.push(C));break;case"numPicBullet":b.push(this.parseNumberingPicBullet(k));break;case"num":var E=a.default.attr(k,"numId"),_=a.default.elementAttr(k,"abstractNumId","val");l[_]=E}}),t.forEach(k=>k.id=l[k.id]),t}parseNumberingPicBullet(s){var t=a.default.element(s,"pict"),l=t&&a.default.element(t,"shape"),b=l&&a.default.element(l,"imagedata");return b?{id:a.default.intAttr(s,"numPicBulletId"),src:a.default.attr(b,"id"),style:a.default.attr(l,"style")}:null}parseAbstractNumbering(s,t){var l=[],b=a.default.attr(s,"abstractNumId");return P.foreach(s,k=>{k.localName==="lvl"&&l.push(this.parseNumberingLevel(b,k,t))}),l}parseNumberingLevel(s,t,l){var b={id:s,level:a.default.intAttr(t,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return P.foreach(t,k=>{switch(k.localName){case"start":b.start=a.default.intAttr(k,"val");break;case"pPr":this.parseDefaultProperties(k,b.pStyle);break;case"rPr":this.parseDefaultProperties(k,b.rStyle);break;case"lvlPicBulletId":var E=a.default.intAttr(k,"val");b.bullet=l.find(_=>_.id==E);break;case"lvlText":b.levelText=a.default.attr(k,"val");break;case"pStyle":b.pStyleName=a.default.attr(k,"val");break;case"numFmt":b.format=a.default.attr(k,"val");break;case"suff":b.suff=a.default.attr(k,"val")}}),b}parseSdt(s,t){const l=a.default.element(s,"sdtContent");return l?t(l):[]}parseInserted(s,t){var l,b;return{type:r.DomType.Inserted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseDeleted(s,t){var l,b;return{type:r.DomType.Deleted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseParagraph(s){var t={type:r.DomType.Paragraph,children:[]};for(let l of a.default.elements(s))switch(l.localName){case"pPr":this.parseParagraphProperties(l,t);break;case"r":t.children.push(this.parseRun(l,t));break;case"hyperlink":t.children.push(this.parseHyperlink(l,t));break;case"bookmarkStart":t.children.push((0,y.parseBookmarkStart)(l,a.default));break;case"bookmarkEnd":t.children.push((0,y.parseBookmarkEnd)(l,a.default));break;case"oMath":case"oMathPara":t.children.push(this.parseMathElement(l));break;case"sdt":t.children.push(...this.parseSdt(l,b=>this.parseParagraph(b).children));break;case"ins":t.children.push(this.parseInserted(l,b=>this.parseParagraph(b)));break;case"del":t.children.push(this.parseDeleted(l,b=>this.parseParagraph(b)))}return t}parseParagraphProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{if((0,m.parseParagraphProperty)(l,t,a.default))return!0;switch(l.localName){case"pStyle":t.styleName=a.default.attr(l,"val");break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"framePr":this.parseFrame(l,t);break;case"rPr":break;default:return!1}return!0})}parseFrame(s,t){a.default.attr(s,"dropCap")=="drop"&&(t.cssStyle.float="left")}parseHyperlink(s,t){var l={type:r.DomType.Hyperlink,parent:t,children:[]},b=a.default.attr(s,"anchor"),k=a.default.attr(s,"id");return b&&(l.href="#"+b),k&&(l.id=k),P.foreach(s,E=>{E.localName==="r"&&l.children.push(this.parseRun(E,l))}),l}parseRun(s,t){var l={type:r.DomType.Run,parent:t,children:[]};return P.foreach(s,b=>{switch((b=this.checkAlternateContent(b)).localName){case"t":l.children.push({type:r.DomType.Text,text:b.textContent});break;case"delText":l.children.push({type:r.DomType.DeletedText,text:b.textContent});break;case"fldSimple":l.children.push({type:r.DomType.SimpleField,instruction:a.default.attr(b,"instr"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"instrText":l.fieldRun=!0,l.children.push({type:r.DomType.Instruction,text:b.textContent});break;case"fldChar":l.fieldRun=!0,l.children.push({type:r.DomType.ComplexField,charType:a.default.attr(b,"fldCharType"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"noBreakHyphen":l.children.push({type:r.DomType.NoBreakHyphen});break;case"br":l.children.push({type:r.DomType.Break,break:a.default.attr(b,"type")||"textWrapping"});break;case"lastRenderedPageBreak":l.children.push({type:r.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":l.children.push({type:r.DomType.Symbol,font:a.default.attr(b,"font"),char:a.default.attr(b,"char")});break;case"tab":l.children.push({type:r.DomType.Tab});break;case"footnoteReference":l.children.push({type:r.DomType.FootnoteReference,id:a.default.attr(b,"id")});break;case"endnoteReference":l.children.push({type:r.DomType.EndnoteReference,id:a.default.attr(b,"id")});break;case"drawing":let k=this.parseDrawing(b);k&&(l.children=[k]);break;case"pict":l.children.push(this.parseVmlPicture(b));break;case"rPr":this.parseRunProperties(b,l)}}),l}parseMathElement(s){const t=`${s.localName}Pr`,l={type:g[s.localName],children:[]};for(const k of a.default.elements(s))if(g[k.localName])l.children.push(this.parseMathElement(k));else if(k.localName=="r"){var b=this.parseRun(k);b.type=r.DomType.MmlRun,l.children.push(b)}else k.localName==t&&(l.props=this.parseMathProperies(k));return l}parseMathProperies(s){const t={};for(const l of a.default.elements(s))switch(l.localName){case"chr":t.char=a.default.attr(l,"val");break;case"vertJc":t.verticalJustification=a.default.attr(l,"val");break;case"pos":t.position=a.default.attr(l,"val");break;case"degHide":t.hideDegree=a.default.boolAttr(l,"val");break;case"begChr":t.beginChar=a.default.attr(l,"val");break;case"endChr":t.endChar=a.default.attr(l,"val")}return t}parseRunProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{switch(l.localName){case"rStyle":t.styleName=a.default.attr(l,"val");break;case"vertAlign":t.verticalAlign=n.valueOfVertAlign(l,!0);break;default:return!1}return!0})}parseVmlPicture(s){const t={type:r.DomType.VmlPicture,children:[]};for(const l of a.default.elements(s)){const b=(0,d.parseVmlElement)(l,this);b&&t.children.push(b)}return t}checkAlternateContent(s){var t;if(s.localName!="AlternateContent")return s;var l=a.default.element(s,"Choice");if(l){var b=a.default.attr(l,"Requires"),k=s.lookupNamespaceURI(b);if(p.includes(k))return l.firstElementChild}return(t=a.default.element(s,"Fallback"))===null||t===void 0?void 0:t.firstElementChild}parseDrawing(s){for(var t of a.default.elements(s))switch(t.localName){case"inline":case"anchor":return this.parseDrawingWrapper(t)}}parseDrawingWrapper(s){var t,l={type:r.DomType.Drawing,children:[],cssStyle:{}},b=s.localName=="anchor";let k=null,E=a.default.boolAttr(s,"simplePos"),_={relative:"page",align:"left",offset:"0"},C={relative:"page",align:"top",offset:"0"};for(var o of a.default.elements(s))switch(o.localName){case"simplePos":E&&(_.offset=a.default.lengthAttr(o,"x",h.LengthUsage.Emu),C.offset=a.default.lengthAttr(o,"y",h.LengthUsage.Emu));break;case"extent":l.cssStyle.width=a.default.lengthAttr(o,"cx",h.LengthUsage.Emu),l.cssStyle.height=a.default.lengthAttr(o,"cy",h.LengthUsage.Emu);break;case"positionH":case"positionV":if(!E){let q=o.localName=="positionH"?_:C;var R=a.default.element(o,"align"),V=a.default.element(o,"posOffset");q.relative=(t=a.default.attr(o,"relativeFrom"))!==null&&t!==void 0?t:q.relative,R&&(q.align=R.textContent),V&&(q.offset=P.sizeValue(V,h.LengthUsage.Emu))}break;case"wrapTopAndBottom":k="wrapTopAndBottom";break;case"wrapNone":k="wrapNone";break;case"graphic":var F=this.parseGraphic(o);F&&l.children.push(F)}return k=="wrapTopAndBottom"?(l.cssStyle.display="block",_.align&&(l.cssStyle["text-align"]=_.align,l.cssStyle.width="100%")):k=="wrapNone"?(l.cssStyle.display="block",l.cssStyle.position="relative",l.cssStyle.width="0px",l.cssStyle.height="0px",_.offset&&(l.cssStyle.left=_.offset),C.offset&&(l.cssStyle.top=C.offset)):!b||_.align!="left"&&_.align!="right"||(l.cssStyle.float=_.align),l}parseGraphic(s){var t=a.default.element(s,"graphicData");for(let l of a.default.elements(t))if(l.localName==="pic")return this.parsePicture(l);return null}parsePicture(s){var t={type:r.DomType.Image,src:"",cssStyle:{}},l=a.default.element(s,"blipFill"),b=a.default.element(l,"blip");t.src=a.default.attr(b,"embed");var k=a.default.element(s,"spPr"),E=a.default.element(k,"xfrm");for(var _ of(t.cssStyle.position="relative",a.default.elements(E)))switch(_.localName){case"ext":t.cssStyle.width=a.default.lengthAttr(_,"cx",h.LengthUsage.Emu),t.cssStyle.height=a.default.lengthAttr(_,"cy",h.LengthUsage.Emu);break;case"off":t.cssStyle.left=a.default.lengthAttr(_,"x",h.LengthUsage.Emu),t.cssStyle.top=a.default.lengthAttr(_,"y",h.LengthUsage.Emu)}return t}parseTable(s){var t={type:r.DomType.Table,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tr":t.children.push(this.parseTableRow(l));break;case"tblGrid":t.columns=this.parseTableColumns(l);break;case"tblPr":this.parseTableProperties(l,t)}}),t}parseTableColumns(s){var t=[];return P.foreach(s,l=>{l.localName==="gridCol"&&t.push({width:a.default.lengthAttr(l,"w")})}),t}parseTableProperties(s,t){switch(t.cssStyle={},t.cellStyle={},this.parseDefaultProperties(s,t.cssStyle,t.cellStyle,l=>{switch(l.localName){case"tblStyle":t.styleName=a.default.attr(l,"val");break;case"tblLook":t.className=n.classNameOftblLook(l);break;case"tblpPr":this.parseTablePosition(l,t);break;case"tblStyleColBandSize":t.colBandSize=a.default.intAttr(l,"val");break;case"tblStyleRowBandSize":t.rowBandSize=a.default.intAttr(l,"val");break;default:return!1}return!0}),t.cssStyle["text-align"]){case"center":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto",t.cssStyle["margin-right"]="auto";break;case"right":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto"}}parseTablePosition(s,t){var l=a.default.lengthAttr(s,"topFromText"),b=a.default.lengthAttr(s,"bottomFromText"),k=a.default.lengthAttr(s,"rightFromText"),E=a.default.lengthAttr(s,"leftFromText");t.cssStyle.float="left",t.cssStyle["margin-bottom"]=n.addSize(t.cssStyle["margin-bottom"],b),t.cssStyle["margin-left"]=n.addSize(t.cssStyle["margin-left"],E),t.cssStyle["margin-right"]=n.addSize(t.cssStyle["margin-right"],k),t.cssStyle["margin-top"]=n.addSize(t.cssStyle["margin-top"],l)}parseTableRow(s){var t={type:r.DomType.Row,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tc":t.children.push(this.parseTableCell(l));break;case"trPr":this.parseTableRowProperties(l,t)}}),t}parseTableRowProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{switch(l.localName){case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"tblHeader":t.isHeader=a.default.boolAttr(l,"val");break;default:return!1}return!0})}parseTableCell(s){var t={type:r.DomType.Cell,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tbl":t.children.push(this.parseTable(l));break;case"p":t.children.push(this.parseParagraph(l));break;case"tcPr":this.parseTableCellProperties(l,t)}}),t}parseTableCellProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{var b;switch(l.localName){case"gridSpan":t.span=a.default.intAttr(l,"val",null);break;case"vMerge":t.verticalMerge=(b=a.default.attr(l,"val"))!==null&&b!==void 0?b:"continue";break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;default:return!1}return!0})}parseDefaultProperties(s,t=null,l=null,b=null){return t=t||{},P.foreach(s,k=>{if(!(b!=null&&b(k)))switch(k.localName){case"jc":t["text-align"]=n.valueOfJc(k);break;case"textAlignment":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"color":t.color=P.colorAttr(k,"val",null,e.autos.color);break;case"sz":t["font-size"]=t["min-height"]=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"shd":t["background-color"]=P.colorAttr(k,"fill",null,e.autos.shd);break;case"highlight":t["background-color"]=P.colorAttr(k,"val",null,e.autos.highlight);break;case"vertAlign":break;case"position":t.verticalAlign=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":t.width=n.valueOfSize(k,"w");break;case"trHeight":this.parseTrHeight(k,t);break;case"strike":t["text-decoration"]=a.default.boolAttr(k,"val",!0)?"line-through":"none";break;case"b":t["font-weight"]=a.default.boolAttr(k,"val",!0)?"bold":"normal";break;case"i":t["font-style"]=a.default.boolAttr(k,"val",!0)?"italic":"normal";break;case"caps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"uppercase":"none";break;case"smallCaps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(k,t);break;case"ind":case"tblInd":this.parseIndentation(k,t);break;case"rFonts":this.parseFont(k,t);break;case"tblBorders":this.parseBorderProperties(k,l||t);break;case"tblCellSpacing":t["border-spacing"]=n.valueOfMargin(k),t["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(k,t);break;case"bdr":t.border=n.valueOfBorder(k);break;case"tcBorders":this.parseBorderProperties(k,t);break;case"vanish":a.default.boolAttr(k,"val",!0)&&(t.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(k,l||t);break;case"tblLayout":t["table-layout"]=n.valueOfTblLayout(k);break;case"vAlign":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"spacing":s.localName=="pPr"&&this.parseSpacing(k,t);break;case"wordWrap":a.default.boolAttr(k,"val")&&(t["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":t.hyphens=a.default.boolAttr(k,"val",!0)?"none":"auto";break;case"lang":t.$lang=a.default.attr(k,"val");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${s.localName}.${k.localName}`)}}),t}parseUnderline(s,t){var l=a.default.attr(s,"val");if(l!=null){switch(l){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":t["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":t["text-decoration-style"]="dotted";break;case"double":t["text-decoration-style"]="double";break;case"single":case"thick":case"words":t["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":t["text-decoration-style"]="wavy";break;case"none":t["text-decoration"]="none"}var b=P.colorAttr(s,"color");b&&(t["text-decoration-color"]=b)}}parseFont(s,t){var l=[a.default.attr(s,"ascii"),n.themeValue(s,"asciiTheme")].filter(b=>b).join(", ");l.length>0&&(t["font-family"]=l)}parseIndentation(s,t){var l=a.default.lengthAttr(s,"firstLine"),b=a.default.lengthAttr(s,"hanging"),k=a.default.lengthAttr(s,"left"),E=a.default.lengthAttr(s,"start"),_=a.default.lengthAttr(s,"right"),C=a.default.lengthAttr(s,"end");l&&(t["text-indent"]=l),b&&(t["text-indent"]=`-${b}`),(k||E)&&(t["margin-left"]=k||E),(_||C)&&(t["margin-right"]=_||C)}parseSpacing(s,t){var l=a.default.lengthAttr(s,"before"),b=a.default.lengthAttr(s,"after"),k=a.default.intAttr(s,"line",null),E=a.default.attr(s,"lineRule");if(l&&(t["margin-top"]=l),b&&(t["margin-bottom"]=b),k!==null)switch(E){case"auto":t["line-height"]=`${(k/240).toFixed(2)}`;break;case"atLeast":t["line-height"]=`calc(100% + ${k/20}pt)`;break;default:t["line-height"]=t["min-height"]=k/20+"pt"}}parseMarginProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"left":t["padding-left"]=n.valueOfMargin(l);break;case"right":t["padding-right"]=n.valueOfMargin(l);break;case"top":t["padding-top"]=n.valueOfMargin(l);break;case"bottom":t["padding-bottom"]=n.valueOfMargin(l)}})}parseTrHeight(s,t){a.default.attr(s,"hRule"),t.height=a.default.lengthAttr(s,"val")}parseBorderProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"start":case"left":t["border-left"]=n.valueOfBorder(l);break;case"end":case"right":t["border-right"]=n.valueOfBorder(l);break;case"top":t["border-top"]=n.valueOfBorder(l);break;case"bottom":t["border-bottom"]=n.valueOfBorder(l)}})}};const w=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class P{static foreach(t,l){for(var b=0;bl[k]=="1").join(" ")}static valueOfJc(t){var l=a.default.attr(t,"val");switch(l){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return l}static valueOfVertAlign(t,l=!1){var b=a.default.attr(t,"val");switch(b){case"subscript":return"sub";case"superscript":return l?"sup":"super"}return l?null:b}static valueOfTextAlignment(t){var l=a.default.attr(t,"val");switch(l){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return l}static addSize(t,l){return t==null?l:l==null?t:`calc(${t} + ${l})`}static classNameOftblLook(t){const l=a.default.hexAttr(t,"val",0);let b="";return(a.default.boolAttr(t,"firstRow")||32&l)&&(b+=" first-row"),(a.default.boolAttr(t,"lastRow")||64&l)&&(b+=" last-row"),(a.default.boolAttr(t,"firstColumn")||128&l)&&(b+=" first-col"),(a.default.boolAttr(t,"lastColumn")||256&l)&&(b+=" last-col"),(a.default.boolAttr(t,"noHBand")||512&l)&&(b+=" no-hband"),(a.default.boolAttr(t,"noVBand")||1024&l)&&(b+=" no-vband"),b.trim()}}},162:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CorePropsPart=void 0;const r=u(530),m=u(614);class f extends r.Part{parseXml(i){this.props=(0,m.parseCoreProps)(i,this._package.xmlParser)}}e.CorePropsPart=f},614:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCoreProps=void 0,e.parseCoreProps=function(u,r){const m={};for(let f of r.elements(u))switch(f.localName){case"title":m.title=f.textContent;break;case"description":m.description=f.textContent;break;case"subject":m.subject=f.textContent;break;case"creator":m.creator=f.textContent;break;case"keywords":m.keywords=f.textContent;break;case"language":m.language=f.textContent;break;case"lastModifiedBy":m.lastModifiedBy=f.textContent;break;case"revision":f.textContent&&(m.revision=parseInt(f.textContent))}return m}},177:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomPropsPart=void 0;const r=u(530),m=u(821);class f extends r.Part{parseXml(i){this.props=(0,m.parseCustomProps)(i,this._package.xmlParser)}}e.CustomPropsPart=f},821:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCustomProps=void 0,e.parseCustomProps=function(u,r){return r.elements(u,"property").map(m=>{const f=m.firstChild;return{formatId:r.attr(m,"fmtid"),name:r.attr(m,"name"),type:f.nodeName,value:f.textContent}})}},665:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedPropsPart=void 0;const r=u(530),m=u(668);class f extends r.Part{parseXml(i){this.props=(0,m.parseExtendedProps)(i,this._package.xmlParser)}}e.ExtendedPropsPart=f},668:(v,e)=>{function u(r){if(r!==void 0)return parseInt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.parseExtendedProps=void 0,e.parseExtendedProps=function(r,m){const f={};for(let a of m.elements(r))switch(a.localName){case"Template":f.template=a.textContent;break;case"Pages":f.pages=u(a.textContent);break;case"Words":f.words=u(a.textContent);break;case"Characters":f.characters=u(a.textContent);break;case"Application":f.application=a.textContent;break;case"Lines":f.lines=u(a.textContent);break;case"Paragraphs":f.paragraphs=u(a.textContent);break;case"Company":f.company=a.textContent;break;case"AppVersion":f.appVersion=a.textContent}return f}},172:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBookmarkEnd=e.parseBookmarkStart=void 0;const r=u(120);e.parseBookmarkStart=function(m,f){return{type:r.DomType.BookmarkStart,id:f.attr(m,"id"),name:f.attr(m,"name"),colFirst:f.intAttr(m,"colFirst"),colLast:f.intAttr(m,"colLast")}},e.parseBookmarkEnd=function(m,f){return{type:r.DomType.BookmarkEnd,id:f.attr(m,"id")}}},191:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBorders=e.parseBorder=void 0;const r=u(149);function m(f,a){return{type:a.attr(f,"val"),color:a.attr(f,"color"),size:a.lengthAttr(f,"sz",r.LengthUsage.Border),offset:a.lengthAttr(f,"space",r.LengthUsage.Point),frame:a.boolAttr(f,"frame"),shadow:a.boolAttr(f,"shadow")}}e.parseBorder=m,e.parseBorders=function(f,a){var i={};for(let y of a.elements(f))switch(y.localName){case"left":i.left=m(y,a);break;case"top":i.top=m(y,a);break;case"right":i.right=m(y,a);break;case"bottom":i.bottom=m(y,a)}return i}},149:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCommonProperty=e.convertPercentage=e.convertBoolean=e.convertLength=e.LengthUsage=e.ns=void 0,e.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},e.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:7874015748031496e-20,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:.004166666666666667,unit:""},VmlEmu:{mul:7874015748031496e-20,unit:""}},e.convertLength=function(u,r=e.LengthUsage.Dxa){return u==null||/.+(p[xt]|[%])$/.test(u)?u:`${(parseInt(u)*r.mul).toFixed(2)}${r.unit}`},e.convertBoolean=function(u,r=!1){switch(u){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return r}},e.convertPercentage=function(u){return u?parseInt(u)/100:null},e.parseCommonProperty=function(u,r,m){if(u.namespaceURI!=e.ns.wordml)return!1;switch(u.localName){case"color":r.color=m.attr(u,"val");break;case"sz":r.fontSize=m.lengthAttr(u,"val",e.LengthUsage.FontSize);break;default:return!1}return!0}},448:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.body=this._documentParser.parseDocumentFile(a)}}e.DocumentPart=m},120:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlElementBase=e.DomType=void 0,function(r){r.Document="document",r.Paragraph="paragraph",r.Run="run",r.Break="break",r.NoBreakHyphen="noBreakHyphen",r.Table="table",r.Row="row",r.Cell="cell",r.Hyperlink="hyperlink",r.Drawing="drawing",r.Image="image",r.Text="text",r.Tab="tab",r.Symbol="symbol",r.BookmarkStart="bookmarkStart",r.BookmarkEnd="bookmarkEnd",r.Footer="footer",r.Header="header",r.FootnoteReference="footnoteReference",r.EndnoteReference="endnoteReference",r.Footnote="footnote",r.Endnote="endnote",r.SimpleField="simpleField",r.ComplexField="complexField",r.Instruction="instruction",r.VmlPicture="vmlPicture",r.MmlMath="mmlMath",r.MmlMathParagraph="mmlMathParagraph",r.MmlFraction="mmlFraction",r.MmlFunction="mmlFunction",r.MmlFunctionName="mmlFunctionName",r.MmlNumerator="mmlNumerator",r.MmlDenominator="mmlDenominator",r.MmlRadical="mmlRadical",r.MmlBase="mmlBase",r.MmlDegree="mmlDegree",r.MmlSuperscript="mmlSuperscript",r.MmlSubscript="mmlSubscript",r.MmlPreSubSuper="mmlPreSubSuper",r.MmlSubArgument="mmlSubArgument",r.MmlSuperArgument="mmlSuperArgument",r.MmlNary="mmlNary",r.MmlDelimiter="mmlDelimiter",r.MmlRun="mmlRun",r.MmlEquationArray="mmlEquationArray",r.MmlLimit="mmlLimit",r.MmlLimitLower="mmlLimitLower",r.MmlMatrix="mmlMatrix",r.MmlMatrixRow="mmlMatrixRow",r.MmlBox="mmlBox",r.MmlBar="mmlBar",r.MmlGroupChar="mmlGroupChar",r.VmlElement="vmlElement",r.Inserted="inserted",r.Deleted="deleted",r.DeletedText="deletedText"}(u||(e.DomType=u={})),e.OpenXmlElementBase=class{constructor(){this.children=[],this.cssStyle={}}}},931:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseLineSpacing=void 0,e.parseLineSpacing=function(u,r){return{before:r.lengthAttr(u,"before"),after:r.lengthAttr(u,"after"),line:r.intAttr(u,"line"),lineRule:r.attr(u,"lineRule")}}},109:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumbering=e.parseTabs=e.parseParagraphProperty=e.parseParagraphProperties=void 0;const r=u(149),m=u(59),f=u(931),a=u(488);function i(d,p,g){if(d.namespaceURI!=r.ns.wordml)return!1;if((0,r.parseCommonProperty)(d,p,g))return!0;switch(d.localName){case"tabs":p.tabs=y(d,g);break;case"sectPr":p.sectionProps=(0,m.parseSectionProperties)(d,g);break;case"numPr":p.numbering=h(d,g);break;case"spacing":return p.lineSpacing=(0,f.parseLineSpacing)(d,g),!1;case"textAlignment":return p.textAlignment=g.attr(d,"val"),!1;case"keepNext":p.keepLines=g.boolAttr(d,"val",!0);break;case"keepNext":p.keepNext=g.boolAttr(d,"val",!0);break;case"pageBreakBefore":p.pageBreakBefore=g.boolAttr(d,"val",!0);break;case"outlineLvl":p.outlineLevel=g.intAttr(d,"val");break;case"pStyle":p.styleName=g.attr(d,"val");break;case"rPr":p.runProps=(0,a.parseRunProperties)(d,g);break;default:return!1}return!0}function y(d,p){return p.elements(d,"tab").map(g=>({position:p.lengthAttr(g,"pos"),leader:p.attr(g,"leader"),style:p.attr(g,"val")}))}function h(d,p){var g={};for(let w of p.elements(d))switch(w.localName){case"numId":g.id=p.attr(w,"val");break;case"ilvl":g.level=p.intAttr(w,"val")}return g}e.parseParagraphProperties=function(d,p){let g={};for(let w of p.elements(d))i(w,g,p);return g},e.parseParagraphProperty=i,e.parseTabs=y,e.parseNumbering=h},488:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseRunProperty=e.parseRunProperties=void 0;const r=u(149);function m(f,a,i){return!!(0,r.parseCommonProperty)(f,a,i)}e.parseRunProperties=function(f,a){let i={};for(let y of a.elements(f))m(y,i,a);return i},e.parseRunProperty=m},59:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseSectionProperties=e.SectionType=void 0;const r=u(472),m=u(191);var f;function a(h,d){return{numberOfColumns:d.intAttr(h,"num"),space:d.lengthAttr(h,"space"),separator:d.boolAttr(h,"sep"),equalWidth:d.boolAttr(h,"equalWidth",!0),columns:d.elements(h,"col").map(p=>({width:d.lengthAttr(p,"w"),space:d.lengthAttr(p,"space")}))}}function i(h,d){return{chapSep:d.attr(h,"chapSep"),chapStyle:d.attr(h,"chapStyle"),format:d.attr(h,"fmt"),start:d.intAttr(h,"start")}}function y(h,d){return{id:d.attr(h,"id"),type:d.attr(h,"type")}}(function(h){h.Continuous="continuous",h.NextPage="nextPage",h.NextColumn="nextColumn",h.EvenPage="evenPage",h.OddPage="oddPage"})(f||(e.SectionType=f={})),e.parseSectionProperties=function(h,d=r.default){var p,g,w={};for(let P of d.elements(h))switch(P.localName){case"pgSz":w.pageSize={width:d.lengthAttr(P,"w"),height:d.lengthAttr(P,"h"),orientation:d.attr(P,"orient")};break;case"type":w.type=d.attr(P,"val");break;case"pgMar":w.pageMargins={left:d.lengthAttr(P,"left"),right:d.lengthAttr(P,"right"),top:d.lengthAttr(P,"top"),bottom:d.lengthAttr(P,"bottom"),header:d.lengthAttr(P,"header"),footer:d.lengthAttr(P,"footer"),gutter:d.lengthAttr(P,"gutter")};break;case"cols":w.columns=a(P,d);break;case"headerReference":((p=w.headerRefs)!==null&&p!==void 0?p:w.headerRefs=[]).push(y(P,d));break;case"footerReference":((g=w.footerRefs)!==null&&g!==void 0?g:w.footerRefs=[]).push(y(P,d));break;case"titlePg":w.titlePage=d.boolAttr(P,"val",!0);break;case"pgBorders":w.pageBorders=(0,m.parseBorders)(P,d);break;case"pgNumType":w.pageNumber=i(P,d)}return w}},667:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.renderAsync=e.praseAsync=e.defaultOptions=void 0;const r=u(213),m=u(168),f=u(932);e.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},e.praseAsync=function(a,i=null){const y=Object.assign(Object.assign({},e.defaultOptions),i);return r.WordDocument.load(a,new m.DocumentParser(y),y)},e.renderAsync=async function(a,i,y=null,h=null){const d=Object.assign(Object.assign({},e.defaultOptions),h),p=new f.HtmlRenderer(window.document),g=await r.WordDocument.load(a,new m.DocumentParser(d),d);return p.render(g,i,y,d),g}},380:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontTablePart=void 0;const r=u(530),m=u(512);class f extends r.Part{parseXml(i){this.fonts=(0,m.parseFonts)(i,this._package.xmlParser)}}e.FontTablePart=f},512:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseEmbedFontRef=e.parseFont=e.parseFonts=void 0;const u={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function r(f,a){let i={name:a.attr(f,"name"),embedFontRefs:[]};for(let y of a.elements(f))switch(y.localName){case"family":i.family=a.attr(y,"val");break;case"altName":i.altName=a.attr(y,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":i.embedFontRefs.push(m(y,a))}return i}function m(f,a){return{id:a.attr(f,"id"),key:a.attr(f,"fontKey"),type:u[f.localName]}}e.parseFonts=function(f,a){return a.elements(f).map(i=>r(i,a))},e.parseFont=r,e.parseEmbedFontRef=m},984:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlFooter=e.WmlHeader=void 0;const r=u(120);class m extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Header}}e.WmlHeader=m;class f extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Footer}}e.WmlFooter=f},985:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FooterPart=e.HeaderPart=e.BaseHeaderFooterPart=void 0;const r=u(530),m=u(984);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(i)}}e.BaseHeaderFooterPart=f,e.HeaderPart=class extends f{createRootElement(){return new m.WmlHeader}},e.FooterPart=class extends f{createRootElement(){return new m.WmlFooter}}},932:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlRenderer=void 0;const r=u(120),m=u(593),f=u(630),a=u(438),i="http://www.w3.org/1998/Math/MathML";function y(n,s,t){return d(void 0,n,s,t)}function h(n,s,t){return d("http://www.w3.org/2000/svg",n,s,t)}function d(n,s,t,l){var b=n?document.createElementNS(n,s):document.createElement(s);return Object.assign(b,t),l&&g(b,l),b}function p(n){n.innerHTML=""}function g(n,s){s.forEach(t=>n.appendChild((0,m.isString)(t)?document.createTextNode(t):t))}function w(n){return y("style",{innerHTML:n})}function P(n,s){n.appendChild(document.createComment(s))}e.HtmlRenderer=class{constructor(n){this.htmlDocument=n,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=y}render(n,s,t=null,l){var b;this.document=n,this.options=l,this.className=l.className,this.rootSelector=l.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,p(t=t||s),p(s),P(t,"docxjs library predefined styles"),t.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&l.useMathMLPolyfill&&(P(t,"docxjs mathml polyfill styles"),t.appendChild(w(a.default))),n.themePart&&(P(t,"docxjs document theme values"),this.renderTheme(n.themePart,t)),n.stylesPart!=null&&(this.styleMap=this.processStyles(n.stylesPart.styles),P(t,"docxjs document styles"),t.appendChild(this.renderStyles(n.stylesPart.styles))),n.numberingPart&&(this.prodessNumberings(n.numberingPart.domNumberings),P(t,"docxjs document numbering styles"),t.appendChild(this.renderNumbering(n.numberingPart.domNumberings,t))),n.footnotesPart&&(this.footnoteMap=(0,m.keyBy)(n.footnotesPart.notes,E=>E.id)),n.endnotesPart&&(this.endnoteMap=(0,m.keyBy)(n.endnotesPart.notes,E=>E.id)),n.settingsPart&&(this.defaultTabSize=(b=n.settingsPart.settings)===null||b===void 0?void 0:b.defaultTabStop),!l.ignoreFonts&&n.fontTablePart&&this.renderFontTable(n.fontTablePart,t);var k=this.renderSections(n.documentPart.body);this.options.inWrapper?s.appendChild(this.renderWrapper(k)):g(s,k),this.refreshTabStops()}renderTheme(n,s){var t,l;const b={},k=(t=n.theme)===null||t===void 0?void 0:t.fontScheme;k&&(k.majorFont&&(b["--docx-majorHAnsi-font"]=k.majorFont.latinTypeface),k.minorFont&&(b["--docx-minorHAnsi-font"]=k.minorFont.latinTypeface));const E=(l=n.theme)===null||l===void 0?void 0:l.colorScheme;if(E)for(let[C,o]of Object.entries(E.colors))b[`--docx-${C}-color`]=`#${o}`;const _=this.styleToString(`.${this.className}`,b);s.appendChild(w(_))}renderFontTable(n,s){for(let t of n.fonts)for(let l of t.embedFontRefs)this.document.loadFont(l.id,l.key).then(b=>{const k={"font-family":t.name,src:`url(${b})`};l.type!="bold"&&l.type!="boldItalic"||(k["font-weight"]="bold"),l.type!="italic"&&l.type!="boldItalic"||(k["font-style"]="italic"),P(s,`docxjs ${t.name} font`);const E=this.styleToString("@font-face",k);s.appendChild(w(E)),this.refreshTabStops()})}processStyleName(n){return n?`${this.className}_${(0,m.escapeClassName)(n)}`:this.className}processStyles(n){const s=(0,m.keyBy)(n.filter(l=>l.id!=null),l=>l.id);for(const l of n.filter(b=>b.basedOn)){var t=s[l.basedOn];if(t){l.paragraphProps=(0,m.mergeDeep)(l.paragraphProps,t.paragraphProps),l.runProps=(0,m.mergeDeep)(l.runProps,t.runProps);for(const b of t.styles){const k=l.styles.find(E=>E.target==b.target);k?this.copyStyleProperties(b.values,k.values):l.styles.push(Object.assign(Object.assign({},b),{values:Object.assign({},b.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${l.basedOn}`)}for(let l of n)l.cssName=this.processStyleName(l.id);return s}prodessNumberings(n){var s;for(let t of n.filter(l=>l.pStyleName)){const l=this.findStyle(t.pStyleName);!((s=l==null?void 0:l.paragraphProps)===null||s===void 0)&&s.numbering&&(l.paragraphProps.numbering.level=t.level)}}processElement(n){if(n.children)for(var s of n.children)s.parent=n,s.type==r.DomType.Table?this.processTable(s):this.processElement(s)}processTable(n){for(var s of n.children)for(var t of s.children)t.cssStyle=this.copyStyleProperties(n.cellStyle,t.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(t)}copyStyleProperties(n,s,t=null){if(!n)return s;for(var l of(s==null&&(s={}),t==null&&(t=Object.getOwnPropertyNames(n)),t))n.hasOwnProperty(l)&&!s.hasOwnProperty(l)&&(s[l]=n[l]);return s}createSection(n,s){var t=this.createElement("section",{className:n});return s&&(s.pageMargins&&(t.style.paddingLeft=s.pageMargins.left,t.style.paddingRight=s.pageMargins.right,t.style.paddingTop=s.pageMargins.top,t.style.paddingBottom=s.pageMargins.bottom),s.pageSize&&(this.options.ignoreWidth||(t.style.width=s.pageSize.width),this.options.ignoreHeight||(t.style.minHeight=s.pageSize.height)),s.columns&&s.columns.numberOfColumns&&(t.style.columnCount=`${s.columns.numberOfColumns}`,t.style.columnGap=s.columns.space,s.columns.separator&&(t.style.columnRule="1px solid black"))),t}renderSections(n){const s=[];this.processElement(n);const t=this.splitBySection(n.children);let l=null;for(let k=0,E=t.length;ko.type=="first"):null)!==null&&k!==void 0?k:t%2==1?n.find(o=>o.type=="even"):null)!==null&&E!==void 0?E:n.find(o=>o.type=="default"),C=_&&this.document.findPartByRelId(_.id,this.document.documentPart);C&&(this.currentPart=C,this.usedHederFooterParts.includes(C.path)||(this.processElement(C.rootElement),this.usedHederFooterParts.push(C.path)),this.renderElements([C.rootElement],b),this.currentPart=null)}}isPageBreakElement(n){return n.type==r.DomType.Break&&(n.break=="lastRenderedPageBreak"?!this.options.ignoreLastRenderedPageBreak:n.break=="page")}splitBySection(n){var s,t={sectProps:null,elements:[]},l=[t];for(let R of n){if(R.type==r.DomType.Paragraph){const V=this.findStyle(R.styleName);!((s=V==null?void 0:V.paragraphProps)===null||s===void 0)&&s.pageBreakBefore&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t))}if(t.elements.push(R),R.type==r.DomType.Paragraph){const V=R;var b=V.sectionProps,k=-1,E=-1;if(this.options.breakPages&&V.children&&(k=V.children.findIndex(F=>{var q,W;return(E=(W=(q=F.children)===null||q===void 0?void 0:q.findIndex(this.isPageBreakElement.bind(this)))!==null&&W!==void 0?W:-1)!=-1})),(b||k!=-1)&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t)),k!=-1){let F=V.children[k],q=E=0;R--)l[R].sectProps==null?l[R].sectProps=o:o=l[R].sectProps;return l}renderWrapper(n){return this.createElement("div",{className:`${this.className}-wrapper`},n)}renderDefaultStyle(){var n=this.className;return w(` +.${n}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } +.${n}-wrapper>section.${n} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; } +.${n} { color: black; hyphens: auto; } +section.${n} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; } +section.${n}>article { margin-bottom: auto; z-index: 1; } +section.${n}>footer { z-index: 1; } +.${n} table { border-collapse: collapse; } +.${n} table td, .${n} table th { vertical-align: top; } +.${n} p { margin: 0pt; min-height: 1em; } +.${n} span { white-space: pre-wrap; overflow-wrap: break-word; } +.${n} a { color: inherit; text-decoration: inherit; } +`)}renderNumbering(n,s){var t="",l=[];for(var b of n){var k=`p.${this.numberingClass(b.id,b.level)}`,E="none";if(b.bullet){let _=`--${this.className}-${b.bullet.src}`.toLowerCase();t+=this.styleToString(`${k}:before`,{content:"' '",display:"inline-block",background:`var(${_})`},b.bullet.style),this.document.loadNumberingImage(b.bullet.src).then(C=>{var o=`${this.rootSelector} { ${_}: url(${C}) }`;s.appendChild(w(o))})}else if(b.levelText){let _=this.numberingCounter(b.id,b.level);const C=_+" "+(b.start-1);b.level>0&&(t+=this.styleToString(`p.${this.numberingClass(b.id,b.level-1)}`,{"counter-reset":C})),l.push(C),t+=this.styleToString(`${k}:before`,Object.assign({content:this.levelTextToContent(b.levelText,b.suff,b.id,this.numFormatToCssValue(b.format)),"counter-increment":_},b.rStyle))}else E=this.numFormatToCssValue(b.format);t+=this.styleToString(k,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":E},b.pStyle))}return l.length>0&&(t+=this.styleToString(this.rootSelector,{"counter-reset":l.join(" ")})),w(t)}renderStyles(n){var s,t="";const l=this.styleMap,b=(0,m.keyBy)(n.filter(C=>C.isDefault),C=>C.target);for(const C of n){var k=C.styles;if(C.linked){var E=C.linked&&l[C.linked];E?k=k.concat(E.styles):this.options.debug&&console.warn(`Can't find linked style ${C.linked}`)}for(const o of k){var _=`${(s=C.target)!==null&&s!==void 0?s:""}.${C.cssName}`;C.target!=o.target&&(_+=` ${o.target}`),b[C.target]==C&&(_=`.${this.className} ${C.target}, `+_),t+=this.styleToString(_,o.values)}}return w(t)}renderNotes(n,s,t){var l=n.map(k=>s[k]).filter(k=>k);if(l.length>0){var b=this.createElement("ol",null,this.renderElements(l));t.appendChild(b)}}renderElement(n){switch(n.type){case r.DomType.Paragraph:return this.renderParagraph(n);case r.DomType.BookmarkStart:return this.renderBookmarkStart(n);case r.DomType.BookmarkEnd:return null;case r.DomType.Run:return this.renderRun(n);case r.DomType.Table:return this.renderTable(n);case r.DomType.Row:return this.renderTableRow(n);case r.DomType.Cell:return this.renderTableCell(n);case r.DomType.Hyperlink:return this.renderHyperlink(n);case r.DomType.Drawing:return this.renderDrawing(n);case r.DomType.Image:return this.renderImage(n);case r.DomType.Text:case r.DomType.Text:return this.renderText(n);case r.DomType.DeletedText:return this.renderDeletedText(n);case r.DomType.Tab:return this.renderTab(n);case r.DomType.Symbol:return this.renderSymbol(n);case r.DomType.Break:return this.renderBreak(n);case r.DomType.Footer:return this.renderContainer(n,"footer");case r.DomType.Header:return this.renderContainer(n,"header");case r.DomType.Footnote:case r.DomType.Endnote:return this.renderContainer(n,"li");case r.DomType.FootnoteReference:return this.renderFootnoteReference(n);case r.DomType.EndnoteReference:return this.renderEndnoteReference(n);case r.DomType.NoBreakHyphen:return this.createElement("wbr");case r.DomType.VmlPicture:return this.renderVmlPicture(n);case r.DomType.VmlElement:return this.renderVmlElement(n);case r.DomType.MmlMath:return this.renderContainerNS(n,i,"math",{xmlns:i});case r.DomType.MmlMathParagraph:return this.renderContainer(n,"span");case r.DomType.MmlFraction:return this.renderContainerNS(n,i,"mfrac");case r.DomType.MmlBase:return this.renderContainerNS(n,i,n.parent.type==r.DomType.MmlMatrixRow?"mtd":"mrow");case r.DomType.MmlNumerator:case r.DomType.MmlDenominator:case r.DomType.MmlFunction:case r.DomType.MmlLimit:case r.DomType.MmlBox:return this.renderContainerNS(n,i,"mrow");case r.DomType.MmlGroupChar:return this.renderMmlGroupChar(n);case r.DomType.MmlLimitLower:return this.renderContainerNS(n,i,"munder");case r.DomType.MmlMatrix:return this.renderContainerNS(n,i,"mtable");case r.DomType.MmlMatrixRow:return this.renderContainerNS(n,i,"mtr");case r.DomType.MmlRadical:return this.renderMmlRadical(n);case r.DomType.MmlSuperscript:return this.renderContainerNS(n,i,"msup");case r.DomType.MmlSubscript:return this.renderContainerNS(n,i,"msub");case r.DomType.MmlDegree:case r.DomType.MmlSuperArgument:case r.DomType.MmlSubArgument:return this.renderContainerNS(n,i,"mn");case r.DomType.MmlFunctionName:return this.renderContainerNS(n,i,"ms");case r.DomType.MmlDelimiter:return this.renderMmlDelimiter(n);case r.DomType.MmlRun:return this.renderMmlRun(n);case r.DomType.MmlNary:return this.renderMmlNary(n);case r.DomType.MmlPreSubSuper:return this.renderMmlPreSubSuper(n);case r.DomType.MmlBar:return this.renderMmlBar(n);case r.DomType.MmlEquationArray:return this.renderMllList(n);case r.DomType.Inserted:return this.renderInserted(n);case r.DomType.Deleted:return this.renderDeleted(n)}return null}renderChildren(n,s){return this.renderElements(n.children,s)}renderElements(n,s){if(n==null)return null;var t=n.flatMap(l=>this.renderElement(l)).filter(l=>l!=null);return s&&g(s,t),t}renderContainer(n,s,t){return this.createElement(s,t,this.renderChildren(n))}renderContainerNS(n,s,t,l){return d(s,t,l,this.renderChildren(n))}renderParagraph(n){var s,t,l,b,k=this.createElement("p");const E=this.findStyle(n.styleName);(s=n.tabs)!==null&&s!==void 0||(n.tabs=(t=E==null?void 0:E.paragraphProps)===null||t===void 0?void 0:t.tabs),this.renderClass(n,k),this.renderChildren(n,k),this.renderStyleValues(n.cssStyle,k),this.renderCommonProperties(k.style,n);const _=(l=n.numbering)!==null&&l!==void 0?l:(b=E==null?void 0:E.paragraphProps)===null||b===void 0?void 0:b.numbering;return _&&k.classList.add(this.numberingClass(_.id,_.level)),k}renderRunProperties(n,s){this.renderCommonProperties(n,s)}renderCommonProperties(n,s){s!=null&&(s.color&&(n.color=s.color),s.fontSize&&(n["font-size"]=s.fontSize))}renderHyperlink(n){var s=this.createElement("a");if(this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.href)s.href=n.href;else if(n.id){const t=this.document.documentPart.rels.find(l=>l.id==n.id&&l.targetMode==="External");s.href=t==null?void 0:t.target}return s}renderDrawing(n){var s=this.createElement("div");return s.style.display="inline-block",s.style.position="relative",s.style.textIndent="0px",this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),s}renderImage(n){let s=this.createElement("img");return this.renderStyleValues(n.cssStyle,s),this.document&&this.document.loadDocumentImage(n.src,this.currentPart).then(t=>{s.src=t}),s}renderText(n){return this.htmlDocument.createTextNode(n.text)}renderDeletedText(n){return this.options.renderEndnotes?this.htmlDocument.createTextNode(n.text):null}renderBreak(n){return n.break=="textWrapping"?this.createElement("br"):null}renderInserted(n){return this.options.renderChanges?this.renderContainer(n,"ins"):this.renderChildren(n)}renderDeleted(n){return this.options.renderChanges?this.renderContainer(n,"del"):null}renderSymbol(n){var s=this.createElement("span");return s.style.fontFamily=n.font,s.innerHTML=`&#x${n.char};`,s}renderFootnoteReference(n){var s=this.createElement("sup");return this.currentFootnoteIds.push(n.id),s.textContent=`${this.currentFootnoteIds.length}`,s}renderEndnoteReference(n){var s=this.createElement("sup");return this.currentEndnoteIds.push(n.id),s.textContent=`${this.currentEndnoteIds.length}`,s}renderTab(n){var s,t=this.createElement("span");if(t.innerHTML=" ",this.options.experimental){t.className=this.tabStopClass();var l=(s=function(b,k){for(var E=b.parent;E!=null&&E.type!=k;)E=E.parent;return E}(n,r.DomType.Paragraph))===null||s===void 0?void 0:s.tabs;this.currentTabs.push({stops:l,span:t})}return t}renderBookmarkStart(n){var s=this.createElement("span");return s.id=n.name,s}renderRun(n){if(n.fieldRun)return null;const s=this.createElement("span");if(n.id&&(s.id=n.id),this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),n.verticalAlign){const t=this.createElement(n.verticalAlign);this.renderChildren(n,t),s.appendChild(t)}else this.renderChildren(n,s);return s}renderTable(n){let s=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},n.columns&&s.appendChild(this.renderTableColumns(n.columns)),this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),s}renderTableColumns(n){let s=this.createElement("colgroup");for(let t of n){let l=this.createElement("col");t.width&&(l.style.width=t.width),s.appendChild(l)}return s}renderTableRow(n){let s=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentCellPosition.row++,s}renderTableCell(n){let s=this.createElement("td");const t=this.currentCellPosition.col;return n.verticalMerge?n.verticalMerge=="restart"?(this.currentVerticalMerge[t]=s,s.rowSpan=1):this.currentVerticalMerge[t]&&(this.currentVerticalMerge[t].rowSpan+=1,s.style.display="none"):this.currentVerticalMerge[t]=null,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.span&&(s.colSpan=n.span),this.currentCellPosition.col+=s.colSpan,s}renderVmlPicture(n){var s=y("div");return this.renderChildren(n,s),s}renderVmlElement(n){var s,t,l=h("svg");l.setAttribute("style",n.cssStyleText);const b=this.renderVmlChildElement(n);return!((s=n.imageHref)===null||s===void 0)&&s.id&&((t=this.document)===null||t===void 0||t.loadDocumentImage(n.imageHref.id,this.currentPart).then(k=>b.setAttribute("href",k))),l.appendChild(b),requestAnimationFrame(()=>{const k=l.firstElementChild.getBBox();l.setAttribute("width",`${Math.ceil(k.x+k.width)}`),l.setAttribute("height",`${Math.ceil(k.y+k.height)}`)}),l}renderVmlChildElement(n){const s=h(n.tagName);Object.entries(n.attrs).forEach(([t,l])=>s.setAttribute(t,l));for(let t of n.children)t.type==r.DomType.VmlElement?s.appendChild(this.renderVmlChildElement(t)):s.appendChild(...(0,m.asArray)(this.renderElement(t)));return s}renderMmlRadical(n){var s;const t=n.children.find(b=>b.type==r.DomType.MmlBase);if(!((s=n.props)===null||s===void 0)&&s.hideDegree)return d(i,"msqrt",null,this.renderElements([t]));const l=n.children.find(b=>b.type==r.DomType.MmlDegree);return d(i,"mroot",null,this.renderElements([t,l]))}renderMmlDelimiter(n){var s,t;const l=[];return l.push(d(i,"mo",null,[(s=n.props.beginChar)!==null&&s!==void 0?s:"("])),l.push(...this.renderElements(n.children)),l.push(d(i,"mo",null,[(t=n.props.endChar)!==null&&t!==void 0?t:")"])),d(i,"mrow",null,l)}renderMmlNary(n){var s,t;const l=[],b=(0,m.keyBy)(n.children,R=>R.type),k=b[r.DomType.MmlSuperArgument],E=b[r.DomType.MmlSubArgument],_=k?d(i,"mo",null,(0,m.asArray)(this.renderElement(k))):null,C=E?d(i,"mo",null,(0,m.asArray)(this.renderElement(E))):null,o=d(i,"mo",null,[(t=(s=n.props)===null||s===void 0?void 0:s.char)!==null&&t!==void 0?t:"∫"]);return _||C?l.push(d(i,"munderover",null,[o,C,_])):_?l.push(d(i,"mover",null,[o,_])):C?l.push(d(i,"munder",null,[o,C])):l.push(o),l.push(...this.renderElements(b[r.DomType.MmlBase].children)),d(i,"mrow",null,l)}renderMmlPreSubSuper(n){const s=[],t=(0,m.keyBy)(n.children,C=>C.type),l=t[r.DomType.MmlSuperArgument],b=t[r.DomType.MmlSubArgument],k=l?d(i,"mo",null,(0,m.asArray)(this.renderElement(l))):null,E=b?d(i,"mo",null,(0,m.asArray)(this.renderElement(b))):null,_=d(i,"mo",null);return s.push(d(i,"msubsup",null,[_,E,k])),s.push(...this.renderElements(t[r.DomType.MmlBase].children)),d(i,"mrow",null,s)}renderMmlGroupChar(n){const s=n.props.verticalJustification==="bot"?"mover":"munder",t=this.renderContainerNS(n,i,s);return n.props.char&&t.appendChild(d(i,"mo",null,[n.props.char])),t}renderMmlBar(n){const s=this.renderContainerNS(n,i,"mrow");switch(n.props.position){case"top":s.style.textDecoration="overline";break;case"bottom":s.style.textDecoration="underline"}return s}renderMmlRun(n){const s=d(i,"ms");return this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n,s),s}renderMllList(n){const s=d(i,"mtable");this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n);for(let t of this.renderChildren(n))s.appendChild(d(i,"mtr",null,[d(i,"mtd",null,[t])]));return s}renderStyleValues(n,s){for(let t in n)t.startsWith("$")?s.setAttribute(t.slice(1),n[t]):s.style[t]=n[t]}renderClass(n,s){n.className&&(s.className=n.className),n.styleName&&s.classList.add(this.processStyleName(n.styleName))}findStyle(n){var s;return n&&((s=this.styleMap)===null||s===void 0?void 0:s[n])}numberingClass(n,s){return`${this.className}-num-${n}-${s}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(n,s,t=null){let l=`${n} {\r +`;for(const b in s)b.startsWith("$")||(l+=` ${b}: ${s[b]};\r +`);return t&&(l+=t),l+`}\r +`}numberingCounter(n,s){return`${this.className}-num-${n}-${s}`}levelTextToContent(n,s,t,l){var b;return`"${n.replace(/%\d*/g,k=>{let E=parseInt(k.substring(1),10)-1;return`"counter(${this.numberingCounter(t,E)}, ${l})"`})}${(b={tab:"\\9",space:"\\a0"}[s])!==null&&b!==void 0?b:""}"`}numFormatToCssValue(n){var s;return(s={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"}[n])!==null&&s!==void 0?s:n}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout(()=>{const n=(0,f.computePixelToPoint)();for(let s of this.currentTabs)(0,f.updateTabStop)(s.span,s.stops,this.defaultTabSize,n)},500))}}},630:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.updateTabStop=e.computePixelToPoint=void 0;const u={pos:0,leader:"none",style:"left"};function r(m){return parseFloat(m)}e.computePixelToPoint=function(m=document.body){const f=document.createElement("div");f.style.width="100pt",m.appendChild(f);const a=100/f.offsetWidth;return m.removeChild(f),a},e.updateTabStop=function(m,f,a,i=.75){const y=m.closest("p"),h=m.getBoundingClientRect(),d=y.getBoundingClientRect(),p=getComputedStyle(y),g=(f==null?void 0:f.length)>0?f.map(_=>({pos:r(_.position),leader:_.leader,style:_.style})).sort((_,C)=>_.pos-C.pos):[u],w=g[g.length-1],P=d.width*i,n=r(a);let s=w.pos+n;if(s_.style!="clear"&&_.pos>b);if(k==null)return;let E=1;if(k.style=="right"||k.style=="center"){const _=Array.from(y.querySelectorAll(`.${m.className}`)),C=_.indexOf(m)+1,o=document.createRange();o.setStart(m,1),C<_.length?o.setEndBefore(_[C]):o.setEndAfter(y);const R=k.style=="center"?.5:1,V=o.getBoundingClientRect(),F=V.left+R*V.width-(d.left-t);E=k.pos-F*i}else E=k.pos-b;switch(m.innerHTML=" ",m.style.textDecoration="inherit",m.style.wordSpacing=`${E.toFixed(0)}pt`,k.leader){case"dot":case"middleDot":m.style.textDecoration="underline",m.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":m.style.textDecoration="underline"}}},881:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlEndnote=e.WmlFootnote=e.WmlBaseNote=void 0;const r=u(120);class m{}e.WmlBaseNote=m,e.WmlFootnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Footnote}},e.WmlEndnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Endnote}}},735:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.EndnotesPart=e.FootnotesPart=e.BaseNotePart=void 0;const r=u(530),m=u(881);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}}e.BaseNotePart=f,e.FootnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"footnote",m.WmlFootnote)}},e.EndnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"endnote",m.WmlEndnote)}}},527:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.NumberingPart=void 0;const r=u(530),m=u(682);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){Object.assign(this,(0,m.parseNumberingPart)(i,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(i)}}e.NumberingPart=f},682:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumberingBulletPicture=e.parseNumberingLevelOverrride=e.parseNumberingLevel=e.parseAbstractNumbering=e.parseNumbering=e.parseNumberingPart=void 0;const r=u(109),m=u(488);function f(d,p){let g={id:p.attr(d,"numId"),overrides:[]};for(let w of p.elements(d))switch(w.localName){case"abstractNumId":g.abstractId=p.attr(w,"val");break;case"lvlOverride":g.overrides.push(y(w,p))}return g}function a(d,p){let g={id:p.attr(d,"abstractNumId"),levels:[]};for(let w of p.elements(d))switch(w.localName){case"name":g.name=p.attr(w,"val");break;case"multiLevelType":g.multiLevelType=p.attr(w,"val");break;case"numStyleLink":g.numberingStyleLink=p.attr(w,"val");break;case"styleLink":g.styleLink=p.attr(w,"val");break;case"lvl":g.levels.push(i(w,p))}return g}function i(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"start":g.start=p.attr(w,"val");break;case"lvlRestart":g.restart=p.intAttr(w,"val");break;case"numFmt":g.format=p.attr(w,"val");break;case"lvlText":g.text=p.attr(w,"val");break;case"lvlJc":g.justification=p.attr(w,"val");break;case"lvlPicBulletId":g.bulletPictureId=p.attr(w,"val");break;case"pStyle":g.paragraphStyle=p.attr(w,"val");break;case"pPr":g.paragraphProps=(0,r.parseParagraphProperties)(w,p);break;case"rPr":g.runProps=(0,m.parseRunProperties)(w,p)}return g}function y(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"startOverride":g.start=p.intAttr(w,"val");break;case"lvl":g.numberingLevel=i(w,p)}return g}function h(d,p){var g=p.element(d,"pict"),w=g&&p.element(g,"shape"),P=w&&p.element(w,"imagedata");return P?{id:p.attr(d,"numPicBulletId"),referenceId:p.attr(P,"id"),style:p.attr(w,"style")}:null}e.parseNumberingPart=function(d,p){let g={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let w of p.elements(d))switch(w.localName){case"num":g.numberings.push(f(w,p));break;case"abstractNum":g.abstractNumberings.push(a(w,p));break;case"numPicBullet":g.bulletPictures.push(h(w,p))}return g},e.parseNumbering=f,e.parseAbstractNumbering=a,e.parseNumberingLevel=i,e.parseNumberingLevelOverrride=y,e.parseNumberingBulletPicture=h},472:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.XmlParser=e.serializeXmlString=e.parseXmlString=void 0;const r=u(149);e.parseXmlString=function(a,i=!1){var y;i&&(a=a.replace(/<[?].*[?]>/,"")),a=(y=a).charCodeAt(0)===65279?y.substring(1):y;const h=new DOMParser().parseFromString(a,"application/xml"),d=(p=h.getElementsByTagName("parsererror")[0])===null||p===void 0?void 0:p.textContent;var p;if(d)throw new Error(d);return h},e.serializeXmlString=function(a){return new XMLSerializer().serializeToString(a)};class m{elements(i,y=null){const h=[];for(let d=0,p=i.childNodes.length;d{Object.defineProperty(e,"__esModule",{value:!0}),e.SettingsPart=void 0;const r=u(530),m=u(846);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.settings=(0,m.parseSettings)(i,this._package.xmlParser)}}e.SettingsPart=f},846:(v,e)=>{function u(r,m){var f={defaultNoteIds:[]};for(let a of m.elements(r))switch(a.localName){case"numFmt":f.nummeringFormat=m.attr(a,"val");break;case"footnote":case"endnote":f.defaultNoteIds.push(m.attr(a,"id"))}return f}Object.defineProperty(e,"__esModule",{value:!0}),e.parseNoteProperties=e.parseSettings=void 0,e.parseSettings=function(r,m){var f={};for(let a of m.elements(r))switch(a.localName){case"defaultTabStop":f.defaultTabStop=m.lengthAttr(a,"val");break;case"footnotePr":f.footnoteProps=u(a,m);break;case"endnotePr":f.endnoteProps=u(a,m);break;case"autoHyphenation":f.autoHyphenation=m.boolAttr(a,"val")}return f},e.parseNoteProperties=u},240:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StylesPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.styles=this._documentParser.parseStylesFile(a)}}e.StylesPart=m},893:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ThemePart=void 0;const r=u(530),m=u(55);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.theme=(0,m.parseTheme)(i,this._package.xmlParser)}}e.ThemePart=f},55:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseFontInfo=e.parseFontScheme=e.parseColorScheme=e.parseTheme=e.DmlTheme=void 0;class u{}function r(a,i){var y={name:i.attr(a,"name"),colors:{}};for(let p of i.elements(a)){var h=i.element(p,"srgbClr"),d=i.element(p,"sysClr");h?y.colors[p.localName]=i.attr(h,"val"):d&&(y.colors[p.localName]=i.attr(d,"lastClr"))}return y}function m(a,i){var y={name:i.attr(a,"name")};for(let h of i.elements(a))switch(h.localName){case"majorFont":y.majorFont=f(h,i);break;case"minorFont":y.minorFont=f(h,i)}return y}function f(a,i){return{latinTypeface:i.elementAttr(a,"latin","typeface"),eaTypeface:i.elementAttr(a,"ea","typeface"),csTypeface:i.elementAttr(a,"cs","typeface")}}e.DmlTheme=u,e.parseTheme=function(a,i){var y=new u,h=i.element(a,"themeElements");for(let d of i.elements(h))switch(d.localName){case"clrScheme":y.colorScheme=r(d,i);break;case"fontScheme":y.fontScheme=m(d,i)}return y},e.parseColorScheme=r,e.parseFontScheme=m,e.parseFontInfo=f},593:(v,e)=>{function u(r){return r&&typeof r=="object"&&!Array.isArray(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.asArray=e.formatCssRules=e.parseCssRules=e.mergeDeep=e.isString=e.isObject=e.blobToBase64=e.keyBy=e.resolvePath=e.splitPath=e.escapeClassName=void 0,e.escapeClassName=function(r){return r==null?void 0:r.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},e.splitPath=function(r){let m=r.lastIndexOf("/")+1;return[m==0?"":r.substring(0,m),m==0?r:r.substring(m)]},e.resolvePath=function(r,m){try{const f="http://docx/";return new URL(r,f+m).toString().substring(f.length)}catch{return`${m}${r}`}},e.keyBy=function(r,m){return r.reduce((f,a)=>(f[m(a)]=a,f),{})},e.blobToBase64=function(r){return new Promise((m,f)=>{const a=new FileReader;a.onloadend=()=>m(a.result),a.onerror=()=>f(),a.readAsDataURL(r)})},e.isObject=u,e.isString=function(r){return typeof r=="string"||r instanceof String},e.mergeDeep=function r(m,...f){var a;if(!f.length)return m;const i=f.shift();if(u(m)&&u(i))for(const y in i)u(i[y])?r((a=m[y])!==null&&a!==void 0?a:m[y]={},i[y]):m[y]=i[y];return r(m,...f)},e.parseCssRules=function(r){const m={};for(const f of r.split(";")){const[a,i]=f.split(":");m[a]=i}return m},e.formatCssRules=function(r){return Object.entries(r).map((m,f)=>`${m}: ${f}`).join(";")},e.asArray=function(r){return Array.isArray(r)?r:[r]}},320:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseVmlElement=e.VmlElement=void 0;const r=u(149),m=u(120),f=u(472);class a extends m.OpenXmlElementBase{constructor(){super(...arguments),this.type=m.DomType.VmlElement,this.attrs={}}}function i(h){var d;return{stroke:f.default.attr(h,"color"),"stroke-width":(d=f.default.lengthAttr(h,"weight",r.LengthUsage.Emu))!==null&&d!==void 0?d:"1px"}}function y(h){return h.split(",")}e.VmlElement=a,e.parseVmlElement=function h(d,p){var g=new a;switch(d.localName){case"rect":g.tagName="rect",Object.assign(g.attrs,{width:"100%",height:"100%"});break;case"oval":g.tagName="ellipse",Object.assign(g.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":g.tagName="line";break;case"shape":g.tagName="g";break;case"textbox":g.tagName="foreignObject",Object.assign(g.attrs,{width:"100%",height:"100%"});break;default:return null}for(const w of f.default.attrs(d))switch(w.localName){case"style":g.cssStyleText=w.value;break;case"fillcolor":g.attrs.fill=w.value;break;case"from":const[P,n]=y(w.value);Object.assign(g.attrs,{x1:P,y1:n});break;case"to":const[s,t]=y(w.value);Object.assign(g.attrs,{x2:s,y2:t})}for(const w of f.default.elements(d))switch(w.localName){case"stroke":Object.assign(g.attrs,i(w));break;case"fill":Object.assign(g.attrs,{});break;case"imagedata":g.tagName="image",Object.assign(g.attrs,{width:"100%",height:"100%"}),g.imageHref={id:f.default.attr(w,"id"),title:f.default.attr(w,"title")};break;case"txbxContent":g.children.push(...p.parseBodyElements(w));break;default:const P=h(w,p);P&&g.children.push(P)}return g}},213:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.deobfuscate=e.WordDocument=void 0;const r=u(461),m=u(380),f=u(522),a=u(448),i=u(593),y=u(527),h=u(240),d=u(985),p=u(665),g=u(162),w=u(893),P=u(735),n=u(287),s=u(177),t=[{type:r.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:r.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:r.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:r.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class l{constructor(){this.parts=[],this.partsMap={}}static async load(E,_,C){var o=new l;return o._options=C,o._parser=_,o._package=await f.OpenXmlPackage.load(E,C),o.rels=await o._package.loadRelationships(),await Promise.all(t.map(R=>{var V;const F=(V=o.rels.find(q=>q.type===R.type))!==null&&V!==void 0?V:R;return o.loadRelationshipPart(F.target,F.type)})),o}save(E="blob"){return this._package.save(E)}async loadRelationshipPart(E,_){var C;if(this.partsMap[E])return this.partsMap[E];if(!this._package.get(E))return null;let o=null;switch(_){case r.RelationshipTypes.OfficeDocument:this.documentPart=o=new a.DocumentPart(this._package,E,this._parser);break;case r.RelationshipTypes.FontTable:this.fontTablePart=o=new m.FontTablePart(this._package,E);break;case r.RelationshipTypes.Numbering:this.numberingPart=o=new y.NumberingPart(this._package,E,this._parser);break;case r.RelationshipTypes.Styles:this.stylesPart=o=new h.StylesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Theme:this.themePart=o=new w.ThemePart(this._package,E);break;case r.RelationshipTypes.Footnotes:this.footnotesPart=o=new P.FootnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Endnotes:this.endnotesPart=o=new P.EndnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Footer:o=new d.FooterPart(this._package,E,this._parser);break;case r.RelationshipTypes.Header:o=new d.HeaderPart(this._package,E,this._parser);break;case r.RelationshipTypes.CoreProperties:this.corePropsPart=o=new g.CorePropsPart(this._package,E);break;case r.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=o=new p.ExtendedPropsPart(this._package,E);break;case r.RelationshipTypes.CustomProperties:o=new s.CustomPropsPart(this._package,E);break;case r.RelationshipTypes.Settings:this.settingsPart=o=new n.SettingsPart(this._package,E)}if(o==null)return Promise.resolve(null);if(this.partsMap[E]=o,this.parts.push(o),await o.load(),((C=o.rels)===null||C===void 0?void 0:C.length)>0){const[R]=(0,i.splitPath)(o.path);await Promise.all(o.rels.map(V=>this.loadRelationshipPart((0,i.resolvePath)(V.target,R),V.type)))}return o}async loadDocumentImage(E,_){const C=await this.loadResource(_??this.documentPart,E,"blob");return this.blobToURL(C)}async loadNumberingImage(E){const _=await this.loadResource(this.numberingPart,E,"blob");return this.blobToURL(_)}async loadFont(E,_){const C=await this.loadResource(this.fontTablePart,E,"uint8array");return C&&this.blobToURL(new Blob([b(C,_)]))}blobToURL(E){return E?this._options.useBase64URL?(0,i.blobToBase64)(E):URL.createObjectURL(E):null}findPartByRelId(E,_=null){var C,o=((C=_.rels)!==null&&C!==void 0?C:this.rels).find(V=>V.id==E);const R=_?(0,i.splitPath)(_.path)[0]:"";return o?this.partsMap[(0,i.resolvePath)(o.target,R)]:null}getPathById(E,_){const C=E.rels.find(R=>R.id==_),[o]=(0,i.splitPath)(E.path);return C?(0,i.resolvePath)(C.target,o):null}loadResource(E,_,C){const o=this.getPathById(E,_);return o?this._package.load(o,C):Promise.resolve(null)}}function b(k,E){const _=E.replace(/{|}|-/g,""),C=new Array(16);for(let o=0;o<16;o++)C[16-o-1]=parseInt(_.substr(2*o,2),16);for(let o=0;o<32;o++)k[o]=k[o]^C[o%16];return k}e.WordDocument=l,e.deobfuscate=b},583:v=>{v.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:v=>{v.exports=T}},B={};function S(v){var e=B[v];if(e!==void 0)return e.exports;var u=B[v]={id:v,exports:{}};return L[v](u,u.exports,S),u.exports}return S.m=L,S.n=v=>{var e=v&&v.__esModule?()=>v.default:()=>v;return S.d(e,{a:e}),e},S.d=(v,e)=>{for(var u in e)S.o(e,u)&&!S.o(v,u)&&Object.defineProperty(v,u,{enumerable:!0,get:e[u]})},S.o=(v,e)=>Object.prototype.hasOwnProperty.call(v,e),S.r=v=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},S.b=document.baseURI||self.location.href,S(667)})())})(Ce);var Ne=Ce.exports;const Oe={ignoreLastRenderedPageBreak:!1};function Re(ne,ce={}){return typeof ne=="string"?ze(ne,ce):Promise.resolve(ne)}function ze(ne,ce){return fetch(ne,ce).then(T=>T.status!==200?Promise.reject(T):T)}async function Me(ne){let ce;return ne instanceof Blob?ce=ne:ne instanceof Response?ce=await ne.blob():ne instanceof ArrayBuffer&&(ce=new Blob([ne])),ce}function Ie(ne,ce,T={}){if(!ne)return ce.innerHTML="",Promise.resolve();let L;return ne instanceof Blob?L=ne:ne instanceof Response?L=ne.blob():ne instanceof ArrayBuffer&&(L=new Blob([ne])),Ne.renderAsync(L,ce,ce,{...Oe,...T})}const je={getData:Re,render:Ie,getBlob:Me};export{je as d}; diff --git a/examples/dist/assets/function-411940b9.js b/examples/dist/assets/function-411940b9.js new file mode 100644 index 0000000..0d14ee1 --- /dev/null +++ b/examples/dist/assets/function-411940b9.js @@ -0,0 +1,3 @@ +import{x as V,z as Rn}from"./index-bf0149c5.js";function mn(e,r){for(var t=-1,n=e==null?0:e.length,a=Array(n);++t-1}var Wn=Nn,Bn=se;function Hn(e,r){var t=this.__data__,n=Bn(t,e);return n<0?(++this.size,t.push([e,r])):t[n][1]=r,this}var Un=Hn,Kn=In,Yn=Fn,zn=jn,qn=Wn,Xn=Un;function G(e){var r=-1,t=e==null?0:e.length;for(this.clear();++r-1&&e%1==0&&e-1&&e%1==0&&e<=qo}var We=Xo,Jo=M,Zo=We,Vo=C,Qo="[object Arguments]",ko="[object Array]",es="[object Boolean]",rs="[object Date]",ts="[object Error]",ns="[object Function]",as="[object Map]",is="[object Number]",os="[object Object]",ss="[object RegExp]",us="[object Set]",cs="[object String]",fs="[object WeakMap]",ls="[object ArrayBuffer]",vs="[object DataView]",_s="[object Float32Array]",$s="[object Float64Array]",ps="[object Int8Array]",gs="[object Int16Array]",hs="[object Int32Array]",ds="[object Uint8Array]",ys="[object Uint8ClampedArray]",bs="[object Uint16Array]",As="[object Uint32Array]",y={};y[_s]=y[$s]=y[ps]=y[gs]=y[hs]=y[ds]=y[ys]=y[bs]=y[As]=!0;y[Qo]=y[ko]=y[ls]=y[es]=y[vs]=y[rs]=y[ts]=y[ns]=y[as]=y[is]=y[os]=y[ss]=y[us]=y[cs]=y[fs]=!1;function Ts(e){return Vo(e)&&Zo(e.length)&&!!y[Jo(e)]}var Rs=Ts;function ms(e){return function(r){return e(r)}}var le=ms,re={exports:{}};re.exports;(function(e,r){var t=At,n=r&&!r.nodeType&&r,a=n&&!0&&e&&!e.nodeType&&e,i=a&&a.exports===n,s=i&&t.process,o=function(){try{var u=a&&a.require&&a.require("util").types;return u||s&&s.binding&&s.binding("util")}catch{}}();e.exports=o})(re,re.exports);var Be=re.exports,Ps=Rs,Is=le,gr=Be,hr=gr&&gr.isTypedArray,ws=hr?Is(hr):Ps,Ct=ws,Os=Co,Ss=je,Cs=R,Ls=Me,Es=Ne,xs=Ct,Fs=Object.prototype,Ds=Fs.hasOwnProperty;function Gs(e,r){var t=Cs(e),n=!t&&Ss(e),a=!t&&!n&&Ls(e),i=!t&&!n&&!a&&xs(e),s=t||n||a||i,o=s?Os(e.length,String):[],u=o.length;for(var c in e)(r||Ds.call(e,c))&&!(s&&(c=="length"||a&&(c=="offset"||c=="parent")||i&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||Es(c,u)))&&o.push(c);return o}var Lt=Gs,js=Object.prototype;function Ms(e){var r=e&&e.constructor,t=typeof r=="function"&&r.prototype||js;return e===t}var He=Ms;function Ns(e,r){return function(t){return e(r(t))}}var Et=Ns,Ws=Et,Bs=Ws(Object.keys,Object),Hs=Bs,Us=He,Ks=Hs,Ys=Object.prototype,zs=Ys.hasOwnProperty;function qs(e){if(!Us(e))return Ks(e);var r=[];for(var t in Object(e))zs.call(e,t)&&t!="constructor"&&r.push(t);return r}var Xs=qs,Js=Rt,Zs=We;function Vs(e){return e!=null&&Zs(e.length)&&!Js(e)}var xt=Vs,Qs=Lt,ks=Xs,eu=xt;function ru(e){return eu(e)?Qs(e):ks(e)}var ve=ru,tu=z,nu=ve;function au(e,r){return e&&tu(r,nu(r),e)}var iu=au;function ou(e){var r=[];if(e!=null)for(var t in Object(e))r.push(t);return r}var su=ou,uu=I,cu=He,fu=su,lu=Object.prototype,vu=lu.hasOwnProperty;function _u(e){if(!uu(e))return fu(e);var r=cu(e),t=[];for(var n in e)n=="constructor"&&(r||!vu.call(e,n))||t.push(n);return t}var $u=_u,pu=Lt,gu=$u,hu=xt;function du(e){return hu(e)?pu(e,!0):gu(e)}var Ue=du,yu=z,bu=Ue;function Au(e,r){return e&&yu(r,bu(r),e)}var Tu=Au,te={exports:{}};te.exports;(function(e,r){var t=T,n=r&&!r.nodeType&&r,a=n&&!0&&e&&!e.nodeType&&e,i=a&&a.exports===n,s=i?t.Buffer:void 0,o=s?s.allocUnsafe:void 0;function u(c,l){if(l)return c.slice();var f=c.length,v=o?o(f):new c.constructor(f);return c.copy(v),v}e.exports=u})(te,te.exports);var Ru=te.exports;function mu(e,r){var t=-1,n=e.length;for(r||(r=Array(n));++ta?0:a+r),t=t>a?a:t,t<0&&(t+=a),a=r>t?0:t-r>>>0,r>>>=0;for(var i=Array(a);++n0&&t(o)?r>1?Zt(o,r-1,t,n,a):kv(a,o):n||(a[a.length]=o)}return a}var Vt=Zt,r_=Vt;function t_(e){var r=e==null?0:e.length;return r?r_(e,1):[]}var n_=t_;function a_(e,r,t){switch(t.length){case 0:return e.call(r);case 1:return e.call(r,t[0]);case 2:return e.call(r,t[0],t[1]);case 3:return e.call(r,t[0],t[1],t[2])}return e.apply(r,t)}var X=a_,i_=X,Mr=Math.max;function o_(e,r,t){return r=Mr(r===void 0?e.length-1:r,0),function(){for(var n=arguments,a=-1,i=Mr(n.length-r,0),s=Array(i);++a0){if(++r>=$_)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}var kt=h_,d_=__,y_=kt,b_=y_(d_),Ve=b_,A_=n_,T_=Qt,R_=Ve;function m_(e){return R_(T_(e,void 0,A_),e+"")}var en=m_,P_=Ee,I_=Ml,w_=Dv,O_=he,S_=z,C_=Xv,L_=en,E_=Mt,x_=1,F_=2,D_=4,G_=L_(function(e,r){var t={};if(e==null)return t;var n=!1;r=P_(r,function(i){return i=O_(i,e),n||(n=i.length>1),i}),S_(e,E_(e),t),n&&(t=I_(t,x_|F_|D_,C_));for(var a=r.length;a--;)w_(t,r[a]);return t}),j_=G_;const Ob=Rn(j_);var M_=/\s/;function N_(e){for(var r=e.length;r--&&M_.test(e.charAt(r)););return r}var W_=N_,B_=W_,H_=/^\s+/;function U_(e){return e&&e.slice(0,B_(e)+1).replace(H_,"")}var K_=U_,Y_=K_,Wr=I,z_=ge,Br=0/0,q_=/^[-+]0x[0-9a-f]+$/i,X_=/^0b[01]+$/i,J_=/^0o[0-7]+$/i,Z_=parseInt;function V_(e){if(typeof e=="number")return e;if(z_(e))return Br;if(Wr(e)){var r=typeof e.valueOf=="function"?e.valueOf():e;e=Wr(r)?r+"":r}if(typeof e!="string")return e===0?e:+e;e=Y_(e);var t=X_.test(e);return t||J_.test(e)?Z_(e.slice(2),t?2:8):q_.test(e)?Br:+e}var Qe=V_,Q_=Qe,Hr=1/0,k_=17976931348623157e292;function e$(e){if(!e)return e===0?e:0;if(e=Q_(e),e===Hr||e===-Hr){var r=e<0?-1:1;return r*k_}return e===e?e:0}var r$=e$,t$=r$;function n$(e){var r=t$(e),t=r%1;return r===r?t?r-t:r:0}var Z=n$,a$=Z,i$="Expected a function";function o$(e,r){if(typeof r!="function")throw new TypeError(i$);return e=a$(e),function(){if(--e<1)return r.apply(this,arguments)}}var s$=o$,Ur=Nt,u$=Ur&&new Ur,rn=u$,c$=J,Kr=rn,f$=Kr?function(e,r){return Kr.set(e,r),e}:c$,tn=f$,l$=pe,v$=I;function _$(e){return function(){var r=arguments;switch(r.length){case 0:return new e;case 1:return new e(r[0]);case 2:return new e(r[0],r[1]);case 3:return new e(r[0],r[1],r[2]);case 4:return new e(r[0],r[1],r[2],r[3]);case 5:return new e(r[0],r[1],r[2],r[3],r[4]);case 6:return new e(r[0],r[1],r[2],r[3],r[4],r[5]);case 7:return new e(r[0],r[1],r[2],r[3],r[4],r[5],r[6])}var t=l$(e.prototype),n=e.apply(t,r);return v$(n)?n:t}}var de=_$,$$=de,p$=T,g$=1;function h$(e,r,t){var n=r&g$,a=$$(e);function i(){var s=this&&this!==p$&&this instanceof i?a:e;return s.apply(n?t:this,arguments)}return i}var d$=h$,y$=Math.max;function b$(e,r,t,n){for(var a=-1,i=e.length,s=t.length,o=-1,u=r.length,c=y$(i-s,0),l=Array(u+c),f=!n;++o1?"& ":"")+r[n],r=r.join(t>2?", ":" "),e.replace(_p,`{ +/* [wrapped with `+r+`] */ +`)}var pp=$p;function gp(e,r,t,n){for(var a=e.length,i=t+(n?1:-1);n?i--:++i-1}var Sp=Op,Cp=Pt,Lp=Sp,Ep=1,xp=2,Fp=8,Dp=16,Gp=32,jp=64,Mp=128,Np=256,Wp=512,Bp=[["ary",Mp],["bind",Ep],["bindKey",xp],["curry",Fp],["curryRight",Dp],["flip",Wp],["partial",Gp],["partialRight",jp],["rearg",Np]];function Hp(e,r){return Cp(Bp,function(t){var n="_."+t[0];r&t[1]&&!Lp(e,n)&&e.push(n)}),e.sort()}var Up=Hp,Kp=vp,Yp=pp,zp=Ve,qp=Up;function Xp(e,r,t){var n=r+"";return zp(e,Yp(n,qp(Kp(n),t)))}var cn=Xp,Jp=ip,Zp=un,Vp=cn,Qp=1,kp=2,eg=4,rg=8,Xr=32,Jr=64;function tg(e,r,t,n,a,i,s,o,u,c){var l=r&rg,f=l?s:void 0,v=l?void 0:s,_=l?i:void 0,h=l?void 0:i;r|=l?Xr:Jr,r&=~(l?Jr:Xr),r&eg||(r&=~(Qp|kp));var b=[e,r,a,_,f,h,v,o,u,c],$=t.apply(void 0,b);return Jp(e)&&Zp($,b),$.placeholder=n,Vp($,e,r)}var fn=tg;function ng(e){var r=e;return r.placeholder}var U=ng,ag=Ke,ig=Ne,og=Math.min;function sg(e,r){for(var t=e.length,n=og(r.length,t),a=ag(e);n--;){var i=r[n];e[n]=ig(i,t)?a[i]:void 0}return e}var ug=sg,Zr="__lodash_placeholder__";function cg(e,r){for(var t=-1,n=e.length,a=0,i=[];++t1&&d.reverse(),l&&u0&&(t=r.apply(this,arguments)),e<=1&&(r=void 0),t}}var $n=ch,fh=J,lh=Qt,vh=Ve;function _h(e,r){return vh(lh(e,r,fh),e+"")}var w=_h,$h=w,ph=L,gh=U,hh=D,dh=1,yh=32,rr=$h(function(e,r,t){var n=dh;if(t.length){var a=hh(t,gh(rr));n|=yh}return ph(e,n,r,t,a)});rr.placeholder={};var bh=rr,Ah=w,Th=L,Rh=U,mh=D,Ph=1,Ih=2,wh=32,tr=Ah(function(e,r,t){var n=Ph|Ih;if(t.length){var a=mh(t,Rh(tr));n|=wh}return Th(r,n,e,t,a)});tr.placeholder={};var Oh=tr,Sh=L,Ch=8;function nr(e,r,t){r=t?void 0:r;var n=Sh(e,Ch,void 0,void 0,void 0,void 0,void 0,r);return n.placeholder=nr.placeholder,n}nr.placeholder={};var Lh=nr,Eh=L,xh=16;function ar(e,r,t){r=t?void 0:r;var n=Eh(e,xh,void 0,void 0,void 0,void 0,void 0,r);return n.placeholder=ar.placeholder,n}ar.placeholder={};var Fh=ar,Dh=T,Gh=function(){return Dh.Date.now()},jh=Gh,Mh=I,me=jh,ot=Qe,Nh="Expected a function",Wh=Math.max,Bh=Math.min;function Hh(e,r,t){var n,a,i,s,o,u,c=0,l=!1,f=!1,v=!0;if(typeof e!="function")throw new TypeError(Nh);r=ot(r)||0,Mh(t)&&(l=!!t.leading,f="maxWait"in t,i=f?Wh(ot(t.maxWait)||0,r):i,v="trailing"in t?!!t.trailing:v);function _(A){var m=n,S=a;return n=a=void 0,c=A,s=e.apply(S,m),s}function h(A){return c=A,o=setTimeout(p,r),l?_(A):s}function b(A){var m=A-u,S=A-c,sr=r-m;return f?Bh(sr,i-S):sr}function $(A){var m=A-u,S=A-c;return u===void 0||m>=r||m<0||f&&S>=i}function p(){var A=me();if($(A))return d(A);o=setTimeout(p,b(A))}function d(A){return o=void 0,v&&n?_(A):(n=a=void 0,s)}function E(){o!==void 0&&clearTimeout(o),c=0,n=u=a=o=void 0}function O(){return o===void 0?s:d(me())}function P(){var A=me(),m=$(A);if(n=arguments,a=this,u=A,m){if(o===void 0)return h(u);if(f)return clearTimeout(o),o=setTimeout(p,r),_(u)}return o===void 0&&(o=setTimeout(p,r)),s}return P.cancel=E,P.flush=O,P}var pn=Hh,Uh="Expected a function";function Kh(e,r,t){if(typeof e!="function")throw new TypeError(Uh);return setTimeout(function(){e.apply(void 0,t)},r)}var gn=Kh,Yh=gn,zh=w,qh=zh(function(e,r){return Yh(e,1,r)}),Xh=qh,Jh=gn,Zh=w,Vh=Qe,Qh=Zh(function(e,r,t){return Jh(e,Vh(r)||0,t)}),kh=Qh,ed=L,rd=512;function td(e){return ed(e,rd)}var nd=td,ad="Expected a function";function id(e){if(typeof e!="function")throw new TypeError(ad);return function(){var r=arguments;switch(r.length){case 0:return!e.call(this);case 1:return!e.call(this,r[0]);case 2:return!e.call(this,r[0],r[1]);case 3:return!e.call(this,r[0],r[1],r[2])}return!e.apply(this,r)}}var od=id,sd=$n;function ud(e){return sd(2,e)}var cd=ud,fd="__lodash_hash_undefined__";function ld(e){return this.__data__.set(e,fd),this}var vd=ld;function _d(e){return this.__data__.has(e)}var $d=_d,pd=De,gd=vd,hd=$d;function oe(e){var r=-1,t=e==null?0:e.length;for(this.__data__=new pd;++ro))return!1;var c=i.get(e),l=i.get(r);if(c&&l)return c==r&&l==e;var f=-1,v=!0,_=t&wd?new Rd:void 0;for(i.set(e,r),i.set(r,e);++f=n?e:eb(e,r,t)}var tb=rb,nb=X,ab=_e,ib=w,ob=tb,sb=Z,ub="Expected a function",cb=Math.max;function fb(e,r){if(typeof e!="function")throw new TypeError(ub);return r=r==null?0:cb(sb(r),0),ib(function(t){var n=t[r],a=ob(t,0,r);return n&&ab(a,n),nb(e,this,a)})}var lb=fb,vb=pn,_b=I,$b="Expected a function";function pb(e,r,t){var n=!0,a=!0;if(typeof e!="function")throw new TypeError($b);return _b(t)&&(n="leading"in t?!!t.leading:n,a="trailing"in t?!!t.trailing:a),vb(e,r,{leading:n,maxWait:r,trailing:a})}var gb=pb,hb=_n;function db(e){return hb(e,1)}var yb=db,bb=J;function Ab(e){return typeof e=="function"?e:bb}var Tb=Ab,Rb=Tb,mb=Tn;function Pb(e,r){return mb(Rb(r),e)}var Ib=Pb,Sb={after:s$,ary:_n,before:$n,bind:bh,bindKey:Oh,curry:Lh,curryRight:Fh,debounce:pn,defer:Xh,delay:kh,flip:nd,memoize:zt,negate:od,once:cd,overArgs:Ey,partial:Tn,partialRight:Uy,rearg:Xy,rest:ky,spread:lb,throttle:gb,unary:yb,wrap:Ib};export{Sb as _,Ob as o}; diff --git a/examples/dist/assets/hack-77e78dc2.js b/examples/dist/assets/hack-77e78dc2.js new file mode 100644 index 0000000..c464037 --- /dev/null +++ b/examples/dist/assets/hack-77e78dc2.js @@ -0,0 +1,199 @@ +import{x as Qt,y as Sa}from"./index-bf0149c5.js";import{c as Bl}from"./_commonjs-dynamic-modules-302442b1.js";import{g as r4}from"./url-de9b02cf.js";class Na{constructor(r,e=""){typeof r=="string"?(this.el=document.createElement(r),this.el.className=e):this.el=r,this.data={}}data(r,e){return e!==void 0?(this.data[r]=e,this):this.data[r]}on(r,e){const[n,...i]=r.split(".");let s=n;return s==="mousewheel"&&/Firefox/i.test(window.navigator.userAgent)&&(s="DOMMouseScroll"),this.el.addEventListener(s,o=>{e(o);for(let h=0;h{this.css(o,`${r[o]}px`)}),this;const{offsetTop:e,offsetLeft:n,offsetHeight:i,offsetWidth:s}=this.el;return{top:e,left:n,height:i,width:s}}scroll(r){const{el:e}=this;return r!==void 0&&(r.left!==void 0&&(e.scrollLeft=r.left),r.top!==void 0&&(e.scrollTop=r.top)),{left:e.scrollLeft,top:e.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new Na(this.el.parentNode)}children(...r){return arguments.length===0?this.el.childNodes:(r.forEach(e=>this.child(e)),this)}removeChild(r){this.el.removeChild(r)}child(r){let e=r;return typeof r=="string"?e=document.createTextNode(r):r instanceof Na&&(e=r.el),this.el.appendChild(e),this}contains(r){return this.el.contains(r)}className(r){return r!==void 0?(this.el.className=r,this):this.el.className}addClass(r){return this.el.classList.add(r),this}hasClass(r){return this.el.classList.contains(r)}removeClass(r){return this.el.classList.remove(r),this}toggle(r="active"){return this.toggleClass(r)}toggleClass(r){return this.el.classList.toggle(r)}active(r=!0,e="active"){return r?this.addClass(e):this.removeClass(e),this}checked(r=!0){return this.active(r,"checked"),this}disabled(r=!0){return r?this.addClass("disabled"):this.removeClass("disabled"),this}attr(r,e){if(e!==void 0)this.el.setAttribute(r,e);else{if(typeof r=="string")return this.el.getAttribute(r);Object.keys(r).forEach(n=>{this.el.setAttribute(n,r[n])})}return this}removeAttr(r){return this.el.removeAttribute(r),this}html(r){return r!==void 0?(this.el.innerHTML=r,this):this.el.innerHTML}val(r){return r!==void 0?(this.el.value=r,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...r){return r.forEach(e=>this.el.style.removeProperty(e)),this}css(r,e){return e===void 0&&typeof r!="string"?(Object.keys(r).forEach(n=>{this.el.style[n]=r[n]}),this):e!==void 0?(this.el.style[r]=e,this):this.el.style[r]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const qe=(t,r="")=>new Na(t,r),ta=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function em(t){let r="",e=t;for(;e>=ta.length;)e/=ta.length,e-=1,r+=ta[parseInt(e,10)%ta.length];const n=t%ta.length;return r+=ta[n],r}function n4(t){let r=0;for(let e=0;e="0"&&t.charAt(n)<="9"?e+=t.charAt(n):r+=t.charAt(n);return[n4(r),parseInt(e,10)-1]}function Is(t,r){return`${em(t)}${r+1}`}function uf(t,r,e,n=()=>!0){if(r===0&&e===0)return t;const[i,s]=sa(t);return n(i,s)?Is(i+r,s+e):t}class Zr{constructor(r,e,n,i,s=0,o=0){this.sri=r,this.sci=e,this.eri=n,this.eci=i,this.w=s,this.h=o}set(r,e,n,i){this.sri=r,this.sci=e,this.eri=n,this.eci=i}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...r){let[e,n]=[0,0];r.length===1?[n,e]=sa(r[0]):r.length===2&&([e,n]=r);const{sri:i,sci:s,eri:o,eci:h}=this;return i<=e&&e<=o&&s<=n&&n<=h}each(r,e=()=>!0){const{sri:n,sci:i,eri:s,eci:o}=this;for(let h=n;h<=s;h+=1)if(e(h))for(let c=i;c<=o;c+=1)r(h,c)}contains(r){return this.sri<=r.sri&&this.sci<=r.sci&&this.eri>=r.eri&&this.eci>=r.eci}within(r){return this.sri>=r.sri&&this.sci>=r.sci&&this.eri<=r.eri&&this.eci<=r.eci}disjoint(r){return this.sri>r.eri||this.sci>r.eci||r.sri>this.eri||r.sci>this.eci}intersects(r){return this.sri<=r.eri&&this.sci<=r.eci&&r.sri<=this.eri&&r.sci<=this.eci}union(r){const{sri:e,sci:n,eri:i,eci:s}=this;return new Zr(r.srii?r.eri:i,r.eci>s?r.eci:s)}difference(r){const e=[],n=(u,p,m,d)=>{e.push(new Zr(u,p,m,d))},{sri:i,sci:s,eri:o,eci:h}=this,c=r.sri-i,a=r.sci-s,f=o-r.eri,l=h-r.eci;return c>0?(n(i,s,r.sri-1,h),f>0?(n(r.eri+1,s,o,h),a>0&&n(r.sri,s,r.eri,r.sci-1),l>0&&n(r.sri,r.eci+1,r.eri,h)):(a>0&&n(r.sri,s,o,r.sci-1),l>0&&n(r.sri,r.eci+1,o,h))):f>0&&(n(r.eri+1,s,o,h),a>0&&n(i,s,r.eri,r.sci-1),l>0&&n(i,r.eci+1,r.eri,h)),a>0?(n(i,s,o,r.sci-1),l>0?(n(i,r.eri+1,o,h),c>0&&n(i,r.sci,r.sri-1,r.eci),f>0&&n(r.sri+1,r.sci,o,r.eci)):(c>0&&n(i,r.sci,r.sri-1,h),f>0&&n(r.sri+1,r.sci,o,h))):l>0&&(n(o,r.eci+1,o,h),c>0&&n(i,s,r.sri-1,r.eci),f>0&&n(r.eri+1,s,o,r.eci)),e}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:r,sci:e,eri:n,eci:i}=this;let s=Is(e,r);return this.multiple()&&(s=`${s}:${Is(i,n)}`),s}clone(){const{sri:r,sci:e,eri:n,eci:i,w:s,h:o}=this;return new Zr(r,e,n,i,s,o)}equals(r){return this.eri===r.eri&&this.eci===r.eci&&this.sri===r.sri&&this.sci===r.sci}static valueOf(r){const e=r.split(":"),[n,i]=sa(e[0]);let[s,o]=[i,n];return e.length>1&&([o,s]=sa(e[1])),new Zr(i,n,s,o)}}let i4=class{constructor(){this.range=new Zr(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(r,e){this.ri=r,this.ci=e}size(){return this.range.size()}};class s4{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class a4{constructor(){this.undoItems=[],this.redoItems=[]}add(r){this.undoItems.push(JSON.stringify(r)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(r,e){const{undoItems:n,redoItems:i}=this;this.canUndo()&&(i.push(JSON.stringify(r)),e(JSON.parse(n.pop())))}redo(r,e){const{undoItems:n,redoItems:i}=this;this.canRedo()&&(n.push(JSON.stringify(r)),e(JSON.parse(i.pop())))}}class o4{constructor(){this.range=null,this.state="clear"}copy(r){return this.range=r,this.state="copy",this}cut(r){return this.range=r,this.state="cut",this}isCopy(){return this.state==="copy"}isCut(){return this.state==="cut"}isClear(){return this.state==="clear"}clear(){this.range=null,this.state="clear"}}class dp{constructor(r,e,n){this.ci=r,this.operator=e,this.value=n}set(r,e){this.operator=r,this.value=e}includes(r){const{operator:e,value:n}=this;return e==="all"?!0:e==="in"?n.includes(r):!1}vlength(){const{operator:r,value:e}=this;return r==="in"?e.length:0}getData(){const{ci:r,operator:e,value:n}=this;return{ci:r,operator:e,value:n}}}class pp{constructor(r,e){this.ci=r,this.order=e}asc(){return this.order==="asc"}desc(){return this.order==="desc"}}class f4{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:r,filters:e,sort:n}){r!=null&&(this.ref=r,this.filters=e.map(i=>new dp(i.ci,i.operator,i.value)),n&&(this.sort=new pp(n.ci,n.order)))}getData(){if(this.active()){const{ref:r,filters:e,sort:n}=this;return{ref:r,filters:e.map(i=>i.getData()),sort:n}}return{}}addFilter(r,e,n){const i=this.getFilter(r);i==null?this.filters.push(new dp(r,e,n)):i.set(e,n)}setSort(r,e){this.sort=e?new pp(r,e):null}includes(r,e){return this.active()?this.hrange().includes(r,e):!1}getSort(r){const{sort:e}=this;return e&&e.ci===r?e:null}getFilter(r){const{filters:e}=this;for(let n=0;n!e.within(r))}getFirstIncludes(r,e){for(let n=0;ne.intersects(r)))}intersects(r){for(let e=0;e{n.intersects(e)&&(e=n.union(e))}),e}add(r){this.deleteWithin(r),this._.push(r)}shift(r,e,n,i){this._.forEach(s=>{const{sri:o,sci:h,eri:c,eci:a}=s,f=s;r==="row"?o>=e?(f.sri+=n,f.eri+=n):o=e?(f.sci+=n,f.eci+=n):h{const s=i;s.within(r)&&(s.eri+=e,s.sri+=e,s.sci+=n,s.eci+=n)})}setData(r){return this._=r.map(e=>Zr.valueOf(e)),this}getData(){return this._.map(r=>r.toString())}}function l4(t){return JSON.parse(JSON.stringify(t))}const tm=(t={},...r)=>(r.forEach(e=>{Object.keys(e).forEach(n=>{const i=e[n];typeof i=="string"||typeof i=="number"||typeof i=="boolean"?t[n]=i:typeof i!="function"&&!Array.isArray(i)&&i instanceof Object?(t[n]=t[n]||{},tm(t[n],i)):t[n]=i})}),t);function su(t,r){const e=Object.keys(t);if(e.length!==Object.keys(r).length)return!1;for(let n=0;ne)=>{let e=0,n=0;return Object.keys(t).forEach(i=>{e+=r(t[i],i),n+=1}),[e,n]};function h4(t,r){const e=t[`${r}`];return delete t[`${r}`],e}function u4(t,r,e,n,i,s){let o=e,h=n,c=t;for(;ci);c+=1)h=s(c),o+=h;return[c,o-h,h]}function d4(t,r,e){let n=0;for(let i=t;i5?h.toFixed(2):h;return h.toFixed(Math.max(n,i))}const ri={cloneDeep:l4,merge:(...t)=>tm({},...t),equals:su,arrayEquals:m4,sum:c4,rangeEach:p4,rangeSum:d4,rangeReduceIf:u4,deleteProperty:h4,numberCalc:ka};class g4{constructor({len:r,height:e}){this._={},this.len=r,this.height=e}getHeight(r){if(this.isHide(r))return 0;const e=this.get(r);return e&&e.height?e.height:this.height}setHeight(r,e){const n=this.getOrNew(r);n.height=e}unhide(r){let e=r;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(r){const e=this.get(r);return e&&e.hide}setHide(r,e){const n=this.getOrNew(r);e===!0?n.hide=!0:delete n.hide}setStyle(r,e){const n=this.getOrNew(r);n.style=e}sumHeight(r,e,n){return ri.rangeSum(r,e,i=>n&&n.has(i)?0:this.getHeight(i))}totalHeight(){return this.sumHeight(0,this.len)}get(r){return this._[r]}getOrNew(r){return this._[r]=this._[r]||{cells:{}},this._[r]}getCell(r,e){const n=this.get(r);return n!==void 0&&n.cells!==void 0&&n.cells[e]!==void 0?n.cells[e]:null}getCellMerge(r,e){const n=this.getCell(r,e);return n&&n.merge?n.merge:[0,0]}getCellOrNew(r,e){const n=this.getOrNew(r);return n.cells[e]=n.cells[e]||{},n.cells[e]}setCell(r,e,n,i="all"){const s=this.getOrNew(r);i==="all"?s.cells[e]=n:i==="text"?(s.cells[e]=s.cells[e]||{},s.cells[e].text=n.text):i==="format"&&(s.cells[e]=s.cells[e]||{},s.cells[e].style=n.style,n.merge&&(s.cells[e].merge=n.merge))}setCellText(r,e,n){const i=this.getCellOrNew(r,e);i.editable!==!1&&(i.text=n)}copyPaste(r,e,n,i=!1,s=()=>{}){const{sri:o,sci:h,eri:c,eci:a}=r,f=e.sri,l=e.sci,u=e.eri,p=e.eci,[m,d]=r.size(),[v,x]=e.size();let g=!0,w=0;(u0){const{text:z}=U;let W=F-l+(k-f)+2;if(g||(W-=w+1),z[0]==="=")U.text=z.replace(/[a-zA-Z]{1,3}\d+/g,X=>{let[J,H]=[0,0];return o===f?J=W-1:H=W-1,/^\d+$/.test(X)?X:uf(X,J,H)});else if(m<=1&&d>1&&(f>c||u1&&(l>a||p{this.eachCells(i,s=>{let o=parseInt(i,10),h=parseInt(s,10);r.includes(i,s)&&(o=e.sri+(o-r.sri),h=e.sci+(h-r.sci)),n[o]=n[o]||{cells:{}},n[o].cells[h]=this._[i].cells[s]})}),this._=n}paste(r,e){if(r.length<=0)return;const{sri:n,sci:i}=e;r.forEach((s,o)=>{const h=n+o;s.forEach((c,a)=>{const f=i+a;this.setCellText(h,f,c)})})}insert(r,e=1){const n={};this.each((i,s)=>{let o=parseInt(i,10);o>=r&&(o+=e,this.eachCells(i,(h,c)=>{c.text&&c.text[0]==="="&&(c.text=c.text.replace(/[a-zA-Z]{1,3}\d+/g,a=>uf(a,0,e,(f,l)=>l>=r)))})),n[o]=s}),this._=n,this.len+=e}delete(r,e){const n=e-r+1,i={};this.each((s,o)=>{const h=parseInt(s,10);he&&(i[h-n]=o,this.eachCells(s,(c,a)=>{a.text&&a.text[0]==="="&&(a.text=a.text.replace(/[a-zA-Z]{1,3}\d+/g,f=>uf(f,0,-n,(l,u)=>u>e)))}))}),this._=i,this.len-=n}insertColumn(r,e=1){this.each((n,i)=>{const s={};this.eachCells(n,(o,h)=>{let c=parseInt(o,10);c>=r&&(c+=e,h.text&&h.text[0]==="="&&(h.text=h.text.replace(/[a-zA-Z]{1,3}\d+/g,a=>uf(a,e,0,f=>f>=r)))),s[c]=h}),i.cells=s})}deleteColumn(r,e){const n=e-r+1;this.each((i,s)=>{const o={};this.eachCells(i,(h,c)=>{const a=parseInt(h,10);ae&&(o[a-n]=c,c.text&&c.text[0]==="="&&(c.text=c.text.replace(/[a-zA-Z]{1,3}\d+/g,f=>uf(f,-n,0,l=>l>e))))}),s.cells=o})}deleteCells(r,e="all"){r.each((n,i)=>{this.deleteCell(n,i,e)})}deleteCell(r,e,n="all"){const i=this.get(r);if(i!==null){const s=this.getCell(r,e);s!==null&&s.editable!==!1&&(n==="all"?delete i.cells[e]:n==="text"?(s.text&&delete s.text,s.value&&delete s.value):n==="format"?(s.style!==void 0&&delete s.style,s.merge&&delete s.merge):n==="merge"&&s.merge&&delete s.merge)}}maxCell(){const r=Object.keys(this._),e=r[r.length-1],n=this._[e];if(n){const{cells:i}=n,s=Object.keys(i),o=s[s.length-1];return[parseInt(e,10),parseInt(o,10)]}return[0,0]}each(r){Object.entries(this._).forEach(([e,n])=>{r(e,n)})}eachCells(r,e){this._[r]&&this._[r].cells&&Object.entries(this._[r].cells).forEach(([n,i])=>{e(n,i)})}setData(r){r.len&&(this.len=r.len,delete r.len),this._=r}getData(){const{len:r}=this;return Object.assign({len:r},this._)}}class v4{constructor({len:r,width:e,indexWidth:n,minWidth:i}){this._={},this.len=r,this.width=e,this.indexWidth=n,this.minWidth=i}setData(r){r.len&&(this.len=r.len,delete r.len),this._=r}getData(){const{len:r}=this;return Object.assign({len:r},this._)}getWidth(r){if(this.isHide(r))return 0;const e=this._[r];return e&&e.width?e.width:this.width}getOrNew(r){return this._[r]=this._[r]||{},this._[r]}setWidth(r,e){const n=this.getOrNew(r);n.width=e}unhide(r){let e=r;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(r){const e=this._[r];return e&&e.hide}setHide(r,e){const n=this.getOrNew(r);e===!0?n.hide=!0:delete n.hide}setStyle(r,e){const n=this.getOrNew(r);n.style=e}sumWidth(r,e){return ri.rangeSum(r,e,n=>this.getWidth(n))}totalWidth(){return this.sumWidth(0,this.len)}}const x4={toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}};let au=["en"];const rm={en:x4};function mp(t,r){if(r)for(const e of au){if(!r[e])break;let n=r[e];const i=t.match(/(?:\\.|[^.])+/g);for(let s=0;ssn(t)}function nm(t,r,e=!1){e?au=[t]:au.unshift(t),r&&(rm[t]=r)}const gp={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function Zi(t,r,...e){let n="";return t||(n=sn(`validation.${r}`,...e)),[t,n]}class im{constructor(r,e,n,i){this.required=e,this.value=n,this.type=r,this.operator=i,this.message=""}parseValue(r){const{type:e}=this;return e==="date"?new Date(r):e==="number"?Number(r):r}equals(r){let e=this.type===r.type&&this.required===r.required&&this.operator===r.operator;return e&&(Array.isArray(this.value)?e=ri.arrayEquals(this.value,r.value):e=this.value===r.value),e}values(){return this.value.split(",")}validate(r){const{required:e,operator:n,value:i,type:s}=this;if(e&&/^\s*$/.test(r))return Zi(!1,"required");if(/^\s*$/.test(r))return[!0];if(gp[s]&&!gp[s].test(r))return Zi(!1,"notMatch");if(s==="list")return Zi(this.values().includes(r),"notIn");if(n){const o=this.parseValue(r);if(n==="be"){const[h,c]=i;return Zi(o>=this.parseValue(h)&&o<=this.parseValue(c),"between",h,c)}if(n==="nbe"){const[h,c]=i;return Zi(othis.parseValue(c),"notBetween",h,c)}if(n==="eq")return Zi(o===this.parseValue(i),"equal",i);if(n==="neq")return Zi(o!==this.parseValue(i),"notEqual",i);if(n==="lt")return Zi(othis.parseValue(i),"greaterThan",i);if(n==="gte")return Zi(o>=this.parseValue(i),"greaterThanEqual",i)}return[!0]}}class ac{constructor(r,e,n){this.refs=e,this.mode=r,this.validator=n}includes(r,e){const{refs:n}=this;for(let i=0;i{const i=Zr.valueOf(n);i.intersects(r)?i.difference(r).forEach(o=>e.push(o.toString())):e.push(n)}),this.refs=e}getData(){const{refs:r,mode:e,validator:n}=this,{type:i,required:s,operator:o,value:h}=n;return{refs:r,mode:e,type:i,required:s,operator:o,value:h}}static valueOf({refs:r,mode:e,type:n,required:i,operator:s,value:o}){return new ac(e,r,new im(n,i,o,s))}}class b4{constructor(){this._=[],this.errors=new Map}getError(r,e){return this.errors.get(`${r}_${e}`)}validate(r,e,n){const i=this.get(r,e),s=`${r}_${e}`,{errors:o}=this;if(i!==null){const[h,c]=i.validator.validate(n);h?o.delete(s):o.set(s,c)}else o.delete(s);return!0}add(r,e,{type:n,required:i,value:s,operator:o}){const h=new im(n,i,s,o),c=this.getByValidator(h);c!==null?c.addRef(e):this._.push(new ac(r,[e],h))}getByValidator(r){for(let e=0;e{e.remove(r)})}each(r){this._.forEach(e=>r(e))}getData(){return this._.filter(r=>r.refs.length>0).map(r=>r.getData())}setData(r){this._=r.map(e=>ac.valueOf(e))}}const w4={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},y4=41,_4=41,vp=(t,r)=>Object.prototype.hasOwnProperty.call(t,r);function xp(t,r,e=()=>{}){const{merges:n}=this,i=r.clone(),[s,o]=t.size(),[h,c]=r.size();return s>h&&(i.eri=r.sri+s-1),o>c&&(i.eci=r.sci+o-1),n.intersects(i)?(e(sn("error.pasteForMergedCell")),!1):!0}function bp(t,r,e,n=!1){const{rows:i,merges:s}=this;(e==="all"||e==="format")&&(i.deleteCells(r,e),s.deleteWithin(r)),i.copyPaste(t,r,e,n,(o,h,c)=>{if(c&&c.merge){const[a,f]=c.merge;if(a<=0&&f<=0)return;s.add(new Zr(o,h,o+a,h+f))}})}function E4(t,r){const{clipboard:e,rows:n,merges:i}=this;n.cutPaste(t,r),i.move(t,r.sri-t.sri,r.sci-t.sci),e.clear()}function _o(t,r,e){const{styles:n,rows:i}=this,s=i.getCellOrNew(t,r);let o={};s.style!==void 0&&(o=ri.cloneDeep(n[s.style])),o=ri.merge(o,{border:e}),s.style=this.addStyle(o)}function T4({mode:t,style:r,color:e}){const{styles:n,selector:i,rows:s}=this,{sri:o,sci:h,eri:c,eci:a}=i.range,f=!this.isSignleSelected();if(!(!f&&(t==="inside"||t==="horizontal"||t==="vertical"))){if(t==="outside"&&!f)_o.call(this,o,h,{top:[r,e],bottom:[r,e],left:[r,e],right:[r,e]});else if(t==="none")i.range.each((l,u)=>{const p=s.getCell(l,u);if(p&&p.style!==void 0){const m=ri.cloneDeep(n[p.style]);delete m.border,p.style=this.addStyle(m)}});else if(t==="all"||t==="inside"||t==="outside"||t==="horizontal"||t==="vertical"){const l=[];for(let u=o;u<=c;u+=1)for(let p=h;p<=a;p+=1){const m=[];for(let _=0;_l.splice(_,1)),p>a)break;const d=s.getCell(u,p);let[v,x]=[0,0];d&&d.merge&&([v,x]=d.merge,l.push([u,p,v,x]));const g=v>0&&u+v===c,w=x>0&&p+x===a;let y={};t==="all"?y={bottom:[r,e],top:[r,e],left:[r,e],right:[r,e]}:t==="inside"?(!w&&p0&&_o.call(this,u,p,y),p+=x}}else if(t==="top"||t==="bottom")for(let l=h;l<=a;l+=1)t==="top"&&(_o.call(this,o,l,{top:[r,e]}),l+=s.getCellMerge(o,l)[1]),t==="bottom"&&(_o.call(this,c,l,{bottom:[r,e]}),l+=s.getCellMerge(c,l)[1]);else if(t==="left"||t==="right")for(let l=o;l<=c;l+=1)t==="left"&&(_o.call(this,l,h,{left:[r,e]}),l+=s.getCellMerge(l,h)[0]),t==="right"&&(_o.call(this,l,a,{right:[r,e]}),l+=s.getCellMerge(l,a)[0])}}function S4(t,r){const{rows:e}=this,n=this.freezeTotalHeight();let i=e.height;n+e.heightt);o+=1)s.has(o)||(c=e.getHeight(o),h+=c);return h-=c,h<=0?{ri:-1,top:0,height:c}:{ri:o-1,top:h,height:c}}function k4(t,r){const{cols:e}=this,n=this.freezeTotalWidth();let i=e.indexWidth;n+e.indexWidthe.getWidth(c));return o<=0?{ci:-1,left:0,width:e.indexWidth}:{ci:s-1,left:o,width:h}}class C4{constructor(r,e){this.settings=ri.merge(w4,e||{}),this.name=r||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new ku,this.rows=new g4(this.settings.row),this.cols=new v4(this.settings.col),this.validations=new b4,this.hyperlinks={},this.comments={},this.selector=new i4,this.scroll=new s4,this.history=new a4,this.clipboard=new o4,this.autoFilter=new f4,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(r,e,n){this.changeData(()=>{this.validations.add(r,e,n)})}removeValidation(){const{range:r}=this.selector;this.changeData(()=>{this.validations.remove(r)})}getSelectedValidator(){const{ri:r,ci:e}=this.selector,n=this.validations.get(r,e);return n?n.validator:null}getSelectedValidation(){const{ri:r,ci:e,range:n}=this.selector,i=this.validations.get(r,e),s={ref:n.toString()};return i!==null&&(s.mode=i.mode,s.validator=i.validator),s}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),r=>{this.setData(r)})}redo(){this.history.redo(this.getData(),r=>{this.setData(r)})}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(navigator.clipboard===void 0)return;let r="";const e=this.rows.getData();for(let n=this.selector.range.sri;n<=this.selector.range.eri;n+=1){if(vp(e,n)){for(let i=this.selector.range.sci;i<=this.selector.range.eci;i+=1)if(i>this.selector.range.sci&&(r+=" "),vp(e[n].cells,i)){const s=String(e[n].cells[i].text);s.indexOf(` +`)===-1&&s.indexOf(" ")===-1&&s.indexOf('"')===-1?r+=s:r+=`"${s}"`}}else for(let i=this.selector.range.sci;i<=this.selector.range.eci;i+=1)r+=" ";r+=` +`}navigator.clipboard.writeText(r).then(()=>{},n=>{console.log("text copy to the system clipboard error ",r,n)})}cut(){this.clipboard.cut(this.selector.range)}paste(r="all",e=()=>{}){const{clipboard:n,selector:i}=this;return n.isClear()||!xp.call(this,n.range,i.range,e)?!1:(this.changeData(()=>{n.isCopy()?bp.call(this,n.range,i.range,r):n.isCut()&&E4.call(this,n.range,i.range)}),!0)}pasteFromText(r){const e=r.split(`\r +`).map(s=>s.replace(/"/g,"").split(" "));e.length>0&&(e.length-=1);const{rows:n,selector:i}=this;this.changeData(()=>{n.paste(e,i.range)})}autofill(r,e,n=()=>{}){const i=this.selector.range;return xp.call(this,i,r,n)?(this.changeData(()=>{bp.call(this,i,r,e,!0)}),!0):!1}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(r,e){const{selector:n,rows:i,cols:s,merges:o}=this;let{sri:h,sci:c,eri:a,eci:f}=n.range;const l=n.ri,u=n.ci;let[p,m]=[r,e];return r<0&&(p=i.len-1),e<0&&(m=s.len-1),p>l?[h,a]=[l,p]:[h,a]=[p,l],m>u?[c,f]=[u,m]:[c,f]=[m,u],n.range=o.union(new Zr(h,c,a,f)),n.range=o.union(n.range),n.range}calSelectedRangeByStart(r,e){const{selector:n,rows:i,cols:s,merges:o}=this;let h=o.getFirstIncludes(r,e);return h===null&&(h=new Zr(r,e,r,e),r===-1&&(h.sri=0,h.eri=i.len-1),e===-1&&(h.sci=0,h.eci=s.len-1)),n.range=h,h}setSelectedCellAttr(r,e){this.changeData(()=>{const{selector:n,styles:i,rows:s}=this;if(r==="merge")e?this.merge():this.unmerge();else if(r==="border")T4.call(this,e);else if(r==="formula"){const{ri:o,ci:h,range:c}=n;if(n.multiple()){const[a,f]=n.size(),{sri:l,sci:u,eri:p,eci:m}=c;if(a>1)for(let d=u;d<=m;d+=1){const v=s.getCellOrNew(p+1,d);v.text=`=${e}(${Is(d,l)}:${Is(d,p)})`}else if(f>1){const d=s.getCellOrNew(o,m+1);d.text=`=${e}(${Is(u,o)}:${Is(m,o)})`}}else{const a=s.getCellOrNew(o,h);a.text=`=${e}()`}}else n.range.each((o,h)=>{const c=s.getCellOrNew(o,h);let a={};if(c.style!==void 0&&(a=ri.cloneDeep(i[c.style])),r==="format")a.format=e,c.style=this.addStyle(a);else if(r==="font-bold"||r==="font-italic"||r==="font-name"||r==="font-size"){const f={};f[r.split("-")[1]]=e,a.font=Object.assign(a.font||{},f),c.style=this.addStyle(a)}else r==="strike"||r==="textwrap"||r==="underline"||r==="align"||r==="valign"||r==="color"||r==="bgcolor"?(a[r]=e,c.style=this.addStyle(a)):c[r]=e})})}setSelectedCellText(r,e="input"){const{autoFilter:n,selector:i,rows:s}=this,{ri:o,ci:h}=i;let c=o;this.unsortedRowMap.has(o)&&(c=this.unsortedRowMap.get(o));const a=s.getCell(c,h),f=a?a.text:"";if(this.setCellText(c,h,r,e),n.active()){const l=n.getFilter(h);if(l){const u=l.value.findIndex(p=>p===f);u>=0&&l.value.splice(u,1,r)}}}getSelectedCell(){const{ri:r,ci:e}=this.selector;let n=r;return this.unsortedRowMap.has(r)&&(n=this.unsortedRowMap.get(r)),this.rows.getCell(n,e)}xyInSelectedRect(r,e){const{left:n,top:i,width:s,height:o}=this.getSelectedRect(),h=r-this.cols.indexWidth,c=e-this.rows.height;return h>n&&hi&&c0&&x>f&&(m=f),v>0&&v>l&&(d=l),{l:f,t:l,left:m,top:d,height:u,width:p,scroll:e}}getCellRectByXY(r,e){const{scroll:n,merges:i,rows:s,cols:o}=this;let{ri:h,top:c,height:a}=S4.call(this,e,n.y),{ci:f,left:l,width:u}=k4.call(this,r,n.x);if(f===-1&&(u=o.totalWidth()),h===-1&&(a=s.totalHeight()),h>=0||f>=0){const p=i.getFirstIncludes(h,f);p&&(h=p.sri,f=p.sci,{left:l,top:c,width:u,height:a}=this.cellRect(h,f))}return{ri:h,ci:f,left:l,top:c,width:u,height:a}}isSignleSelected(){const{sri:r,sci:e,eri:n,eci:i}=this.selector.range,s=this.getCell(r,e);if(s&&s.merge){const[o,h]=s.merge;if(r+o===n&&e+h===i)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:r,sci:e,eri:n,eci:i}=this.selector.range,s=this.getCell(r,e);if(s&&s.merge){const[o,h]=s.merge;if(r+o===n&&e+h===i)return!0}return!1}merge(){const{selector:r,rows:e}=this;if(this.isSignleSelected())return;const[n,i]=r.size();if(n>1||i>1){const{sri:s,sci:o}=r.range;this.changeData(()=>{const h=e.getCellOrNew(s,o);h.merge=[n-1,i-1],this.merges.add(r.range),this.rows.deleteCells(r.range),this.rows.setCell(s,o,h)})}}unmerge(){const{selector:r}=this;if(!this.isSignleSelected())return;const{sri:e,sci:n}=r.range;this.changeData(()=>{this.rows.deleteCell(e,n,"merge"),this.merges.deleteWithin(r.range)})}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:r,selector:e}=this;this.changeData(()=>{r.active()?(r.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):r.ref=e.range.toString()})}setAutoFilter(r,e,n,i){const{autoFilter:s}=this;s.addFilter(r,n,i),s.setSort(r,e),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:r,rows:e}=this;if(!r.active())return;const{sort:n}=r,{rset:i,fset:s}=r.filteredRows((c,a)=>e.getCell(c,a)),o=Array.from(s),h=Array.from(s);n&&o.sort((c,a)=>n.order==="asc"?c-a:n.order==="desc"?a-c:0),this.exceptRowSet=i,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,o.forEach((c,a)=>{this.sortedRowMap.set(h[a],c),this.unsortedRowMap.set(c,h[a])})}deleteCell(r="all"){const{selector:e}=this;this.changeData(()=>{this.rows.deleteCells(e.range,r),(r==="all"||r==="format")&&this.merges.deleteWithin(e.range)})}insert(r,e=1){this.changeData(()=>{const{sri:n,sci:i}=this.selector.range,{rows:s,merges:o,cols:h}=this;let c=n;r==="row"?s.insert(n,e):r==="column"&&(s.insertColumn(i,e),c=i,h.len+=1),o.shift(r,c,e,(a,f,l,u)=>{const p=s.getCell(a,f);p.merge[0]+=l,p.merge[1]+=u})})}delete(r){this.changeData(()=>{const{rows:e,merges:n,selector:i,cols:s}=this,{range:o}=i,{sri:h,sci:c,eri:a,eci:f}=i.range,[l,u]=i.range.size();let p=h,m=l;r==="row"?e.delete(h,a):r==="column"&&(e.deleteColumn(c,f),p=o.sci,m=u,s.len-=1),n.shift(r,p,-m,(d,v,x,g)=>{const w=e.getCell(d,v);w.merge[0]+=x,w.merge[1]+=g,w.merge[0]===0&&w.merge[1]===0&&delete w.merge})})}scrollx(r,e){const{scroll:n,freeze:i,cols:s}=this,[,o]=i,[h,c,a]=ri.rangeReduceIf(o,s.len,0,0,r,l=>s.getWidth(l));let f=c;r>0&&(f+=a),n.x!==f&&(n.ci=r>0?h:0,n.x=f,e())}scrolly(r,e){const{scroll:n,freeze:i,rows:s}=this,[o]=i,[h,c,a]=ri.rangeReduceIf(o,s.len,0,0,r,l=>s.getHeight(l));let f=c;r>0&&(f+=a),n.y!==f&&(n.ri=r>0?h:0,n.y=f,e())}cellRect(r,e){const{rows:n,cols:i}=this,s=i.sumWidth(0,e),o=n.sumHeight(0,r),h=n.getCell(r,e);let c=i.getWidth(e),a=n.getHeight(r);if(h!==null&&h.merge){const[f,l]=h.merge;if(f>0)for(let u=1;u<=f;u+=1)a+=n.getHeight(r+u);if(l>0)for(let u=1;u<=l;u+=1)c+=i.getWidth(e+u)}return{left:s,top:o,width:c,height:a,cell:h}}getCell(r,e){return this.rows.getCell(r,e)}getCellTextOrDefault(r,e){const n=this.getCell(r,e);return n&&n.text?n.text:""}getCellStyle(r,e){const n=this.getCell(r,e);return n&&n.style!==void 0?this.styles[n.style]:null}getCellStyleOrDefault(r,e){const{styles:n,rows:i}=this,s=i.getCell(r,e),o=s&&s.style!==void 0?n[s.style]:{};return ri.merge(this.defaultStyle(),o)}getSelectedCellStyle(){const{ri:r,ci:e}=this.selector;return this.getCellStyleOrDefault(r,e)}setCellText(r,e,n,i){const{rows:s,history:o,validations:h}=this;i==="finished"?(s.setCellText(r,e,""),o.add(this.getData()),s.setCellText(r,e,n)):(s.setCellText(r,e,n),this.change(this.getData())),h.validate(r,e,n)}freezeIsActive(){const[r,e]=this.freeze;return r>0||e>0}setFreeze(r,e){this.changeData(()=>{this.freeze=[r,e]})}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(r,e){this.changeData(()=>{this.rows.setHeight(r,e)})}setColWidth(r,e){this.changeData(()=>{this.cols.setWidth(r,e)})}viewHeight(){const{view:r,showToolbar:e,showBottomBar:n}=this.settings;let i=r.height();return n&&(i-=_4),e&&(i-=y4),i}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[r,e]=this.freeze;return new Zr(0,0,r-1,e-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:r,cols:e}=this,[n,i]=r.maxCell(),s=r.sumHeight(0,n+1),o=e.sumWidth(0,i+1);return new Zr(0,0,n,i,o,s)}exceptRowTotalHeight(r,e){const{exceptRowSet:n,rows:i}=this,s=Array.from(n);let o=0;return s.forEach(h=>{if(he){const c=i.getHeight(h);o+=c}}),o}viewRange(){const{scroll:r,rows:e,cols:n,freeze:i,exceptRowSet:s}=this;let{ri:o,ci:h}=r;o<=0&&([o]=i),h<=0&&([,h]=i);let[c,a]=[0,0],[f,l]=[e.len,n.len];for(let u=o;uthis.viewHeight()));u+=1);for(let u=h;uthis.viewWidth()));u+=1);return new Zr(o,h,f,l,c,a)}eachMergesInView(r,e){this.merges.filterIntersects(r).forEach(n=>e(n))}hideRowsOrCols(){const{rows:r,cols:e,selector:n}=this,[i,s]=n.size(),{sri:o,sci:h,eri:c,eci:a}=n.range;if(i===r.len)for(let f=h;f<=a;f+=1)e.setHide(f,!0);else if(s===e.len)for(let f=o;f<=c;f+=1)r.setHide(f,!0)}unhideRowsOrCols(r,e){this[`${r}s`].unhide(e)}rowEach(r,e,n){let i=0;const{rows:s}=this,o=this.exceptRowSet,h=[...o];let c=0;for(let a=0;a0&&(n(a,i,f),i+=f,i>this.viewHeight()))break}}colEach(r,e,n){let i=0;const{cols:s}=this;for(let o=r;o<=e;o+=1){const h=s.getWidth(o);if(h>0&&(n(o,i,h),i+=h,i>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(r){const{styles:e}=this;for(let n=0;n{if(e==="merges"||e==="rows"||e==="cols"||e==="validations")this[e].setData(r[e]);else if(e==="freeze"){const[n,i]=sa(r[e]);this.freeze=[i,n]}else e==="autofilter"?this.autoFilter.setData(r[e]):r[e]!==void 0&&(this[e]=r[e])}),this}getData(){const{name:r,freeze:e,styles:n,merges:i,rows:s,cols:o,validations:h,autoFilter:c}=this;return{name:r,freeze:Is(e[1],e[0]),styles:n,merges:i.getData(),rows:s.getData(),cols:o.getData(),validations:h.getData(),autofilter:c.getData()}}}function ii(t,r,e){t.addEventListener(r,e)}function oc(t,r,e){t.removeEventListener(r,e)}function Lo(t){t.xclickoutside&&(oc(window.document.body,"click",t.xclickoutside),delete t.xclickoutside)}function Wf(t,r){t.xclickoutside=e=>{e.detail===2||t.contains(e.target)||(r?r(t):(t.hide(),Lo(t)))},ii(window.document.body,"click",t.xclickoutside)}function sm(t,r,e){ii(t,"mousemove",r);const n=t;n.xEvtUp=i=>{oc(t,"mousemove",r),oc(t,"mouseup",t.xEvtUp),e(i)},ii(t,"mouseup",t.xEvtUp)}function wp(t,r,e,n){let i="";Math.abs(t)>Math.abs(r)?(i=t>0?"right":"left",n(i,t,e)):(i=r>0?"down":"up",n(i,r,e))}function A4(t,{move:r,end:e}){let n=0,i=0;ii(t,"touchstart",s=>{const{pageX:o,pageY:h}=s.touches[0];n=o,i=h}),ii(t,"touchmove",s=>{if(!r)return;const{pageX:o,pageY:h}=s.changedTouches[0],c=o-n,a=h-i;(Math.abs(c)>10||Math.abs(a)>10)&&(wp(c,a,s,r),n=o,i=h),s.preventDefault()}),ii(t,"touchend",s=>{if(!e)return;const{pageX:o,pageY:h}=s.changedTouches[0],c=o-n,a=h-i;wp(c,a,s,e)})}function F4(){const t=new Map;function r(o,h){const c=()=>{const f=t.get(o);return Array.isArray(f)&&f.push(h)||!1},a=()=>t.set(o,[].concat(h));return t.has(o)&&c()||a()}function e(o,h){const c=()=>{const a=t.get(o);for(const f of a)f.call(null,...h)};return t.has(o)&&c()}function n(o,h){const c=()=>{const a=t.get(o),f=a.indexOf(h);return f>=0&&a.splice(f,1)&&t.get(o).length===0&&t.delete(o)};return t.has(o)&&c()}function i(o,h){const c=(...a)=>{h.call(null,...a),n(o,c)};return r(o,c)}function s(){t.clear()}return{get current(){return t},on:r,once:i,fire:e,removeListener:n,removeAllListeners:s}}const dt="x-spreadsheet";class yp{constructor(r=!1,e){this.moving=!1,this.vertical=r,this.el=qe("div",`${dt}-resizer ${r?"vertical":"horizontal"}`).children(this.unhideHoverEl=qe("div",`${dt}-resizer-hover`).on("dblclick.stop",n=>this.mousedblclickHandler(n)).css("position","absolute").hide(),this.hoverEl=qe("div",`${dt}-resizer-hover`).on("mousedown.stop",n=>this.mousedownHandler(n)),this.lineEl=qe("div",`${dt}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=e,this.unhideFn=()=>{}}showUnhide(r){this.unhideIndex=r,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(r,e){const{moving:n,vertical:i,hoverEl:s,lineEl:o,el:h,unhideHoverEl:c}=this;if(n)return;this.cRect=r;const{left:a,top:f,width:l,height:u}=r;h.offset({left:i?a+l-5:a,top:i?f:f+u-5}).show(),s.offset({width:i?5:l,height:i?u:5}),o.offset({width:i?0:e.width,height:i?e.height:0}),c.offset({left:i?5-l:a,top:i?f:5-u,width:i?5:l,height:i?u:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(r){let e=r;const{el:n,lineEl:i,cRect:s,vertical:o,minDistance:h}=this;let c=o?s.width:s.height;i.show(),sm(window,a=>{this.moving=!0,e!==null&&a.buttons===1&&(o?(c+=a.movementX,c>h&&n.css("left",`${s.left+c}px`)):(c+=a.movementY,c>h&&n.css("top",`${s.top+c}px`)),e=a)},()=>{e=null,i.hide(),this.moving=!1,this.hide(),this.finishedFn&&(c{}).on("scroll.stop",e=>{const{scrollTop:n,scrollLeft:i}=e.target;this.moveFn&&this.moveFn(this.vertical?n:i,e)})}move(r){return this.el.scroll(r),this}scroll(){return this.el.scroll()}set(r,e){const n=r-1;if(e>n){const i=this.vertical?"height":"width";this.el.css(i,`${n-15}px`).show(),this.contentEl.css(this.vertical?"width":"height","1px").css(i,`${e}px`)}else this.el.hide();return this}}const Ll=2*2-1;let ou=10;class Ul{constructor(r=!1){this.useHideInput=r,this.inputChange=()=>{},this.cornerEl=qe("div",`${dt}-selector-corner`),this.areaEl=qe("div",`${dt}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=qe("div",`${dt}-selector-clipboard`).hide(),this.autofillEl=qe("div",`${dt}-selector-autofill`).hide(),this.el=qe("div",`${dt}-selector`).css("z-index",`${ou}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),r&&(this.hideInput=qe("input","").on("compositionend",e=>{this.inputChange(e.target.value)}),this.el.child(this.hideInputDiv=qe("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=qe("div","hide-input").child(this.hideInput))),ou+=1}setOffset(r){return this.el.offset(r).show(),this}hide(){return this.el.hide(),this}setAreaOffset(r){const{left:e,top:n,width:i,height:s}=r,o={width:i-Ll+.8,height:s-Ll+.8,left:e-.8,top:n-.8};this.areaEl.offset(o).show(),this.useHideInput&&(this.hideInputDiv.offset(o),this.hideInput.val("").focus())}setClipboardOffset(r){const{left:e,top:n,width:i,height:s}=r;this.clipboardEl.offset({left:e,top:n,width:i-5,height:s-5})}showAutofill(r){const{left:e,top:n,width:i,height:s}=r;this.autofillEl.offset({width:i-Ll,height:s-Ll,left:e,top:n}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function Cu(t){const{data:r}=this,{left:e,top:n,width:i,height:s,scroll:o,l:h,t:c}=t,a=r.freezeTotalWidth(),f=r.freezeTotalHeight();let l=e-a;a>h&&(l-=o.x);let u=n-f;return f>c&&(u-=o.y),{left:l,top:u,width:i,height:s}}function Au(t){const{data:r}=this,{left:e,width:n,height:i,l:s,t:o,scroll:h}=t,c=r.freezeTotalWidth();let a=e-c;return c>s&&(a-=h.x),{left:a,top:o,width:n,height:i}}function Fu(t){const{data:r}=this,{top:e,width:n,height:i,l:s,t:o,scroll:h}=t,c=r.freezeTotalHeight();let a=e-c;return c>o&&(a-=h.y),{left:s,top:a,width:n,height:i}}function fu(t){const{br:r}=this;r.setAreaOffset(Cu.call(this,t))}function R4(t){const{tl:r}=this;r.setAreaOffset(t)}function am(t){const{t:r}=this;r.setAreaOffset(Au.call(this,t))}function om(t){const{l:r}=this;r.setAreaOffset(Fu.call(this,t))}function fm(t){const{l:r}=this;r.setClipboardOffset(Fu.call(this,t))}function lu(t){const{br:r}=this;r.setClipboardOffset(Cu.call(this,t))}function M4(t){const{tl:r}=this;r.setClipboardOffset(t)}function lm(t){const{t:r}=this;r.setClipboardOffset(Au.call(this,t))}function Ep(t){fu.call(this,t),R4.call(this,t),am.call(this,t),om.call(this,t)}function Tp(t){lu.call(this,t),M4.call(this,t),lm.call(this,t),fm.call(this,t)}class I4{constructor(r){this.inputChange=()=>{},this.data=r,this.br=new Ul(!0),this.t=new Ul,this.l=new Ul,this.tl=new Ul,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=qe("div",`${dt}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,ou+=1}resetData(r){this.data=r,this.range=r.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:r,tl:e,t:n,l:i,br:s}=this,o=r.freezeTotalHeight(),h=r.freezeTotalWidth();o>0||h>0?(e.setOffset({width:h,height:o}),n.setOffset({left:h,height:o}),i.setOffset({top:o,width:h}),s.setOffset({left:h,top:o})):(e.hide(),n.hide(),i.hide(),s.setOffset({left:0,top:0}))}resetAreaOffset(){const r=this.data.getSelectedRect(),e=this.data.getClipboardRect();Ep.call(this,r),Tp.call(this,e),this.resetOffset()}resetBRTAreaOffset(){const r=this.data.getSelectedRect(),e=this.data.getClipboardRect();fu.call(this,r),am.call(this,r),lu.call(this,e),lm.call(this,e),this.resetOffset()}resetBRLAreaOffset(){const r=this.data.getSelectedRect(),e=this.data.getClipboardRect();fu.call(this,r),om.call(this,r),lu.call(this,e),fm.call(this,e),this.resetOffset()}set(r,e,n=!0){const{data:i}=this,s=i.calSelectedRangeByStart(r,e),{sri:o,sci:h}=s;if(n){let[c,a]=[r,e];r<0&&(c=0),e<0&&(a=0),i.selector.setIndexes(c,a),this.indexes=[c,a]}this.moveIndexes=[o,h],this.range=s,this.resetAreaOffset(),this.el.show()}setEnd(r,e,n=!0){const{data:i,lastri:s,lastci:o}=this;if(n){if(r===s&&e===o)return;this.lastri=r,this.lastci=e}this.range=i.calSelectedRangeByEnd(r,e),Ep.call(this,this.data.getSelectedRect())}reset(){const{eri:r,eci:e}=this.data.selector.range;this.setEnd(r,e)}showAutofill(r,e){if(r===-1&&e===-1)return;const{sri:n,sci:i,eri:s,eci:o}=this.range,[h,c]=[r,e],a=n-r,f=i-e,l=s-r,u=o-e;if(f>0)this.arange=new Zr(n,c,s,i-1);else if(a>0)this.arange=new Zr(h,i,n-1,o);else if(u<0)this.arange=new Zr(n,o+1,s,c);else if(l<0)this.arange=new Zr(s+1,i,h,o);else{this.arange=null;return}if(this.arange!==null){const p=this.data.getRect(this.arange);p.width+=2,p.height+=2;const{br:m,l:d,t:v,tl:x}=this;m.showAutofill(Cu.call(this,p)),d.showAutofill(Fu.call(this,p)),v.showAutofill(Au.call(this,p)),x.showAutofill(p)}}hideAutofill(){["br","l","t","tl"].forEach(r=>{this[r].hideAutofill()})}showClipboard(){const r=this.data.getClipboardRect();Tp.call(this,r),["br","l","t","tl"].forEach(e=>{this[e].showClipboard()})}hideClipboard(){["br","l","t","tl"].forEach(r=>{this[r].hideClipboard()})}}function O4(t){t.preventDefault(),t.stopPropagation();const{filterItems:r}=this;r.length<=0||(this.itemIndex>=0&&r[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=r.length-1),r[this.itemIndex].toggle())}function D4(t){t.stopPropagation();const{filterItems:r}=this;r.length<=0||(this.itemIndex>=0&&r[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>r.length-1&&(this.itemIndex=0),r[this.itemIndex].toggle())}function Sp(t){t.preventDefault();const{filterItems:r}=this;r.length<=0||(t.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),r[this.itemIndex].el.click(),this.hide())}function N4(t){const{keyCode:r}=t;switch(t.ctrlKey&&t.stopPropagation(),r){case 37:t.stopPropagation();break;case 38:O4.call(this,t);break;case 39:t.stopPropagation();break;case 40:D4.call(this,t);break;case 13:Sp.call(this,t);break;case 9:Sp.call(this,t);break;default:t.stopPropagation();break}}class cm{constructor(r,e,n="200px"){this.filterItems=[],this.items=r,this.el=qe("div",`${dt}-suggest`).css("width",n).hide(),this.itemClick=e,this.itemIndex=-1}setOffset(r){this.el.cssRemoveKeys("top","bottom").offset(r)}hide(){const{el:r}=this;this.filterItems=[],this.itemIndex=-1,r.hide(),Lo(this.el.parent())}setItems(r){this.items=r}search(r){let{items:e}=this;if(/^\s*$/.test(r)||(e=e.filter(i=>(i.key||i).startsWith(r.toUpperCase()))),e=e.map(i=>{let{title:s}=i;s?typeof s=="function"&&(s=s()):s=i;const o=qe("div",`${dt}-item`).child(s).on("click.stop",()=>{this.itemClick(i),this.hide()});return i.label&&o.child(qe("div","label").html(i.label)),o}),this.filterItems=e,e.length<=0)return;const{el:n}=this;n.html("").children(...e).show(),Wf(n.parent(),()=>{this.hide()})}bindInputEvents(r){r.on("keydown",e=>N4.call(this,e))}}class Pn extends Na{constructor(r){super("div",`${dt}-icon`),this.iconNameEl=qe("div",`${dt}-icon-img ${r}`),this.child(this.iconNameEl)}setName(r){this.iconNameEl.className(`${dt}-icon-img ${r}`)}}function kp(t,r){t.setMonth(t.getMonth()+r)}function P4(t,r){const e=new Date(t);return e.setDate(r-t.getDay()+1),e}function B4(t,r,e){const n=new Date(t,r,1,23,59,59),i=[[],[],[],[],[],[]];for(let s=0;s<6;s+=1)for(let o=0;o<7;o+=1){const h=s*7+o,c=P4(n,h),a=c.getMonth()!==r,f=c.getMonth()===e.getMonth()&&c.getDate()===e.getDate();i[s][o]={d:c,disabled:a,active:f}}return i}class L4{constructor(r){this.value=r,this.cvalue=new Date(r),this.headerLeftEl=qe("div","calendar-header-left"),this.bodyEl=qe("tbody",""),this.buildAll(),this.el=qe("div","x-spreadsheet-calendar").children(qe("div","calendar-header").children(this.headerLeftEl,qe("div","calendar-header-right").children(qe("a","calendar-prev").on("click.stop",()=>this.prev()).child(new Pn("chevron-left")),qe("a","calendar-next").on("click.stop",()=>this.next()).child(new Pn("chevron-right")))),qe("table","calendar-body").children(qe("thead","").child(qe("tr","").children(...sn("calendar.weeks").map(e=>qe("th","cell").child(e)))),this.bodyEl)),this.selectChange=()=>{}}setValue(r){this.value=r,this.cvalue=new Date(r),this.buildAll()}prev(){const{value:r}=this;kp(r,-1),this.buildAll()}next(){const{value:r}=this;kp(r,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:r}=this;this.headerLeftEl.html(`${sn("calendar.months")[r.getMonth()]} ${r.getFullYear()}`)}buildBody(){const{value:r,cvalue:e,bodyEl:n}=this,s=B4(r.getFullYear(),r.getMonth(),e).map(o=>{const h=o.map(c=>{let a="cell";return c.disabled&&(a+=" disabled"),c.active&&(a+=" active"),qe("td","").child(qe("div",a).on("click.stop",()=>{this.selectChange(c.d)}).child(c.d.getDate().toString()))});return qe("tr","").children(...h)});n.html("").children(...s)}}class U4{constructor(){this.calendar=new L4(new Date),this.el=qe("div",`${dt}-datepicker`).child(this.calendar.el).hide()}setValue(r){const{calendar:e}=this;return typeof r=="string"?/^\d{4}-\d{1,2}-\d{1,2}$/.test(r)&&e.setValue(new Date(r.replace(new RegExp("-","g"),"/"))):r instanceof Date&&e.setValue(r),this}change(r){this.calendar.selectChange=e=>{r(e),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function fc(){const{inputText:t}=this;if(!/^\s*$/.test(t)){const{textlineEl:r,textEl:e,areaOffset:n}=this,i=t.split(` +`),s=Math.max(...i.map(l=>l.length)),h=r.offset().width/t.length,c=(s+1)*h+5,a=this.viewFn().width-n.left-h;let f=i.length;if(c>n.width){let l=c;c>a&&(l=a,f+=parseInt(c/a,10),f+=c%a>0?1:0),e.css("width",`${l}px`)}f*=this.rowHeight,f>n.height&&e.css("height",`${f}px`)}}function j4({target:t},r){const{value:e,selectionEnd:n}=t,i=`${e.slice(0,n)}${r}${e.slice(n)}`;t.value=i,t.setSelectionRange(n+1,n+1),this.inputText=i,this.textlineEl.html(i),fc.call(this)}function H4(t){const{keyCode:r,altKey:e}=t;r!==13&&r!==9&&t.stopPropagation(),r===13&&e&&(j4.call(this,t,` +`),t.stopPropagation()),r===13&&!e&&t.preventDefault()}function W4(t){const r=t.target.value,{suggest:e,textlineEl:n,validator:i}=this,{cell:s}=this;if(s!==null)if("editable"in s&&s.editable===!0||s.editable===void 0){if(this.inputText=r,i)i.type==="list"?e.search(r):e.hide();else{const o=r.lastIndexOf("=");o!==-1?e.search(r.substring(o+1)):e.hide()}n.html(r),fc.call(this),this.change("input",r)}else t.target.value=s.text;else{if(this.inputText=r,i)i.type==="list"?e.search(r):e.hide();else{const o=r.lastIndexOf("=");o!==-1?e.search(r.substring(o+1)):e.hide()}n.html(r),fc.call(this),this.change("input",r)}}function $4(t){const{el:r}=this.textEl;setTimeout(()=>{r.focus(),r.setSelectionRange(t,t)},0)}function hm(t,r){const{textEl:e,textlineEl:n}=this;e.el.blur(),e.val(t),n.html(t),$4.call(this,r)}function z4(t){const{inputText:r,validator:e}=this;let n=0;if(e&&e.type==="list")this.inputText=t,n=this.inputText.length;else{const i=r.lastIndexOf("="),s=r.substring(0,i+1);let o=r.substring(i+1);o.indexOf(")")!==-1?o=o.substring(o.indexOf(")")):o="",this.inputText=`${s+t.key}(`,n=this.inputText.length,this.inputText+=`)${o}`}hm.call(this,this.inputText,n)}function X4(){this.suggest.setItems(this.formulas)}function V4(t){let r=t.getMonth()+1,e=t.getDate();return r<10&&(r=`0${r}`),e<10&&(e=`0${e}`),`${t.getFullYear()}-${r}-${e}`}class G4{constructor(r,e,n){this.viewFn=e,this.rowHeight=n,this.formulas=r,this.suggest=new cm(r,i=>{z4.call(this,i)}),this.datepicker=new U4,this.datepicker.change(i=>{this.setText(V4(i)),this.clear()}),this.areaEl=qe("div",`${dt}-editor-area`).children(this.textEl=qe("textarea","").on("input",i=>W4.call(this,i)).on("paste.stop",()=>{}).on("keydown",i=>H4.call(this,i)),this.textlineEl=qe("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",()=>{}).on("mousedown.stop",()=>{}),this.el=qe("div",`${dt}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(r,e){this.freeze.w=r,this.freeze.h=e}clear(){this.inputText!==""&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),X4.call(this),this.datepicker.hide()}setOffset(r,e="top"){const{textEl:n,areaEl:i,suggest:s,freeze:o,el:h}=this;if(r){this.areaOffset=r;const{left:c,top:a,width:f,height:l,l:u,t:p}=r,m={left:0,top:0};o.w>u&&o.h>p||(o.wu?m.top=o.h:o.h>p&&(m.left=o.w)),h.offset(m),i.offset({left:c-m.left-.8,top:a-m.top-.8}),n.offset({width:f-9+.8,height:l-3+.8});const d={left:0};d[e]=l,s.setOffset(d),s.hide()}}setCell(r,e){const{el:n,datepicker:i,suggest:s}=this;n.show(),this.cell=r;const o=r&&r.text||"";if(this.setText(o),this.validator=e,e){const{type:h}=e;h==="date"&&(i.show(),/^\s*$/.test(o)||i.setValue(o)),h==="list"&&(s.setItems(e.values()),s.search(""))}}setText(r){this.inputText=r,hm.call(this,r,r.length),fc.call(this)}}class Fa extends Na{constructor(r,e=""){super("div",`${dt}-button ${e}`),this.child(sn(`button.${r}`))}}function lc(){return window.devicePixelRatio||1}function Ru(){return lc()-.5}function Zt(t){return parseInt(t*lc(),10)}function Eo(t){const r=Zt(t);return r>0?r-.5:.5}class K4{constructor(r,e,n,i,s=0){this.x=r,this.y=e,this.width=n,this.height=i,this.padding=s,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:r,bottom:e,left:n,right:i}){r&&(this.borderTop=r),i&&(this.borderRight=i),e&&(this.borderBottom=e),n&&(this.borderLeft=n)}innerWidth(){return this.width-this.padding*2-2}innerHeight(){return this.height-this.padding*2-2}textx(r){const{width:e,padding:n}=this;let{x:i}=this;return r==="left"?i+=n:r==="center"?i+=e/2:r==="right"&&(i+=e-n),i}texty(r,e){const{height:n,padding:i}=this;let{y:s}=this;return r==="top"?s+=i:r==="middle"?s+=n/2-e/2:r==="bottom"&&(s+=n-i-e),s}topxys(){const{x:r,y:e,width:n}=this;return[[r,e],[r+n,e]]}rightxys(){const{x:r,y:e,width:n,height:i}=this;return[[r+n,e],[r+n,e+i]]}bottomxys(){const{x:r,y:e,width:n,height:i}=this;return[[r,e+i],[r+n,e+i]]}leftxys(){const{x:r,y:e,height:n}=this;return[[r,e],[r,e+n]]}}function Cp(t,r,e,n,i,s,o){const h={x:0,y:0};t==="underline"?i==="bottom"?h.y=0:i==="top"?h.y=-(s+2):h.y=-s/2:t==="strike"&&(i==="bottom"?h.y=s/2:i==="top"&&(h.y=-(s/2+2))),n==="center"?h.x=o/2:n==="right"&&(h.x=o),this.line([r-h.x,e-h.y],[r-h.x+o,e-h.y])}class um{constructor(r,e,n){this.el=r,this.ctx=r.getContext("2d"),this.resize(e,n),this.ctx.scale(lc(),lc())}resize(r,e){this.el.style.width=`${r}px`,this.el.style.height=`${e}px`,this.el.width=Zt(r),this.el.height=Zt(e)}clear(){const{width:r,height:e}=this.el;return this.ctx.clearRect(0,0,r,e),this}attr(r){return Object.assign(this.ctx,r),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(r,e){return this.ctx.translate(Zt(r),Zt(e)),this}scale(r,e){return this.ctx.scale(r,e),this}clearRect(r,e,n,i){return this.ctx.clearRect(r,e,n,i),this}fillRect(r,e,n,i){return this.ctx.fillRect(Zt(r)-.5,Zt(e)-.5,Zt(n),Zt(i)),this}fillText(r,e,n){return this.ctx.fillText(r,Zt(e),Zt(n)),this}text(r,e,n={},i=!0){const{ctx:s}=this,{align:o,valign:h,font:c,color:a,strike:f,underline:l}=n,u=e.textx(o);s.save(),s.beginPath(),this.attr({textAlign:o,textBaseline:h,font:`${c.italic?"italic":""} ${c.bold?"bold":""} ${Zt(c.size)}px ${c.name}`,fillStyle:a,strokeStyle:a});const p=`${r}`.split(` +`),m=e.innerWidth(),d=[];p.forEach(g=>{const w=s.measureText(g).width;if(i&&w>Zt(m)){let y={w:0,len:0,start:0};for(let _=0;_=Zt(m)&&(d.push(g.substr(y.start,y.len)),y={w:0,len:0,start:_}),y.len+=1,y.w+=s.measureText(g[_]).width+1;y.len>0&&d.push(g.substr(y.start,y.len))}else d.push(g)});const v=(d.length-1)*(c.size+2);let x=e.texty(h,v);return d.forEach(g=>{const w=s.measureText(g).width;this.fillText(g,u,x),f&&Cp.call(this,"strike",u,x,o,h,c.size,w),l&&Cp.call(this,"underline",u,x,o,h,c.size,w),x+=c.size+2}),s.restore(),this}border(r,e){const{ctx:n}=this;return n.lineWidth=Ru,n.strokeStyle=e,r==="medium"?n.lineWidth=Zt(2)-.5:r==="thick"?n.lineWidth=Zt(3):r==="dashed"?n.setLineDash([Zt(3),Zt(2)]):r==="dotted"?n.setLineDash([Zt(1),Zt(1)]):r==="double"&&n.setLineDash([Zt(2),0]),this}line(...r){const{ctx:e}=this;if(r.length>1){e.beginPath();const[n,i]=r[0];e.moveTo(Eo(n),Eo(i));for(let s=1;s{const r=[],e=[];let n=[],i=0,s="",o=1,h="";for(let c=0;c="a"&&a<="z")n.push(a.toUpperCase());else if(a>="0"&&a<="9"||a>="A"&&a<="Z"||a===".")n.push(a);else if(a==='"'){for(c+=1;t.charAt(c)!=='"';)n.push(t.charAt(c)),c+=1;e.push(`"${n.join("")}`),n=[]}else if(a==="-"&&/[+\-*/,(]/.test(h))n.push(a);else{if(a!=="("&&n.length>0&&e.push(n.join("")),a===")"){let f=r.pop();if(i===2)try{const[l,u]=sa(e.pop()),[p,m]=sa(e.pop());let d=0;for(let v=p;v<=l;v+=1)for(let x=m;x<=u;x+=1)e.push(Is(v,x)),d+=1;e.push([f,d])}catch{}else if(i===1||i===3)i===3&&e.push(s),e.push([f,o]),o=1;else for(;f!=="("&&(e.push(f),!(r.length<=0));)f=r.pop();i=0}else if(a==="="||a===">"||a==="<"){const f=t.charAt(c+1);s=a,(f==="="||f==="-")&&(s+=f,c+=1),i=3}else if(a===":")i=2;else if(a===",")i===3&&e.push(s),i=1,o+=1;else if(a==="("&&n.length>0)r.push(n.join(""));else{if(r.length>0&&(a==="+"||a==="-")){let f=r[r.length-1];if(f!=="("&&e.push(r.pop()),f==="*"||f==="/")for(;r.length>0&&(f=r[r.length-1],f!=="(");)e.push(r.pop())}else if(r.length>0){const f=r[r.length-1];(f==="*"||f==="/")&&e.push(r.pop())}r.push(a)}n=[]}h=a}}for(n.length>0&&e.push(n.join(""));r.length>0;)e.push(r.pop());return e},J4=(t,r)=>{const[e]=t;let n=t;if(e==='"')return t.substring(1);let i=1;if(e==="-"&&(n=t.substring(1),i=-1),n[0]>="0"&&n[0]<="9")return i*Number(n);const[s,o]=sa(n);return i*r(s,o)},Q4=(t,r,e,n)=>{const i=[];for(let s=0;s"||h==="<"){let c=i.pop();Number.isNaN(c)||(c=Number(c));let a=i.pop();Number.isNaN(a)||(a=Number(a));let f=!1;h==="="?f=a===c:o===">"?f=a>c:o===">="?f=a>=c:o==="<"?f=a="a"&&h<="z"||h>="A"&&h<="Z")&&n.push(o),i.push(J4(o,e)),n.pop()}}return i[0]},dm=(t,r,e,n=[])=>{if(t[0]==="="){const i=Z4(t.substring(1));return i.length<=0?t:Q4(i,r,(s,o)=>dm(e(s,o),r,e,n),n)}return t},q4={render:dm},Mu=[{key:"SUM",title:ur("formula.sum"),render:t=>t.reduce((r,e)=>ka("+",r,e),0)},{key:"AVERAGE",title:ur("formula.average"),render:t=>t.reduce((r,e)=>Number(r)+Number(e),0)/t.length},{key:"MAX",title:ur("formula.max"),render:t=>Math.max(...t.map(r=>Number(r)))},{key:"MIN",title:ur("formula.min"),render:t=>Math.min(...t.map(r=>Number(r)))},{key:"IF",title:ur("formula._if"),render:([t,r,e])=>t?r:e},{key:"AND",title:ur("formula.and"),render:t=>t.every(r=>r)},{key:"OR",title:ur("formula.or"),render:t=>t.some(r=>r)},{key:"CONCAT",title:ur("formula.concat"),render:t=>t.join("")}],e3=Mu,pm={};Mu.forEach(t=>{pm[t.key]=t});const To=t=>t,jl=t=>{if(/^(-?\d*.?\d*)$/.test(t)){const r=Number(t).toFixed(2).toString(),[e,...n]=r.split("\\.");return[e.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...n]}return t},pf=[{key:"normal",title:ur("format.normal"),type:"string",render:To},{key:"text",title:ur("format.text"),type:"string",render:To},{key:"number",title:ur("format.number"),type:"number",label:"1,000.12",render:jl},{key:"percent",title:ur("format.percent"),type:"number",label:"10.12%",render:t=>`${t}%`},{key:"rmb",title:ur("format.rmb"),type:"number",label:"¥10.00",render:t=>`¥${jl(t)}`},{key:"usd",title:ur("format.usd"),type:"number",label:"$10.00",render:t=>`$${jl(t)}`},{key:"eur",title:ur("format.eur"),type:"number",label:"€10.00",render:t=>`€${jl(t)}`},{key:"date",title:ur("format.date"),type:"date",label:"26/09/2008",render:To},{key:"time",title:ur("format.time"),type:"date",label:"15:59:00",render:To},{key:"datetime",title:ur("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:To},{key:"duration",title:ur("format.duration"),type:"date",label:"24:01:00",render:To}],mm={};pf.forEach(t=>{mm[t.key]=t});const t3=5,r3={fillStyle:"#f4f5f8"},n3={fillStyle:"#fff",lineWidth:Ru,strokeStyle:"#e6e6e6"};function i3(){return{textAlign:"center",textBaseline:"middle",font:`500 ${Zt(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:Ru(),strokeStyle:"#e6e6e6"}}function gm(t,r,e,n=0){const{left:i,top:s,width:o,height:h}=t.cellRect(r,e);return new K4(i,s+n,o,h,t3)}function cc(t,r,e,n,i=0){const{sortedRowMap:s,rows:o,cols:h}=r;if(o.isHide(e)||h.isHide(n))return;let c=e;s.has(e)&&(c=s.get(e));const a=r.getCell(c,n);if(a===null)return;let f=!1;"editable"in a&&a.editable===!1&&(f=!0);const l=r.getCellStyleOrDefault(c,n),u=gm(r,e,n,i);u.bgcolor=l.bgcolor,l.border!==void 0&&(u.setBorders(l.border),t.strokeBorders(u)),t.rect(u,()=>{let p="";r.settings.evalPaused?p=a.text||"":p=q4.render(a.text||"",pm,(v,x)=>r.getCellTextOrDefault(x,v)),l.format&&(p=mm[l.format].render(p));const m=Object.assign({},l.font);m.size=Y4(m.size),t.text(p,u,{align:l.align,valign:l.valign,font:m,color:l.color,strike:l.strike,underline:l.underline},l.textwrap),r.validations.getError(e,n)&&t.error(u),f&&t.frozen(u)})}function s3(t){const{data:r,draw:e}=this;if(t){const{autoFilter:n}=r;if(!n.active())return;const i=n.hrange();t.intersects(i)&&i.each((s,o)=>{const h=gm(r,s,o);e.dropdown(h)})}}function Hl(t,r,e,n,i){const{draw:s,data:o}=this;s.save(),s.translate(r,e).translate(n,i);const{exceptRowSet:h}=o,c=l=>{const u=h.has(l);if(u){const p=o.rows.getHeight(l);s.translate(0,-p)}return!u},a=o.exceptRowTotalHeight(t.sri,t.eri);s.save(),s.translate(0,-a),t.each((l,u)=>{cc(s,o,l,u)},l=>c(l)),s.restore();const f=new Set;s.save(),s.translate(0,-a),o.eachMergesInView(t,({sri:l,sci:u,eri:p})=>{if(!h.has(l))cc(s,o,l,u);else if(!f.has(l)){f.add(l);const m=o.rows.sumHeight(l,p+1);s.translate(0,-m)}}),s.restore(),s3.call(this,t),s.restore()}function Fp(t,r,e,n){const{draw:i}=this;i.save(),i.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(t,r,e,n),i.restore()}function Wl(t,r,e,n,i,s){const{draw:o,data:h}=this,c=r.h,a=r.w,f=s+n,l=i+e;o.save(),o.attr(r3),(t==="all"||t==="left")&&o.fillRect(0,f,e,c),(t==="all"||t==="top")&&o.fillRect(l,0,a,n);const{sri:u,sci:p,eri:m,eci:d}=h.selector.range;o.attr(i3()),(t==="all"||t==="left")&&(h.rowEach(r.sri,r.eri,(v,x,g)=>{const w=f+x,y=v;o.line([0,w],[e,w]),u<=y&&y0&&h.rows.isHide(v-1)&&(o.save(),o.attr({strokeStyle:"#c6c6c6"}),o.line([5,w+5],[e-5,w+5]),o.restore())}),o.line([0,c+f],[e,c+f]),o.line([e,f],[e,c+f])),(t==="all"||t==="top")&&(h.colEach(r.sci,r.eci,(v,x,g)=>{const w=l+x,y=v;o.line([w,0],[w,n]),p<=y&&y0&&h.cols.isHide(v-1)&&(o.save(),o.attr({strokeStyle:"#c6c6c6"}),o.line([w+5,5],[w+5,n-5]),o.restore())}),o.line([a+l,0],[a+l,n]),o.line([0,n],[a+l,n])),o.restore()}function a3(t,r){const{draw:e}=this;e.save(),e.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,t,r),e.restore()}function $l({sri:t,sci:r,eri:e,eci:n,w:i,h:s},o,h,c,a){const{draw:f,data:l}=this,{settings:u}=l;if(f.save(),f.attr(n3).translate(o+c,h+a),!u.showGrid){f.restore();return}l.rowEach(t,e,(p,m,d)=>{p!==t&&f.line([0,m],[i,m]),p===e&&f.line([0,m+d],[i,m+d])}),l.colEach(r,n,(p,m,d)=>{p!==r&&f.line([m,0],[m,s]),p===n&&f.line([m+d,0],[m+d,s])}),f.restore()}function o3(t,r,e,n){const{draw:i,data:s}=this,o=s.viewWidth()-t,h=s.viewHeight()-r;i.save().translate(t,r).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),i.line([0,n],[o,n]),i.line([e,0],[e,h]),i.restore()}class f3{constructor(r,e){this.el=r,this.draw=new um(r,e.viewWidth(),e.viewHeight()),this.data=e}resetData(r){this.data=r,this.render()}render(){const{data:r}=this,{rows:e,cols:n}=r,i=n.indexWidth,s=e.height;this.draw.resize(r.viewWidth(),r.viewHeight()),this.clear();const o=r.viewRange(),h=r.freezeTotalWidth(),c=r.freezeTotalHeight(),{x:a,y:f}=r.scroll;$l.call(this,o,i,s,h,c),Hl.call(this,o,i,s,-a,-f),Wl.call(this,"all",o,i,s,h,c),a3.call(this,i,s);const[l,u]=r.freeze;if(l>0||u>0){if(l>0){const m=o.clone();m.sri=0,m.eri=l-1,m.h=c,$l.call(this,m,i,s,h,0),Hl.call(this,m,i,s,-a,0),Wl.call(this,"top",m,i,s,h,0)}if(u>0){const m=o.clone();m.sci=0,m.eci=u-1,m.w=h,$l.call(this,m,i,s,0,c),Wl.call(this,"left",m,i,s,0,c),Hl.call(this,m,i,s,0,-f)}const p=r.freezeViewRange();$l.call(this,p,i,s,0,0),Wl.call(this,"all",p,i,s,0,0),Hl.call(this,p,i,s,0,0),o3.call(this,i,s,h,c)}}clear(){this.draw.clear()}}const tc=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],hu=["landscape","portrait"];function hc(t){return parseInt(96*t,10)}function Rp(t){t==="cancel"?this.el.hide():this.toPrint()}function l3(t){const{paper:r}=this,{value:e}=t.target,n=tc[e];r.w=hc(n[1]),r.h=hc(n[2]),this.preview()}function c3(t){const{paper:r}=this,{value:e}=t.target,n=hu[e];r.orientation=n,this.preview()}let h3=class{constructor(r){this.paper={w:hc(tc[0][1]),h:hc(tc[0][2]),padding:50,orientation:hu[0],get width(){return this.orientation==="landscape"?this.h:this.w},get height(){return this.orientation==="landscape"?this.w:this.h}},this.data=r,this.el=qe("div",`${dt}-print`).children(qe("div",`${dt}-print-bar`).children(qe("div","-title").child("Print settings"),qe("div","-right").children(qe("div",`${dt}-buttons`).children(new Fa("cancel").on("click",Rp.bind(this,"cancel")),new Fa("next","primary").on("click",Rp.bind(this,"next"))))),qe("div",`${dt}-print-content`).children(this.contentEl=qe("div","-content"),qe("div","-sider").child(qe("form","").children(qe("fieldset","").children(qe("label","").child(`${sn("print.size")}`),qe("select","").children(...tc.map((e,n)=>qe("option","").attr("value",n).child(`${e[0]} ( ${e[1]}''x${e[2]}'' )`))).on("change",l3.bind(this))),qe("fieldset","").children(qe("label","").child(`${sn("print.orientation")}`),qe("select","").children(...hu.map((e,n)=>qe("option","").attr("value",n).child(`${sn("print.orientations")[n]}`))).on("change",c3.bind(this))))))).hide()}resetData(r){this.data=r}preview(){const{data:r,paper:e}=this,{width:n,height:i,padding:s}=e,o=n-s*2,h=i-s*2,c=r.contentRange(),a=parseInt(c.h/h,10)+1,f=o/c.w;let l=s;const u=s;f>1&&(l+=(o-c.w)/2);let p=0,m=0;this.contentEl.html(""),this.canvases=[];const d={sri:0,sci:0,eri:0,eci:0};for(let v=0;v{cc(_,r,F,O,k)}),_.restore(),d.sri=d.eri,d.sci=d.eci,m+=g,this.contentEl.child(qe("div",`${dt}-canvas-card-wraper`).child(w.child(y)))}this.el.show()}toPrint(){this.el.hide();const{paper:r}=this,e=qe("iframe","").hide(),{el:n}=e;window.document.body.appendChild(n);const{contentWindow:i}=n,s=i.document,o=document.createElement("style");o.innerHTML=` + @page { size: ${r.width}px ${r.height}px; }; + canvas { + page-break-before: auto; + page-break-after: always; + image-rendering: pixelated; + }; + `,s.head.appendChild(o),this.canvases.forEach(h=>{const c=h.cloneNode(!1);c.getContext("2d").drawImage(h,0,0),s.body.appendChild(c)}),i.print()}};const u3=[{key:"copy",title:ur("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:ur("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:ur("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:ur("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:ur("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:ur("contextmenu.insertRow")},{key:"insert-column",title:ur("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:ur("contextmenu.deleteRow")},{key:"delete-column",title:ur("contextmenu.deleteColumn")},{key:"delete-cell-text",title:ur("contextmenu.deleteCellText")},{key:"hide",title:ur("contextmenu.hide")},{key:"divider"},{key:"validation",title:ur("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:ur("contextmenu.cellprintable")},{key:"cell-non-printable",title:ur("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:ur("contextmenu.celleditable")},{key:"cell-non-editable",title:ur("contextmenu.cellnoneditable")}];function d3(t){return t.key==="divider"?qe("div",`${dt}-item divider`):qe("div",`${dt}-item`).on("click",()=>{this.itemClick(t.key),this.hide()}).children(t.title(),qe("div","label").child(t.label||""))}function p3(){return u3.map(t=>d3.call(this,t))}let m3=class{constructor(r,e=!1){this.menuItems=p3.call(this),this.el=qe("div",`${dt}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=r,this.itemClick=()=>{},this.isHide=e,this.setMode("range")}setMode(r){const e=this.menuItems[12];r==="row-col"?e.show():e.hide()}hide(){const{el:r}=this;r.hide(),Lo(r)}setPosition(r,e){if(this.isHide)return;const{el:n}=this,{width:i}=n.show().offset(),s=this.viewFn(),o=s.height/2;let h=r;s.width-r<=i&&(h-=i),n.css("left",`${h}px`),e>o?n.css("bottom",`${s.height-e}px`).css("max-height",`${e}px`).css("top","auto"):n.css("top",`${e}px`).css("max-height",`${s.height-e}px`).css("bottom","auto"),Wf(n)}};function g3(t,r){if(r.classList.contains("active"))return;const{left:e,top:n,width:i,height:s}=r.getBoundingClientRect(),o=qe("div",`${dt}-tooltip`).html(t).show();document.body.appendChild(o.el);const h=o.box();o.css("left",`${e+i/2-h.width/2}px`).css("top",`${n+s+2}px`),ii(r,"mouseleave",()=>{document.body.contains(o.el)&&document.body.removeChild(o.el)}),ii(r,"click",()=>{document.body.contains(o.el)&&document.body.removeChild(o.el)})}class Iu{constructor(r,e,n){this.tip=sn(`toolbar.${r.replace(/-[a-z]/g,i=>i[1].toUpperCase())}`),e&&(this.tip+=` (${e})`),this.tag=r,this.shortcut=e,this.value=n,this.el=this.element(),this.change=()=>{}}element(){const{tip:r}=this;return qe("div",`${dt}-toolbar-btn`).on("mouseenter",e=>{g3(r,e.target)}).attr("data-tooltip",r)}setState(){}}class ps extends Iu{dropdown(){}getValue(r){return r}element(){const{tag:r}=this;return this.dd=this.dropdown(),this.dd.change=e=>this.change(r,this.getValue(e)),super.element().child(this.dd)}setState(r){r&&(this.value=r,this.dd.setTitle(r))}}class ms extends Na{constructor(r,e,n,i,...s){super("div",`${dt}-dropdown ${i}`),this.title=r,this.change=()=>{},this.headerClick=()=>{},typeof r=="string"?this.title=qe("div",`${dt}-dropdown-title`).child(r):n&&this.title.addClass("arrow-left"),this.contentEl=qe("div",`${dt}-dropdown-content`).css("width",e).hide(),this.setContentChildren(...s),this.headerEl=qe("div",`${dt}-dropdown-header`),this.headerEl.on("click",()=>{this.contentEl.css("display")!=="block"?this.show():this.hide()}).children(this.title,n?qe("div",`${dt}-icon arrow-right`).child(qe("div",`${dt}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...r){this.contentEl.html(""),r.length>0&&this.contentEl.children(...r)}setTitle(r){this.title.html(r),this.hide()}show(){const{contentEl:r}=this;r.show(),this.parent().active(),Wf(this.parent(),()=>{this.hide()})}hide(){this.parent().active(!1),this.contentEl.hide(),Lo(this.parent())}}function v3(t){return qe("div",`${dt}-item`).child(new Pn(t))}class vm extends ms{constructor(r,e){const n=new Pn(`align-${e}`),i=r.map(s=>v3(`align-${s}`).on("click",()=>{this.setTitle(s),this.change(s)}));super(n,"auto",!0,"bottom-left",...i)}setTitle(r){this.title.setName(`align-${r}`),this.hide()}}class x3 extends ps{constructor(r){super("align","",r)}dropdown(){const{value:r}=this;return new vm(["left","center","right"],r)}}class b3 extends ps{constructor(r){super("valign","",r)}dropdown(){const{value:r}=this;return new vm(["top","middle","bottom"],r)}}class Ls extends Iu{element(){const{tag:r}=this;return super.element().child(new Pn(r)).on("click",()=>this.click())}click(){this.change(this.tag,this.toggle())}setState(r){this.el.active(r)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class w3 extends Ls{constructor(){super("autofilter")}setState(){}}class y3 extends Ls{constructor(){super("font-bold","Ctrl+B")}}class _3 extends Ls{constructor(){super("font-italic","Ctrl+I")}}class E3 extends Ls{constructor(){super("strike","Ctrl+U")}}class T3 extends Ls{constructor(){super("underline","Ctrl+U")}}const S3=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],k3=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],C3=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function Nh(t){return qe("td","").child(qe("div",`${dt}-color-palette-cell`).on("click.stop",()=>this.change(t)).css("background-color",t))}class A3{constructor(){this.el=qe("div",`${dt}-color-palette`),this.change=()=>{};const r=qe("table","").children(qe("tbody","").children(qe("tr",`${dt}-theme-color-placeholders`).children(...S3.map(e=>Nh.call(this,e))),...k3.map(e=>qe("tr",`${dt}-theme-colors`).children(...e.map(n=>Nh.call(this,n)))),qe("tr",`${dt}-standard-colors`).children(...C3.map(e=>Nh.call(this,e)))));this.el.child(r)}}class Ou extends ms{constructor(r,e){const n=new Pn(r).css("height","16px").css("border-bottom",`3px solid ${e}`),i=new A3;i.change=s=>{this.setTitle(s),this.change(s)},super(n,"auto",!1,"bottom-left",i.el)}setTitle(r){this.title.css("border-color",r),this.hide()}}const F3=[["thin",''],["medium",''],["thick",''],["dashed",''],["dotted",'']];class R3 extends ms{constructor(r){const e=new Pn("line-type");let n=0;const i=F3.map((s,o)=>qe("div",`${dt}-item state ${r===s[0]?"checked":""}`).on("click",()=>{i[n].toggle("checked"),i[o].toggle("checked"),n=o,this.hide(),this.change(s)}).child(qe("div",`${dt}-line-type`).html(s[1])));super(e,"auto",!1,"bottom-left",...i)}}function Mp(...t){return qe("table","").child(qe("tbody","").children(...t))}function Ip(t){return qe("td","").child(qe("div",`${dt}-border-palette-cell`).child(new Pn(`border-${t}`)).on("click",()=>{this.mode=t;const{mode:r,style:e,color:n}=this;this.change({mode:r,style:e,color:n})}))}class M3{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new Ou("line-color",this.color),this.ddColor.change=e=>{this.color=e},this.ddType=new R3(this.style),this.ddType.change=([e])=>{this.style=e},this.el=qe("div",`${dt}-border-palette`);const r=Mp(qe("tr","").children(qe("td",`${dt}-border-palette-left`).child(Mp(qe("tr","").children(...["all","inside","horizontal","vertical","outside"].map(e=>Ip.call(this,e))),qe("tr","").children(...["left","top","right","bottom","none"].map(e=>Ip.call(this,e))))),qe("td",`${dt}-border-palette-right`).children(qe("div",`${dt}-toolbar-btn`).child(this.ddColor.el),qe("div",`${dt}-toolbar-btn`).child(this.ddType.el))));this.el.child(r)}}class I3 extends ms{constructor(){const r=new Pn("border-all"),e=new M3;e.change=n=>{this.change(n),this.hide()},super(r,"auto",!1,"bottom-left",e.el)}}class O3 extends ps{constructor(){super("border")}dropdown(){return new I3}}class kc extends Iu{element(){return super.element().child(new Pn(this.tag)).on("click",()=>this.change(this.tag))}setState(r){this.el.disabled(r)}}class D3 extends kc{constructor(){super("clearformat")}}class N3 extends Ls{constructor(){super("paintformat")}setState(){}}class P3 extends ps{constructor(r){super("color",void 0,r)}dropdown(){const{tag:r,value:e}=this;return new Ou(r,e)}}class B3 extends ps{constructor(r){super("bgcolor",void 0,r)}dropdown(){const{tag:r,value:e}=this;return new Ou(r,e)}}class L3 extends ms{constructor(){const r=cu.map(e=>qe("div",`${dt}-item`).on("click",()=>{this.setTitle(`${e.pt}`),this.change(e)}).child(`${e.pt}`));super("10","60px",!0,"bottom-left",...r)}}let U3=class extends ps{constructor(){super("font-size")}getValue(r){return r.pt}dropdown(){return new L3}};class j3 extends ms{constructor(){const r=Ap.map(e=>qe("div",`${dt}-item`).on("click",()=>{this.setTitle(e.title),this.change(e)}).child(e.title));super(Ap[0].title,"160px",!0,"bottom-left",...r)}}class H3 extends ps{constructor(){super("font-name")}getValue(r){return r.key}dropdown(){return new j3}}class W3 extends ms{constructor(){let r=pf.slice(0);r.splice(2,0,{key:"divider"}),r.splice(8,0,{key:"divider"}),r=r.map(e=>{const n=qe("div",`${dt}-item`);return e.key==="divider"?n.addClass("divider"):(n.child(e.title()).on("click",()=>{this.setTitle(e.title()),this.change(e)}),e.label&&n.child(qe("div","label").html(e.label))),n}),super("Normal","220px",!0,"bottom-left",...r)}setTitle(r){for(let e=0;eqe("div",`${dt}-item`).on("click",()=>{this.hide(),this.change(e)}).child(e.key));super(new Pn("formula"),"180px",!0,"bottom-left",...r)}}class X3 extends ps{constructor(){super("formula")}getValue(r){return r.key}dropdown(){return new z3}}class V3 extends Ls{constructor(){super("freeze")}}class G3 extends Ls{constructor(){super("merge")}setState(r,e){this.el.active(r).disabled(e)}}class K3 extends kc{constructor(){super("redo","Ctrl+Y")}}class Y3 extends kc{constructor(){super("undo","Ctrl+Z")}}class Z3 extends kc{constructor(){super("print","Ctrl+P")}}class J3 extends Ls{constructor(){super("textwrap")}}let Q3=class extends ms{constructor(){const r=new Pn("ellipsis"),e=qe("div",`${dt}-toolbar-more`);super(r,"auto",!1,"bottom-right",e),this.moreBtns=e,this.contentEl.css("max-width","420px")}};class q3 extends ps{constructor(){super("more"),this.el.hide()}dropdown(){return new Q3}show(){this.el.show()}hide(){this.el.hide()}}function So(){return qe("div",`${dt}-toolbar-divider`)}function e6(){this.btns2=[],this.items.forEach(t=>{if(Array.isArray(t))t.forEach(({el:r})=>{const e=r.box(),{marginLeft:n,marginRight:i}=r.computedStyle();this.btns2.push([r,e.width+parseInt(n,10)+parseInt(i,10)])});else{const r=t.box(),{marginLeft:e,marginRight:n}=t.computedStyle();this.btns2.push([t,r.width+parseInt(e,10)+parseInt(n,10)])}})}function Op(){const{el:t,btns:r,moreEl:e,btns2:n}=this,{moreBtns:i,contentEl:s}=e.dd;t.css("width",`${this.widthFn()-60}px`);const o=t.box();let h=160,c=12;const a=[],f=[];n.forEach(([l,u],p)=>{h+=u,p===n.length-1||h0?e.show():e.hide()}class t6{constructor(r,e,n=!1){this.data=r,this.change=()=>{},this.widthFn=e,this.isHide=n;const i=r.defaultStyle();this.items=[[this.undoEl=new Y3,this.redoEl=new K3,new Z3,this.paintformatEl=new N3,this.clearformatEl=new D3],So(),[this.formatEl=new $3],So(),[this.fontEl=new H3,this.fontSizeEl=new U3],So(),[this.boldEl=new y3,this.italicEl=new _3,this.underlineEl=new T3,this.strikeEl=new E3,this.textColorEl=new P3(i.color)],So(),[this.fillColorEl=new B3(i.bgcolor),this.borderEl=new O3,this.mergeEl=new G3],So(),[this.alignEl=new x3(i.align),this.valignEl=new b3(i.valign),this.textwrapEl=new J3],So(),[this.freezeEl=new V3,this.autofilterEl=new w3,this.formulaEl=new X3,this.moreEl=new q3]],this.el=qe("div",`${dt}-toolbar`),this.btns=qe("div",`${dt}-toolbar-btns`),this.items.forEach(s=>{Array.isArray(s)?s.forEach(o=>{this.btns.child(o.el),o.change=(...h)=>{this.change(...h)}}):this.btns.child(s.el)}),this.el.child(this.btns),n?this.el.hide():(this.reset(),setTimeout(()=>{e6.call(this),Op.call(this)},0),ii(window,"resize",()=>{Op.call(this)}))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(r){this[`${r}El`].click()}resetData(r){this.data=r,this.reset()}reset(){if(this.isHide)return;const{data:r}=this,e=r.getSelectedCellStyle();this.undoEl.setState(!r.canUndo()),this.redoEl.setState(!r.canRedo()),this.mergeEl.setState(r.canUnmerge(),!r.selector.multiple()),this.autofilterEl.setState(!r.canAutofilter());const{font:n,format:i}=e;this.formatEl.setState(i),this.fontEl.setState(n.name),this.fontSizeEl.setState(n.size),this.boldEl.setState(n.bold),this.italicEl.setState(n.italic),this.underlineEl.setState(e.underline),this.strikeEl.setState(e.strike),this.textColorEl.setState(e.color),this.fillColorEl.setState(e.bgcolor),this.alignEl.setState(e.align),this.valignEl.setState(e.valign),this.textwrapEl.setState(e.textwrap),this.freezeEl.setState(r.freezeIsActive())}}class r6{constructor(r,e,n="600px"){this.title=r,this.el=qe("div",`${dt}-modal`).css("width",n).children(qe("div",`${dt}-modal-header`).children(new Pn("close").on("click.stop",()=>this.hide()),this.title),qe("div",`${dt}-modal-content`).children(...e)).hide()}show(){this.dimmer=qe("div",`${dt}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:r,height:e}=this.el.show().box(),{clientHeight:n,clientWidth:i}=document.documentElement;this.el.offset({left:(i-r)/2,top:(n-e)/3}),window.xkeydownEsc=s=>{s.keyCode===27&&this.hide()},ii(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),oc(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class Fo{constructor(r,e){this.vchange=()=>{},this.el=qe("div",`${dt}-form-input`),this.input=qe("input","").css("width",r).on("input",n=>this.vchange(n)).attr("placeholder",e),this.el.child(this.input)}focus(){setTimeout(()=>{this.input.el.focus()},10)}hint(r){this.input.attr("placeholder",r)}val(r){return this.input.val(r)}}class Ph{constructor(r,e,n,i=o=>o,s=()=>{}){this.key=r,this.getTitle=i,this.vchange=()=>{},this.el=qe("div",`${dt}-form-select`),this.suggest=new cm(e.map(o=>({key:o,title:this.getTitle(o)})),o=>{this.itemClick(o.key),s(o.key),this.vchange(o.key)},n,this.el),this.el.children(this.itemEl=qe("div","input-text").html(this.getTitle(r)),this.suggest.el).on("click",()=>this.show())}show(){this.suggest.search("")}itemClick(r){this.key=r,this.itemEl.html(this.getTitle(r))}val(r){return r!==void 0?(this.key=r,this.itemEl.html(this.getTitle(r)),this):this.key}}const n6={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class qs{constructor(r,e,n,i){this.label="",this.rule=e,n&&(this.label=qe("label","label").css("width",`${i}px`).html(n)),this.tip=qe("div","tip").child("tip").hide(),this.input=r,this.input.vchange=()=>this.validate(),this.el=qe("div",`${dt}-form-field`).children(this.label,r.el,this.tip)}isShow(){return this.el.css("display")!=="none"}show(){this.el.show()}hide(){return this.el.hide(),this}val(r){return this.input.val(r)}hint(r){this.input.hint(r)}validate(){const{input:r,rule:e,tip:n,el:i}=this,s=r.val();return e.required&&/^\s*$/.test(s)?(n.html(sn("validation.required")),i.addClass("error"),!1):(e.type||e.pattern)&&!(e.pattern||n6[e.type]).test(s)?(n.html(sn("validation.notMatch")),i.addClass("error"),!1):(i.removeClass("error"),!0)}}const Dp=100;class i6 extends r6{constructor(){const r=new qs(new Ph("cell",["cell"],"100%",a=>sn(`dataValidation.modeType.${a}`)),{required:!0},`${sn("dataValidation.range")}:`,Dp),e=new qs(new Fo("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),n=new qs(new Ph("list",["list","number","date","phone","email"],"100%",a=>sn(`dataValidation.type.${a}`),a=>this.criteriaSelected(a)),{required:!0},`${sn("dataValidation.criteria")}:`,Dp),i=new qs(new Ph("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",a=>sn(`dataValidation.operator.${a}`),a=>this.criteriaOperatorSelected(a)),{required:!0}).hide(),s=new qs(new Fo("70px","10"),{required:!0}).hide(),o=new qs(new Fo("70px","100"),{required:!0,type:"number"}).hide(),h=new qs(new Fo("120px","a,b,c"),{required:!0}),c=new qs(new Fo("70px","10"),{required:!0,type:"number"}).hide();super(sn("contextmenu.validation"),[qe("div",`${dt}-form-fields`).children(r.el,e.el),qe("div",`${dt}-form-fields`).children(n.el,i.el,s.el,o.el,c.el,h.el),qe("div",`${dt}-buttons`).children(new Fa("cancel").on("click",()=>this.btnClick("cancel")),new Fa("remove").on("click",()=>this.btnClick("remove")),new Fa("save","primary").on("click",()=>this.btnClick("save")))]),this.mf=r,this.rf=e,this.cf=n,this.of=i,this.minvf=s,this.maxvf=o,this.vf=c,this.svf=h,this.change=()=>{}}showVf(r){const e=r==="date"?"2018-11-12":"10",{vf:n}=this;n.input.hint(e),n.show()}criteriaSelected(r){const{of:e,minvf:n,maxvf:i,vf:s,svf:o}=this;r==="date"||r==="number"?(e.show(),n.rule.type=r,i.rule.type=r,r==="date"?(n.hint("2018-11-12"),i.hint("2019-11-12")):(n.hint("10"),i.hint("100")),n.show(),i.show(),s.hide(),o.hide()):(r==="list"?o.show():o.hide(),s.hide(),e.hide(),n.hide(),i.hide())}criteriaOperatorSelected(r){if(!r)return;const{minvf:e,maxvf:n,vf:i}=this;if(r==="be"||r==="nbe")e.show(),n.show(),i.hide();else{const s=this.cf.val();i.rule.type=s,s==="date"?i.hint("2018-11-12"):i.hint("10"),i.show(),e.hide(),n.hide()}}btnClick(r){if(r==="cancel")this.hide();else if(r==="remove")this.change("remove"),this.hide();else if(r==="save"){const e=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let c=0;cthis.itemClick(t))}function s6(t){const{filterbEl:r,filterValues:e}=this;r.html(""),Object.keys(t).forEach((i,s)=>{const o=t[i],h=e.includes(i)?"checked":"";r.child(qe("div",`${dt}-item state ${h}`).on("click.stop",()=>this.filterClick(s,i)).children(i===""?sn("filter.empty"):i,qe("div","label").html(`(${o})`)))})}function Pp(){const{filterhEl:t,filterValues:r,values:e}=this;t.html(`${r.length} / ${e.length}`),t.checked(r.length===e.length)}class a6{constructor(){this.filterbEl=qe("div",`${dt}-body`),this.filterhEl=qe("div",`${dt}-header state`).on("click.stop",()=>this.filterClick(0,"all")),this.el=qe("div",`${dt}-sort-filter`).children(this.sortAscEl=Np.call(this,"asc"),this.sortDescEl=Np.call(this,"desc"),xm("divider"),qe("div",`${dt}-filter`).children(this.filterhEl,this.filterbEl),qe("div",`${dt}-buttons`).children(new Fa("cancel").on("click",()=>this.btnClick("cancel")),new Fa("ok","primary").on("click",()=>this.btnClick("ok")))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(r){if(r==="ok"){const{ci:e,sort:n,filterValues:i}=this;this.ok&&this.ok(e,n,"in",i)}this.hide()}itemClick(r){this.sort=r;const{sortAscEl:e,sortDescEl:n}=this;e.checked(r==="asc"),n.checked(r==="desc")}filterClick(r,e){const{filterbEl:n,filterValues:i,values:s}=this,o=n.children();e==="all"?o.length===i.length?(this.filterValues=[],o.forEach(h=>qe(h).checked(!1))):(this.filterValues=Array.from(s),o.forEach(h=>qe(h).checked(!0))):qe(o[r]).toggle("checked")?i.push(e):i.splice(i.findIndex(c=>c===e),1),Pp.call(this)}set(r,e,n,i){this.ci=r;const{sortAscEl:s,sortDescEl:o}=this;i!==null?(this.sort=i.order,s.checked(i.asc()),o.checked(i.desc())):(this.sortDesc=null,s.checked(!1),o.checked(!1)),this.values=Object.keys(e),this.filterValues=n?Array.from(n.value):Object.keys(e),s6.call(this,e,n),Pp.call(this)}setOffset(r){this.el.offset(r).show();let e=1;Wf(this.el,()=>{e<=0&&this.hide(),e-=1})}show(){this.el.show()}hide(){this.el.hide(),Lo(this.el)}}function bm(t,r){const e=qe("div",`${dt}-toast`),n=qe("div",`${dt}-dimmer active`),i=()=>{document.body.removeChild(e.el),document.body.removeChild(n.el)};e.children(qe("div",`${dt}-toast-header`).children(new Pn("close").on("click.stop",()=>i()),t),qe("div",`${dt}-toast-content`).html(r)),document.body.appendChild(e.el),document.body.appendChild(n.el);const{width:s,height:o}=e.box(),{clientHeight:h,clientWidth:c}=document.documentElement;e.offset({left:(c-s)/2,top:(h-o)/3})}function Bh(t,r){let e;return(...n)=>{const i=this,s=n;e||(e=setTimeout(()=>{e=null,t.apply(i,s)},r))}}function o6(){const{data:t,verticalScrollbar:r,horizontalScrollbar:e}=this,{l:n,t:i,left:s,top:o,width:h,height:c}=t.getSelectedRect(),a=this.getTableOffset();if(Math.abs(s)+h>a.width)e.move({left:n+h-a.width});else{const f=t.freezeTotalWidth();sa.height)r.move({top:i+c-a.height-1});else{const f=t.freezeTotalHeight();o0&&(h-=1):r==="right"?(a!==h&&(h=a),h0&&(o-=1):r==="down"?(c!==o&&(o=c),oc.indexWidth&&e>h.height){n.hide(),i.hide();return}const a=s.box(),f=o.getCellRectByXY(t.offsetX,t.offsetY);f.ri>=0&&f.ci===-1?(f.width=c.indexWidth,n.show(f,{width:a.width}),h.isHide(f.ri-1)?n.showUnhide(f.ri):n.hideUnhide()):n.hide(),f.ri===-1&&f.ci>=0?(f.height=h.height,i.show(f,{height:a.height}),c.isHide(f.ci-1)?i.showUnhide(f.ci):i.hideUnhide()):i.hide()}function l6(t){const{verticalScrollbar:r,horizontalScrollbar:e,data:n}=this,{top:i}=r.scroll(),{left:s}=e.scroll(),{rows:o,cols:h}=n,{deltaY:c,deltaX:a}=t,f=(v,x)=>{let g=v,w=0;do w=x(g),g+=1;while(w<=0);return w},l=v=>{if(v>0){const x=n.scroll.ri+1;if(xo.getHeight(w));r.move({top:i+g-1})}}else{const x=n.scroll.ri-1;if(x>=0){const g=f(x,w=>o.getHeight(w));r.move({top:x===0?0:i-g})}}},u=v=>{if(v>0){const x=n.scroll.ci+1;if(xh.getWidth(w));e.move({left:s+g-1})}}else{const x=n.scroll.ci-1;if(x>=0){const g=f(x,w=>h.getWidth(w));e.move({left:x===0?0:s-g})}}},p=Math.abs(c),m=Math.abs(a),d=Math.max(p,m);/Firefox/i.test(window.navigator.userAgent)&&Bh(l(t.detail),50),d===m&&Bh(u(a),50),d===p&&Bh(l(c),50)}function c6(t,r){const{verticalScrollbar:e,horizontalScrollbar:n}=this,{top:i}=e.scroll(),{left:s}=n.scroll();t==="left"||t==="right"?n.move({left:s-r}):(t==="up"||t==="down")&&e.move({top:i-r})}function Du(){const{data:t,verticalScrollbar:r}=this,{height:e}=this.getTableOffset(),n=t.exceptRowTotalHeight(0,-1);r.set(e,t.rows.totalHeight()-n)}function Nu(){const{data:t,horizontalScrollbar:r}=this,{width:e}=this.getTableOffset();t&&r.set(e,t.cols.totalWidth())}function h6(){const{selector:t,data:r,editor:e}=this,[n,i]=r.freeze;if(n>0||i>0){const s=r.freezeTotalWidth(),o=r.freezeTotalHeight();e.setFreezeLengths(s,o)}t.resetAreaOffset()}function ni(){const{tableEl:t,overlayerEl:r,overlayerCEl:e,table:n,toolbar:i,selector:s,el:o}=this,h=this.getTableOffset(),c=this.getRect();t.attr(c),r.offset(c),e.offset(h),o.css("width",`${c.width}px`),Du.call(this),Nu.call(this),h6.call(this),n.render(),i.reset(),s.reset()}function $f(){const{data:t,selector:r}=this;t.clearClipboard(),r.hideClipboard()}function uu(){const{data:t,selector:r}=this;t.copy(),t.copyToSystemClipboard(),r.showClipboard()}function Bp(){const{data:t,selector:r}=this;t.cut(),r.showClipboard()}function mf(t,r){const{data:e}=this;if(e.settings.mode!=="read"){if(e.paste(t,n=>bm("Tip",n)))ni.call(this);else if(r){const n=r.clipboardData.getData("text/plain");this.data.pasteFromText(n),ni.call(this)}}}function u6(){this.data.hideRowsOrCols(),ni.call(this)}function Lp(t,r){this.data.unhideRowsOrCols(t,r),ni.call(this)}function d6(){const{data:t}=this;t.autofilter(),ni.call(this)}function p6(){const{toolbar:t}=this;t.paintformatActive()&&(mf.call(this,"format"),$f.call(this),t.paintformatToggle())}function Up(t){const{selector:r,data:e,table:n,sortFilter:i}=this,{offsetX:s,offsetY:o}=t,h=t.target.className===`${dt}-selector-corner`,c=e.getCellRectByXY(s,o),{left:a,top:f,width:l,height:u}=c;let{ri:p,ci:m}=c;const{autoFilter:d}=e;if(d.includes(p,m)&&a+l-20e.rows.getCell(x,g));i.hide(),i.set(m,v,d.getFilter(m),d.getSort(m)),i.setOffset({left:a,top:f+u+2});return}t.shiftKey||(h?r.showAutofill(p,m):Ra.call(this,!1,p,m),sm(window,v=>{({ri:p,ci:m}=e.getCellRectByXY(v.offsetX,v.offsetY)),h?r.showAutofill(p,m):v.buttons===1&&!v.shiftKey&&Ra.call(this,!0,p,m,!0,!0)},()=>{h&&r.arange&&e.settings.mode!=="read"&&e.autofill(r.arange,"all",v=>bm("Tip",v))&&n.render(),r.hideAutofill(),p6.call(this)})),!h&&t.buttons===1&&t.shiftKey&&Ra.call(this,!0,p,m)}function zf(){const{editor:t,data:r}=this,e=r.getSelectedRect(),n=this.getTableOffset();let i="top";e.top>n.height/2&&(i="bottom"),t.setOffset(e,i)}function gf(){const{editor:t,data:r}=this;r.settings.mode!=="read"&&(zf.call(this),t.setCell(r.getSelectedCell(),r.getSelectedValidator()),$f.call(this))}function m6(t){const{data:r,table:e,selector:n}=this;r.scrolly(t,()=>{n.resetBRLAreaOffset(),zf.call(this),e.render()})}function g6(t){const{data:r,table:e,selector:n}=this;r.scrollx(t,()=>{n.resetBRTAreaOffset(),zf.call(this),e.render()})}function v6(t,r){const{ri:e}=t,{table:n,selector:i,data:s}=this;s.rows.setHeight(e,r),n.render(),i.resetAreaOffset(),Du.call(this),zf.call(this)}function x6(t,r){const{ci:e}=t,{table:n,selector:i,data:s}=this;s.cols.setWidth(e,r),n.render(),i.resetAreaOffset(),Nu.call(this),zf.call(this)}function Lh(t,r="finished"){const{data:e,table:n}=this;if(e.settings.mode==="read")return;e.setSelectedCellText(t,r);const{ri:i,ci:s}=e.selector;r==="finished"?n.render():this.trigger("cell-edited",t,i,s)}function rc(t){const{data:r}=this;r.settings.mode!=="read"&&(t==="insert-row"?r.insert("row"):t==="delete-row"?r.delete("row"):t==="insert-column"?r.insert("column"):t==="delete-column"?r.delete("column"):t==="delete-cell"?r.deleteCell():t==="delete-cell-format"?r.deleteCell("format"):t==="delete-cell-text"?r.deleteCell("text"):t==="cell-printable"?r.setSelectedCellAttr("printable",!0):t==="cell-non-printable"?r.setSelectedCellAttr("printable",!1):t==="cell-editable"?r.setSelectedCellAttr("editable",!0):t==="cell-non-editable"&&r.setSelectedCellAttr("editable",!1),$f.call(this),ni.call(this))}function b6(t,r){const{data:e}=this;if(t==="undo")this.undo();else if(t==="redo")this.redo();else if(t==="print")this.print.preview();else if(t==="paintformat")r===!0?uu.call(this):$f.call(this);else if(t==="clearformat")rc.call(this,"delete-cell-format");else if(t!=="link"){if(t!=="chart")if(t==="autofilter")d6.call(this);else if(t==="freeze")if(r){const{ri:n,ci:i}=e.selector;this.freeze(n,i)}else this.freeze(0,0);else e.setSelectedCellAttr(t,r),t==="formula"&&!e.selector.multiple()&&gf.call(this),ni.call(this)}}function w6(t,r,e,n){this.data.setAutoFilter(t,r,e,n),ni.call(this)}function y6(){const{selector:t,overlayerEl:r,rowResizer:e,colResizer:n,verticalScrollbar:i,horizontalScrollbar:s,editor:o,contextMenu:h,toolbar:c,modalValidation:a,sortFilter:f}=this;r.on("mousemove",l=>{f6.call(this,l)}).on("mousedown",l=>{o.clear(),h.hide(),l.buttons===2?(this.data.xyInSelectedRect(l.offsetX,l.offsetY)||Up.call(this,l),h.setPosition(l.offsetX,l.offsetY),l.stopPropagation()):l.detail===2?gf.call(this):Up.call(this,l)}).on("mousewheel.stop",l=>{l6.call(this,l)}).on("mouseout",l=>{const{offsetX:u,offsetY:p}=l;p<=0&&n.hide(),u<=0&&e.hide()}),t.inputChange=l=>{Lh.call(this,l,"input"),gf.call(this)},A4(r.el,{move:(l,u)=>{c6.call(this,l,u)}}),c.change=(l,u)=>b6.call(this,l,u),f.ok=(l,u,p,m)=>w6.call(this,l,u,p,m),e.finishedFn=(l,u)=>{v6.call(this,l,u)},n.finishedFn=(l,u)=>{x6.call(this,l,u)},e.unhideFn=l=>{Lp.call(this,"row",l)},n.unhideFn=l=>{Lp.call(this,"col",l)},i.moveFn=(l,u)=>{m6.call(this,l,u)},s.moveFn=(l,u)=>{g6.call(this,l,u)},o.change=(l,u)=>{Lh.call(this,u,l)},a.change=(l,...u)=>{l==="save"?this.data.addValidation(...u):this.data.removeValidation()},h.itemClick=l=>{l==="validation"?a.setValue(this.data.getSelectedValidation()):l==="copy"?uu.call(this):l==="cut"?Bp.call(this):l==="paste"?mf.call(this,"all"):l==="paste-value"?mf.call(this,"text"):l==="paste-format"?mf.call(this,"format"):l==="hide"?u6.call(this):rc.call(this,l)},ii(window,"resize",()=>{this.reload()}),ii(window,"click",l=>{this.focusing=r.contains(l.target)}),ii(window,"paste",l=>{this.focusing&&(mf.call(this,"all",l),l.preventDefault())}),ii(window,"keydown",l=>{if(!this.focusing)return;const u=l.keyCode||l.which,{key:p,ctrlKey:m,shiftKey:d,metaKey:v}=l;if(m||v)switch(u){case 90:this.undo(),l.preventDefault();break;case 89:this.redo(),l.preventDefault();break;case 67:uu.call(this),l.preventDefault();break;case 88:Bp.call(this),l.preventDefault();break;case 85:c.trigger("underline"),l.preventDefault();break;case 86:break;case 37:fs.call(this,d,"row-first"),l.preventDefault();break;case 38:fs.call(this,d,"col-first"),l.preventDefault();break;case 39:fs.call(this,d,"row-last"),l.preventDefault();break;case 40:fs.call(this,d,"col-last"),l.preventDefault();break;case 32:Ra.call(this,!1,-1,this.data.selector.ci,!1),l.preventDefault();break;case 66:c.trigger("bold");break;case 73:c.trigger("italic");break}else{switch(u){case 32:d&&Ra.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:h.hide(),$f.call(this);break;case 37:fs.call(this,d,"left"),l.preventDefault();break;case 38:fs.call(this,d,"up"),l.preventDefault();break;case 39:fs.call(this,d,"right"),l.preventDefault();break;case 40:fs.call(this,d,"down"),l.preventDefault();break;case 9:o.clear(),fs.call(this,!1,d?"left":"right"),l.preventDefault();break;case 13:o.clear(),fs.call(this,!1,d?"up":"down"),l.preventDefault();break;case 8:rc.call(this,"delete-cell-text"),l.preventDefault();break}p==="Delete"?(rc.call(this,"delete-cell-text"),l.preventDefault()):u>=65&&u<=90||u>=48&&u<=57||u>=96&&u<=105||l.key==="="?(Lh.call(this,l.key,"input"),gf.call(this)):u===113&&gf.call(this)}})}class _6{constructor(r,e){this.eventMap=F4();const{view:n,showToolbar:i,showContextmenu:s}=e.settings;this.el=qe("div",`${dt}-sheet`),this.toolbar=new t6(e,n.width,!i),this.print=new h3(e),r.children(this.toolbar.el,this.el,this.print.el),this.data=e,this.tableEl=qe("canvas",`${dt}-table`),this.rowResizer=new yp(!1,e.rows.height),this.colResizer=new yp(!0,e.cols.minWidth),this.verticalScrollbar=new _p(!0),this.horizontalScrollbar=new _p(!1),this.editor=new G4(e3,()=>this.getTableOffset(),e.rows.height),this.modalValidation=new i6,this.contextMenu=new m3(()=>this.getRect(),!s),this.selector=new I4(e),this.overlayerCEl=qe("div",`${dt}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=qe("div",`${dt}-overlayer`).child(this.overlayerCEl),this.sortFilter=new a6,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new f3(this.tableEl.el,e),y6.call(this),ni.call(this),Ra.call(this,!1,0,0)}on(r,e){return this.eventMap.on(r,e),this}trigger(r,...e){const{eventMap:n}=this;n.fire(r,e)}resetData(r){this.editor.clear(),this.data=r,Du.call(this),Nu.call(this),this.toolbar.resetData(r),this.print.resetData(r),this.selector.resetData(r),this.table.resetData(r)}loadData(r){return this.data.setData(r),ni.call(this),this}freeze(r,e){const{data:n}=this;return n.setFreeze(r,e),ni.call(this),this}undo(){this.data.undo(),ni.call(this)}redo(){this.data.redo(),ni.call(this)}reload(){return ni.call(this),this}getRect(){const{data:r}=this;return{width:r.viewWidth(),height:r.viewHeight()}}getTableOffset(){const{rows:r,cols:e}=this.data,{width:n,height:i}=this.getRect();return{width:n-e.indexWidth,height:i-r.height,left:e.indexWidth,top:r.height}}}class E6 extends ms{constructor(r){const e=new Pn("ellipsis");super(e,"auto",!1,"top-left"),this.contentClick=r}reset(r){const e=r.map((n,i)=>qe("div",`${dt}-item`).css("width","150px").css("font-weight","normal").on("click",()=>{this.contentClick(i),this.hide()}).child(n));this.setContentChildren(...e)}setTitle(){}}const T6=[{key:"delete",title:ur("contextmenu.deleteSheet")}];function S6(t){return qe("div",`${dt}-item`).child(t.title()).on("click",()=>{this.itemClick(t.key),this.hide()})}function k6(){return T6.map(t=>S6.call(this,t))}class C6{constructor(){this.el=qe("div",`${dt}-contextmenu`).css("width","160px").children(...k6.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:r}=this;r.hide(),Lo(r)}setOffset(r){const{el:e}=this;e.offset(r),e.show(),Wf(e)}}class A6{constructor(r=()=>{},e=()=>{},n=()=>{},i=()=>{}){this.swapFunc=e,this.updateFunc=i,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new E6(s=>{this.clickSwap2(this.items[s])}),this.contextMenu=new C6,this.contextMenu.itemClick=n,this.el=qe("div",`${dt}-bottombar`).children(this.contextMenu.el,this.menuEl=qe("ul",`${dt}-menu`).child(qe("li","").children(new Pn("add").on("click",()=>{r()}),qe("span","").child(this.moreEl))))}addItem(r,e){this.dataNames.push(r);const n=qe("li",e?"active":"").child(r);n.on("click",()=>{this.clickSwap2(n)}).on("contextmenu",i=>{const{offsetLeft:s,offsetHeight:o}=i.target;this.contextMenu.setOffset({left:s,bottom:o+1}),this.deleteEl=n}).on("dblclick",()=>{const i=n.html(),s=new Fo("auto","");s.val(i),s.input.on("blur",({target:o})=>{const{value:h}=o,c=this.dataNames.findIndex(a=>a===i);this.renameItem(c,h)}),n.html("").child(s.el),s.focus()}),e&&this.clickSwap(n),this.items.push(n),this.menuEl.child(n),this.moreEl.reset(this.dataNames)}renameItem(r,e){this.dataNames.splice(r,1,e),this.moreEl.reset(this.dataNames),this.items[r].html("").child(e),this.updateFunc(r,e)}clear(){this.items.forEach(r=>{this.menuEl.removeChild(r.el)}),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:r,deleteEl:e}=this;if(this.items.length>1){const n=this.items.findIndex(i=>i===e);if(this.items.splice(n,1),this.dataNames.splice(n,1),this.menuEl.removeChild(e.el),this.moreEl.reset(this.dataNames),r===e){const[i]=this.items;return this.activeEl=i,this.activeEl.toggle(),[n,0]}return[n,-1]}return[-1]}clickSwap2(r){const e=this.items.findIndex(n=>n===r);this.clickSwap(r),this.activeEl.toggle(),this.swapFunc(e)}clickSwap(r){this.activeEl!==null&&this.activeEl.toggle(),this.activeEl=r}}class F6{constructor(r,e={}){let n=r;this.options={showBottomBar:!0,...e},this.sheetIndex=1,this.datas=[],typeof r=="string"&&(n=document.querySelector(r)),this.bottombar=this.options.showBottomBar?new A6(()=>{const s=this.addSheet();this.sheet.resetData(s)},s=>{const o=this.datas[s];this.sheet.resetData(o)},()=>{this.deleteSheet()},(s,o)=>{this.datas[s].name=o}):null,this.data=this.addSheet();const i=qe("div",`${dt}`).on("contextmenu",s=>s.preventDefault());n.appendChild(i.el),this.sheet=new _6(i,this.data),this.bottombar!==null&&i.child(this.bottombar.el)}addSheet(r,e=!0){const n=r||`sheet${this.sheetIndex}`,i=new C4(n,this.options);return i.change=(...s)=>{this.sheet.trigger("change",...s)},this.datas.push(i),this.bottombar!==null&&this.bottombar.addItem(n,e),this.sheetIndex+=1,i}deleteSheet(){if(this.bottombar===null)return;const[r,e]=this.bottombar.deleteItem();r>=0&&(this.datas.splice(r,1),e>=0&&this.sheet.resetData(this.datas[e]))}loadData(r){const e=Array.isArray(r)?r:[r];if(this.bottombar!==null&&this.bottombar.clear(),this.datas=[],e.length>0)for(let n=0;nr.getData())}cellText(r,e,n,i=0){return this.datas[i].setCellText(r,e,n,"finished"),this}cell(r,e,n=0){return this.datas[n].getCell(r,e)}cellStyle(r,e,n=0){return this.datas[n].getCellStyle(r,e)}reRender(){return this.sheet.table.render(),this}on(r,e){return this.sheet.on(r,e),this}validate(){const{validations:r}=this.data;return r.errors.size<=0}change(r){return this.sheet.on("change",r),this}static locale(r,e){nm(r,e)}}const R6=(t,r={})=>new F6(t,r);window&&(window.x_spreadsheet=R6,window.x_spreadsheet.locale=(t,r)=>nm(t,r));var wm={exports:{}};(function(t,r){(function(e){t.exports=e()})(function(){return function(){function e(n,i,s){function o(a,f){if(!i[a]){if(!n[a]){var l=typeof Bl=="function"&&Bl;if(!f&&l)return l(a,!0);if(h)return h(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var p=i[a]={exports:{}};n[a][0].call(p.exports,function(m){var d=n[a][1][m];return o(d||m)},p,p.exports,e,n,i,s)}return i[a].exports}for(var h=typeof Bl=="function"&&Bl,c=0;c{const w=this.workbook.addWorksheet(v.sheetName),y=v.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],_=v.map||function(F){if(F==="")return null;const O=Number(F);if(!Number.isNaN(O)&&O!==1/0)return O;const N=y.reduce((z,W)=>{if(z)return z;const X=a(F,W,!0);return X.isValid()?X:null},null);if(N)return new Date(N.valueOf());const U=u[F];return U!==void 0?U:F},k=o.parse(v.parserOptions).on("data",F=>{w.addRow(F.map(_))}).on("end",()=>{k.emit("worksheet",w)});k.on("worksheet",x).on("error",g),d.pipe(k)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(d,v){return new Promise((x,g)=>{v=v||{};const w=this.workbook.getWorksheet(v.sheetName||v.sheetId),y=o.format(v.formatterOptions);d.on("finish",()=>{x()}),y.on("error",g),y.pipe(d);const{dateFormat:_,dateUTC:k}=v,F=v.map||(U=>{if(U){if(U.text||U.hyperlink)return U.hyperlink||U.text||"";if(U.formula||U.result)return U.result||"";if(U instanceof Date)return _?k?a.utc(U).format(_):a(U).format(_):k?a.utc(U).format():a(U).format();if(U.error)return U.error;if(typeof U=="object")return JSON.stringify(U)}return U}),O=v.includeEmptyRows===void 0||v.includeEmptyRows;let N=1;w&&w.eachRow((U,z)=>{if(O)for(;N++2&&arguments[2]!==void 0?arguments[2]:0;if(this.worksheet=c,!a)this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;else if(typeof a=="string"){const l=s.decodeAddress(a);this.nativeCol=l.col+f,this.nativeColOff=0,this.nativeRow=l.row+f,this.nativeRowOff=0}else a.nativeCol!==void 0?(this.nativeCol=a.nativeCol||0,this.nativeColOff=a.nativeColOff||0,this.nativeRow=a.nativeRow||0,this.nativeRowOff=a.nativeRowOff||0):a.col!==void 0?(this.col=a.col+f,this.row=a.row+f):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0)}static asInstance(c){return c instanceof o||c==null?c:new o(c)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(c){this.nativeCol=Math.floor(c),this.nativeColOff=Math.floor((c-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(c){this.nativeRow=Math.floor(c),this.nativeRowOff=Math.floor((c-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(this.worksheet.getColumn(this.nativeCol+1).width*1e4):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(this.worksheet.getRow(this.nativeRow+1).height*1e4):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(c){this.nativeCol=c.nativeCol,this.nativeColOff=c.nativeColOff,this.nativeRow=c.nativeRow,this.nativeRowOff=c.nativeRowOff}}n.exports=o},{"../utils/col-cache":19}],3:[function(e,n,i){const s=e("../utils/col-cache"),o=e("../utils/under-dash"),h=e("./enums"),{slideFormula:c}=e("../utils/shared-formula"),a=e("./note");class f{constructor(N,U,z){if(!N||!U)throw new Error("A Cell needs a Row");this._row=N,this._column=U,s.validateAddress(z),this._address=z,this._value=F.create(f.Types.Null,this),this.style=this._mergeStyle(N.style,U.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(N){this.style.numFmt=N}get font(){return this.style.font}set font(N){this.style.font=N}get alignment(){return this.style.alignment}set alignment(N){this.style.alignment=N}get border(){return this.style.border}set border(N){this.style.border=N}get fill(){return this.style.fill}set fill(N){this.style.fill=N}get protection(){return this.style.protection}set protection(N){this.style.protection=N}_mergeStyle(N,U,z){const W=N&&N.numFmt||U&&U.numFmt;W&&(z.numFmt=W);const X=N&&N.font||U&&U.font;X&&(z.font=X);const J=N&&N.alignment||U&&U.alignment;J&&(z.alignment=J);const H=N&&N.border||U&&U.border;H&&(z.border=H);const I=N&&N.fill||U&&U.fill;I&&(z.fill=I);const M=N&&N.protection||U&&U.protection;return M&&(z.protection=M),z}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===f.Types.Merge}merge(N,U){this._value.release(),this._value=F.create(f.Types.Merge,this,N),U||(this.style=N.style)}unmerge(){this.type===f.Types.Merge&&(this._value.release(),this._value=F.create(f.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(N){return this._value.type!==f.Types.Merge?!1:this._value.isMergedTo(N)}get master(){return this.type===f.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===f.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(N){if(this.type===f.Types.Merge){this._value.master.value=N;return}this._value.release(),this._value=F.create(F.getType(N),this,N)}get note(){return this._comment&&this._comment.note}set note(N){this._comment=new a(N)}get text(){return this._value.toString()}get html(){return o.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(N){this.type===f.Types.String&&(this._value=F.create(f.Types.Hyperlink,this,{text:this._value.value,hyperlink:N}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:N}=this._row;return{sheetName:N.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(N){this.names=[N]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(N){const{definedNames:U}=this.workbook;U.removeAllNames(this.fullAddress),N.forEach(z=>{U.addEx(this.fullAddress,z)})}addName(N){this.workbook.definedNames.addEx(this.fullAddress,N)}removeName(N){this.workbook.definedNames.removeEx(this.fullAddress,N)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(N){this._dataValidations.add(this.address,N)}get model(){const{model:N}=this._value;return N.style=this.style,this._comment&&(N.comment=this._comment.model),N}set model(N){if(this._value.release(),this._value=F.create(N.type,this),this._value.model=N,N.comment)switch(N.comment.type){case"note":this._comment=a.fromModel(N.comment);break}N.style?this.style=N.style:this.style={}}}f.Types=h.ValueType;class l{constructor(N){this.model={address:N.address,type:f.Types.Null}}get value(){return null}set value(N){}get type(){return f.Types.Null}get effectiveType(){return f.Types.Null}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return""}release(){}toString(){return""}}class u{constructor(N,U){this.model={address:N.address,type:f.Types.Number,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.Number}get effectiveType(){return f.Types.Number}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class p{constructor(N,U){this.model={address:N.address,type:f.Types.String,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.String}get effectiveType(){return f.Types.String}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}class m{constructor(N,U){this.model={address:N.address,type:f.Types.String,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}toString(){return this.model.value.richText.map(N=>N.text).join("")}get type(){return f.Types.RichText}get effectiveType(){return f.Types.RichText}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}class d{constructor(N,U){this.model={address:N.address,type:f.Types.Date,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.Date}get effectiveType(){return f.Types.Date}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}class v{constructor(N,U){this.model={address:N.address,type:f.Types.Hyperlink,text:U?U.text:void 0,hyperlink:U?U.hyperlink:void 0},U&&U.tooltip&&(this.model.tooltip=U.tooltip)}get value(){const N={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(N.tooltip=this.model.tooltip),N}set value(N){this.model={text:N.text,hyperlink:N.hyperlink},N.tooltip&&(this.model.tooltip=N.tooltip)}get text(){return this.model.text}set text(N){this.model.text=N}get hyperlink(){return this.model.hyperlink}set hyperlink(N){this.model.hyperlink=N}get type(){return f.Types.Hyperlink}get effectiveType(){return f.Types.Hyperlink}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}class x{constructor(N,U){this.model={address:N.address,type:f.Types.Merge,master:U?U.address:void 0},this._master=U,U&&U.addMergeRef()}get value(){return this._master.value}set value(N){N instanceof f?(this._master&&this._master.releaseMergeRef(),N.addMergeRef(),this._master=N):this._master.value=N}isMergedTo(N){return N===this._master}get master(){return this._master}get type(){return f.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}class g{constructor(N,U){this.cell=N,this.model={address:N.address,type:f.Types.Formula,shareType:U?U.shareType:void 0,ref:U?U.ref:void 0,formula:U?U.formula:void 0,sharedFormula:U?U.sharedFormula:void 0,result:U?U.result:void 0}}_copyModel(N){const U={},z=W=>{const X=N[W];X&&(U[W]=X)};return z("formula"),z("result"),z("ref"),z("shareType"),z("sharedFormula"),U}get value(){return this._copyModel(this.model)}set value(N){this.model=this._copyModel(N)}validate(N){switch(F.getType(N)){case f.Types.Null:case f.Types.String:case f.Types.Number:case f.Types.Date:break;case f.Types.Hyperlink:case f.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){const N=this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),U=this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);return{ranges:N,cells:U}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(N){this.model.formula=N}get formulaType(){return this.model.formula?h.FormulaType.Master:this.model.sharedFormula?h.FormulaType.Shared:h.FormulaType.None}get result(){return this.model.result}set result(N){this.model.result=N}get type(){return f.Types.Formula}get effectiveType(){const N=this.model.result;return N==null?h.ValueType.Null:N instanceof String||typeof N=="string"?h.ValueType.String:typeof N=="number"?h.ValueType.Number:N instanceof Date?h.ValueType.Date:N.text&&N.hyperlink?h.ValueType.Hyperlink:N.formula?h.ValueType.Formula:h.ValueType.Null}get address(){return this.model.address}set address(N){this.model.address=N}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:N}=this.cell,U=N.findCell(this.model.sharedFormula);this._translatedFormula=U&&c(U.formula,U.address,this.model.address)}return this._translatedFormula}toCsvString(){return`${this.model.result||""}`}release(){}toString(){return this.model.result?this.model.result.toString():""}}class w{constructor(N,U){this.model={address:N.address,type:f.Types.SharedString,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.SharedString}get effectiveType(){return f.Types.SharedString}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class y{constructor(N,U){this.model={address:N.address,type:f.Types.Boolean,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.Boolean}get effectiveType(){return f.Types.Boolean}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}class _{constructor(N,U){this.model={address:N.address,type:f.Types.Error,value:U}}get value(){return this.model.value}set value(N){this.model.value=N}get type(){return f.Types.Error}get effectiveType(){return f.Types.Error}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}class k{constructor(N,U){this.model={address:N.address,type:f.Types.String,value:JSON.stringify(U),rawValue:U}}get value(){return this.model.rawValue}set value(N){this.model.rawValue=N,this.model.value=JSON.stringify(N)}get type(){return f.Types.String}get effectiveType(){return f.Types.String}get address(){return this.model.address}set address(N){this.model.address=N}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}const F={getType(O){return O==null?f.Types.Null:O instanceof String||typeof O=="string"?f.Types.String:typeof O=="number"?f.Types.Number:typeof O=="boolean"?f.Types.Boolean:O instanceof Date?f.Types.Date:O.text&&O.hyperlink?f.Types.Hyperlink:O.formula||O.sharedFormula?f.Types.Formula:O.richText?f.Types.RichText:O.sharedString?f.Types.SharedString:O.error?f.Types.Error:f.Types.JSON},types:[{t:f.Types.Null,f:l},{t:f.Types.Number,f:u},{t:f.Types.String,f:p},{t:f.Types.Date,f:d},{t:f.Types.Hyperlink,f:v},{t:f.Types.Formula,f:g},{t:f.Types.Merge,f:x},{t:f.Types.JSON,f:k},{t:f.Types.SharedString,f:w},{t:f.Types.RichText,f:m},{t:f.Types.Boolean,f:y},{t:f.Types.Error,f:_}].reduce((O,N)=>(O[N.t]=N.f,O),[]),create(O,N,U){const z=this.types[O];if(!z)throw new Error(`Could not create Value of type ${O}`);return new z(N,U)}};n.exports=f},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,n,i){const s=e("../utils/under-dash"),o=e("./enums"),h=e("../utils/col-cache"),c=9;class a{constructor(l,u,p){this._worksheet=l,this._number=u,p!==!1&&(this.defn=p)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return h.n2l(this._number)}get isCustomWidth(){return this.width!==void 0&&this.width!==c}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(l){l?(this.key=l.key,this.width=l.width!==void 0?l.width:c,this.outlineLevel=l.outlineLevel,l.style?this.style=l.style:this.style={},this.header=l.header,this._hidden=!!l.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(l){l!==void 0?(this._header=l,this.headers.forEach((u,p)=>{this._worksheet.getCell(p+1,this.number).value=u})):this._header=void 0}get key(){return this._key}set key(l){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=l,l&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(l){this._hidden=l}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(l){this._outlineLevel=l}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(l){return this.width===l.width&&this.hidden===l.hidden&&this.outlineLevel===l.outlineLevel&&s.isEqual(this.style,l.style)}get isDefault(){if(this.isCustomWidth||this.hidden||this.outlineLevel)return!1;const l=this.style;return!(l&&(l.font||l.numFmt||l.alignment||l.border||l.fill||l.protection))}get headerCount(){return this.headers.length}eachCell(l,u){const p=this.number;u||(u=l,l=null),this._worksheet.eachRow(l,(m,d)=>{u(m.getCell(p),d)})}get values(){const l=[];return this.eachCell((u,p)=>{u&&u.type!==o.ValueType.Null&&(l[p]=u.value)}),l}set values(l){if(!l)return;const u=this.number;let p=0;l.hasOwnProperty("0")&&(p=1),l.forEach((m,d)=>{this._worksheet.getCell(d+p,u).value=m})}_applyStyle(l,u){return this.style[l]=u,this.eachCell(p=>{p[l]=u}),u}get numFmt(){return this.style.numFmt}set numFmt(l){this._applyStyle("numFmt",l)}get font(){return this.style.font}set font(l){this._applyStyle("font",l)}get alignment(){return this.style.alignment}set alignment(l){this._applyStyle("alignment",l)}get protection(){return this.style.protection}set protection(l){this._applyStyle("protection",l)}get border(){return this.style.border}set border(l){this._applyStyle("border",l)}get fill(){return this.style.fill}set fill(l){this._applyStyle("fill",l)}static toModel(l){const u=[];let p=null;return l&&l.forEach((m,d)=>{m.isDefault?p&&(p=null):!p||!m.equivalentTo(p)?(p={min:d+1,max:d+1,width:m.width!==void 0?m.width:c,style:m.style,isCustomWidth:m.isCustomWidth,hidden:m.hidden,outlineLevel:m.outlineLevel,collapsed:m.collapsed},u.push(p)):p.max=d+1}),u.length?u:void 0}static fromModel(l,u){u=u||[];const p=[];let m=1,d=0;for(u=u.sort(function(v,x){return v.min-x.min});d{p.removeCellEx(u)})}forEach(u){s.each(this.matrixMap,(p,m)=>{p.forEach(d=>{u(m,d)})})}getNames(u){return this.getNamesEx(o.decodeEx(u))}getNamesEx(u){return s.map(this.matrixMap,(p,m)=>p.findCellEx(u)&&m).filter(Boolean)}_explore(u,p){p.mark=!1;const{sheetName:m}=p,d=new c(p.row,p.col,p.row,p.col,m);let v,x;function g(y,_){const k=u.findCellAt(m,y,p.col);return!k||!k.mark?!1:(d[_]=y,k.mark=!1,!0)}for(x=p.row-1;g(x,"top");x--);for(x=p.row+1;g(x,"bottom");x++);function w(y,_){const k=[];for(x=d.top;x<=d.bottom;x++){const F=u.findCellAt(m,x,y);if(F&&F.mark)k.push(F);else return!1}d[_]=y;for(let F=0;F{d.mark=!0});const m=p.map(d=>d.mark&&this._explore(p,d)).filter(Boolean).map(d=>d.$shortRange);return{name:u,ranges:m}}normaliseMatrix(u,p){u.forEachInSheet(p,(m,d,v)=>{m&&(m.row!==d||m.col!==v)&&(m.row=d,m.col=v,m.address=o.n2l(v)+d)})}spliceRows(u,p,m,d){s.each(this.matrixMap,v=>{v.spliceRows(u,p,m,d),this.normaliseMatrix(v,u)})}spliceColumns(u,p,m,d){s.each(this.matrixMap,v=>{v.spliceColumns(u,p,m,d),this.normaliseMatrix(v,u)})}get model(){return s.map(this.matrixMap,(u,p)=>this.getRanges(p,u)).filter(u=>u.ranges.length)}set model(u){const p=this.matrixMap={};u.forEach(m=>{const d=p[m.name]=new h;m.ranges.forEach(v=>{a.test(v.split("!").pop()||"")&&d.addCell(v)})})}}n.exports=f},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,n,i){n.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,n,i){const s=e("../utils/col-cache"),o=e("./anchor");class h{constructor(a,f){this.worksheet=a,this.model=f}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(a){let{type:f,imageId:l,range:u,hyperlinks:p}=a;if(this.type=f,this.imageId=l,f==="image")if(typeof u=="string"){const m=s.decode(u);this.range={tl:new o(this.worksheet,{col:m.left,row:m.top},-1),br:new o(this.worksheet,{col:m.right,row:m.bottom},0),editAs:"oneCell"}}else this.range={tl:new o(this.worksheet,u.tl,0),br:u.br&&new o(this.worksheet,u.br,0),ext:u.ext,editAs:u.editAs,hyperlinks:p||u.hyperlinks}}}n.exports=h},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,n,i){const s=e("../utils/under-dash");class o{constructor(c){this.note=c}get model(){let c=null;switch(typeof this.note){case"string":c={type:"note",note:{texts:[{text:this.note}]}};break;default:c={type:"note",note:this.note};break}return s.deepMerge({},o.DEFAULT_CONFIGS,c)}set model(c){const{note:a}=c,{texts:f}=a;f.length===1&&Object.keys(f[0]).length===1?this.note=f[0].text:this.note=a}static fromModel(c){const a=new o;return a.model=c,a}}o.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},n.exports=o},{"../utils/under-dash":26}],10:[function(e,n,i){const s=e("../utils/col-cache");class o{constructor(){this.decode(arguments)}setTLBR(c,a,f,l,u){if(arguments.length<4){const p=s.decodeAddress(c),m=s.decodeAddress(a);this.model={top:Math.min(p.row,m.row),left:Math.min(p.col,m.col),bottom:Math.max(p.row,m.row),right:Math.max(p.col,m.col),sheetName:f},this.setTLBR(p.row,p.col,m.row,m.col,u)}else this.model={top:Math.min(c,f),left:Math.min(a,l),bottom:Math.max(c,f),right:Math.max(a,l),sheetName:u}}decode(c){switch(c.length){case 5:this.setTLBR(c[0],c[1],c[2],c[3],c[4]);break;case 4:this.setTLBR(c[0],c[1],c[2],c[3]);break;case 3:this.setTLBR(c[0],c[1],c[2]);break;case 2:this.setTLBR(c[0],c[1]);break;case 1:{const a=c[0];if(a instanceof o)this.model={top:a.model.top,left:a.model.left,bottom:a.model.bottom,right:a.model.right,sheetName:a.sheetName};else if(a instanceof Array)this.decode(a);else if(a.top&&a.left&&a.bottom&&a.right)this.model={top:a.top,left:a.left,bottom:a.bottom,right:a.right,sheetName:a.sheetName};else{const f=s.decodeEx(a);f.top?this.model={top:f.top,left:f.left,bottom:f.bottom,right:f.right,sheetName:f.sheetName}:this.model={top:f.row,left:f.col,bottom:f.row,right:f.col,sheetName:f.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(`Invalid number of arguments to _getDimensions() - ${c.length}`)}}get top(){return this.model.top||1}set top(c){this.model.top=c}get left(){return this.model.left||1}set left(c){this.model.left=c}get bottom(){return this.model.bottom||1}set bottom(c){this.model.bottom=c}get right(){return this.model.right||1}set right(c){this.model.right=c}get sheetName(){return this.model.sheetName}set sheetName(c){this.model.sheetName=c}get _serialisedSheetName(){const{sheetName:c}=this.model;return c?/^[a-zA-Z0-9]*$/.test(c)?`${c}!`:`'${c}'!`:""}expand(c,a,f,l){(!this.model.top||cthis.bottom)&&(this.bottom=f),(!this.model.right||l>this.right)&&(this.right=l)}expandRow(c){if(c){const{dimensions:a,number:f}=c;a&&this.expand(f,a.min,f,a.max)}}expandToAddress(c){const a=s.decodeEx(c);this.expand(a.row,a.col,a.row,a.col)}get tl(){return s.n2l(this.left)+this.top}get $t$l(){return`$${s.n2l(this.left)}$${this.top}`}get br(){return s.n2l(this.right)+this.bottom}get $b$r(){return`$${s.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(c){return!(c.sheetName&&this.sheetName&&c.sheetName!==this.sheetName||c.bottomthis.bottom||c.rightthis.right)}contains(c){const a=s.decodeEx(c);return this.containsEx(a)}containsEx(c){return c.sheetName&&this.sheetName&&c.sheetName!==this.sheetName?!1:c.row>=this.top&&c.row<=this.bottom&&c.col>=this.left&&c.col<=this.right}forEachAddress(c){for(let a=this.left;a<=this.right;a++)for(let f=this.top;f<=this.bottom;f++)c(s.encodeAddress(f,a),f,a)}}n.exports=o},{"../utils/col-cache":19}],11:[function(e,n,i){const s=e("../utils/under-dash"),o=e("./enums"),h=e("../utils/col-cache"),c=e("./cell");class a{constructor(l,u){this._worksheet=l,this._number=u,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(l){return this._cells[l-1]}getCellEx(l){let u=this._cells[l.col-1];if(!u){const p=this._worksheet.getColumn(l.col);u=new c(this,p,l.address),this._cells[l.col-1]=u}return u}getCell(l){if(typeof l=="string"){const u=this._worksheet.getColumnKey(l);u?l=u.number:l=h.l2n(l)}return this._cells[l-1]||this.getCellEx({address:h.encodeAddress(this._number,l),row:this._number,col:l})}splice(l,u){const p=l+u;for(var m=arguments.length,d=new Array(m>2?m-2:0),v=2;v0)for(w=g;w>=p;w--)y=this._cells[w-1],y?(_=this.getCell(w+x),_.value=y.value,_.style=y.style,_._comment=y._comment):this._cells[w+x-1]=void 0;for(w=0;w{p&&p.type!==o.ValueType.Null&&u(p,m+1)})}addPageBreak(l,u){const p=this._worksheet,m=Math.max(0,l-1)||0,d=Math.max(0,u-1)||16838,v={id:this._number,max:d,man:1};m&&(v.min=m),p.rowBreaks.push(v)}get values(){const l=[];return this._cells.forEach(u=>{u&&u.type!==o.ValueType.Null&&(l[u.col]=u.value)}),l}set values(l){if(this._cells=[],l)if(l instanceof Array){let u=0;l.hasOwnProperty("0")&&(u=1),l.forEach((p,m)=>{p!==void 0&&(this.getCellEx({address:h.encodeAddress(this._number,m+u),row:this._number,col:m+u}).value=p)})}else this._worksheet.eachColumnKey((u,p)=>{l[p]!==void 0&&(this.getCellEx({address:h.encodeAddress(this._number,u.number),row:this._number,col:u.number}).value=l[p])})}get hasValues(){return s.some(this._cells,l=>l&&l.type!==o.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let l=0;return this.eachCell(()=>{l++}),l}get dimensions(){let l=0,u=0;return this._cells.forEach(p=>{p&&p.type!==o.ValueType.Null&&((!l||l>p.col)&&(l=p.col),u0?{min:l,max:u}:null}_applyStyle(l,u){return this.style[l]=u,this._cells.forEach(p=>{p&&(p[l]=u)}),u}get numFmt(){return this.style.numFmt}set numFmt(l){this._applyStyle("numFmt",l)}get font(){return this.style.font}set font(l){this._applyStyle("font",l)}get alignment(){return this.style.alignment}set alignment(l){this._applyStyle("alignment",l)}get protection(){return this.style.protection}set protection(l){this._applyStyle("protection",l)}get border(){return this.style.border}set border(l){this._applyStyle("border",l)}get fill(){return this.style.fill}set fill(l){this._applyStyle("fill",l)}get hidden(){return!!this._hidden}set hidden(l){this._hidden=l}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(l){this._outlineLevel=l}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const l=[];let u=0,p=0;return this._cells.forEach(m=>{if(m){const d=m.model;d&&((!u||u>m.col)&&(u=m.col),p{switch(p.type){case c.Types.Merge:break;default:{let m;if(p.address)m=h.decodeAddress(p.address);else if(u){const{row:v}=u,x=u.col+1;m={row:v,col:x,address:h.encodeAddress(v,x),$col$row:`$${h.n2l(x)}$${v}`}}u=m;const d=this.getCellEx(m);d.model=p;break}}}),l.height?this.height=l.height:delete this.height,this.hidden=l.hidden,this.outlineLevel=l.outlineLevel||0,this.style=l.style&&JSON.parse(JSON.stringify(l.style))||{}}}n.exports=a},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,n,i){const s=e("../utils/col-cache");class o{constructor(a,f,l){this.table=a,this.column=f,this.index=l}_set(a,f){this.table.cacheState(),this.column[a]=f}get name(){return this.column.name}set name(a){this._set("name",a)}get filterButton(){return this.column.filterButton}set filterButton(a){this.column.filterButton=a}get style(){return this.column.style}set style(a){this.column.style=a}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(a){this._set("totalsRowLabel",a)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(a){this._set("totalsRowFunction",a)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(a){this._set("totalsRowResult",a)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(a){this._set("totalsRowFormula",a)}}class h{constructor(a,f){this.worksheet=a,f&&(this.table=f,this.validate(),this.store())}getFormula(a){switch(a.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${a.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${a.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${a.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${a.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${a.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${a.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${a.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${a.name}])`;case"custom":return a.totalsRowFormula;default:throw new Error(`Invalid Totals Row Function: ${a.totalsRowFunction}`)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:a}=this,f=(x,g,w)=>{x[g]===void 0&&(x[g]=w)};f(a,"headerRow",!0),f(a,"totalsRow",!1),f(a,"style",{}),f(a.style,"theme","TableStyleMedium2"),f(a.style,"showFirstColumn",!1),f(a.style,"showLastColumn",!1),f(a.style,"showRowStripes",!1),f(a.style,"showColumnStripes",!1);const l=(x,g)=>{if(!x)throw new Error(g)};l(a.ref,"Table must have ref"),l(a.columns,"Table must have column definitions"),l(a.rows,"Table must have row definitions"),a.tl=s.decodeAddress(a.ref);const{row:u,col:p}=a.tl;l(u>0,"Table must be on valid row"),l(p>0,"Table must be on valid col");const{width:m,filterHeight:d,tableHeight:v}=this;a.autoFilterRef=s.encode(u,p,u+d-1,p+m-1),a.tableRef=s.encode(u,p,u+v-1,p+m-1),a.columns.forEach((x,g)=>{l(x.name,`Column ${g} must have a name`),g===0?f(x,"totalsRowLabel","Total"):(f(x,"totalsRowFunction","none"),x.totalsRowFormula=this.getFormula(x))})}store(){const a=(d,v)=>{v&&Object.keys(v).forEach(x=>{d[x]=v[x]})},{worksheet:f,table:l}=this,{row:u,col:p}=l.tl;let m=0;if(l.headerRow){const d=f.getRow(u+m++);l.columns.forEach((v,x)=>{const{style:g,name:w}=v,y=d.getCell(p+x);y.value=w,a(y,g)})}if(l.rows.forEach(d=>{const v=f.getRow(u+m++);d.forEach((x,g)=>{const w=v.getCell(p+g);w.value=x,a(w,l.columns[g].style)})}),l.totalsRow){const d=f.getRow(u+m++);l.columns.forEach((v,x)=>{const g=d.getCell(p+x);x===0?g.value=v.totalsRowLabel:this.getFormula(v)?g.value={formula:v.totalsRowFormula,result:v.totalsRowResult}:g.value=null,a(g,v.style)})}}load(a){const{table:f}=this,{row:l,col:u}=f.tl;let p=0;if(f.headerRow){const m=a.getRow(l+p++);f.columns.forEach((d,v)=>{const x=m.getCell(u+v);x.value=d.name})}if(f.rows.forEach(m=>{const d=a.getRow(l+p++);m.forEach((v,x)=>{const g=d.getCell(u+x);g.value=v})}),f.totalsRow){const m=a.getRow(l+p++);f.columns.forEach((d,v)=>{const x=m.getCell(u+v);v===0?x.value=d.totalsRowLabel:this.getFormula(d)&&(x.value={formula:d.totalsRowFormula,result:d.totalsRowResult})})}}get model(){return this.table}set model(a){this.table=a}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const a=s.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let f=0;f1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.rows.splice(a,f)}getColumn(a){const f=this.table.columns[a];return new o(this,f,a)}addColumn(a,f,l){this.cacheState(),l===void 0?(this.table.columns.push(a),this.table.rows.forEach((u,p)=>{u.push(f[p])})):(this.table.columns.splice(l,0,a),this.table.rows.forEach((u,p)=>{u.splice(l,0,f[p])}))}removeColumns(a){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.columns.splice(a,f),this.table.rows.forEach(l=>{l.splice(a,f)})}_assign(a,f,l){this.cacheState(),a[f]=l}get ref(){return this.table.ref}set ref(a){this._assign(this.table,"ref",a)}get name(){return this.table.name}set name(a){this.table.name=a}get displayName(){return this.table.displyName||this.table.name}set displayNamename(a){this.table.displayName=a}get headerRow(){return this.table.headerRow}set headerRow(a){this._assign(this.table,"headerRow",a)}get totalsRow(){return this.table.totalsRow}set totalsRow(a){this._assign(this.table,"totalsRow",a)}get theme(){return this.table.style.name}set theme(a){this.table.style.name=a}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(a){this.table.style.showFirstColumn=a}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(a){this.table.style.showLastColumn=a}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(a){this.table.style.showRowStripes=a}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(a){this.table.style.showColumnStripes=a}}n.exports=h},{"../utils/col-cache":19}],13:[function(e,n,i){const s=e("./worksheet"),o=e("./defined-names"),h=e("../xlsx/xlsx"),c=e("../csv/csv");class a{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new o}get xlsx(){return this._xlsx||(this._xlsx=new h(this)),this._xlsx}get csv(){return this._csv||(this._csv=new c(this)),this._csv}get nextId(){for(let l=1;l(g&&g.orderNo)>x?g.orderNo:x,0),d=Object.assign({},u,{id:p,name:l,orderNo:m+1,workbook:this}),v=new s(d);return this._worksheets[p]=v,v}removeWorksheetEx(l){delete this._worksheets[l.id]}removeWorksheet(l){const u=this.getWorksheet(l);u&&u.destroy()}getWorksheet(l){if(l===void 0)return this._worksheets.find(Boolean);if(typeof l=="number")return this._worksheets[l];if(typeof l=="string")return this._worksheets.find(u=>u&&u.name===l)}get worksheets(){return this._worksheets.slice(1).sort((l,u)=>l.orderNo-u.orderNo).filter(Boolean)}eachSheet(l){this.worksheets.forEach(u=>{l(u,u.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(l){const u=this.media.length;return this.media.push(Object.assign({},l,{type:"image"})),u}getImage(l){return this.media[l]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(l=>l.model),sheets:this.worksheets.map(l=>l.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(l){this.creator=l.creator,this.lastModifiedBy=l.lastModifiedBy,this.lastPrinted=l.lastPrinted,this.created=l.created,this.modified=l.modified,this.company=l.company,this.manager=l.manager,this.title=l.title,this.subject=l.subject,this.keywords=l.keywords,this.category=l.category,this.description=l.description,this.language=l.language,this.revision=l.revision,this.contentStatus=l.contentStatus,this.properties=l.properties,this.calcProperties=l.calcProperties,this._worksheets=[],l.worksheets.forEach(u=>{const{id:p,name:m,state:d}=u,v=l.sheets&&l.sheets.findIndex(g=>g.id===p),x=this._worksheets[p]=new s({id:p,name:m,orderNo:v,state:d,workbook:this});x.model=u}),this._definedNames.model=l.definedNames,this.views=l.views,this._themes=l.themes,this.media=l.media||[]}}n.exports=a},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,n,i){const s=e("../utils/under-dash"),o=e("../utils/col-cache"),h=e("./range"),c=e("./row"),a=e("./column"),f=e("./enums"),l=e("./image"),u=e("./table"),p=e("./data-validations"),m=e("../utils/encryptor"),{copyStyle:d}=e("../utils/copy-style");class v{constructor(g){g=g||{},this._workbook=g.workbook,this.id=g.id,this.orderNo=g.orderNo,this.name=g.name,this.state=g.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},g.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!!(g.pageSetup&&(g.pageSetup.fitToWidth||g.pageSetup.fitToHeight)&&!g.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},g.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},g.headerFooter),this.dataValidations=new p,this.views=g.views||[],this.autoFilter=g.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(g){if(g===void 0&&(g=`sheet${this.id}`),this._name!==g){if(typeof g!="string")throw new Error("The name has to be a string.");if(g==="")throw new Error("The name can't be empty.");if(g==="History")throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(g))throw new Error(`Worksheet name ${g} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(g))throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${g}`);if(g&&g.length>31&&(console.warn(`Worksheet name ${g} exceeds 31 chars. This will be truncated`),g=g.substring(0,31)),this._workbook._worksheets.find(w=>w&&w.name.toLowerCase()===g.toLowerCase()))throw new Error(`Worksheet name already exists: ${g}`);this._name=g}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const g=new h;return this._rows.forEach(w=>{if(w){const y=w.dimensions;y&&g.expand(w.number,y.min,w.number,y.max)}}),g}get columns(){return this._columns}set columns(g){this._headerRowCount=g.reduce((_,k)=>{const F=k.header&&1||k.headers&&k.headers.length||0;return Math.max(_,F)},0);let w=1;const y=this._columns=[];g.forEach(_=>{const k=new a(this,w++,!1);y.push(k),k.defn=_})}getColumnKey(g){return this._keys[g]}setColumnKey(g,w){this._keys[g]=w}deleteColumnKey(g){delete this._keys[g]}eachColumnKey(g){s.each(this._keys,g)}getColumn(g){if(typeof g=="string"){const w=this._keys[g];if(w)return w;g=o.l2n(g)}if(this._columns||(this._columns=[]),g>this._columns.length){let w=this._columns.length+1;for(;w<=g;)this._columns.push(new a(this,w++))}return this._columns[g-1]}spliceColumns(g,w){const _=this._rows.length;for(var k=arguments.length,F=new Array(k>2?k-2:0),O=2;O0)for(let W=0;W<_;W++){const X=[g,w];F.forEach(H=>{X.push(H[W]||null)});const J=this.getRow(W+1);J.splice.apply(J,X)}else this._rows.forEach(W=>{W&&W.splice(g,w)});const N=F.length-w,U=g+w,z=this._columns.length;if(N<0)for(let W=g+F.length;W<=z;W++)this.getColumn(W).defn=this.getColumn(W-N).defn;else if(N>0)for(let W=z;W>=U;W--)this.getColumn(W+N).defn=this.getColumn(W).defn;for(let W=g;W{g=Math.max(g,w.cellCount)}),g}get actualColumnCount(){const g=[];let w=0;return this.eachRow(y=>{y.eachCell(_=>{let{col:k}=_;g[k]||(g[k]=!0,w++)})}),w}_commitRow(){}get _lastRowNumber(){const g=this._rows;let w=g.length;for(;w>0&&g[w-1]===void 0;)w--;return w}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(g){return this._rows[g-1]}findRows(g,w){return this._rows.slice(g-1,g-1+w)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let g=0;return this.eachRow(()=>{g++}),g}getRow(g){let w=this._rows[g-1];return w||(w=this._rows[g-1]=new c(this,g)),w}getRows(g,w){if(w<1)return;const y=[];for(let _=g;_1&&arguments[1]!==void 0?arguments[1]:"n";const y=this._nextRow,_=this.getRow(y);return _.values=g,this._setStyleOption(y,w[0]==="i"?w:"n"),_}addRows(g){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const y=[];return g.forEach(_=>{y.push(this.addRow(_,w))}),y}insertRow(g,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";return this.spliceRows(g,0,w),this._setStyleOption(g,y),this.getRow(g)}insertRows(g,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";if(this.spliceRows(g,0,...w),y!=="n")for(let _=0;_1&&arguments[1]!==void 0?arguments[1]:"n";w[0]==="o"&&this.findRow(g+1)!==void 0?this._copyStyle(g+1,g,w[1]==="+"):w[0]==="i"&&this.findRow(g-1)!==void 0&&this._copyStyle(g-1,g,w[1]==="+")}_copyStyle(g,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const _=this.getRow(g),k=this.getRow(w);k.style=d(_.style),_.eachCell({includeEmpty:y},(F,O)=>{k.getCell(O).style=d(F.style)}),k.height=_.height}duplicateRow(g,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const _=this._rows[g-1],k=new Array(w).fill(_.values);this.spliceRows(g+1,y?0:w,...k);for(let F=0;F{O.getCell(U).style=N.style})}}spliceRows(g,w){const y=g+w;for(var _=arguments.length,k=new Array(_>2?_-2:0),F=2;F<_;F++)k[F-2]=arguments[F];const O=k.length,N=O-w,U=this._rows.length;let z,W;if(N<0)for(g===U&&(this._rows[U-1]=void 0),z=y;z<=U;z++)if(W=this._rows[z-1],W){const X=this.getRow(z+N);X.values=W.values,X.style=W.style,X.height=W.height,W.eachCell({includeEmpty:!0},(J,H)=>{X.getCell(H).style=J.style}),this._rows[z-1]=void 0}else this._rows[z+N-1]=void 0;else if(N>0)for(z=U;z>=y;z--)if(W=this._rows[z-1],W){const X=this.getRow(z+N);X.values=W.values,X.style=W.style,X.height=W.height,W.eachCell({includeEmpty:!0},(J,H)=>{if(X.getCell(H).style=J.style,J._value.constructor.name==="MergeValue"){const I=this.getRow(J._row._number+O).getCell(H),M=J._value._master,E=this.getRow(M._row._number+O).getCell(M._column._number);I.merge(E)}})}else this._rows[z+N-1]=void 0;for(z=0;z{y&&y.hasValues&&w(y,y.number)})}getSheetValues(){const g=[];return this._rows.forEach(w=>{w&&(g[w.number]=w.values)}),g}findCell(g,w){const y=o.getAddress(g,w),_=this._rows[y.row-1];return _?_.findCell(y.col):void 0}getCell(g,w){const y=o.getAddress(g,w);return this.getRow(y.row).getCellEx(y)}mergeCells(){for(var g=arguments.length,w=new Array(g),y=0;y{if(_.intersects(g))throw new Error("Cannot merge already merged cells")});const y=this.getCell(g.top,g.left);for(let _=g.top;_<=g.bottom;_++)for(let k=g.left;k<=g.right;k++)(_>g.top||k>g.left)&&this.getCell(_,k).merge(y,w);this._merges[y.address]=g}_unMergeMaster(g){const w=this._merges[g.address];if(w){for(let y=w.top;y<=w.bottom;y++)for(let _=w.left;_<=w.right;_++)this.getCell(y,_).unmerge();delete this._merges[g.address]}}get hasMerges(){return s.some(this._merges,Boolean)}unMergeCells(){for(var g=arguments.length,w=new Array(g),y=0;y3&&arguments[3]!==void 0?arguments[3]:"shared";const k=o.decode(g),{top:F,left:O,bottom:N,right:U}=k,z=U-O+1,W=o.encodeAddress(F,O),X=_==="shared";let J;typeof y=="function"?J=y:Array.isArray(y)?Array.isArray(y[0])?J=(I,M)=>y[I-F][M-O]:J=(I,M)=>y[(I-F)*z+(M-O)]:J=()=>{};let H=!0;for(let I=F;I<=N;I++)for(let M=O;M<=U;M++)H?(this.getCell(I,M).value={shareType:_,formula:w,ref:g,result:J(I,M)},H=!1):this.getCell(I,M).value=X?{sharedFormula:W,result:J(I,M)}:J(I,M)}addImage(g,w){const y={type:"image",imageId:g,range:w};this._media.push(new l(this,y))}getImages(){return this._media.filter(g=>g.type==="image")}addBackgroundImage(g){const w={type:"background",imageId:g};this._media.push(new l(this,w))}getBackgroundImageId(){const g=this._media.find(w=>w.type==="background");return g&&g.imageId}protect(g,w){return new Promise(y=>{this.sheetProtection={sheet:!0},w&&"spinCount"in w&&(w.spinCount=Number.isFinite(w.spinCount)?Math.round(Math.max(0,w.spinCount)):1e5),g&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=m.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=w&&"spinCount"in w?w.spinCount:1e5,this.sheetProtection.hashValue=m.convertPasswordToHash(g,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),w&&(this.sheetProtection=Object.assign(this.sheetProtection,w),!g&&"spinCount"in w&&delete this.sheetProtection.spinCount),y()})}unprotect(){this.sheetProtection=null}addTable(g){const w=new u(this,g);return this.tables[g.name]=w,w}getTable(g){return this.tables[g]}removeTable(g){delete this.tables[g]}getTables(){return Object.values(this.tables)}addConditionalFormatting(g){this.conditionalFormattings.push(g)}removeConditionalFormatting(g){typeof g=="number"?this.conditionalFormattings.splice(g,1):g instanceof Function?this.conditionalFormattings=this.conditionalFormattings.filter(g):this.conditionalFormattings=[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(g){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=g}get model(){const g={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(_=>_.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(_=>_.model),conditionalFormattings:this.conditionalFormattings};g.cols=a.toModel(this.columns);const w=g.rows=[],y=g.dimensions=new h;return this._rows.forEach(_=>{const k=_&&_.model;k&&(y.expand(k.number,k.min,k.number,k.max),w.push(k))}),g.merges=[],s.each(this._merges,_=>{g.merges.push(_.range)}),g}_parseRows(g){this._rows=[],g.rows.forEach(w=>{const y=new c(this,w.number);this._rows[y.number-1]=y,y.model=w})}_parseMergeCells(g){s.each(g.mergeCells,w=>{this.mergeCellsWithoutStyle(w)})}set model(g){this.name=g.name,this._columns=a.fromModel(this,g.cols),this._parseRows(g),this._parseMergeCells(g),this.dataValidations=new p(g.dataValidations),this.properties=g.properties,this.pageSetup=g.pageSetup,this.headerFooter=g.headerFooter,this.views=g.views,this.autoFilter=g.autoFilter,this._media=g.media.map(w=>new l(this,w)),this.sheetProtection=g.sheetProtection,this.tables=g.tables.reduce((w,y)=>{const _=new u;return _.model=y,w[y.name]=_,w},{}),this.conditionalFormattings=g.conditionalFormattings}}n.exports=v},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,n,i){e("core-js/modules/es.promise"),e("core-js/modules/es.promise.finally"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");const s={Workbook:e("./doc/workbook")},o=e("./doc/enums");Object.keys(o).forEach(h=>{s[h]=o[h]}),n.exports=s},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(e,n,i){const s=typeof TextDecoder>"u"?null:new TextDecoder("utf-8");function o(h){return typeof h=="string"?h:s?s.decode(h):h.toString()}i.bufferToString=o},{}],17:[function(e,n,i){const s=typeof TextEncoder>"u"?null:new TextEncoder("utf-8"),{Buffer:o}=e("buffer");function h(c){return typeof c!="string"?c:s?o.from(s.encode(c).buffer):o.from(c)}i.stringToBuffer=h},{buffer:220}],18:[function(e,n,i){const s=e("./under-dash"),o=e("./col-cache");class h{constructor(a){this.template=a,this.sheets={}}addCell(a){this.addCellEx(o.decodeEx(a))}getCell(a){return this.findCellEx(o.decodeEx(a),!0)}findCell(a){return this.findCellEx(o.decodeEx(a),!1)}findCellAt(a,f,l){const u=this.sheets[a],p=u&&u[f];return p&&p[l]}addCellEx(a){if(a.top)for(let f=a.top;f<=a.bottom;f++)for(let l=a.left;l<=a.right;l++)this.getCellAt(a.sheetName,f,l);else this.findCellEx(a,!0)}getCellEx(a){return this.findCellEx(a,!0)}findCellEx(a,f){const l=this.findSheet(a,f),u=this.findSheetRow(l,a,f);return this.findRowCell(u,a,f)}getCellAt(a,f,l){const u=this.sheets[a]||(this.sheets[a]=[]),p=u[f]||(u[f]=[]);return p[l]||(p[l]={sheetName:a,address:o.n2l(l)+f,row:f,col:l})}removeCellEx(a){const f=this.findSheet(a);if(!f)return;const l=this.findSheetRow(f,a);l&&delete l[a.col]}forEachInSheet(a,f){const l=this.sheets[a];l&&l.forEach((u,p)=>{u&&u.forEach((m,d)=>{m&&f(m,p,d)})})}forEach(a){s.each(this.sheets,(f,l)=>{this.forEachInSheet(l,a)})}map(a){const f=[];return this.forEach(l=>{f.push(a(l))}),f}findSheet(a,f){const l=a.sheetName;if(this.sheets[l])return this.sheets[l];if(f)return this.sheets[l]=[]}findSheetRow(a,f,l){const{row:u}=f;if(a&&a[u])return a[u];if(l)return a[u]=[]}findRowCell(a,f,l){const{col:u}=f;if(a&&a[u])return a[u];if(l)return a[u]=this.template?Object.assign(f,JSON.parse(JSON.stringify(this.template))):f}spliceRows(a,f,l,u){const p=this.sheets[a];if(p){const m=[];for(let d=0;d{d.splice(f,l,...m)})}}}n.exports=h},{"./col-cache":19,"./under-dash":26}],19:[function(e,n,i){const s=/^[A-Z]+\d+$/,o={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level(h){return h<=26?1:h<=676?2:3},_fill(h){let c,a,f,l,u,p=1;if(h>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&h>=1){for(;p<=26;)c=this._dictionary[p-1],this._n2l[p]=c,this._l2n[c]=p,p++;this._l2nFill=1}if(this._l2nFill<2&&h>=2){for(p=27;p<=702;)a=p-27,f=a%26,l=Math.floor(a/26),c=this._dictionary[l]+this._dictionary[f],this._n2l[p]=c,this._l2n[c]=p,p++;this._l2nFill=2}if(this._l2nFill<3&&h>=3){for(p=703;p<=16384;)a=p-703,f=a%26,l=Math.floor(a/26)%26,u=Math.floor(a/676),c=this._dictionary[u]+this._dictionary[l]+this._dictionary[f],this._n2l[p]=c,this._l2n[c]=p,p++;this._l2nFill=3}},l2n(h){if(this._l2n[h]||this._fill(h.length),!this._l2n[h])throw new Error(`Out of bounds. Invalid column letter: ${h}`);return this._l2n[h]},n2l(h){if(h<1||h>16384)throw new Error(`${h} is out of bounds. Excel supports columns from 1 to 16384`);return this._n2l[h]||this._fill(this._level(h)),this._n2l[h]},_hash:{},validateAddress(h){if(!s.test(h))throw new Error(`Invalid Address: ${h}`);return!0},decodeAddress(h){const c=h.length<5&&this._hash[h];if(c)return c;let a=!1,f="",l=0,u=!1,p="",m=0;for(let v=0,x;v=65&&x<=90)a=!0,f+=h[v],l=l*26+x-64;else if(x>=48&&x<=57)u=!0,p+=h[v],m=m*10+x-48;else if(u&&a&&x!==36)break;if(!a)l=void 0;else if(l>16384)throw new Error(`Out of bounds. Invalid column letter: ${f}`);u||(m=void 0),h=f+p;const d={address:h,col:l,row:m,$col$row:`$${f}$${p}`};return l<=100&&m<=100&&(this._hash[h]=d,this._hash[d.$col$row]=d),d},getAddress(h,c){if(c){const a=this.n2l(c)+h;return this.decodeAddress(a)}return this.decodeAddress(h)},decode(h){const c=h.split(":");if(c.length===2){const a=this.decodeAddress(c[0]),f=this.decodeAddress(c[1]),l={top:Math.min(a.row,f.row),left:Math.min(a.col,f.col),bottom:Math.max(a.row,f.row),right:Math.max(a.col,f.col)};return l.tl=this.n2l(l.left)+l.top,l.br=this.n2l(l.right)+l.bottom,l.dimensions=`${l.tl}:${l.br}`,l}return this.decodeAddress(h)},decodeEx(h){const c=h.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),a=c[1]||c[2],f=c[3],l=f.split(":");if(l.length>1){let p=this.decodeAddress(l[0]),m=this.decodeAddress(l[1]);const d=Math.min(p.row,m.row),v=Math.min(p.col,m.col),x=Math.max(p.row,m.row),g=Math.max(p.col,m.col);return p=this.n2l(v)+d,m=this.n2l(g)+x,{top:d,left:v,bottom:x,right:g,sheetName:a,tl:{address:p,col:v,row:d,$col$row:`$${this.n2l(v)}$${d}`,sheetName:a},br:{address:m,col:g,row:x,$col$row:`$${this.n2l(g)}$${x}`,sheetName:a},dimensions:`${p}:${m}`}}if(f.startsWith("#"))return a?{sheetName:a,error:f}:{error:f};const u=this.decodeAddress(f);return a?{sheetName:a,...u}:u},encodeAddress(h,c){return o.n2l(c)+h},encode(){switch(arguments.length){case 2:return o.encodeAddress(arguments[0],arguments[1]);case 4:return`${o.encodeAddress(arguments[0],arguments[1])}:${o.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(h,c){const[a,f,,l,u]=h,[p,m]=c;return p>=a&&p<=l&&m>=f&&m<=u}};n.exports=o},{}],20:[function(e,n,i){const s=(a,f)=>({...a,...f.reduce((l,u)=>(a[u]&&(l[u]={...a[u]}),l),{})}),o=function(a,f,l){let u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];a[l]&&(f[l]=s(a[l],u))},h=a=>Object.keys(a).length===0,c=a=>{if(!a)return a;if(h(a))return{};const f={...a};return o(a,f,"font",["color"]),o(a,f,"alignment"),o(a,f,"protection"),a.border&&(o(a,f,"border"),o(a.border,f.border,"top",["color"]),o(a.border,f.border,"left",["color"]),o(a.border,f.border,"bottom",["color"]),o(a.border,f.border,"right",["color"]),o(a.border,f.border,"diagonal",["color"])),a.fill&&(o(a,f,"fill",["fgColor","bgColor","center"]),a.fill.stops&&(f.fill.stops=a.fill.stops.map(l=>s(l,["color"])))),f};i.copyStyle=c},{}],21:[function(e,n,i){(function(s){(function(){const o=e("crypto"),h={hash(c){const a=o.createHash(c);for(var f=arguments.length,l=new Array(f>1?f-1:0),u=1;u{f=u});let l=[];a.on("opentag",u=>l.push({eventType:"opentag",value:u})),a.on("text",u=>l.push({eventType:"text",value:u})),a.on("closetag",u=>l.push({eventType:"closetag",value:u}));for await(const u of c){if(a.write(h(u)),f)throw f;yield l,l=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(e,n,i){const s=e("./col-cache"),o=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,h=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;function c(a,f,l){const u=s.decode(f),p=s.decode(l);return a.replace(o,(m,d,v,x,g)=>{if(g)return m;const w=h.exec(x);if(w){const y=w[1],_=w[2].toUpperCase(),k=w[3],F=w[4];if(_.length>3||_.length===3&&_>"XFD")return m;let O=s.l2n(_),N=parseInt(F,10);return y||(O+=p.col-u.col),k||(N+=p.row-u.row),(d||"")+(y||"")+s.n2l(O)+(k||"")+N}return m})}n.exports={slideFormula:c}},{"./col-cache":19}],24:[function(e,n,i){(function(s,o){(function(){const h=e("readable-stream"),c=e("./utils"),a=e("./string-buf");class f{constructor(v,x){this._data=v,this._encoding=x}get length(){return this.toBuffer().length}copy(v,x,g,w){return this.toBuffer().copy(v,x,g,w)}toBuffer(){return this._buffer||(this._buffer=o.from(this._data,this._encoding)),this._buffer}}class l{constructor(v){this._data=v}get length(){return this._data.length}copy(v,x,g,w){return this._data._buf.copy(v,x,g,w)}toBuffer(){return this._data.toBuffer()}}class u{constructor(v){this._data=v}get length(){return this._data.length}copy(v,x,g,w){this._data.copy(v,x,g,w)}toBuffer(){return this._data}}class p{constructor(v){this.size=v,this.buffer=o.alloc(v),this.iRead=0,this.iWrite=0}toBuffer(){if(this.iRead===0&&this.iWrite===this.size)return this.buffer;const v=o.alloc(this.iWrite-this.iRead);return this.buffer.copy(v,0,this.iRead,this.iWrite),v}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(v){let x;return v===0?null:v===void 0||v>=this.length?(x=this.toBuffer(),this.iRead=this.iWrite,x):(x=o.alloc(v),this.buffer.copy(x,0,this.iRead,v),this.iRead+=v,x)}write(v,x,g){const w=Math.min(g,this.size-this.iWrite);return v.copy(this.buffer,this.iWrite,x,x+w),this.iWrite+=w,w}}const m=function(d){d=d||{},this.bufSize=d.bufSize||1024*1024,this.buffers=[],this.batch=d.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};c.inherits(m,h.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return o.concat(this.buffers.map(d=>d.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const v=this.buffers[this.buffers.length-1];if(!v.full)return v}const d=new p(this.bufSize);return this.buffers.push(d),d},async _pipe(d){const v=function(x){return new Promise(g=>{x.write(d.toBuffer(),()=>{g()})})};await Promise.all(this.pipes.map(v))},_writeToBuffers(d){let v=0;const x=d.length;for(;v1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(g),s.nextTick(x)):(await this._pipe(g),x());else this.paused||this.emit("data",g.toBuffer()),this._writeToBuffers(g),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(d,v,x){const g=w=>{w?x(w):(this._flush(),this.pipes.forEach(y=>{y.end()}),this.emit("finish"))};d?this.write(d,v,g):g()},read(d){let v;if(d){for(v=[];d&&this.buffers.length&&!this.buffers[0].eod;){const x=this.buffers[0],g=x.read(d);d-=g.length,v.push(g),x.eod&&x.full&&this.buffers.shift()}return o.concat(v)}return v=this.buffers.map(x=>x.toBuffer()).filter(Boolean),this.buffers=[],o.concat(v)},setEncoding(d){this.encoding=d},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(d){this.pipes.push(d),!this.paused&&this.buffers.length&&this.end()},unpipe(d){this.pipes=this.pipes.filter(v=>v!==d)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),n.exports=m}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(e,n,i){(function(s){(function(){class o{constructor(c){this._buf=s.alloc(c&&c.size||16384),this._encoding=c&&c.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=s.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(c){c=c||0,this._buffer=void 0,this._inPos=c}_grow(c){let a=this._buf.length*2;for(;a=this._buf.length-4;)this._grow(this._inPos+c.length),a=this._inPos+this._buf.write(c,this._inPos,this._encoding);this._inPos=a}addStringBuf(c){c.length&&(this._buffer=void 0,this.length+c.length>this.capacity&&this._grow(this.length+c.length),c._buf.copy(this._buf,this._inPos,0,c.length),this._inPos+=c.length)}}n.exports=o}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,n,i){const{toString:s}=Object.prototype,o=/["&<>]/,h={each:function(a,f){a&&(Array.isArray(a)?a.forEach(f):Object.keys(a).forEach(l=>{f(a[l],l)}))},some:function(a,f){return a?Array.isArray(a)?a.some(f):Object.keys(a).some(l=>f(a[l],l)):!1},every:function(a,f){return a?Array.isArray(a)?a.every(f):Object.keys(a).every(l=>f(a[l],l)):!0},map:function(a,f){return a?Array.isArray(a)?a.map(f):Object.keys(a).map(l=>f(a[l],l)):[]},keyBy(c,a){return c.reduce((f,l)=>(f[l[a]]=l,f),{})},isEqual:function(a,f){const l=typeof a,u=typeof f,p=Array.isArray(a),m=Array.isArray(f);let d;if(l!==u)return!1;switch(typeof a){case"object":if(p||m)return p&&m?a.length===f.length&&a.every((v,x)=>{const g=f[x];return h.isEqual(v,g)}):!1;if(a===null||f===null)return a===f;if(d=Object.keys(a),Object.keys(f).length!==d.length)return!1;for(const v of d)if(!f.hasOwnProperty(v))return!1;return h.every(a,(v,x)=>{const g=f[x];return h.isEqual(v,g)});default:return a===f}},escapeHtml(c){const a=o.exec(c);if(!a)return c;let f="",l="",u=0,p=a.index;for(;p":l=">";break;default:continue}u!==p&&(f+=c.substring(u,p)),u=p+1,f+=l}return u!==p?f+c.substring(u,p):f},strcmp(c,a){return ca?1:0},isUndefined(c){return s.call(c)==="[object Undefined]"},isObject(c){return s.call(c)==="[object Object]"},deepMerge(){const c=arguments[0]||{},{length:a}=arguments;let f,l,u;function p(m,d){f=c[d],u=Array.isArray(m),h.isObject(m)||u?(u?(u=!1,l=f&&Array.isArray(f)?f:[]):l=f&&h.isObject(f)?f:{},c[d]=h.deepMerge(l,m)):h.isUndefined(m)||(c[d]=m)}for(let m=0;m{Object.defineProperty(l,v,Object.getOwnPropertyDescriptor(p,v))});const d={constructor:{value:l,enumerable:!1,writable:!1,configurable:!0}};m&&Object.keys(m).forEach(v=>{d[v]=Object.getOwnPropertyDescriptor(m,v)}),l.prototype=Object.create(u.prototype,d)},a=/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,f={nop(){},promiseImmediate(l){return new Promise(u=>{s.setImmediate?o(()=>{u(l)}):setTimeout(()=>{u(l)},1)})},inherits:c,dateToExcel(l,u){return 25569+l.getTime()/(24*3600*1e3)-(u?1462:0)},excelToDate(l,u){const p=Math.round((l-25569+(u?1462:0))*24*3600*1e3);return new Date(p)},parsePath(l){const u=l.lastIndexOf("/");return{path:l.substring(0,u),name:l.substring(u+1)}},getRelsPath(l){const u=f.parsePath(l);return`${u.path}/_rels/${u.name}.rels`},xmlEncode(l){const u=a.exec(l);if(!u)return l;let p="",m="",d=0,v=u.index;for(;v=11&&x!==13)){m="";break}continue}}d!==v&&(p+=l.substring(d,v)),d=v+1,m&&(p+=m)}return d!==v?p+l.substring(d,v):p},xmlDecode(l){return l.replace(/&([a-z]*);/g,u=>{switch(u){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return u}})},validInt(l){const u=parseInt(l,10);return Number.isNaN(u)?0:u},isDateFmt(l){return l?(l=l.replace(/\[[^\]]*]/g,""),l=l.replace(/"[^"]*"/g,""),l.match(/[ymdhMsb]+/)!==null):!1},fs:{exists(l){return new Promise(u=>{h.access(l,h.constants.F_OK,p=>{u(!p)})})}},toIsoDateString(l){return l.toIsoString().subsstr(0,10)},parseBoolean(l){return l===!0||l==="true"||l===1||l==="1"}};n.exports=f}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{},e("timers").setImmediate)},{fs:216,timers:523}],28:[function(e,n,i){const s=e("./under-dash"),o=e("./utils"),h="<",c=">",a="";function l(m,d,v){m.push(` ${d}="${o.xmlEncode(v.toString())}"`)}function u(m,d){if(d){const v=[];s.each(d,(x,g)=>{x!==void 0&&l(v,g,x)}),m.push(v.join(""))}}class p{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(d){const v=this._xml;v.push(" +`)}openNode(d,v){const x=this.tos,g=this._xml;x&&this.open&&g.push(c),this._stack.push(d),g.push(h),g.push(d),u(g,v),this.leaf=!0,this.open=!0}addAttribute(d,v){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");v!==void 0&&l(this._xml,d,v)}addAttributes(d){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");u(this._xml,d)}writeText(d){const v=this._xml;this.open&&(v.push(c),this.open=!1),this.leaf=!1,v.push(o.xmlEncode(d.toString()))}writeXml(d){this.open&&(this._xml.push(c),this.open=!1),this.leaf=!1,this._xml.push(d)}closeNode(){const d=this._stack.pop(),v=this._xml;this.leaf?v.push(f):(v.push(a),v.push(d),v.push(c)),this.open=!1,this.leaf=!1}leafNode(d,v,x){this.openNode(d,v),x!==void 0&&this.writeText(x),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const d=this._rollbacks.pop();this._xml.length>d.xml&&this._xml.splice(d.xml,this._xml.length-d.xml),this._stack.length>d.stack&&this._stack.splice(d.stack,this._stack.length-d.stack),this.leaf=d.leaf,this.open=d.open}get xml(){return this.closeAll(),this._xml.join("")}}p.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},n.exports=p},{"./under-dash":26,"./utils":27}],29:[function(e,n,i){(function(s){(function(){const o=e("events"),h=e("jszip"),c=e("./stream-buf"),{stringToBuffer:a}=e("./browser-buffer-encode");class f extends o.EventEmitter{constructor(u){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},u),this.zip=new h,this.stream=new c}append(u,p){p.hasOwnProperty("base64")&&p.base64?this.zip.file(p.name,u,{base64:!0}):(s.browser&&typeof u=="string"&&(u=a(u)),this.zip.file(p.name,u))}async finalize(){const u=await this.zip.generateAsync(this.options);this.stream.end(u),this.emit("finish")}read(u){return this.stream.read(u)}setEncoding(u){return this.stream.setEncoding(u)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(u,p){return this.stream.pipe(u,p)}unpipe(u){return this.stream.unpipe(u)}unshift(u){return this.stream.unshift(u)}wrap(u){return this.stream.wrap(u)}}n.exports={ZipWriter:f}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(e,n,i){n.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},28:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"年"m"月"d"日"',"zh-cn":'yyyy"年"m"月"d"日"',"ja-jp":'yyyy"年"m"月"d"日"',"ko-kr":'yyyy"년" mm"월" dd"일"'},32:{"zh-tw":'hh"時"mm"分"',"zh-cn":'h"时"mm"分"',"ja-jp":'h"時"mm"分"',"ko-kr":'h"시" mm"분"'},33:{"zh-tw":'hh"時"mm"分"ss"秒"',"zh-cn":'h"时"mm"分"ss"秒"',"ja-jp":'h"時"mm"分"ss"秒"',"ko-kr":'h"시" mm"분" ss"초"'},34:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},51:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},52:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'yyyy"年"m"月"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'m"月"d"日"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},55:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},58:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,n,i){n.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,n,i){const s=e("../../utils/parse-sax"),o=e("../../utils/xml-stream");class h{prepare(){}render(){}parseOpen(a){}parseText(a){}parseClose(a){}reconcile(a,f){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(a=>{a instanceof h?a.reset():a.xform&&a.xform.reset()})}mergeModel(a){this.model=Object.assign(this.model||{},a)}async parse(a){for await(const f of a)for(const{eventType:l,value:u}of f)if(l==="opentag")this.parseOpen(u);else if(l==="text")this.parseText(u);else if(l==="closetag"&&!this.parseClose(u.name))return this.model;return this.model}async parseStream(a){return this.parse(s(a))}get xml(){return this.toXml(this.model)}toXml(a){const f=new o;return this.render(f,a),f.xml}static toAttribute(a,f){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(a===void 0){if(l)return f}else if(l||a!==f)return a.toString()}static toStringAttribute(a,f){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return h.toAttribute(a,f,l)}static toStringValue(a,f){return a===void 0?f:a}static toBoolAttribute(a,f){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(a===void 0){if(l)return f}else if(l||a!==f)return a?"1":"0"}static toBoolValue(a,f){return a===void 0?f:a==="1"}static toIntAttribute(a,f){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return h.toAttribute(a,f,l)}static toIntValue(a,f){return a===void 0?f:parseInt(a,10)}static toFloatAttribute(a,f){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return h.toAttribute(a,f,l)}static toFloatValue(a,f){return a===void 0?f:parseFloat(a)}}n.exports=h},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,n,i){const s=e("../base-xform"),o=e("../../../utils/col-cache");class h extends s{render(l,u){l.openNode("definedName",{name:u.name,localSheetId:u.localSheetId}),l.writeText(u.ranges.join(",")),l.closeNode()}parseOpen(l){switch(l.name){case"definedName":return this._parsedName=l.attributes.name,this._parsedLocalSheetId=l.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(l){this._parsedText.push(l)}parseClose(){return this.model={name:this._parsedName,ranges:a(this._parsedText.join(""))},this._parsedLocalSheetId!==void 0&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}function c(f){try{return o.decodeEx(f),!0}catch{return!1}}function a(f){const l=[];let u=!1,p="";return f.split(",").forEach(m=>{if(!m)return;const d=(m.match(/'/g)||[]).length;if(!d){u?p+=`${m},`:c(m)&&l.push(m);return}const v=d%2===0;!u&&v&&c(m)?l.push(m):u&&!v?(u=!1,c(p+m)&&l.push(p+m),p=""):(u=!0,p+=`${m},`)}),l}n.exports=h},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,n,i){const s=e("../../../utils/utils"),o=e("../base-xform");class h extends o{render(a,f){a.leafNode("sheet",{sheetId:f.id,name:f.name,state:f.state,"r:id":f.rId})}parseOpen(a){return a.name==="sheet"?(this.model={name:s.xmlDecode(a.attributes.name),id:parseInt(a.attributes.sheetId,10),state:a.attributes.state,rId:a.attributes["r:id"]},!0):!1}parseText(){}parseClose(){return!1}}n.exports=h},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){c.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:a.fullCalcOnLoad?1:void 0})}parseOpen(c){return c.name==="calcPr"?(this.model={},!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],36:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){c.leafNode("workbookPr",{date1904:a.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(c){return c.name==="workbookPr"?(this.model={date1904:c.attributes.date1904==="1"},!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],37:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){const f={xWindow:a.x||0,yWindow:a.y||0,windowWidth:a.width||12e3,windowHeight:a.height||24e3,firstSheet:a.firstSheet,activeTab:a.activeTab};a.visibility&&a.visibility!=="visible"&&(f.visibility=a.visibility),c.leafNode("workbookView",f)}parseOpen(c){if(c.name==="workbookView"){const a=this.model={},f=function(u,p,m){const d=p!==void 0?a[u]=p:m;d!==void 0&&(a[u]=d)},l=function(u,p,m){const d=p!==void 0?a[u]=parseInt(p,10):m;d!==void 0&&(a[u]=d)};return l("x",c.attributes.xWindow,0),l("y",c.attributes.yWindow,0),l("width",c.attributes.windowWidth,25e3),l("height",c.attributes.windowHeight,1e4),f("visibility",c.attributes.visibility,"visible"),l("activeTab",c.attributes.activeTab,void 0),l("firstSheet",c.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],38:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../../../utils/col-cache"),h=e("../../../utils/xml-stream"),c=e("../base-xform"),a=e("../static-xform"),f=e("../list-xform"),l=e("./defined-name-xform"),u=e("./sheet-xform"),p=e("./workbook-view-xform"),m=e("./workbook-properties-xform"),d=e("./workbook-calc-properties-xform");class v extends c{constructor(){super(),this.map={fileVersion:v.STATIC_XFORMS.fileVersion,workbookPr:new m,bookViews:new f({tag:"bookViews",count:!1,childXform:new p}),sheets:new f({tag:"sheets",count:!1,childXform:new u}),definedNames:new f({tag:"definedNames",count:!1,childXform:new l}),calcPr:new d}}prepare(g){g.sheets=g.worksheets;const w=[];let y=0;g.sheets.forEach(_=>{if(_.pageSetup&&_.pageSetup.printArea&&_.pageSetup.printArea.split("&&").forEach(k=>{const F=k.split(":"),O={name:"_xlnm.Print_Area",ranges:[`'${_.name}'!$${F[0]}:$${F[1]}`],localSheetId:y};w.push(O)}),_.pageSetup&&(_.pageSetup.printTitlesRow||_.pageSetup.printTitlesColumn)){const k=[];if(_.pageSetup.printTitlesColumn){const O=_.pageSetup.printTitlesColumn.split(":");k.push(`'${_.name}'!$${O[0]}:$${O[1]}`)}if(_.pageSetup.printTitlesRow){const O=_.pageSetup.printTitlesRow.split(":");k.push(`'${_.name}'!$${O[0]}:$${O[1]}`)}const F={name:"_xlnm.Print_Titles",ranges:k,localSheetId:y};w.push(F)}y++}),w.length&&(g.definedNames=g.definedNames.concat(w)),(g.media||[]).forEach((_,k)=>{_.name=_.type+(k+1)})}render(g,w){g.openXml(h.StdDocAttributes),g.openNode("workbook",v.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(g),this.map.workbookPr.render(g,w.properties),this.map.bookViews.render(g,w.views),this.map.sheets.render(g,w.sheets),this.map.definedNames.render(g,w.definedNames),this.map.calcPr.render(g,w.calcProperties),g.closeNode()}parseOpen(g){if(this.parser)return this.parser.parseOpen(g),!0;switch(g.name){case"workbook":return!0;default:return this.parser=this.map[g.name],this.parser&&this.parser.parseOpen(g),!0}}parseText(g){this.parser&&this.parser.parseText(g)}parseClose(g){if(this.parser)return this.parser.parseClose(g)||(this.parser=void 0),!0;switch(g){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(g){const w=(g.workbookRels||[]).reduce((O,N)=>(O[N.Id]=N,O),{}),y=[];let _,k=0;(g.sheets||[]).forEach(O=>{const N=w[O.rId];N&&(_=g.worksheetHash[`xl/${N.Target.replace(/^(\s|\/xl\/)+/,"")}`],_&&(_.name=O.name,_.id=O.id,_.state=O.state,y[k++]=_))});const F=[];s.each(g.definedNames,O=>{if(O.name==="_xlnm.Print_Area"){if(_=y[O.localSheetId],_){_.pageSetup||(_.pageSetup={});const N=o.decodeEx(O.ranges[0]);_.pageSetup.printArea=_.pageSetup.printArea?`${_.pageSetup.printArea}&&${N.dimensions}`:N.dimensions}}else if(O.name==="_xlnm.Print_Titles"){if(_=y[O.localSheetId],_){_.pageSetup||(_.pageSetup={});const N=O.ranges.join(","),U=/\$/g,z=/\$\d+:\$\d+/,W=N.match(z);if(W&&W.length){const H=W[0];_.pageSetup.printTitlesRow=H.replace(U,"")}const X=/\$[A-Z]+:\$[A-Z]+/,J=N.match(X);if(J&&J.length){const H=J[0];_.pageSetup.printTitlesColumn=H.replace(U,"")}}}else F.push(O)}),g.definedNames=F,g.media.forEach((O,N)=>{O.index=N})}}v.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},v.STATIC_XFORMS={fileVersion:new a({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},n.exports=v},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,n,i){const s=e("../strings/rich-text-xform"),o=e("../../../utils/utils"),h=e("../base-xform"),c=n.exports=function(a){this.model=a};o.inherits(c,h,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new s),this._richTextXform},render(a,f){f=f||this.model,a.openNode("comment",{ref:f.ref,authorId:0}),a.openNode("text"),f&&f.note&&f.note.texts&&f.note.texts.forEach(l=>{this.richTextXform.render(a,l)}),a.closeNode(),a.closeNode()},parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case"comment":return this.model={type:"note",note:{texts:[]},...a.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(a),!0;default:return!1}},parseText(a){this.parser&&this.parser.parseText(a)},parseClose(a){switch(a){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(a),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../../../utils/utils"),h=e("../base-xform"),c=e("./comment-xform"),a=n.exports=function(){this.map={comment:new c}};o.inherits(a,h,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(f,l){l=l||this.model,f.openXml(s.StdDocAttributes),f.openNode("comments",a.COMMENTS_ATTRIBUTES),f.openNode("authors"),f.leafNode("author",null,"Author"),f.closeNode(),f.openNode("commentList"),l.comments.forEach(u=>{this.map.comment.render(f,u)}),f.closeNode(),f.closeNode()},parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(f),!0;default:return!1}},parseText(f){this.parser&&this.parser.parseText(f)},parseClose(f){switch(f){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(f),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,n,i){const s=e("../../base-xform");class o extends s{constructor(c){super(),this._model=c}get tag(){return this._model&&this._model.tag}render(c,a,f){a===f[2]?c.leafNode(this.tag):this.tag==="x:SizeWithCells"&&a===f[1]&&c.leafNode(this.tag)}parseOpen(c){switch(c.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=o},{"../../base-xform":32}],42:[function(e,n,i){const s=e("../../base-xform");class o extends s{constructor(c){super(),this._model=c}get tag(){return this._model&&this._model.tag}render(c,a){c.leafNode(this.tag,null,a)}parseOpen(c){switch(c.name){case this.tag:return this.text="",!0;default:return!1}}parseText(c){this.text=c}parseClose(){return!1}}n.exports=o},{"../../base-xform":32}],43:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"x:Anchor"}getAnchorRect(c){const a=Math.floor(c.left),f=Math.floor((c.left-a)*68),l=Math.floor(c.top),u=Math.floor((c.top-l)*18),p=Math.floor(c.right),m=Math.floor((c.right-p)*68),d=Math.floor(c.bottom),v=Math.floor((c.bottom-d)*18);return[a,f,l,u,p,m,d,v]}getDefaultRect(c){const a=c.col,f=6,l=Math.max(c.row-2,0),u=14,p=a+2,m=2,d=l+4;return[a,f,l,u,p,m,d,16]}render(c,a){const f=a.anchor?this.getAnchorRect(a.anchor):this.getDefaultRect(a.refAddress);c.leafNode("x:Anchor",null,f.join(", "))}parseOpen(c){switch(c.name){case this.tag:return this.text="",!0;default:return!1}}parseText(c){this.text=c}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],44:[function(e,n,i){const s=e("../base-xform"),o=e("./vml-anchor-xform"),h=e("./style/vml-protection-xform"),c=e("./style/vml-position-xform"),a=["twoCells","oneCells","absolute"];class f extends s{constructor(){super(),this.map={"x:Anchor":new o,"x:Locked":new h({tag:"x:Locked"}),"x:LockText":new h({tag:"x:LockText"}),"x:SizeWithCells":new c({tag:"x:SizeWithCells"}),"x:MoveWithCells":new c({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(u,p){const{protection:m,editAs:d}=p.note;u.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(u,d,a),this.map["x:SizeWithCells"].render(u,d,a),this.map["x:Anchor"].render(u,p),this.map["x:Locked"].render(u,m.locked),u.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(u,m.lockText),u.leafNode("x:Row",null,p.refAddress.row-1),u.leafNode("x:Column",null,p.refAddress.col-1),u.closeNode()}parseOpen(u){switch(u.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[u.name],this.parser&&this.parser.parseOpen(u);break}return!0}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){if(this.parser)return this.parser.parseClose(u)||(this.parser=void 0),!0;switch(u){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const u=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),p=Object.keys(u).length;this.model.editAs=a[p],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}n.exports=f},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("./vml-shape-xform");class c extends o{constructor(){super(),this.map={"v:shape":new h}}get tag(){return"xml"}render(f,l){f.openXml(s.StdDocAttributes),f.openNode(this.tag,c.DRAWING_ATTRIBUTES),f.openNode("o:shapelayout",{"v:ext":"edit"}),f.leafNode("o:idmap",{"v:ext":"edit",data:1}),f.closeNode(),f.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),f.leafNode("v:stroke",{joinstyle:"miter"}),f.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),f.closeNode(),l.comments.forEach((u,p)=>{this.map["v:shape"].render(f,u,p)}),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[f.name],this.parser&&this.parser.parseOpen(f);break}return!0}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(f){case this.tag:return!1;default:return!0}}reconcile(f,l){f.anchors.forEach(u=>{u.br?this.map["xdr:twoCellAnchor"].reconcile(u,l):this.map["xdr:oneCellAnchor"].reconcile(u,l)})}}c.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},n.exports=c},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,n,i){const s=e("../base-xform"),o=e("./vml-textbox-xform"),h=e("./vml-client-data-xform");class c extends s{constructor(){super(),this.map={"v:textbox":new o,"x:ClientData":new h}}get tag(){return"v:shape"}render(f,l,u){f.openNode("v:shape",c.V_SHAPE_ATTRIBUTES(l,u)),f.leafNode("v:fill",{color2:"infoBackground [80]"}),f.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),f.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(f,l),this.map["x:ClientData"].render(f,l),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case this.tag:this.reset(),this.model={margins:{insetmode:f.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[f.name],this.parser&&this.parser.parseOpen(f);break}return!0}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.parser=void 0),!0;switch(f){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}c.V_SHAPE_ATTRIBUTES=(a,f)=>({id:`_x0000_s${1025+f}`,type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":a.note.margins&&a.note.margins.insetmode}),n.exports=c},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"v:textbox"}conversionUnit(c,a,f){return`${parseFloat(c)*a.toFixed(2)}${f}`}reverseConversionUnit(c){return(c||"").split(",").map(a=>Number(parseFloat(this.conversionUnit(parseFloat(a),.1,"")).toFixed(2)))}render(c,a){const f={style:"mso-direction-alt:auto"};if(a&&a.note){let{inset:l}=a.note&&a.note.margins;Array.isArray(l)&&(l=l.map(u=>this.conversionUnit(u,10,"mm")).join(",")),l&&(f.inset=l)}c.openNode("v:textbox",f),c.leafNode("div",{style:"text-align:left"}),c.closeNode()}parseOpen(c){switch(c.name){case this.tag:return this.model={inset:this.reverseConversionUnit(c.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(c){switch(c){case this.tag:return!1;default:return!0}}}n.exports=o},{"../base-xform":32}],48:[function(e,n,i){const s=e("./base-xform");class o extends s{createNewModel(c){return{}}parseOpen(c){return this.parser=this.parser||this.map[c.name],this.parser?(this.parser.parseOpen(c),!0):c.name===this.tag?(this.model=this.createNewModel(c),!0):!1}parseText(c){this.parser&&this.parser.parseText(c)}onParserClose(c,a){this.model[c]=a.model}parseClose(c){return this.parser?(this.parser.parseClose(c)||(this.onParserClose(c,this.parser),this.parser=void 0),!0):c!==this.tag}}n.exports=o},{"./base-xform":32}],49:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){c.openNode("HeadingPairs"),c.openNode("vt:vector",{size:2,baseType:"variant"}),c.openNode("vt:variant"),c.leafNode("vt:lpstr",void 0,"Worksheets"),c.closeNode(),c.openNode("vt:variant"),c.leafNode("vt:i4",void 0,a.length),c.closeNode(),c.closeNode(),c.closeNode()}parseOpen(c){return c.name==="HeadingPairs"}parseText(){}parseClose(c){return c!=="HeadingPairs"}}n.exports=o},{"../base-xform":32}],50:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){c.openNode("TitlesOfParts"),c.openNode("vt:vector",{size:a.length,baseType:"lpstr"}),a.forEach(f=>{c.leafNode("vt:lpstr",void 0,f.name)}),c.closeNode(),c.closeNode()}parseOpen(c){return c.name==="TitlesOfParts"}parseText(){}parseClose(c){return c!=="TitlesOfParts"}}n.exports=o},{"../base-xform":32}],51:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("../simple/string-xform"),c=e("./app-heading-pairs-xform"),a=e("./app-titles-of-parts-xform");class f extends o{constructor(){super(),this.map={Company:new h({tag:"Company"}),Manager:new h({tag:"Manager"}),HeadingPairs:new c,TitleOfParts:new a}}render(u,p){u.openXml(s.StdDocAttributes),u.openNode("Properties",f.PROPERTY_ATTRIBUTES),u.leafNode("Application",void 0,"Microsoft Excel"),u.leafNode("DocSecurity",void 0,"0"),u.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(u,p.worksheets),this.map.TitleOfParts.render(u,p.worksheets),this.map.Company.render(u,p.company||""),this.map.Manager.render(u,p.manager),u.leafNode("LinksUpToDate",void 0,"false"),u.leafNode("SharedDoc",void 0,"false"),u.leafNode("HyperlinksChanged",void 0,"false"),u.leafNode("AppVersion",void 0,"16.0300"),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"Properties":return!0;default:return this.parser=this.map[u.name],this.parser?(this.parser.parseOpen(u),!0):!1}}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){if(this.parser)return this.parser.parseClose(u)||(this.parser=void 0),!0;switch(u){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}f.DateFormat=function(l){return l.toISOString().replace(/[.]\d{3,6}/,"")},f.DateAttrs={"xsi:type":"dcterms:W3CDTF"},f.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},n.exports=f},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform");class h extends o{render(a,f){a.openXml(s.StdDocAttributes),a.openNode("Types",h.PROPERTY_ATTRIBUTES);const l={};(f.media||[]).forEach(p=>{if(p.type==="image"){const m=p.extension;l[m]||(l[m]=!0,a.leafNode("Default",{Extension:m,ContentType:`image/${m}`}))}}),a.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),a.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),a.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),f.worksheets.forEach(p=>{const m=`/xl/worksheets/sheet${p.id}.xml`;a.leafNode("Override",{PartName:m,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),a.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),a.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}),f.sharedStrings&&f.sharedStrings.count&&a.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),f.tables&&f.tables.forEach(p=>{a.leafNode("Override",{PartName:`/xl/tables/${p.target}`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),f.drawings&&f.drawings.forEach(p=>{a.leafNode("Override",{PartName:`/xl/drawings/${p.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),f.commentRefs&&(a.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),f.commentRefs.forEach(p=>{let{commentName:m}=p;a.leafNode("Override",{PartName:`/xl/${m}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),a.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),a.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),a.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}h.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},n.exports=h},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("../simple/date-xform"),c=e("../simple/string-xform"),a=e("../simple/integer-xform");class f extends o{constructor(){super(),this.map={"dc:creator":new c({tag:"dc:creator"}),"dc:title":new c({tag:"dc:title"}),"dc:subject":new c({tag:"dc:subject"}),"dc:description":new c({tag:"dc:description"}),"dc:identifier":new c({tag:"dc:identifier"}),"dc:language":new c({tag:"dc:language"}),"cp:keywords":new c({tag:"cp:keywords"}),"cp:category":new c({tag:"cp:category"}),"cp:lastModifiedBy":new c({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new h({tag:"cp:lastPrinted",format:f.DateFormat}),"cp:revision":new a({tag:"cp:revision"}),"cp:version":new c({tag:"cp:version"}),"cp:contentStatus":new c({tag:"cp:contentStatus"}),"cp:contentType":new c({tag:"cp:contentType"}),"dcterms:created":new h({tag:"dcterms:created",attrs:f.DateAttrs,format:f.DateFormat}),"dcterms:modified":new h({tag:"dcterms:modified",attrs:f.DateAttrs,format:f.DateFormat})}}render(u,p){u.openXml(s.StdDocAttributes),u.openNode("cp:coreProperties",f.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(u,p.creator),this.map["dc:title"].render(u,p.title),this.map["dc:subject"].render(u,p.subject),this.map["dc:description"].render(u,p.description),this.map["dc:identifier"].render(u,p.identifier),this.map["dc:language"].render(u,p.language),this.map["cp:keywords"].render(u,p.keywords),this.map["cp:category"].render(u,p.category),this.map["cp:lastModifiedBy"].render(u,p.lastModifiedBy),this.map["cp:lastPrinted"].render(u,p.lastPrinted),this.map["cp:revision"].render(u,p.revision),this.map["cp:version"].render(u,p.version),this.map["cp:contentStatus"].render(u,p.contentStatus),this.map["cp:contentType"].render(u,p.contentType),this.map["dcterms:created"].render(u,p.created),this.map["dcterms:modified"].render(u,p.modified),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[u.name],this.parser)return this.parser.parseOpen(u),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(u)}`)}}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){if(this.parser)return this.parser.parseClose(u)||(this.parser=void 0),!0;switch(u){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error(`Unexpected xml node in parseClose: ${u}`)}}}f.DateFormat=function(l){return l.toISOString().replace(/[.]\d{3}/,"")},f.DateAttrs={"xsi:type":"dcterms:W3CDTF"},f.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},n.exports=f},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,n,i){const s=e("../base-xform");class o extends s{render(c,a){c.leafNode("Relationship",a)}parseOpen(c){switch(c.name){case"Relationship":return this.model=c.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],55:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("./relationship-xform");class c extends o{constructor(){super(),this.map={Relationship:new h}}render(f,l){l=l||this._values,f.openXml(s.StdDocAttributes),f.openNode("Relationships",c.RELATIONSHIPS_ATTRIBUTES),l.forEach(u=>{this.map.Relationship.render(f,u)}),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[f.name],this.parser)return this.parser.parseOpen(f),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(f)}`)}}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(f){case"Relationships":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${f}`)}}}c.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},n.exports=c},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,n,i){const s=e("../base-xform");class o extends s{parseOpen(c){if(this.parser)return this.parser.parseOpen(c),!0;switch(c.name){case this.tag:this.reset(),this.model={range:{editAs:c.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[c.name],this.parser&&this.parser.parseOpen(c);break}return!0}parseText(c){this.parser&&this.parser.parseText(c)}reconcilePicture(c,a){if(c&&c.rId){const l=a.rels[c.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(l){const u=l[1],p=a.mediaIndex[u];return a.media[p]}}}}n.exports=o},{"../base-xform":32}],57:[function(e,n,i){const s=e("../base-xform"),o=e("./blip-xform");class h extends s{constructor(){super(),this.map={"a:blip":new o}}get tag(){return"xdr:blipFill"}render(a,f){a.openNode(this.tag),this.map["a:blip"].render(a,f),a.openNode("a:stretch"),a.leafNode("a:fillRect"),a.closeNode(),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:this.reset();break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a);break}return!0}parseText(){}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.parser=void 0),!0;switch(a){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}n.exports=h},{"../base-xform":32,"./blip-xform":58}],58:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"a:blip"}render(c,a){c.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":a.rId,cstate:"print"})}parseOpen(c){switch(c.name){case this.tag:return this.model={rId:c.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(c){switch(c){case this.tag:return!1;default:return!0}}}n.exports=o},{"../base-xform":32}],59:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"xdr:cNvPicPr"}render(c){c.openNode(this.tag),c.leafNode("a:picLocks",{noChangeAspect:"1"}),c.closeNode()}parseOpen(c){switch(c.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(c){switch(c){case this.tag:return!1;default:return!0}}}n.exports=o},{"../base-xform":32}],60:[function(e,n,i){const s=e("../base-xform"),o=e("./hlink-click-xform"),h=e("./ext-lst-xform");class c extends s{constructor(){super(),this.map={"a:hlinkClick":new o,"a:extLst":new h}}get tag(){return"xdr:cNvPr"}render(f,l){f.openNode(this.tag,{id:l.index,name:`Picture ${l.index}`}),this.map["a:hlinkClick"].render(f,l),this.map["a:extLst"].render(f,l),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case this.tag:this.reset();break;default:this.parser=this.map[f.name],this.parser&&this.parser.parseOpen(f);break}return!0}parseText(){}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.parser=void 0),!0;switch(f){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}n.exports=c},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,n,i){const s=e("../base-xform"),o=e("../simple/integer-xform");class h extends s{constructor(a){super(),this.tag=a.tag,this.map={"xdr:col":new o({tag:"xdr:col",zero:!0}),"xdr:colOff":new o({tag:"xdr:colOff",zero:!0}),"xdr:row":new o({tag:"xdr:row",zero:!0}),"xdr:rowOff":new o({tag:"xdr:rowOff",zero:!0})}}render(a,f){a.openNode(this.tag),this.map["xdr:col"].render(a,f.nativeCol),this.map["xdr:colOff"].render(a,f.nativeColOff),this.map["xdr:row"].render(a,f.nativeRow),this.map["xdr:rowOff"].render(a,f.nativeRowOff),a.closeNode()}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:this.reset();break;default:this.parser=this.map[a.name],this.parser&&this.parser.parseOpen(a);break}return!0}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.parser=void 0),!0;switch(a){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}n.exports=h},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,n,i){const s=e("../../../utils/col-cache"),o=e("../../../utils/xml-stream"),h=e("../base-xform"),c=e("./two-cell-anchor-xform"),a=e("./one-cell-anchor-xform");function f(u){return(typeof u.range=="string"?s.decode(u.range):u.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}class l extends h{constructor(){super(),this.map={"xdr:twoCellAnchor":new c,"xdr:oneCellAnchor":new a}}prepare(p){p.anchors.forEach((m,d)=>{m.anchorType=f(m),this.map[m.anchorType].prepare(m,{index:d})})}get tag(){return"xdr:wsDr"}render(p,m){p.openXml(o.StdDocAttributes),p.openNode(this.tag,l.DRAWING_ATTRIBUTES),m.anchors.forEach(d=>{this.map[d.anchorType].render(p,d)}),p.closeNode()}parseOpen(p){if(this.parser)return this.parser.parseOpen(p),!0;switch(p.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[p.name],this.parser&&this.parser.parseOpen(p);break}return!0}parseText(p){this.parser&&this.parser.parseText(p)}parseClose(p){if(this.parser)return this.parser.parseClose(p)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(p){case this.tag:return!1;default:return!0}}reconcile(p,m){p.anchors.forEach(d=>{d.br?this.map["xdr:twoCellAnchor"].reconcile(d,m):this.map["xdr:oneCellAnchor"].reconcile(d,m)})}}l.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},n.exports=l},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"a:extLst"}render(c){c.openNode(this.tag),c.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),c.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),c.closeNode(),c.closeNode()}parseOpen(c){switch(c.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(c){switch(c){case this.tag:return!1;default:return!0}}}n.exports=o},{"../base-xform":32}],64:[function(e,n,i){const s=e("../base-xform"),o=9525;class h extends s{constructor(a){super(),this.tag=a.tag,this.map={}}render(a,f){a.openNode(this.tag);const l=Math.floor(f.width*o),u=Math.floor(f.height*o);a.addAttribute("cx",l),a.addAttribute("cy",u),a.closeNode()}parseOpen(a){return a.name===this.tag?(this.model={width:parseInt(a.attributes.cx||"0",10)/o,height:parseInt(a.attributes.cy||"0",10)/o},!0):!1}parseText(){}parseClose(){return!1}}n.exports=h},{"../base-xform":32}],65:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"a:hlinkClick"}render(c,a){a.hyperlinks&&a.hyperlinks.rId&&c.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":a.hyperlinks.rId,tooltip:a.hyperlinks.tooltip})}parseOpen(c){switch(c.name){case this.tag:return this.model={hyperlinks:{rId:c.attributes["r:id"],tooltip:c.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],66:[function(e,n,i){const s=e("../base-xform"),o=e("./c-nv-pr-xform"),h=e("./c-nv-pic-pr-xform");class c extends s{constructor(){super(),this.map={"xdr:cNvPr":new o,"xdr:cNvPicPr":new h}}get tag(){return"xdr:nvPicPr"}render(f,l){f.openNode(this.tag),this.map["xdr:cNvPr"].render(f,l),this.map["xdr:cNvPicPr"].render(f,l),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case this.tag:this.reset();break;default:this.parser=this.map[f.name],this.parser&&this.parser.parseOpen(f);break}return!0}parseText(){}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.parser=void 0),!0;switch(f){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}n.exports=c},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,n,i){const s=e("./base-cell-anchor-xform"),o=e("../static-xform"),h=e("./cell-position-xform"),c=e("./ext-xform"),a=e("./pic-xform");class f extends s{constructor(){super(),this.map={"xdr:from":new h({tag:"xdr:from"}),"xdr:ext":new c({tag:"xdr:ext"}),"xdr:pic":new a,"xdr:clientData":new o({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(u,p){this.map["xdr:pic"].prepare(u.picture,p)}render(u,p){u.openNode(this.tag,{editAs:p.range.editAs||"oneCell"}),this.map["xdr:from"].render(u,p.range.tl),this.map["xdr:ext"].render(u,p.range.ext),this.map["xdr:pic"].render(u,p.picture),this.map["xdr:clientData"].render(u,{}),u.closeNode()}parseClose(u){if(this.parser)return this.parser.parseClose(u)||(this.parser=void 0),!0;switch(u){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(u,p){u.medium=this.reconcilePicture(u.picture,p)}}n.exports=f},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,n,i){const s=e("../base-xform"),o=e("../static-xform"),h=e("./blip-fill-xform"),c=e("./nv-pic-pr-xform"),a=e("./sp-pr");class f extends s{constructor(){super(),this.map={"xdr:nvPicPr":new c,"xdr:blipFill":new h,"xdr:spPr":new o(a)}}get tag(){return"xdr:pic"}prepare(u,p){u.index=p.index+1}render(u,p){u.openNode(this.tag),this.map["xdr:nvPicPr"].render(u,p),this.map["xdr:blipFill"].render(u,p),this.map["xdr:spPr"].render(u,p),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case this.tag:this.reset();break;default:this.parser=this.map[u.name],this.parser&&this.parser.parseOpen(u);break}return!0}parseText(){}parseClose(u){if(this.parser)return this.parser.parseClose(u)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(u){case this.tag:return!1;default:return!0}}}n.exports=f},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,n,i){n.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,n,i){const s=e("./base-cell-anchor-xform"),o=e("../static-xform"),h=e("./cell-position-xform"),c=e("./pic-xform");class a extends s{constructor(){super(),this.map={"xdr:from":new h({tag:"xdr:from"}),"xdr:to":new h({tag:"xdr:to"}),"xdr:pic":new c,"xdr:clientData":new o({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(l,u){this.map["xdr:pic"].prepare(l.picture,u)}render(l,u){l.openNode(this.tag,{editAs:u.range.editAs||"oneCell"}),this.map["xdr:from"].render(l,u.range.tl),this.map["xdr:to"].render(l,u.range.br),this.map["xdr:pic"].render(l,u.picture),this.map["xdr:clientData"].render(l,{}),l.closeNode()}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.parser=void 0),!0;switch(l){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(l,u){l.medium=this.reconcilePicture(l.picture,u)}}n.exports=a},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,n,i){const s=e("./base-xform");class o extends s{constructor(c){super(),this.tag=c.tag,this.always=!!c.always,this.count=c.count,this.empty=c.empty,this.$count=c.$count||"count",this.$=c.$,this.childXform=c.childXform,this.maxItems=c.maxItems}prepare(c,a){const{childXform:f}=this;c&&c.forEach((l,u)=>{a.index=u,f.prepare(l,a)})}render(c,a){if(this.always||a&&a.length){c.openNode(this.tag,this.$),this.count&&c.addAttribute(this.$count,a&&a.length||0);const{childXform:f}=this;(a||[]).forEach((l,u)=>{f.render(c,l,u)}),c.closeNode()}else this.empty&&c.leafNode(this.tag)}parseOpen(c){if(this.parser)return this.parser.parseOpen(c),!0;switch(c.name){case this.tag:return this.model=[],!0;default:return this.childXform.parseOpen(c)?(this.parser=this.childXform,!0):!1}}parseText(c){this.parser&&this.parser.parseText(c)}parseClose(c){if(this.parser){if(!this.parser.parseClose(c)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(c,a){if(c){const{childXform:f}=this;c.forEach(l=>{f.reconcile(l,a)})}}}n.exports=o},{"./base-xform":32}],72:[function(e,n,i){const s=e("../../../utils/col-cache"),o=e("../base-xform");class h extends o{get tag(){return"autoFilter"}render(a,f){if(f)if(typeof f=="string")a.leafNode("autoFilter",{ref:f});else{const l=function(m){return typeof m=="string"?m:s.getAddress(m.row,m.column).address},u=l(f.from),p=l(f.to);u&&p&&a.leafNode("autoFilter",{ref:`${u}:${p}`})}}parseOpen(a){a.name==="autoFilter"&&(this.model=a.attributes.ref)}}n.exports=h},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,n,i){const s=e("../../../utils/utils"),o=e("../base-xform"),h=e("../../../doc/range"),c=e("../../../doc/enums"),a=e("../strings/rich-text-xform");function f(p){if(p==null)return c.ValueType.Null;if(p instanceof String||typeof p=="string")return c.ValueType.String;if(typeof p=="number")return c.ValueType.Number;if(typeof p=="boolean")return c.ValueType.Boolean;if(p instanceof Date)return c.ValueType.Date;if(p.text&&p.hyperlink)return c.ValueType.Hyperlink;if(p.formula)return c.ValueType.Formula;if(p.error)return c.ValueType.Error;throw new Error("I could not understand type of value")}function l(p){switch(p.type){case c.ValueType.Formula:return f(p.result);default:return p.type}}class u extends o{constructor(){super(),this.richTextXForm=new a}get tag(){return"c"}prepare(m,d){const v=d.styles.addStyleModel(m.style||{},l(m));switch(v&&(m.styleId=v),m.comment&&d.comments.push({...m.comment,ref:m.address}),m.type){case c.ValueType.String:case c.ValueType.RichText:d.sharedStrings&&(m.ssId=d.sharedStrings.add(m.value));break;case c.ValueType.Date:d.date1904&&(m.date1904=!0);break;case c.ValueType.Hyperlink:d.sharedStrings&&m.text!==void 0&&m.text!==null&&(m.ssId=d.sharedStrings.add(m.text)),d.hyperlinks.push({address:m.address,target:m.hyperlink,tooltip:m.tooltip});break;case c.ValueType.Merge:d.merges.add(m);break;case c.ValueType.Formula:if(d.date1904&&(m.date1904=!0),m.shareType==="shared"&&(m.si=d.siFormulae++),m.formula)d.formulae[m.address]=m;else if(m.sharedFormula){const x=d.formulae[m.sharedFormula];if(!x)throw new Error(`Shared Formula master must exist above and or left of clone for cell ${m.address}`);x.si===void 0?(x.shareType="shared",x.si=d.siFormulae++,x.range=new h(x.address,m.address)):x.range&&x.range.expandToAddress(m.address),m.si=x.si}break}}renderFormula(m,d){let v=null;switch(d.shareType){case"shared":v={t:"shared",ref:d.ref||d.range.range,si:d.si};break;case"array":v={t:"array",ref:d.ref};break;default:d.si!==void 0&&(v={t:"shared",si:d.si});break}switch(f(d.result)){case c.ValueType.Null:m.leafNode("f",v,d.formula);break;case c.ValueType.String:m.addAttribute("t","str"),m.leafNode("f",v,d.formula),m.leafNode("v",null,d.result);break;case c.ValueType.Number:m.leafNode("f",v,d.formula),m.leafNode("v",null,d.result);break;case c.ValueType.Boolean:m.addAttribute("t","b"),m.leafNode("f",v,d.formula),m.leafNode("v",null,d.result?1:0);break;case c.ValueType.Error:m.addAttribute("t","e"),m.leafNode("f",v,d.formula),m.leafNode("v",null,d.result.error);break;case c.ValueType.Date:m.leafNode("f",v,d.formula),m.leafNode("v",null,s.dateToExcel(d.result,d.date1904));break;default:throw new Error("I could not understand type of value")}}render(m,d){if(!(d.type===c.ValueType.Null&&!d.styleId)){switch(m.openNode("c"),m.addAttribute("r",d.address),d.styleId&&m.addAttribute("s",d.styleId),d.type){case c.ValueType.Null:break;case c.ValueType.Number:m.leafNode("v",null,d.value);break;case c.ValueType.Boolean:m.addAttribute("t","b"),m.leafNode("v",null,d.value?"1":"0");break;case c.ValueType.Error:m.addAttribute("t","e"),m.leafNode("v",null,d.value.error);break;case c.ValueType.String:case c.ValueType.RichText:d.ssId!==void 0?(m.addAttribute("t","s"),m.leafNode("v",null,d.ssId)):d.value&&d.value.richText?(m.addAttribute("t","inlineStr"),m.openNode("is"),d.value.richText.forEach(v=>{this.richTextXForm.render(m,v)}),m.closeNode("is")):(m.addAttribute("t","str"),m.leafNode("v",null,d.value));break;case c.ValueType.Date:m.leafNode("v",null,s.dateToExcel(d.value,d.date1904));break;case c.ValueType.Hyperlink:d.ssId!==void 0?(m.addAttribute("t","s"),m.leafNode("v",null,d.ssId)):(m.addAttribute("t","str"),m.leafNode("v",null,d.text));break;case c.ValueType.Formula:this.renderFormula(m,d);break;case c.ValueType.Merge:break}m.closeNode()}}parseOpen(m){if(this.parser)return this.parser.parseOpen(m),!0;switch(m.name){case"c":return this.model={address:m.attributes.r},this.t=m.attributes.t,m.attributes.s&&(this.model.styleId=parseInt(m.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=m.attributes.si,this.model.shareType=m.attributes.t,this.model.ref=m.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(m),!0;default:return!1}}parseText(m){if(this.parser){this.parser.parseText(m);return}switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+m:m;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+m:m:this.model.value=this.model.value?this.model.value+m:m;break}}parseClose(m){switch(m){case"c":{const{model:d}=this;if(d.formula||d.shareType)d.type=c.ValueType.Formula,d.value&&(this.t==="str"?d.result=s.xmlDecode(d.value):this.t==="b"?d.result=parseInt(d.value,10)!==0:this.t==="e"?d.result={error:d.value}:d.result=parseFloat(d.value),d.value=void 0);else if(d.value!==void 0)switch(this.t){case"s":d.type=c.ValueType.String,d.value=parseInt(d.value,10);break;case"str":d.type=c.ValueType.String,d.value=s.xmlDecode(d.value);break;case"inlineStr":d.type=c.ValueType.String;break;case"b":d.type=c.ValueType.Boolean,d.value=parseInt(d.value,10)!==0;break;case"e":d.type=c.ValueType.Error,d.value={error:d.value};break;default:d.type=c.ValueType.Number,d.value=parseFloat(d.value);break}else d.styleId?d.type=c.ValueType.Null:d.type=c.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(m),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return this.parser?(this.parser.parseClose(m),!0):!1}}reconcile(m,d){const v=m.styleId&&d.styles&&d.styles.getStyleModel(m.styleId);switch(v&&(m.style=v),m.styleId!==void 0&&(m.styleId=void 0),m.type){case c.ValueType.String:typeof m.value=="number"&&d.sharedStrings&&(m.value=d.sharedStrings.getString(m.value)),m.value.richText&&(m.type=c.ValueType.RichText);break;case c.ValueType.Number:v&&s.isDateFmt(v.numFmt)&&(m.type=c.ValueType.Date,m.value=s.excelToDate(m.value,d.date1904));break;case c.ValueType.Formula:m.result!==void 0&&v&&s.isDateFmt(v.numFmt)&&(m.result=s.excelToDate(m.result,d.date1904)),m.shareType==="shared"&&(m.ref?d.formulae[m.si]=m.address:(m.sharedFormula=d.formulae[m.si],delete m.shareType),delete m.si);break}const x=d.hyperlinkMap[m.address];x&&(m.type===c.ValueType.Formula?(m.text=m.result,m.result=void 0):(m.text=m.value,m.value=void 0),m.type=c.ValueType.Hyperlink,m.hyperlink=x);const g=d.commentsMap&&d.commentsMap[m.address];g&&(m.comment=g)}}n.exports=u},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,n,i){const s=e("../../base-xform");class o extends s{get tag(){return"x14:cfIcon"}render(c,a){c.leafNode(this.tag,{iconSet:a.iconSet,iconId:a.iconId})}parseOpen(c){let{attributes:a}=c;this.model={iconSet:a.iconSet,iconId:s.toIntValue(a.iconId)}}parseClose(c){return c!==this.tag}}n.exports=o},{"../../base-xform":32}],75:[function(e,n,i){const{v4:s}=e("uuid"),o=e("../../base-xform"),h=e("../../composite-xform"),c=e("./databar-ext-xform"),a=e("./icon-set-ext-xform"),f={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class l extends h{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new c,"x14:iconSet":this.iconSetXform=new a}}get tag(){return"x14:cfRule"}static isExt(p){return p.type==="dataBar"?c.isExt(p):!!(p.type==="iconSet"&&(p.custom||f[p.iconSet]))}prepare(p){l.isExt(p)&&(p.x14Id=`{${s()}}`.toUpperCase())}render(p,m){if(l.isExt(m))switch(m.type){case"dataBar":this.renderDataBar(p,m);break;case"iconSet":this.renderIconSet(p,m);break}}renderDataBar(p,m){p.openNode(this.tag,{type:"dataBar",id:m.x14Id}),this.databarXform.render(p,m),p.closeNode()}renderIconSet(p,m){p.openNode(this.tag,{type:"iconSet",priority:m.priority,id:m.x14Id||`{${s()}}`}),this.iconSetXform.render(p,m),p.closeNode()}createNewModel(p){let{attributes:m}=p;return{type:m.type,x14Id:m.id,priority:o.toIntValue(m.priority)}}onParserClose(p,m){Object.assign(this.model,m.model)}}n.exports=l},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(e,n,i){const s=e("../../composite-xform"),o=e("./f-ext-xform");class h extends s{constructor(){super(),this.map={"xm:f":this.fExtXform=new o}}get tag(){return"x14:cfvo"}render(a,f){a.openNode(this.tag,{type:f.type}),f.value!==void 0&&this.fExtXform.render(a,f.value),a.closeNode()}createNewModel(a){return{type:a.attributes.type}}onParserClose(a,f){switch(a){case"xm:f":this.model.value=f.model?parseFloat(f.model):0;break}}}n.exports=h},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,n,i){const s=e("../../composite-xform"),o=e("./sqref-ext-xform"),h=e("./cf-rule-ext-xform");class c extends s{constructor(){super(),this.map={"xm:sqref":this.sqRef=new o,"x14:cfRule":this.cfRule=new h}}get tag(){return"x14:conditionalFormatting"}prepare(f,l){f.rules.forEach(u=>{this.cfRule.prepare(u,l)})}render(f,l){l.rules.some(h.isExt)&&(f.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),l.rules.filter(h.isExt).forEach(u=>this.cfRule.render(f,u)),this.sqRef.render(f,l.ref),f.closeNode())}createNewModel(){return{rules:[]}}onParserClose(f,l){switch(f){case"xm:sqref":this.model.ref=l.model;break;case"x14:cfRule":this.model.rules.push(l.model);break}}}n.exports=c},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,n,i){const s=e("../../composite-xform"),o=e("./cf-rule-ext-xform"),h=e("./conditional-formatting-ext-xform");class c extends s{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new h}}get tag(){return"x14:conditionalFormattings"}hasContent(f){return f.hasExtContent===void 0&&(f.hasExtContent=f.some(l=>l.rules.some(o.isExt))),f.hasExtContent}prepare(f,l){f.forEach(u=>{this.cfXform.prepare(u,l)})}render(f,l){this.hasContent(l)&&(f.openNode(this.tag),l.forEach(u=>this.cfXform.render(f,u)),f.closeNode())}createNewModel(){return[]}onParserClose(f,l){this.model.push(l.model)}}n.exports=c},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,n,i){const s=e("../../base-xform"),o=e("../../composite-xform"),h=e("../../style/color-xform"),c=e("./cfvo-ext-xform");class a extends o{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new c,"x14:borderColor":this.borderColorXform=new h("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new h("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new h("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new h("x14:axisColor")}}static isExt(l){return!l.gradient}get tag(){return"x14:dataBar"}render(l,u){l.openNode(this.tag,{minLength:s.toIntAttribute(u.minLength,0,!0),maxLength:s.toIntAttribute(u.maxLength,100,!0),border:s.toBoolAttribute(u.border,!1),gradient:s.toBoolAttribute(u.gradient,!0),negativeBarColorSameAsPositive:s.toBoolAttribute(u.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:s.toBoolAttribute(u.negativeBarBorderColorSameAsPositive,!0),axisPosition:s.toAttribute(u.axisPosition,"auto"),direction:s.toAttribute(u.direction,"leftToRight")}),u.cfvo.forEach(p=>{this.cfvoXform.render(l,p)}),this.borderColorXform.render(l,u.borderColor),this.negativeBorderColorXform.render(l,u.negativeBorderColor),this.negativeFillColorXform.render(l,u.negativeFillColor),this.axisColorXform.render(l,u.axisColor),l.closeNode()}createNewModel(l){let{attributes:u}=l;return{cfvo:[],minLength:s.toIntValue(u.minLength,0),maxLength:s.toIntValue(u.maxLength,100),border:s.toBoolValue(u.border,!1),gradient:s.toBoolValue(u.gradient,!0),negativeBarColorSameAsPositive:s.toBoolValue(u.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:s.toBoolValue(u.negativeBarBorderColorSameAsPositive,!0),axisPosition:s.toStringValue(u.axisPosition,"auto"),direction:s.toStringValue(u.direction,"leftToRight")}}onParserClose(l,u){const[,p]=l.split(":");switch(p){case"cfvo":this.model.cfvo.push(u.model);break;default:this.model[p]=u.model;break}}}n.exports=a},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,n,i){const s=e("../../base-xform");class o extends s{get tag(){return"xm:f"}render(c,a){c.leafNode(this.tag,null,a)}parseOpen(){this.model=""}parseText(c){this.model+=c}parseClose(c){return c!==this.tag}}n.exports=o},{"../../base-xform":32}],81:[function(e,n,i){const s=e("../../base-xform"),o=e("../../composite-xform"),h=e("./cfvo-ext-xform"),c=e("./cf-icon-ext-xform");class a extends o{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new h,"x14:cfIcon":this.cfIconXform=new c}}get tag(){return"x14:iconSet"}render(l,u){l.openNode(this.tag,{iconSet:s.toStringAttribute(u.iconSet),reverse:s.toBoolAttribute(u.reverse,!1),showValue:s.toBoolAttribute(u.showValue,!0),custom:s.toBoolAttribute(u.icons,!1)}),u.cfvo.forEach(p=>{this.cfvoXform.render(l,p)}),u.icons&&u.icons.forEach((p,m)=>{p.iconId=m,this.cfIconXform.render(l,p)}),l.closeNode()}createNewModel(l){let{attributes:u}=l;return{cfvo:[],iconSet:s.toStringValue(u.iconSet,"3TrafficLights"),reverse:s.toBoolValue(u.reverse,!1),showValue:s.toBoolValue(u.showValue,!0)}}onParserClose(l,u){const[,p]=l.split(":");switch(p){case"cfvo":this.model.cfvo.push(u.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(u.model);break;default:this.model[p]=u.model;break}}}n.exports=a},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,n,i){const s=e("../../base-xform");class o extends s{get tag(){return"xm:sqref"}render(c,a){c.leafNode(this.tag,null,a)}parseOpen(){this.model=""}parseText(c){this.model+=c}parseClose(c){return c!==this.tag}}n.exports=o},{"../../base-xform":32}],83:[function(e,n,i){const s=e("../../base-xform"),o=e("../../composite-xform"),h=e("../../../../doc/range"),c=e("./databar-xform"),a=e("./ext-lst-ref-xform"),f=e("./formula-xform"),l=e("./color-scale-xform"),u=e("./icon-set-xform"),p={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},m=g=>{if(g.formulae&&g.formulae[0])return g.formulae[0];const w=new h(g.ref),{tl:y}=w;switch(g.operator){case"containsText":return`NOT(ISERROR(SEARCH("${g.text}",${y})))`;case"containsBlanks":return`LEN(TRIM(${y}))=0`;case"notContainsBlanks":return`LEN(TRIM(${y}))>0`;case"containsErrors":return`ISERROR(${y})`;case"notContainsErrors":return`NOT(ISERROR(${y}))`;default:return}},d=g=>{if(g.formulae&&g.formulae[0])return g.formulae[0];const w=new h(g.ref),{tl:y}=w;switch(g.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${y},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${y},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${y},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${y},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${y},1)=TODAY()-1`;case"today":return`FLOOR(${y},1)=TODAY()`;case"tomorrow":return`FLOOR(${y},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${y},1)<=6,FLOOR(${y},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0-1)),YEAR(${y})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${y})=MONTH(TODAY()),YEAR(${y})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0+1)),YEAR(${y})=YEAR(EDATE(TODAY(),0+1)))`;default:return}},v=g=>{const{type:w,operator:y}=g;switch(w){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:w};default:return{type:w,operator:y}}};class x extends o{constructor(){super(),this.map={dataBar:this.databarXform=new c,extLst:this.extLstRefXform=new a,formula:this.formulaXform=new f,colorScale:this.colorScaleXform=new l,iconSet:this.iconSetXform=new u}}get tag(){return"cfRule"}static isPrimitive(w){return!(w.type==="iconSet"&&(w.custom||p[w.iconSet]))}render(w,y){switch(y.type){case"expression":this.renderExpression(w,y);break;case"cellIs":this.renderCellIs(w,y);break;case"top10":this.renderTop10(w,y);break;case"aboveAverage":this.renderAboveAverage(w,y);break;case"dataBar":this.renderDataBar(w,y);break;case"colorScale":this.renderColorScale(w,y);break;case"iconSet":this.renderIconSet(w,y);break;case"containsText":this.renderText(w,y);break;case"timePeriod":this.renderTimePeriod(w,y);break}}renderExpression(w,y){w.openNode(this.tag,{type:"expression",dxfId:y.dxfId,priority:y.priority}),this.formulaXform.render(w,y.formulae[0]),w.closeNode()}renderCellIs(w,y){w.openNode(this.tag,{type:"cellIs",dxfId:y.dxfId,priority:y.priority,operator:y.operator}),y.formulae.forEach(_=>{this.formulaXform.render(w,_)}),w.closeNode()}renderTop10(w,y){w.leafNode(this.tag,{type:"top10",dxfId:y.dxfId,priority:y.priority,percent:s.toBoolAttribute(y.percent,!1),bottom:s.toBoolAttribute(y.bottom,!1),rank:s.toIntValue(y.rank,10,!0)})}renderAboveAverage(w,y){w.leafNode(this.tag,{type:"aboveAverage",dxfId:y.dxfId,priority:y.priority,aboveAverage:s.toBoolAttribute(y.aboveAverage,!0)})}renderDataBar(w,y){w.openNode(this.tag,{type:"dataBar",priority:y.priority}),this.databarXform.render(w,y),this.extLstRefXform.render(w,y),w.closeNode()}renderColorScale(w,y){w.openNode(this.tag,{type:"colorScale",priority:y.priority}),this.colorScaleXform.render(w,y),w.closeNode()}renderIconSet(w,y){x.isPrimitive(y)&&(w.openNode(this.tag,{type:"iconSet",priority:y.priority}),this.iconSetXform.render(w,y),w.closeNode())}renderText(w,y){w.openNode(this.tag,{type:y.operator,dxfId:y.dxfId,priority:y.priority,operator:s.toStringAttribute(y.operator,"containsText")});const _=m(y);_&&this.formulaXform.render(w,_),w.closeNode()}renderTimePeriod(w,y){w.openNode(this.tag,{type:"timePeriod",dxfId:y.dxfId,priority:y.priority,timePeriod:y.timePeriod});const _=d(y);_&&this.formulaXform.render(w,_),w.closeNode()}createNewModel(w){let{attributes:y}=w;return{...v(y),dxfId:s.toIntValue(y.dxfId),priority:s.toIntValue(y.priority),timePeriod:y.timePeriod,percent:s.toBoolValue(y.percent),bottom:s.toBoolValue(y.bottom),rank:s.toIntValue(y.rank),aboveAverage:s.toBoolValue(y.aboveAverage)}}onParserClose(w,y){switch(w){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,y.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(y.model);break}}}n.exports=x},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,n,i){const s=e("../../base-xform");class o extends s{get tag(){return"cfvo"}render(c,a){c.leafNode(this.tag,{type:a.type,val:a.value})}parseOpen(c){this.model={type:c.attributes.type,value:s.toFloatValue(c.attributes.val)}}parseClose(c){return c!==this.tag}}n.exports=o},{"../../base-xform":32}],85:[function(e,n,i){const s=e("../../composite-xform"),o=e("../../style/color-xform"),h=e("./cfvo-xform");class c extends s{constructor(){super(),this.map={cfvo:this.cfvoXform=new h,color:this.colorXform=new o}}get tag(){return"colorScale"}render(f,l){f.openNode(this.tag),l.cfvo.forEach(u=>{this.cfvoXform.render(f,u)}),l.color.forEach(u=>{this.colorXform.render(f,u)}),f.closeNode()}createNewModel(f){return{cfvo:[],color:[]}}onParserClose(f,l){this.model[f].push(l.model)}}n.exports=c},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,n,i){const s=e("../../composite-xform"),o=e("./cf-rule-xform");class h extends s{constructor(){super(),this.map={cfRule:new o}}get tag(){return"conditionalFormatting"}render(a,f){f.rules.some(o.isPrimitive)&&(a.openNode(this.tag,{sqref:f.ref}),f.rules.forEach(l=>{o.isPrimitive(l)&&(l.ref=f.ref,this.map.cfRule.render(a,l))}),a.closeNode())}createNewModel(a){let{attributes:f}=a;return{ref:f.sqref,rules:[]}}onParserClose(a,f){this.model.rules.push(f.model)}}n.exports=h},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,n,i){const s=e("../../base-xform"),o=e("./conditional-formatting-xform");class h extends s{constructor(){super(),this.cfXform=new o}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(a,f){let l=a.reduce((u,p)=>Math.max(u,...p.rules.map(m=>m.priority||0)),1);a.forEach(u=>{u.rules.forEach(p=>{p.priority||(p.priority=l++),p.style&&(p.dxfId=f.styles.addDxfStyle(p.style))})})}render(a,f){f.forEach(l=>{this.cfXform.render(a,l)})}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(a),!0;default:return!1}}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){return this.parser?this.parser.parseClose(a)?!0:(this.model.push(this.parser.model),this.parser=void 0,!1):!1}reconcile(a,f){a.forEach(l=>{l.rules.forEach(u=>{u.dxfId!==void 0&&(u.style=f.styles.getDxfStyle(u.dxfId),delete u.dxfId)})})}}n.exports=h},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,n,i){const s=e("../../composite-xform"),o=e("../../style/color-xform"),h=e("./cfvo-xform");class c extends s{constructor(){super(),this.map={cfvo:this.cfvoXform=new h,color:this.colorXform=new o}}get tag(){return"dataBar"}render(f,l){f.openNode(this.tag),l.cfvo.forEach(u=>{this.cfvoXform.render(f,u)}),this.colorXform.render(f,l.color),f.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(f,l){switch(f){case"cfvo":this.model.cfvo.push(l.model);break;case"color":this.model.color=l.model;break}}}n.exports=c},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,n,i){const s=e("../../base-xform"),o=e("../../composite-xform");class h extends s{get tag(){return"x14:id"}render(l,u){l.leafNode(this.tag,null,u)}parseOpen(){this.model=""}parseText(l){this.model+=l}parseClose(l){return l!==this.tag}}class c extends o{constructor(){super(),this.map={"x14:id":this.idXform=new h}}get tag(){return"ext"}render(l,u){l.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(l,u.x14Id),l.closeNode()}createNewModel(){return{}}onParserClose(l,u){this.model.x14Id=u.model}}class a extends o{constructor(){super(),this.map={ext:new c}}get tag(){return"extLst"}render(l,u){l.openNode(this.tag),this.map.ext.render(l,u),l.closeNode()}createNewModel(){return{}}onParserClose(l,u){Object.assign(this.model,u.model)}}n.exports=a},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,n,i){const s=e("../../base-xform");class o extends s{get tag(){return"formula"}render(c,a){c.leafNode(this.tag,null,a)}parseOpen(){this.model=""}parseText(c){this.model+=c}parseClose(c){return c!==this.tag}}n.exports=o},{"../../base-xform":32}],91:[function(e,n,i){const s=e("../../base-xform"),o=e("../../composite-xform"),h=e("./cfvo-xform");class c extends o{constructor(){super(),this.map={cfvo:this.cfvoXform=new h}}get tag(){return"iconSet"}render(f,l){f.openNode(this.tag,{iconSet:s.toStringAttribute(l.iconSet,"3TrafficLights"),reverse:s.toBoolAttribute(l.reverse,!1),showValue:s.toBoolAttribute(l.showValue,!0)}),l.cfvo.forEach(u=>{this.cfvoXform.render(f,u)}),f.closeNode()}createNewModel(f){let{attributes:l}=f;return{iconSet:s.toStringValue(l.iconSet,"3TrafficLights"),reverse:s.toBoolValue(l.reverse),showValue:s.toBoolValue(l.showValue),cfvo:[]}}onParserClose(f,l){this.model[f].push(l.model)}}n.exports=c},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,n,i){const s=e("../../../utils/utils"),o=e("../base-xform");class h extends o{get tag(){return"col"}prepare(a,f){const l=f.styles.addStyleModel(a.style||{});l&&(a.styleId=l)}render(a,f){a.openNode("col"),a.addAttribute("min",f.min),a.addAttribute("max",f.max),f.width&&a.addAttribute("width",f.width),f.styleId&&a.addAttribute("style",f.styleId),f.hidden&&a.addAttribute("hidden","1"),f.bestFit&&a.addAttribute("bestFit","1"),f.outlineLevel&&a.addAttribute("outlineLevel",f.outlineLevel),f.collapsed&&a.addAttribute("collapsed","1"),a.addAttribute("customWidth","1"),a.closeNode()}parseOpen(a){if(a.name==="col"){const f=this.model={min:parseInt(a.attributes.min||"0",10),max:parseInt(a.attributes.max||"0",10),width:a.attributes.width===void 0?void 0:parseFloat(a.attributes.width||"0")};return a.attributes.style&&(f.styleId=parseInt(a.attributes.style,10)),s.parseBoolean(a.attributes.hidden)&&(f.hidden=!0),s.parseBoolean(a.attributes.bestFit)&&(f.bestFit=!0),a.attributes.outlineLevel&&(f.outlineLevel=parseInt(a.attributes.outlineLevel,10)),s.parseBoolean(a.attributes.collapsed)&&(f.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(a,f){a.styleId&&(a.style=f.styles.getStyleModel(a.styleId))}}n.exports=h},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../../../utils/utils"),h=e("../../../utils/col-cache"),c=e("../base-xform"),a=e("../../../doc/range");function f(m,d,v,x){const g=d[v];g!==void 0?m[v]=g:x!==void 0&&(m[v]=x)}function l(m,d,v,x){const g=d[v];g!==void 0?m[v]=o.parseBoolean(g):x!==void 0&&(m[v]=x)}function u(m){const d=s.map(m,(g,w)=>({address:w,dataValidation:g,marked:!1})).sort((g,w)=>s.strcmp(g.address,w.address)),v=s.keyBy(d,"address"),x=(g,w,y)=>{for(let _=0;_{if(!g.marked){const w=h.decodeEx(g.address);if(w.dimensions)return v[w.dimensions].marked=!0,{...g.dataValidation,sqref:g.address};let y=1,_=h.encodeAddress(w.row+y,w.col);for(;m[_]&&s.isEqual(g.dataValidation,m[_]);)y++,_=h.encodeAddress(w.row+y,w.col);let k=1;for(;x(w,y,w.col+k);)k++;for(let F=0;F1||k>1){const F=w.row+(y-1),O=w.col+(k-1);return{...g.dataValidation,sqref:`${g.address}:${h.encodeAddress(F,O)}`}}return{...g.dataValidation,sqref:g.address}}return null}).filter(Boolean)}class p extends c{get tag(){return"dataValidations"}render(d,v){const x=u(v);x.length&&(d.openNode("dataValidations",{count:x.length}),x.forEach(g=>{d.openNode("dataValidation"),g.type!=="any"&&(d.addAttribute("type",g.type),g.operator&&g.type!=="list"&&g.operator!=="between"&&d.addAttribute("operator",g.operator),g.allowBlank&&d.addAttribute("allowBlank","1")),g.showInputMessage&&d.addAttribute("showInputMessage","1"),g.promptTitle&&d.addAttribute("promptTitle",g.promptTitle),g.prompt&&d.addAttribute("prompt",g.prompt),g.showErrorMessage&&d.addAttribute("showErrorMessage","1"),g.errorStyle&&d.addAttribute("errorStyle",g.errorStyle),g.errorTitle&&d.addAttribute("errorTitle",g.errorTitle),g.error&&d.addAttribute("error",g.error),d.addAttribute("sqref",g.sqref),(g.formulae||[]).forEach((w,y)=>{d.openNode(`formula${y+1}`),g.type==="date"?d.writeText(o.dateToExcel(new Date(w))):d.writeText(w),d.closeNode()}),d.closeNode()}),d.closeNode())}parseOpen(d){switch(d.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=d.attributes.sqref;const v={type:d.attributes.type||"any",formulae:[]};switch(d.attributes.type&&l(v,d.attributes,"allowBlank"),l(v,d.attributes,"showInputMessage"),l(v,d.attributes,"showErrorMessage"),v.type){case"any":case"list":case"custom":break;default:f(v,d.attributes,"operator","between");break}return f(v,d.attributes,"promptTitle"),f(v,d.attributes,"prompt"),f(v,d.attributes,"errorStyle"),f(v,d.attributes,"errorTitle"),f(v,d.attributes,"error"),this._dataValidation=v,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(d){this._formula&&this._formula.push(d)}parseClose(d){switch(d){case"dataValidations":return!1;case"dataValidation":return(!this._dataValidation.formulae||!this._dataValidation.formulae.length)&&(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach(x=>{x.includes(":")?new a(x).forEachAddress(w=>{this.model[w]=this._dataValidation}):this.model[x]=this._dataValidation}),!0;case"formula1":case"formula2":{let v=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":v=parseInt(v,10);break;case"decimal":v=parseFloat(v);break;case"date":v=o.excelToDate(parseFloat(v));break}return this._dataValidation.formulae.push(v),this._formula=void 0,!0}default:return!0}}}n.exports=p},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"dimension"}render(c,a){a&&c.leafNode("dimension",{ref:a})}parseOpen(c){return c.name==="dimension"?(this.model=c.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],95:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"drawing"}render(c,a){a&&c.leafNode(this.tag,{"r:id":a.rId})}parseOpen(c){switch(c.name){case this.tag:return this.model={rId:c.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],96:[function(e,n,i){const s=e("../composite-xform"),o=e("./cf-ext/conditional-formattings-ext-xform");class h extends s{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new o}}get tag(){return"ext"}hasContent(f){return this.conditionalFormattings.hasContent(f.conditionalFormattings)}prepare(f,l){this.conditionalFormattings.prepare(f.conditionalFormattings,l)}render(f,l){f.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(f,l.conditionalFormattings),f.closeNode()}createNewModel(){return{}}onParserClose(f,l){this.model[f]=l.model}}class c extends s{constructor(){super(),this.map={ext:this.ext=new h}}get tag(){return"extLst"}prepare(f,l){this.ext.prepare(f,l)}hasContent(f){return this.ext.hasContent(f)}render(f,l){this.hasContent(l)&&(f.openNode("extLst"),this.ext.render(f,l),f.closeNode())}createNewModel(){return{}}onParserClose(f,l){Object.assign(this.model,l.model)}}n.exports=c},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"headerFooter"}render(c,a){if(a){c.addRollback();let f=!1;c.openNode("headerFooter"),a.differentFirst&&(c.addAttribute("differentFirst","1"),f=!0),a.differentOddEven&&(c.addAttribute("differentOddEven","1"),f=!0),a.oddHeader&&typeof a.oddHeader=="string"&&(c.leafNode("oddHeader",null,a.oddHeader),f=!0),a.oddFooter&&typeof a.oddFooter=="string"&&(c.leafNode("oddFooter",null,a.oddFooter),f=!0),a.evenHeader&&typeof a.evenHeader=="string"&&(c.leafNode("evenHeader",null,a.evenHeader),f=!0),a.evenFooter&&typeof a.evenFooter=="string"&&(c.leafNode("evenFooter",null,a.evenFooter),f=!0),a.firstHeader&&typeof a.firstHeader=="string"&&(c.leafNode("firstHeader",null,a.firstHeader),f=!0),a.firstFooter&&typeof a.firstFooter=="string"&&(c.leafNode("firstFooter",null,a.firstFooter),f=!0),f?(c.closeNode(),c.commit()):c.rollback()}}parseOpen(c){switch(c.name){case"headerFooter":return this.model={},c.attributes.differentFirst&&(this.model.differentFirst=parseInt(c.attributes.differentFirst,0)===1),c.attributes.differentOddEven&&(this.model.differentOddEven=parseInt(c.attributes.differentOddEven,0)===1),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(c){switch(this.currentNode){case"oddHeader":this.model.oddHeader=c;break;case"oddFooter":this.model.oddFooter=c;break;case"evenHeader":this.model.evenHeader=c;break;case"evenFooter":this.model.evenFooter=c;break;case"firstHeader":this.model.firstHeader=c;break;case"firstFooter":this.model.firstFooter=c;break}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}n.exports=o},{"../base-xform":32}],98:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"hyperlink"}render(c,a){this.isInternalLink(a)?c.leafNode("hyperlink",{ref:a.address,"r:id":a.rId,tooltip:a.tooltip,location:a.target}):c.leafNode("hyperlink",{ref:a.address,"r:id":a.rId,tooltip:a.tooltip})}parseOpen(c){return c.name==="hyperlink"?(this.model={address:c.attributes.ref,rId:c.attributes["r:id"],tooltip:c.attributes.tooltip},c.attributes.location&&(this.model.target=c.attributes.location),!0):!1}parseText(){}parseClose(){return!1}isInternalLink(c){return c.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(c.target)}}n.exports=o},{"../base-xform":32}],99:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"mergeCell"}render(c,a){c.leafNode("mergeCell",{ref:a})}parseOpen(c){return c.name==="mergeCell"?(this.model=c.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],100:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../../../doc/range"),h=e("../../../utils/col-cache"),c=e("../../../doc/enums");class a{constructor(){this.merges={}}add(l){if(this.merges[l.master])this.merges[l.master].expandToAddress(l.address);else{const u=`${l.master}:${l.address}`;this.merges[l.master]=new o(u)}}get mergeCells(){return s.map(this.merges,l=>l.range)}reconcile(l,u){s.each(l,p=>{const m=h.decode(p);for(let d=m.top;d<=m.bottom;d++){const v=u[d-1];for(let x=m.left;x<=m.right;x++){const g=v.cells[x-1];g?g.type===c.ValueType.Merge&&(g.master=m.tl):v.cells[x]={type:c.ValueType.Null,address:h.encodeAddress(d,x)}}}})}getMasterAddress(l){const u=this.hash[l];return u&&u.tl}}n.exports=a},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,n,i){const s=e("../base-xform"),o=c=>typeof c<"u";class h extends s{get tag(){return"outlinePr"}render(a,f){return f&&(o(f.summaryBelow)||o(f.summaryRight))?(a.leafNode(this.tag,{summaryBelow:o(f.summaryBelow)?Number(f.summaryBelow):void 0,summaryRight:o(f.summaryRight)?Number(f.summaryRight):void 0}),!0):!1}parseOpen(a){return a.name===this.tag?(this.model={summaryBelow:o(a.attributes.summaryBelow)?!!Number(a.attributes.summaryBelow):void 0,summaryRight:o(a.attributes.summaryRight)?!!Number(a.attributes.summaryRight):void 0},!0):!1}parseText(){}parseClose(){return!1}}n.exports=h},{"../base-xform":32}],102:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"brk"}render(c,a){c.leafNode("brk",a)}parseOpen(c){return c.name==="brk"?(this.model=c.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],103:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../base-xform");class h extends o{get tag(){return"pageMargins"}render(a,f){if(f){const l={left:f.left,right:f.right,top:f.top,bottom:f.bottom,header:f.header,footer:f.footer};s.some(l,u=>u!==void 0)&&a.leafNode(this.tag,l)}}parseOpen(a){switch(a.name){case this.tag:return this.model={left:parseFloat(a.attributes.left||.7),right:parseFloat(a.attributes.right||.7),top:parseFloat(a.attributes.top||.75),bottom:parseFloat(a.attributes.bottom||.75),header:parseFloat(a.attributes.header||.3),footer:parseFloat(a.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=h},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"pageSetUpPr"}render(c,a){return a&&a.fitToPage?(c.leafNode(this.tag,{fitToPage:a.fitToPage?"1":void 0}),!0):!1}parseOpen(c){return c.name===this.tag?(this.model={fitToPage:c.attributes.fitToPage==="1"},!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],105:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../base-xform");function h(p){return p?"1":void 0}function c(p){switch(p){case"overThenDown":return p;default:return}}function a(p){switch(p){case"atEnd":case"asDisplyed":return p;default:return}}function f(p){switch(p){case"dash":case"blank":case"NA":return p;default:return}}function l(p){return p!==void 0?parseInt(p,10):void 0}class u extends o{get tag(){return"pageSetup"}render(m,d){if(d){const v={paperSize:d.paperSize,orientation:d.orientation,horizontalDpi:d.horizontalDpi,verticalDpi:d.verticalDpi,pageOrder:c(d.pageOrder),blackAndWhite:h(d.blackAndWhite),draft:h(d.draft),cellComments:a(d.cellComments),errors:f(d.errors),scale:d.scale,fitToWidth:d.fitToWidth,fitToHeight:d.fitToHeight,firstPageNumber:d.firstPageNumber,useFirstPageNumber:h(d.firstPageNumber),usePrinterDefaults:h(d.usePrinterDefaults),copies:d.copies};s.some(v,x=>x!==void 0)&&m.leafNode(this.tag,v)}}parseOpen(m){switch(m.name){case this.tag:return this.model={paperSize:l(m.attributes.paperSize),orientation:m.attributes.orientation||"portrait",horizontalDpi:parseInt(m.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(m.attributes.verticalDpi||"4294967295",10),pageOrder:m.attributes.pageOrder||"downThenOver",blackAndWhite:m.attributes.blackAndWhite==="1",draft:m.attributes.draft==="1",cellComments:m.attributes.cellComments||"None",errors:m.attributes.errors||"displayed",scale:parseInt(m.attributes.scale||"100",10),fitToWidth:parseInt(m.attributes.fitToWidth||"1",10),fitToHeight:parseInt(m.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(m.attributes.firstPageNumber||"1",10),useFirstPageNumber:m.attributes.useFirstPageNumber==="1",usePrinterDefaults:m.attributes.usePrinterDefaults==="1",copies:parseInt(m.attributes.copies||"1",10)},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"picture"}render(c,a){a&&c.leafNode(this.tag,{"r:id":a.rId})}parseOpen(c){switch(c.name){case this.tag:return this.model={rId:c.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],107:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../base-xform");function h(a){return a?"1":void 0}class c extends o{get tag(){return"printOptions"}render(f,l){if(l){const u={headings:h(l.showRowColHeaders),gridLines:h(l.showGridLines),horizontalCentered:h(l.horizontalCentered),verticalCentered:h(l.verticalCentered)};s.some(u,p=>p!==void 0)&&f.leafNode(this.tag,u)}}parseOpen(f){switch(f.name){case this.tag:return this.model={showRowColHeaders:f.attributes.headings==="1",showGridLines:f.attributes.gridLines==="1",horizontalCentered:f.attributes.horizontalCentered==="1",verticalCentered:f.attributes.verticalCentered==="1"},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=c},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,n,i){const s=e("./page-breaks-xform"),o=e("../list-xform");class h extends o{constructor(){const a={tag:"rowBreaks",count:!0,childXform:new s};super(a)}render(a,f){if(f&&f.length){a.openNode(this.tag,this.$),this.count&&(a.addAttribute(this.$count,f.length),a.addAttribute("manualBreakCount",f.length));const{childXform:l}=this;f.forEach(u=>{l.render(a,u)}),a.closeNode()}else this.empty&&a.leafNode(this.tag)}}n.exports=h},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,n,i){const s=e("../base-xform"),o=e("../../../utils/utils"),h=e("./cell-xform");class c extends s{constructor(f){super(),this.maxItems=f&&f.maxItems,this.map={c:new h}}get tag(){return"row"}prepare(f,l){const u=l.styles.addStyleModel(f.style);u&&(f.styleId=u);const p=this.map.c;f.cells.forEach(m=>{p.prepare(m,l)})}render(f,l,u){f.openNode("row"),f.addAttribute("r",l.number),l.height&&(f.addAttribute("ht",l.height),f.addAttribute("customHeight","1")),l.hidden&&f.addAttribute("hidden","1"),l.min>0&&l.max>0&&l.min<=l.max&&f.addAttribute("spans",`${l.min}:${l.max}`),l.styleId&&(f.addAttribute("s",l.styleId),f.addAttribute("customFormat","1")),f.addAttribute("x14ac:dyDescent","0.25"),l.outlineLevel&&f.addAttribute("outlineLevel",l.outlineLevel),l.collapsed&&f.addAttribute("collapsed","1");const p=this.map.c;l.cells.forEach(m=>{p.render(f,m,u)}),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;if(f.name==="row"){this.numRowsSeen+=1;const l=f.attributes.spans?f.attributes.spans.split(":").map(p=>parseInt(p,10)):[void 0,void 0],u=this.model={number:parseInt(f.attributes.r,10),min:l[0],max:l[1],cells:[]};return f.attributes.s&&(u.styleId=parseInt(f.attributes.s,10)),o.parseBoolean(f.attributes.hidden)&&(u.hidden=!0),o.parseBoolean(f.attributes.bestFit)&&(u.bestFit=!0),f.attributes.ht&&(u.height=parseFloat(f.attributes.ht)),f.attributes.outlineLevel&&(u.outlineLevel=parseInt(f.attributes.outlineLevel,10)),o.parseBoolean(f.attributes.collapsed)&&(u.collapsed=!0),!0}return this.parser=this.map[f.name],this.parser?(this.parser.parseOpen(f),!0):!1}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser){if(!this.parser.parseClose(f)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(f,l){f.style=f.styleId?l.styles.getStyleModel(f.styleId):{},f.styleId!==void 0&&(f.styleId=void 0);const u=this.map.c;f.cells.forEach(p=>{u.reconcile(p,l)})}}n.exports=c},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../base-xform");class h extends o{get tag(){return"sheetFormatPr"}render(a,f){if(f){const l={defaultRowHeight:f.defaultRowHeight,outlineLevelRow:f.outlineLevelRow,outlineLevelCol:f.outlineLevelCol,"x14ac:dyDescent":f.dyDescent};f.defaultColWidth&&(l.defaultColWidth=f.defaultColWidth),(!f.defaultRowHeight||f.defaultRowHeight!==15)&&(l.customHeight="1"),s.some(l,u=>u!==void 0)&&a.leafNode("sheetFormatPr",l)}}parseOpen(a){return a.name==="sheetFormatPr"?(this.model={defaultRowHeight:parseFloat(a.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(a.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(a.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(a.attributes.outlineLevelCol||"0",10)},a.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(a.attributes.defaultColWidth)),!0):!1}parseText(){}parseClose(){return!1}}n.exports=h},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,n,i){const s=e("../base-xform"),o=e("../style/color-xform"),h=e("./page-setup-properties-xform"),c=e("./outline-properties-xform");class a extends s{constructor(){super(),this.map={tabColor:new o("tabColor"),pageSetUpPr:new h,outlinePr:new c}}get tag(){return"sheetPr"}render(l,u){if(u){l.addRollback(),l.openNode("sheetPr");let p=!1;p=this.map.tabColor.render(l,u.tabColor)||p,p=this.map.pageSetUpPr.render(l,u.pageSetup)||p,p=this.map.outlinePr.render(l,u.outlineProperties)||p,p?(l.closeNode(),l.commit()):l.rollback()}}parseOpen(l){return this.parser?(this.parser.parseOpen(l),!0):l.name===this.tag?(this.reset(),!0):this.map[l.name]?(this.parser=this.map[l.name],this.parser.parseOpen(l),!0):!1}parseText(l){return this.parser?(this.parser.parseText(l),!0):!1}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}n.exports=a},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../base-xform");function h(f,l){return f?l:void 0}function c(f,l){return f===l?!0:void 0}class a extends o{get tag(){return"sheetProtection"}render(l,u){if(u){const p={sheet:h(u.sheet,"1"),selectLockedCells:u.selectLockedCells===!1?"1":void 0,selectUnlockedCells:u.selectUnlockedCells===!1?"1":void 0,formatCells:h(u.formatCells,"0"),formatColumns:h(u.formatColumns,"0"),formatRows:h(u.formatRows,"0"),insertColumns:h(u.insertColumns,"0"),insertRows:h(u.insertRows,"0"),insertHyperlinks:h(u.insertHyperlinks,"0"),deleteColumns:h(u.deleteColumns,"0"),deleteRows:h(u.deleteRows,"0"),sort:h(u.sort,"0"),autoFilter:h(u.autoFilter,"0"),pivotTables:h(u.pivotTables,"0")};u.sheet&&(p.algorithmName=u.algorithmName,p.hashValue=u.hashValue,p.saltValue=u.saltValue,p.spinCount=u.spinCount,p.objects=h(u.objects===!1,"1"),p.scenarios=h(u.scenarios===!1,"1")),s.some(p,m=>m!==void 0)&&l.leafNode(this.tag,p)}}parseOpen(l){switch(l.name){case this.tag:return this.model={sheet:c(l.attributes.sheet,"1"),objects:l.attributes.objects==="1"?!1:void 0,scenarios:l.attributes.scenarios==="1"?!1:void 0,selectLockedCells:l.attributes.selectLockedCells==="1"?!1:void 0,selectUnlockedCells:l.attributes.selectUnlockedCells==="1"?!1:void 0,formatCells:c(l.attributes.formatCells,"0"),formatColumns:c(l.attributes.formatColumns,"0"),formatRows:c(l.attributes.formatRows,"0"),insertColumns:c(l.attributes.insertColumns,"0"),insertRows:c(l.attributes.insertRows,"0"),insertHyperlinks:c(l.attributes.insertHyperlinks,"0"),deleteColumns:c(l.attributes.deleteColumns,"0"),deleteRows:c(l.attributes.deleteRows,"0"),sort:c(l.attributes.sort,"0"),autoFilter:c(l.attributes.autoFilter,"0"),pivotTables:c(l.attributes.pivotTables,"0")},l.attributes.algorithmName&&(this.model.algorithmName=l.attributes.algorithmName,this.model.hashValue=l.attributes.hashValue,this.model.saltValue=l.attributes.saltValue,this.model.spinCount=parseInt(l.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=a},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,n,i){const s=e("../../../utils/col-cache"),o=e("../base-xform"),h={frozen:"frozen",frozenSplit:"frozen",split:"split"};class c extends o{get tag(){return"sheetView"}prepare(f){switch(f.state){case"frozen":case"split":break;default:f.state="normal";break}}render(f,l){f.openNode("sheetView",{workbookViewId:l.workbookViewId||0});const u=function(x,g,w){w&&f.addAttribute(x,g)};u("rightToLeft","1",l.rightToLeft===!0),u("tabSelected","1",l.tabSelected),u("showRuler","0",l.showRuler===!1),u("showRowColHeaders","0",l.showRowColHeaders===!1),u("showGridLines","0",l.showGridLines===!1),u("zoomScale",l.zoomScale,l.zoomScale),u("zoomScaleNormal",l.zoomScaleNormal,l.zoomScaleNormal),u("view",l.style,l.style);let p,m,d,v;switch(l.state){case"frozen":m=l.xSplit||0,d=l.ySplit||0,p=l.topLeftCell||s.getAddress(d+1,m+1).address,v=l.xSplit&&l.ySplit&&"bottomRight"||l.xSplit&&"topRight"||"bottomLeft",f.leafNode("pane",{xSplit:l.xSplit||void 0,ySplit:l.ySplit||void 0,topLeftCell:p,activePane:v,state:"frozen"}),f.leafNode("selection",{pane:v,activeCell:l.activeCell,sqref:l.activeCell});break;case"split":l.activePane==="topLeft"&&(l.activePane=void 0),f.leafNode("pane",{xSplit:l.xSplit||void 0,ySplit:l.ySplit||void 0,topLeftCell:l.topLeftCell,activePane:l.activePane}),f.leafNode("selection",{pane:l.activePane,activeCell:l.activeCell,sqref:l.activeCell});break;case"normal":l.activeCell&&f.leafNode("selection",{activeCell:l.activeCell,sqref:l.activeCell});break}f.closeNode()}parseOpen(f){switch(f.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(f.attributes.workbookViewId,10),rightToLeft:f.attributes.rightToLeft==="1",tabSelected:f.attributes.tabSelected==="1",showRuler:f.attributes.showRuler!=="0",showRowColHeaders:f.attributes.showRowColHeaders!=="0",showGridLines:f.attributes.showGridLines!=="0",zoomScale:parseInt(f.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(f.attributes.zoomScaleNormal||"100",10),style:f.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(f.attributes.xSplit||"0",10),ySplit:parseInt(f.attributes.ySplit||"0",10),topLeftCell:f.attributes.topLeftCell,activePane:f.attributes.activePane||"topLeft",state:f.attributes.state},!0;case"selection":{const l=f.attributes.pane||"topLeft";return this.selections[l]={pane:l,activeCell:f.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(f){let l,u;switch(f){case"sheetView":return this.sheetView&&this.pane?(l=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:h[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},this.model.state==="split"&&(l.activePane=this.pane.activePane),u=this.selections[this.pane.activePane],u&&u.activeCell&&(l.activeCell=u.activeCell),this.sheetView.style&&(l.style=this.sheetView.style)):(l=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},u=this.selections.topLeft,u&&u.activeCell&&(l.activeCell=u.activeCell),this.sheetView.style&&(l.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}n.exports=c},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"tablePart"}render(c,a){a&&c.leafNode(this.tag,{"r:id":a.rId})}parseOpen(c){switch(c.name){case this.tag:return this.model={rId:c.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],115:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../../../utils/col-cache"),h=e("../../../utils/xml-stream"),c=e("../../rel-type"),a=e("./merges"),f=e("../base-xform"),l=e("../list-xform"),u=e("./row-xform"),p=e("./col-xform"),m=e("./dimension-xform"),d=e("./hyperlink-xform"),v=e("./merge-cell-xform"),x=e("./data-validations-xform"),g=e("./sheet-properties-xform"),w=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),_=e("./sheet-protection-xform"),k=e("./page-margins-xform"),F=e("./page-setup-xform"),O=e("./print-options-xform"),N=e("./auto-filter-xform"),U=e("./picture-xform"),z=e("./drawing-xform"),W=e("./table-part-xform"),X=e("./row-breaks-xform"),J=e("./header-footer-xform"),H=e("./cf/conditional-formattings-xform"),I=e("./ext-lst-xform"),M=(B,L)=>{Object.keys(L).forEach(P=>{const R=B[P],C=L[P];R===void 0&&C!==void 0&&(B[P]=C)})},E=(B,L)=>{if(!L||!L.length)return B;if(!B||!B.length)return L;const P={},R={};return B.forEach(C=>{P[C.ref]=C,C.rules.forEach(S=>{const{x14Id:D}=S;D&&(R[D]=S)})}),L.forEach(C=>{C.rules.forEach(S=>{const D=R[S.x14Id];D?M(D,S):P[C.ref]?P[C.ref].rules.push(S):B.push({ref:C.ref,rules:[S]})})}),B};class A extends f{constructor(L){super();const{maxRows:P,maxCols:R,ignoreNodes:C}=L||{};this.ignoreNodes=C||[],this.map={sheetPr:new g,dimension:new m,sheetViews:new l({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new w,cols:new l({tag:"cols",count:!1,childXform:new p}),sheetData:new l({tag:"sheetData",count:!1,empty:!0,childXform:new u({maxItems:R}),maxItems:P}),autoFilter:new N,mergeCells:new l({tag:"mergeCells",count:!0,childXform:new v}),rowBreaks:new X,hyperlinks:new l({tag:"hyperlinks",count:!1,childXform:new d}),pageMargins:new k,dataValidations:new x,pageSetup:new F,headerFooter:new J,printOptions:new O,picture:new U,drawing:new z,sheetProtection:new _,tableParts:new l({tag:"tableParts",count:!0,childXform:new W}),conditionalFormatting:new H,extLst:new I}}prepare(L,P){P.merges=new a,L.hyperlinks=P.hyperlinks=[],L.comments=P.comments=[],P.formulae={},P.siFormulae=0,this.map.cols.prepare(L.cols,P),this.map.sheetData.prepare(L.rows,P),this.map.conditionalFormatting.prepare(L.conditionalFormattings,P),L.mergeCells=P.merges.mergeCells;const R=L.rels=[];function C(V){return`rId${V.length+1}`}if(L.hyperlinks.forEach(V=>{const te=C(R);V.rId=te,R.push({Id:te,Type:c.Hyperlink,Target:V.target,TargetMode:"External"})}),L.comments.length>0){const V={Id:C(R),Type:c.Comments,Target:`../comments${L.id}.xml`};R.push(V);const te={Id:C(R),Type:c.VmlDrawing,Target:`../drawings/vmlDrawing${L.id}.vml`};R.push(te),L.comments.forEach(oe=>{oe.refAddress=o.decodeAddress(oe.ref)}),P.commentRefs.push({commentName:`comments${L.id}`,vmlDrawing:`vmlDrawing${L.id}`})}const S=[];let D;L.media.forEach(V=>{if(V.type==="background"){const te=C(R);D=P.media[V.imageId],R.push({Id:te,Type:c.Image,Target:`../media/${D.name}.${D.extension}`}),L.background={rId:te},L.image=P.media[V.imageId]}else if(V.type==="image"){let{drawing:te}=L;D=P.media[V.imageId],te||(te=L.drawing={rId:C(R),name:`drawing${++P.drawingsCount}`,anchors:[],rels:[]},P.drawings.push(te),R.push({Id:te.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${te.name}.xml`}));let oe=this.preImageId===V.imageId?S[V.imageId]:S[te.rels.length];oe||(oe=C(te.rels),S[te.rels.length]=oe,te.rels.push({Id:oe,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${D.name}.${D.extension}`}));const he={picture:{rId:oe},range:V.range};if(V.hyperlinks&&V.hyperlinks.hyperlink){const Ne=C(te.rels);S[te.rels.length]=Ne,he.picture.hyperlinks={tooltip:V.hyperlinks.tooltip,rId:Ne},te.rels.push({Id:Ne,Type:c.Hyperlink,Target:V.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=V.imageId,te.anchors.push(he)}}),L.tables.forEach(V=>{const te=C(R);V.rId=te,R.push({Id:te,Type:c.Table,Target:`../tables/${V.target}`}),V.columns.forEach(oe=>{const{style:he}=oe;he&&(oe.dxfId=P.styles.addDxfStyle(he))})}),this.map.extLst.prepare(L,P)}render(L,P){L.openXml(h.StdDocAttributes),L.openNode("worksheet",A.WORKSHEET_ATTRIBUTES);const R=P.properties?{defaultRowHeight:P.properties.defaultRowHeight,dyDescent:P.properties.dyDescent,outlineLevelCol:P.properties.outlineLevelCol,outlineLevelRow:P.properties.outlineLevelRow}:void 0;P.properties&&P.properties.defaultColWidth&&(R.defaultColWidth=P.properties.defaultColWidth);const C={outlineProperties:P.properties&&P.properties.outlineProperties,tabColor:P.properties&&P.properties.tabColor,pageSetup:P.pageSetup&&P.pageSetup.fitToPage?{fitToPage:P.pageSetup.fitToPage}:void 0},S=P.pageSetup&&P.pageSetup.margins,D={showRowColHeaders:P.pageSetup&&P.pageSetup.showRowColHeaders,showGridLines:P.pageSetup&&P.pageSetup.showGridLines,horizontalCentered:P.pageSetup&&P.pageSetup.horizontalCentered,verticalCentered:P.pageSetup&&P.pageSetup.verticalCentered},V=P.sheetProtection;this.map.sheetPr.render(L,C),this.map.dimension.render(L,P.dimensions),this.map.sheetViews.render(L,P.views),this.map.sheetFormatPr.render(L,R),this.map.cols.render(L,P.cols),this.map.sheetData.render(L,P.rows),this.map.sheetProtection.render(L,V),this.map.autoFilter.render(L,P.autoFilter),this.map.mergeCells.render(L,P.mergeCells),this.map.conditionalFormatting.render(L,P.conditionalFormattings),this.map.dataValidations.render(L,P.dataValidations),this.map.hyperlinks.render(L,P.hyperlinks),this.map.printOptions.render(L,D),this.map.pageMargins.render(L,S),this.map.pageSetup.render(L,P.pageSetup),this.map.headerFooter.render(L,P.headerFooter),this.map.rowBreaks.render(L,P.rowBreaks),this.map.drawing.render(L,P.drawing),this.map.picture.render(L,P.background),this.map.tableParts.render(L,P.tables),this.map.extLst.render(L,P),P.rels&&P.rels.forEach(te=>{te.Type===c.VmlDrawing&&L.leafNode("legacyDrawing",{"r:id":te.Id})}),L.closeNode()}parseOpen(L){return this.parser?(this.parser.parseOpen(L),!0):L.name==="worksheet"?(s.each(this.map,P=>{P.reset()}),!0):(this.map[L.name]&&!this.ignoreNodes.includes(L.name)&&(this.parser=this.map[L.name],this.parser.parseOpen(L)),!0)}parseText(L){this.parser&&this.parser.parseText(L)}parseClose(L){if(this.parser)return this.parser.parseClose(L)||(this.parser=void 0),!0;switch(L){case"worksheet":{const P=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(P.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(P.outlineProperties=this.map.sheetPr.model.outlineProperties);const R={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},C=Object.assign(R,this.map.pageSetup.model,this.map.printOptions.model),S=E(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:P,views:this.map.sheetViews.model,pageSetup:C,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:S},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(L,P){const R=(L.relationships||[]).reduce((S,D)=>{if(S[D.Id]=D,D.Type===c.Comments&&(L.comments=P.comments[D.Target].comments),D.Type===c.VmlDrawing&&L.comments&&L.comments.length){const V=P.vmlDrawings[D.Target].comments;L.comments.forEach((te,oe)=>{te.note=Object.assign({},te.note,V[oe])})}return S},{});if(P.commentsMap=(L.comments||[]).reduce((S,D)=>(D.ref&&(S[D.ref]=D),S),{}),P.hyperlinkMap=(L.hyperlinks||[]).reduce((S,D)=>(D.rId&&(S[D.address]=R[D.rId].Target),S),{}),P.formulae={},L.rows=L.rows&&L.rows.filter(Boolean)||[],L.rows.forEach(S=>{S.cells=S.cells&&S.cells.filter(Boolean)||[]}),this.map.cols.reconcile(L.cols,P),this.map.sheetData.reconcile(L.rows,P),this.map.conditionalFormatting.reconcile(L.conditionalFormattings,P),L.media=[],L.drawing){const D=R[L.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(D){const V=D[1];P.drawings[V].anchors.forEach(oe=>{if(oe.medium){const he={type:"image",imageId:oe.medium.index,range:oe.range,hyperlinks:oe.picture.hyperlinks};L.media.push(he)}})}}const C=L.background&&R[L.background.rId];if(C){const S=C.Target.split("/media/")[1],D=P.mediaIndex&&P.mediaIndex[S];D!==void 0&&L.media.push({type:"background",imageId:D})}L.tables=(L.tables||[]).map(S=>{const D=R[S.rId];return P.tables[D.Target]}),delete L.relationships,delete L.hyperlinks,delete L.comments}}A.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},n.exports=A},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.tag=c.tag,this.attr=c.attr}render(c,a){a&&(c.openNode(this.tag),c.closeNode())}parseOpen(c){c.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],117:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.tag=c.tag,this.attr=c.attr,this.attrs=c.attrs,this._format=c.format||function(a){try{return Number.isNaN(a.getTime())?"":a.toISOString()}catch{return""}},this._parse=c.parse||function(a){return new Date(a)}}render(c,a){a&&(c.openNode(this.tag),this.attrs&&c.addAttributes(this.attrs),this.attr?c.addAttribute(this.attr,this._format(a)):c.writeText(this._format(a)),c.closeNode())}parseOpen(c){c.name===this.tag&&(this.attr?this.model=this._parse(c.attributes[this.attr]):this.text=[])}parseText(c){this.attr||this.text.push(c)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}n.exports=o},{"../base-xform":32}],118:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.tag=c.tag,this.attr=c.attr,this.attrs=c.attrs,this.zero=c.zero}render(c,a){(a||this.zero)&&(c.openNode(this.tag),this.attrs&&c.addAttributes(this.attrs),this.attr?c.addAttribute(this.attr,a):c.writeText(a),c.closeNode())}parseOpen(c){return c.name===this.tag?(this.attr?this.model=parseInt(c.attributes[this.attr],10):this.text=[],!0):!1}parseText(c){this.attr||this.text.push(c)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}n.exports=o},{"../base-xform":32}],119:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.tag=c.tag,this.attr=c.attr,this.attrs=c.attrs}render(c,a){a!==void 0&&(c.openNode(this.tag),this.attrs&&c.addAttributes(this.attrs),this.attr?c.addAttribute(this.attr,a):c.writeText(a),c.closeNode())}parseOpen(c){c.name===this.tag&&(this.attr?this.model=c.attributes[this.attr]:this.text=[])}parseText(c){this.attr||this.text.push(c)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}n.exports=o},{"../base-xform":32}],120:[function(e,n,i){const s=e("./base-xform"),o=e("../../utils/xml-stream");function h(a,f){a.openNode(f.tag,f.$),f.c&&f.c.forEach(l=>{h(a,l)}),f.t&&a.writeText(f.t),a.closeNode()}class c extends s{constructor(f){super(),this._model=f}render(f){if(!this._xml){const l=new o;h(l,this._model),this._xml=l.xml}f.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(f){switch(f){case this._model.tag:return!1;default:return!0}}}n.exports=c},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,n,i){const s=e("./text-xform"),o=e("./rich-text-xform"),h=e("../base-xform");class c extends h{constructor(){super(),this.map={r:new o,t:new s}}get tag(){return"rPh"}render(f,l){if(f.openNode(this.tag,{sb:l.sb||0,eb:l.eb||0}),l&&l.hasOwnProperty("richText")&&l.richText){const{r:u}=this.map;l.richText.forEach(p=>{u.render(f,p)})}else l&&this.map.t.render(f,l.text);f.closeNode()}parseOpen(f){const{name:l}=f;return this.parser?(this.parser.parseOpen(f),!0):l===this.tag?(this.model={sb:parseInt(f.attributes.sb,10),eb:parseInt(f.attributes.eb,10)},!0):(this.parser=this.map[l],this.parser?(this.parser.parseOpen(f),!0):!1)}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser){if(!this.parser.parseClose(f)){switch(f){case"r":{let l=this.model.richText;l||(l=this.model.richText=[]),l.push(this.parser.model);break}case"t":this.model.text=this.parser.model;break}this.parser=void 0}return!0}switch(f){case this.tag:return!1;default:return!0}}}n.exports=c},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,n,i){const s=e("./text-xform"),o=e("../style/font-xform"),h=e("../base-xform");class c extends h{constructor(f){super(),this.model=f}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new s)}get fontXform(){return this._fontXform||(this._fontXform=new o(c.FONT_OPTIONS))}render(f,l){l=l||this.model,f.openNode("r"),l.font&&this.fontXform.render(f,l.font),this.textXform.render(f,l.text),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(f),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(f),!0;default:return!1}}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){switch(f){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(f),!0}}}c.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},n.exports=c},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,n,i){const s=e("./text-xform"),o=e("./rich-text-xform"),h=e("./phonetic-text-xform"),c=e("../base-xform");class a extends c{constructor(l){super(),this.model=l,this.map={r:new o,t:new s,rPh:new h}}get tag(){return"si"}render(l,u){l.openNode(this.tag),u&&u.hasOwnProperty("richText")&&u.richText?u.richText.length?u.richText.forEach(p=>{this.map.r.render(l,p)}):this.map.t.render(l,""):u!=null&&this.map.t.render(l,u),l.closeNode()}parseOpen(l){const{name:u}=l;return this.parser?(this.parser.parseOpen(l),!0):u===this.tag?(this.model={},!0):(this.parser=this.map[u],this.parser?(this.parser.parseOpen(l),!0):!1)}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser){if(!this.parser.parseClose(l)){switch(l){case"r":{let u=this.model.richText;u||(u=this.model.richText=[]),u.push(this.parser.model);break}case"t":this.model=this.parser.model;break}this.parser=void 0}return!0}switch(l){case this.tag:return!1;default:return!0}}}n.exports=a},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("./shared-string-xform");class c extends o{constructor(f){super(),this.model=f||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new h)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(f){return this.model.values[f]}add(f){return f.richText?this.addRichText(f):this.addText(f)}addText(f){let l=this.hash[f];return l===void 0&&(l=this.hash[f]=this.model.values.length,this.model.values.push(f)),this.model.count++,l}addRichText(f){const l=this.sharedStringXform.toXml(f);let u=this.rich[l];return u===void 0&&(u=this.rich[l]=this.model.values.length,this.model.values.push(f)),this.model.count++,u}render(f,l){l=l||this._values,f.openXml(s.StdDocAttributes),f.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:l.count,uniqueCount:l.values.length});const u=this.sharedStringXform;l.values.forEach(p=>{u.render(f,p)}),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(f),!0;default:throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(f)}`)}}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){if(this.parser)return this.parser.parseClose(f)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(f){case"sst":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${f}`)}}}n.exports=c},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"t"}render(c,a){c.openNode("t"),/^\s|\n|\s$/.test(a)&&c.addAttribute("xml:space","preserve"),c.writeText(a),c.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(c,a)=>String.fromCharCode(parseInt(a,16)))}parseOpen(c){switch(c.name){case"t":return this._text=[],!0;default:return!1}}parseText(c){this._text.push(c)}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],126:[function(e,n,i){const s=e("../../../doc/enums"),o=e("../../../utils/utils"),h=e("../base-xform"),c={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((l,u)=>(l[u]=!0,l),{}),horizontal(l){return this.horizontalValues[l]?l:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((l,u)=>(l[u]=!0,l),{}),vertical(l){return l==="middle"?"center":this.verticalValues[l]?l:void 0},wrapText(l){return l?!0:void 0},shrinkToFit(l){return l?!0:void 0},textRotation(l){switch(l){case"vertical":return l;default:return l=o.validInt(l),l>=-90&&l<=90?l:void 0}},indent(l){return l=o.validInt(l),Math.max(0,l)},readingOrder(l){switch(l){case"ltr":return s.ReadingOrder.LeftToRight;case"rtl":return s.ReadingOrder.RightToLeft;default:return}}},a={toXml(l){if(l=c.textRotation(l),l){if(l==="vertical")return 255;const u=Math.round(l);if(u>=0&&u<=90)return u;if(u<0&&u>=-90)return 90-u}},toModel(l){const u=o.validInt(l);if(u!==void 0){if(u===255)return"vertical";if(u>=0&&u<=90)return u;if(u>90&&u<=180)return 90-u}}};class f extends h{get tag(){return"alignment"}render(u,p){u.addRollback(),u.openNode("alignment");let m=!1;function d(v,x){x&&(u.addAttribute(v,x),m=!0)}d("horizontal",c.horizontal(p.horizontal)),d("vertical",c.vertical(p.vertical)),d("wrapText",c.wrapText(p.wrapText)?"1":!1),d("shrinkToFit",c.shrinkToFit(p.shrinkToFit)?"1":!1),d("indent",c.indent(p.indent)),d("textRotation",a.toXml(p.textRotation)),d("readingOrder",c.readingOrder(p.readingOrder)),u.closeNode(),m?u.commit():u.rollback()}parseOpen(u){const p={};let m=!1;function d(v,x,g){v&&(p[x]=g,m=!0)}d(u.attributes.horizontal,"horizontal",u.attributes.horizontal),d(u.attributes.vertical,"vertical",u.attributes.vertical==="center"?"middle":u.attributes.vertical),d(u.attributes.wrapText,"wrapText",o.parseBoolean(u.attributes.wrapText)),d(u.attributes.shrinkToFit,"shrinkToFit",o.parseBoolean(u.attributes.shrinkToFit)),d(u.attributes.indent,"indent",parseInt(u.attributes.indent,10)),d(u.attributes.textRotation,"textRotation",a.toModel(u.attributes.textRotation)),d(u.attributes.readingOrder,"readingOrder",u.attributes.readingOrder==="2"?"rtl":"ltr"),this.model=m?p:null}parseText(){}parseClose(){return!1}}n.exports=f},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,n,i){const s=e("../base-xform"),o=e("../../../utils/utils"),h=e("./color-xform");class c extends s{constructor(l){super(),this.name=l,this.map={color:new h}}get tag(){return this.name}render(l,u,p){const m=u&&u.color||p||this.defaultColor;l.openNode(this.name),u&&u.style&&(l.addAttribute("style",u.style),m&&this.map.color.render(l,m)),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.name:{const{style:u}=l.attributes;return u?this.model={style:u}:this.model=void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(l),!0;default:return!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.parser=void 0),!0):(l===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(l){return c.validStyleValues[l]}}c.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((f,l)=>(f[l]=!0,f),{});class a extends s{constructor(){super(),this.map={top:new c("top"),left:new c("left"),bottom:new c("bottom"),right:new c("right"),diagonal:new c("diagonal")}}render(l,u){const{color:p}=u;l.openNode("border"),u.diagonal&&u.diagonal.style&&(u.diagonal.up&&l.addAttribute("diagonalUp","1"),u.diagonal.down&&l.addAttribute("diagonalDown","1"));function m(d,v){d&&!d.color&&u.color&&(d={...d,color:u.color}),v.render(l,d,p)}m(u.left,this.map.left),m(u.right,this.map.right),m(u.top,this.map.top),m(u.bottom,this.map.bottom),m(u.diagonal,this.map.diagonal),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"border":return this.reset(),this.diagonalUp=o.parseBoolean(l.attributes.diagonalUp),this.diagonalDown=o.parseBoolean(l.attributes.diagonalDown),!0;default:return this.parser=this.map[l.name],this.parser?(this.parser.parseOpen(l),!0):!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.parser=void 0),!0;if(l==="border"){const u=this.model={},p=function(m,d,v){d&&(v&&Object.assign(d,v),u[m]=d)};p("left",this.map.left.model),p("right",this.map.right.model),p("top",this.map.top.model),p("bottom",this.map.bottom.model),p("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}n.exports=a},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.name=c||"color"}get tag(){return this.name}render(c,a){return a?(c.openNode(this.name),a.argb?c.addAttribute("rgb",a.argb):a.theme!==void 0?(c.addAttribute("theme",a.theme),a.tint!==void 0&&c.addAttribute("tint",a.tint)):a.indexed!==void 0?c.addAttribute("indexed",a.indexed):c.addAttribute("auto","1"),c.closeNode(),!0):!1}parseOpen(c){return c.name===this.name?(c.attributes.rgb?this.model={argb:c.attributes.rgb}:c.attributes.theme?(this.model={theme:parseInt(c.attributes.theme,10)},c.attributes.tint&&(this.model.tint=parseFloat(c.attributes.tint))):c.attributes.indexed?this.model={indexed:parseInt(c.attributes.indexed,10)}:this.model=void 0,!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],129:[function(e,n,i){const s=e("../base-xform"),o=e("./alignment-xform"),h=e("./border-xform"),c=e("./fill-xform"),a=e("./font-xform"),f=e("./numfmt-xform"),l=e("./protection-xform");class u extends s{constructor(){super(),this.map={alignment:new o,border:new h,fill:new c,font:new a,numFmt:new f,protection:new l}}get tag(){return"dxf"}render(m,d){if(m.openNode(this.tag),d.font&&this.map.font.render(m,d.font),d.numFmt&&d.numFmtId){const v={id:d.numFmtId,formatCode:d.numFmt};this.map.numFmt.render(m,v)}d.fill&&this.map.fill.render(m,d.fill),d.alignment&&this.map.alignment.render(m,d.alignment),d.border&&this.map.border.render(m,d.border),d.protection&&this.map.protection.render(m,d.protection),m.closeNode()}parseOpen(m){if(this.parser)return this.parser.parseOpen(m),!0;switch(m.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[m.name],this.parser&&this.parser.parseOpen(m),!0}}parseText(m){this.parser&&this.parser.parseText(m)}parseClose(m){return this.parser?(this.parser.parseClose(m)||(this.parser=void 0),!0):m===this.tag?(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1):!0}}n.exports=u},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,n,i){const s=e("../base-xform"),o=e("./color-xform");class h extends s{constructor(){super(),this.map={color:new o}}get tag(){return"stop"}render(u,p){u.openNode("stop"),u.addAttribute("position",p.position),this.map.color.render(u,p.color),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"stop":return this.model={position:parseFloat(u.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(u),!0;default:return!1}}parseText(){}parseClose(u){return this.parser?(this.parser.parseClose(u)||(this.model.color=this.parser.model,this.parser=void 0),!0):!1}}class c extends s{constructor(){super(),this.map={fgColor:new o("fgColor"),bgColor:new o("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(u,p){u.openNode("patternFill"),u.addAttribute("patternType",p.pattern),p.fgColor&&this.map.fgColor.render(u,p.fgColor),p.bgColor&&this.map.bgColor.render(u,p.bgColor),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"patternFill":return this.model={type:"pattern",pattern:u.attributes.patternType},!0;default:return this.parser=this.map[u.name],this.parser?(this.parser.parseOpen(u),!0):!1}}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){return this.parser?(this.parser.parseClose(u)||(this.parser.model&&(this.model[u]=this.parser.model),this.parser=void 0),!0):!1}}class a extends s{constructor(){super(),this.map={stop:new h}}get name(){return"gradient"}get tag(){return"gradientFill"}render(u,p){switch(u.openNode("gradientFill"),p.gradient){case"angle":u.addAttribute("degree",p.degree);break;case"path":u.addAttribute("type","path"),p.center.left&&(u.addAttribute("left",p.center.left),p.center.right===void 0&&u.addAttribute("right",p.center.left)),p.center.right&&u.addAttribute("right",p.center.right),p.center.top&&(u.addAttribute("top",p.center.top),p.center.bottom===void 0&&u.addAttribute("bottom",p.center.top)),p.center.bottom&&u.addAttribute("bottom",p.center.bottom);break}const m=this.map.stop;p.stops.forEach(d=>{m.render(u,d)}),u.closeNode()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"gradientFill":{const p=this.model={stops:[]};return u.attributes.degree?(p.gradient="angle",p.degree=parseInt(u.attributes.degree,10)):u.attributes.type==="path"&&(p.gradient="path",p.center={left:u.attributes.left?parseFloat(u.attributes.left):0,top:u.attributes.top?parseFloat(u.attributes.top):0},u.attributes.right!==u.attributes.left&&(p.center.right=u.attributes.right?parseFloat(u.attributes.right):0),u.attributes.bottom!==u.attributes.top&&(p.center.bottom=u.attributes.bottom?parseFloat(u.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(u),!0;default:return!1}}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){return this.parser?(this.parser.parseClose(u)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0):!1}}class f extends s{constructor(){super(),this.map={patternFill:new c,gradientFill:new a}}get tag(){return"fill"}render(u,p){switch(u.addRollback(),u.openNode("fill"),p.type){case"pattern":this.map.patternFill.render(u,p);break;case"gradient":this.map.gradientFill.render(u,p);break;default:u.rollback();return}u.closeNode(),u.commit()}parseOpen(u){if(this.parser)return this.parser.parseOpen(u),!0;switch(u.name){case"fill":return this.model={},!0;default:return this.parser=this.map[u.name],this.parser?(this.parser.parseOpen(u),!0):!1}}parseText(u){this.parser&&this.parser.parseText(u)}parseClose(u){return this.parser?(this.parser.parseClose(u)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0):!1}validStyle(u){return f.validPatternValues[u]}}f.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((l,u)=>(l[u]=!0,l),{}),f.StopXform=h,f.PatternFillXform=c,f.GradientFillXform=a,n.exports=f},{"../base-xform":32,"./color-xform":128}],131:[function(e,n,i){const s=e("./color-xform"),o=e("../simple/boolean-xform"),h=e("../simple/integer-xform"),c=e("../simple/string-xform"),a=e("./underline-xform"),f=e("../../../utils/under-dash"),l=e("../base-xform");class u extends l{constructor(m){super(),this.options=m||u.OPTIONS,this.map={b:{prop:"bold",xform:new o({tag:"b",attr:"val"})},i:{prop:"italic",xform:new o({tag:"i",attr:"val"})},u:{prop:"underline",xform:new a},charset:{prop:"charset",xform:new h({tag:"charset",attr:"val"})},color:{prop:"color",xform:new s},condense:{prop:"condense",xform:new o({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new o({tag:"extend",attr:"val"})},family:{prop:"family",xform:new h({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new o({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new c({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new c({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new o({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new o({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new h({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new c({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(m,d){const{map:v}=this;m.openNode(this.options.tagName),f.each(this.map,(x,g)=>{v[g].xform.render(m,d[x.prop])}),m.closeNode()}parseOpen(m){if(this.parser)return this.parser.parseOpen(m),!0;if(this.map[m.name])return this.parser=this.map[m.name].xform,this.parser.parseOpen(m);switch(m.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(m){this.parser&&this.parser.parseText(m)}parseClose(m){if(this.parser&&!this.parser.parseClose(m)){const d=this.map[m];return this.parser.model&&(this.model[d.prop]=this.parser.model),this.parser=void 0,!0}switch(m){case this.options.tagName:return!1;default:return!0}}}u.OPTIONS={tagName:"font",fontNameTag:"name"},n.exports=u},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,n,i){const s=e("../../../utils/under-dash"),o=e("../../defaultnumformats"),h=e("../base-xform");function c(){const l={};return s.each(o,(u,p)=>{u.f&&(l[u.f]=parseInt(p,10))}),l}const a=c();class f extends h{constructor(u,p){super(),this.id=u,this.formatCode=p}get tag(){return"numFmt"}render(u,p){u.leafNode("numFmt",{numFmtId:p.id,formatCode:p.formatCode})}parseOpen(u){switch(u.name){case"numFmt":return this.model={id:parseInt(u.attributes.numFmtId,10),formatCode:u.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}f.getDefaultFmtId=function(u){return a[u]},f.getDefaultFmtCode=function(u){return o[u]&&o[u].f},n.exports=f},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,n,i){const s=e("../base-xform"),o={boolean(c,a){return c===void 0?a:c}};class h extends s{get tag(){return"protection"}render(a,f){a.addRollback(),a.openNode("protection");let l=!1;function u(p,m){m!==void 0&&(a.addAttribute(p,m),l=!0)}u("locked",o.boolean(f.locked,!0)?void 0:"0"),u("hidden",o.boolean(f.hidden,!1)?"1":void 0),a.closeNode(),l?a.commit():a.rollback()}parseOpen(a){const f={locked:a.attributes.locked!=="0",hidden:a.attributes.hidden==="1"},l=!f.locked||f.hidden;this.model=l?f:null}parseText(){}parseClose(){return!1}}n.exports=h},{"../base-xform":32}],134:[function(e,n,i){const s=e("../base-xform"),o=e("./alignment-xform"),h=e("./protection-xform");class c extends s{constructor(f){super(),this.xfId=!!(f&&f.xfId),this.map={alignment:new o,protection:new h}}get tag(){return"xf"}render(f,l){f.openNode("xf",{numFmtId:l.numFmtId||0,fontId:l.fontId||0,fillId:l.fillId||0,borderId:l.borderId||0}),this.xfId&&f.addAttribute("xfId",l.xfId||0),l.numFmtId&&f.addAttribute("applyNumberFormat","1"),l.fontId&&f.addAttribute("applyFont","1"),l.fillId&&f.addAttribute("applyFill","1"),l.borderId&&f.addAttribute("applyBorder","1"),l.alignment&&f.addAttribute("applyAlignment","1"),l.protection&&f.addAttribute("applyProtection","1"),l.alignment&&this.map.alignment.render(f,l.alignment),l.protection&&this.map.protection.render(f,l.protection),f.closeNode()}parseOpen(f){if(this.parser)return this.parser.parseOpen(f),!0;switch(f.name){case"xf":return this.model={numFmtId:parseInt(f.attributes.numFmtId,10),fontId:parseInt(f.attributes.fontId,10),fillId:parseInt(f.attributes.fillId,10),borderId:parseInt(f.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(f.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(f),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(f),!0;default:return!1}}parseText(f){this.parser&&this.parser.parseText(f)}parseClose(f){return this.parser?(this.parser.parseClose(f)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):f!=="xf"}}n.exports=c},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,n,i){const s=e("../../../doc/enums"),o=e("../../../utils/xml-stream"),h=e("../base-xform"),c=e("../static-xform"),a=e("../list-xform"),f=e("./font-xform"),l=e("./fill-xform"),u=e("./border-xform"),p=e("./numfmt-xform"),m=e("./style-xform"),d=e("./dxf-xform"),v=164;class x extends h{constructor(y){super(),this.map={numFmts:new a({tag:"numFmts",count:!0,childXform:new p}),fonts:new a({tag:"fonts",count:!0,childXform:new f,$:{"x14ac:knownFonts":1}}),fills:new a({tag:"fills",count:!0,childXform:new l}),borders:new a({tag:"borders",count:!0,childXform:new u}),cellStyleXfs:new a({tag:"cellStyleXfs",count:!0,childXform:new m}),cellXfs:new a({tag:"cellXfs",count:!0,childXform:new m({xfId:!0})}),dxfs:new a({tag:"dxfs",always:!0,count:!0,childXform:new d}),numFmt:new p,font:new f,fill:new l,border:new u,style:new m({xfId:!0}),cellStyles:x.STATIC_XFORMS.cellStyles,tableStyles:x.STATIC_XFORMS.tableStyles,extLst:x.STATIC_XFORMS.extLst},y&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(y,_){_=_||this.model,y.openXml(o.StdDocAttributes),y.openNode("styleSheet",x.STYLESHEET_ATTRIBUTES),this.index?(_.numFmts&&_.numFmts.length&&(y.openNode("numFmts",{count:_.numFmts.length}),_.numFmts.forEach(k=>{y.writeXml(k)}),y.closeNode()),_.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),y.openNode("fonts",{count:_.fonts.length,"x14ac:knownFonts":1}),_.fonts.forEach(k=>{y.writeXml(k)}),y.closeNode(),y.openNode("fills",{count:_.fills.length}),_.fills.forEach(k=>{y.writeXml(k)}),y.closeNode(),y.openNode("borders",{count:_.borders.length}),_.borders.forEach(k=>{y.writeXml(k)}),y.closeNode(),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),y.openNode("cellXfs",{count:_.styles.length}),_.styles.forEach(k=>{y.writeXml(k)}),y.closeNode()):(this.map.numFmts.render(y,_.numFmts),this.map.fonts.render(y,_.fonts),this.map.fills.render(y,_.fills),this.map.borders.render(y,_.borders),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(y,_.styles)),x.STATIC_XFORMS.cellStyles.render(y),this.map.dxfs.render(y,_.dxfs),x.STATIC_XFORMS.tableStyles.render(y),x.STATIC_XFORMS.extLst.render(y),y.closeNode()}parseOpen(y){if(this.parser)return this.parser.parseOpen(y),!0;switch(y.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[y.name],this.parser&&this.parser.parseOpen(y),!0}}parseText(y){this.parser&&this.parser.parseText(y)}parseClose(y){if(this.parser)return this.parser.parseClose(y)||(this.parser=void 0),!0;switch(y){case"styleSheet":{this.model={};const _=(k,F)=>{F.model&&F.model.length&&(this.model[k]=F.model)};if(_("numFmts",this.map.numFmts),_("fonts",this.map.fonts),_("fills",this.map.fills),_("borders",this.map.borders),_("styles",this.map.cellXfs),_("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const k=this.index.numFmt;this.model.numFmts.forEach(F=>{k[F.id]=F.formatCode})}return!1}default:return!0}}addStyleModel(y,_){if(!y)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(y))return this.weakMap.get(y);const k={};if(_=_||s.ValueType.Number,y.numFmt)k.numFmtId=this._addNumFmtStr(y.numFmt);else switch(_){case s.ValueType.Number:k.numFmtId=this._addNumFmtStr("General");break;case s.ValueType.Date:k.numFmtId=this._addNumFmtStr("mm-dd-yy");break}y.font&&(k.fontId=this._addFont(y.font)),y.border&&(k.borderId=this._addBorder(y.border)),y.fill&&(k.fillId=this._addFill(y.fill)),y.alignment&&(k.alignment=y.alignment),y.protection&&(k.protection=y.protection);const F=this._addStyle(k);return this.weakMap&&this.weakMap.set(y,F),F}getStyleModel(y){const _=this.model.styles[y];if(!_)return null;let k=this.index.model[y];if(k)return k;if(k=this.index.model[y]={},_.numFmtId){const O=this.index.numFmt[_.numFmtId]||p.getDefaultFmtCode(_.numFmtId);O&&(k.numFmt=O)}function F(O,N,U){if(U||U===0){const z=N[U];z&&(k[O]=z)}}return F("font",this.model.fonts,_.fontId),F("border",this.model.borders,_.borderId),F("fill",this.model.fills,_.fillId),_.alignment&&(k.alignment=_.alignment),_.protection&&(k.protection=_.protection),k}addDxfStyle(y){return y.numFmt&&(y.numFmtId=this._addNumFmtStr(y.numFmt)),this.model.dxfs.push(y),this.model.dxfs.length-1}getDxfStyle(y){return this.model.dxfs[y]}_addStyle(y){const _=this.map.style.toXml(y);let k=this.index.style[_];return k===void 0&&(k=this.index.style[_]=this.model.styles.length,this.model.styles.push(_)),k}_addNumFmtStr(y){let _=p.getDefaultFmtId(y);if(_!==void 0||(_=this.index.numFmt[y],_!==void 0))return _;_=this.index.numFmt[y]=v+this.model.numFmts.length;const k=this.map.numFmt.toXml({id:_,formatCode:y});return this.model.numFmts.push(k),_}_addFont(y){const _=this.map.font.toXml(y);let k=this.index.font[_];return k===void 0&&(k=this.index.font[_]=this.model.fonts.length,this.model.fonts.push(_)),k}_addBorder(y){const _=this.map.border.toXml(y);let k=this.index.border[_];return k===void 0&&(k=this.index.border[_]=this.model.borders.length,this.model.borders.push(_)),k}_addFill(y){const _=this.map.fill.toXml(y);let k=this.index.fill[_];return k===void 0&&(k=this.index.fill[_]=this.model.fills.length,this.model.fills.push(_)),k}}x.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},x.STATIC_XFORMS={cellStyles:new c({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new c({tag:"dxfs",$:{count:0}}),tableStyles:new c({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new c({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};class g extends x{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(y){return y.autodrain(),Promise.resolve()}addStyleModel(y,_){switch(_){case s.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const y={numFmtId:p.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(y)}return this._dateStyleId}getStyleModel(){return{}}}x.Mock=g,n.exports=x},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,n,i){const s=e("../base-xform");class o extends s{constructor(c){super(),this.model=c}get tag(){return"u"}render(c,a){if(a=a||this.model,a===!0)c.leafNode("u");else{const f=o.Attributes[a];f&&c.leafNode("u",f)}}parseOpen(c){c.name==="u"&&(this.model=c.attributes.val||!0)}parseText(){}parseClose(){return!1}}o.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},n.exports=o},{"../base-xform":32}],137:[function(e,n,i){const s=e("../base-xform"),o=e("./filter-column-xform");class h extends s{constructor(){super(),this.map={filterColumn:new o}}get tag(){return"autoFilter"}prepare(a){a.columns.forEach((f,l)=>{this.map.filterColumn.prepare(f,{index:l})})}render(a,f){return a.openNode(this.tag,{ref:f.autoFilterRef}),f.columns.forEach(l=>{this.map.filterColumn.render(a,l)}),a.closeNode(),!0}parseOpen(a){if(this.parser)return this.parser.parseOpen(a),!0;switch(a.name){case this.tag:return this.model={autoFilterRef:a.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[a.name],this.parser)return this.parseOpen(a),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(a)}`)}}parseText(a){this.parser&&this.parser.parseText(a)}parseClose(a){if(this.parser)return this.parser.parseClose(a)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(a){case this.tag:return!1;default:throw new Error(`Unexpected xml node in parseClose: ${a}`)}}}n.exports=h},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"customFilter"}render(c,a){c.leafNode(this.tag,{val:a.val,operator:a.operator})}parseOpen(c){return c.name===this.tag?(this.model={val:c.attributes.val,operator:c.attributes.operator},!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],139:[function(e,n,i){const s=e("../base-xform"),o=e("../list-xform"),h=e("./custom-filter-xform"),c=e("./filter-xform");class a extends s{constructor(){super(),this.map={customFilters:new o({tag:"customFilters",count:!1,empty:!0,childXform:new h}),filters:new o({tag:"filters",count:!1,empty:!0,childXform:new c})}}get tag(){return"filterColumn"}prepare(l,u){l.colId=u.index.toString()}render(l,u){return u.customFilters?(l.openNode(this.tag,{colId:u.colId,hiddenButton:u.filterButton?"0":"1"}),this.map.customFilters.render(l,u.customFilters),l.closeNode(),!0):(l.leafNode(this.tag,{colId:u.colId,hiddenButton:u.filterButton?"0":"1"}),!0)}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;const{attributes:u}=l;switch(l.name){case this.tag:return this.model={filterButton:u.hiddenButton==="0"},!0;default:if(this.parser=this.map[l.name],this.parser)return this.parseOpen(l),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(l)}`)}}parseText(){}parseClose(l){if(this.parser)return this.parser.parseClose(l)||(this.parser=void 0),!0;switch(l){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}n.exports=a},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"filter"}render(c,a){c.leafNode(this.tag,{val:a.val})}parseOpen(c){return c.name===this.tag?(this.model={val:c.attributes.val},!0):!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],141:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"tableColumn"}prepare(c,a){c.id=a.index+1}render(c,a){return c.leafNode(this.tag,{id:a.id.toString(),name:a.name,totalsRowLabel:a.totalsRowLabel,totalsRowFunction:a.totalsRowFunction,dxfId:a.dxfId}),!0}parseOpen(c){if(c.name===this.tag){const{attributes:a}=c;return this.model={name:a.name,totalsRowLabel:a.totalsRowLabel,totalsRowFunction:a.totalsRowFunction,dxfId:a.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],142:[function(e,n,i){const s=e("../base-xform");class o extends s{get tag(){return"tableStyleInfo"}render(c,a){return c.leafNode(this.tag,{name:a.theme?a.theme:void 0,showFirstColumn:a.showFirstColumn?"1":"0",showLastColumn:a.showLastColumn?"1":"0",showRowStripes:a.showRowStripes?"1":"0",showColumnStripes:a.showColumnStripes?"1":"0"}),!0}parseOpen(c){if(c.name===this.tag){const{attributes:a}=c;return this.model={theme:a.name?a.name:null,showFirstColumn:a.showFirstColumn==="1",showLastColumn:a.showLastColumn==="1",showRowStripes:a.showRowStripes==="1",showColumnStripes:a.showColumnStripes==="1"},!0}return!1}parseText(){}parseClose(){return!1}}n.exports=o},{"../base-xform":32}],143:[function(e,n,i){const s=e("../../../utils/xml-stream"),o=e("../base-xform"),h=e("../list-xform"),c=e("./auto-filter-xform"),a=e("./table-column-xform"),f=e("./table-style-info-xform");class l extends o{constructor(){super(),this.map={autoFilter:new c,tableColumns:new h({tag:"tableColumns",count:!0,empty:!0,childXform:new a}),tableStyleInfo:new f}}prepare(p,m){this.map.autoFilter.prepare(p),this.map.tableColumns.prepare(p.columns,m)}get tag(){return"table"}render(p,m){p.openXml(s.StdDocAttributes),p.openNode(this.tag,{...l.TABLE_ATTRIBUTES,id:m.id,name:m.name,displayName:m.displayName||m.name,ref:m.tableRef,totalsRowCount:m.totalsRow?"1":void 0,totalsRowShown:m.totalsRow?void 0:"1",headerRowCount:m.headerRow?"1":"0"}),this.map.autoFilter.render(p,m),this.map.tableColumns.render(p,m.columns),this.map.tableStyleInfo.render(p,m.style),p.closeNode()}parseOpen(p){if(this.parser)return this.parser.parseOpen(p),!0;const{name:m,attributes:d}=p;switch(m){case this.tag:this.reset(),this.model={name:d.name,displayName:d.displayName||d.name,tableRef:d.ref,totalsRow:d.totalsRowCount==="1",headerRow:d.headerRowCount==="1"};break;default:this.parser=this.map[p.name],this.parser&&this.parser.parseOpen(p);break}return!0}parseText(p){this.parser&&this.parser.parseText(p)}parseClose(p){if(this.parser)return this.parser.parseClose(p)||(this.parser=void 0),!0;switch(p){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((m,d)=>{this.model.columns[d].filterButton=m.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(p,m){p.columns.forEach(d=>{d.dxfId!==void 0&&(d.style=m.styles.getDxfStyle(d.dxfId))})}}l.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},n.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,n,i){(function(s,o){(function(){const h=e("fs"),c=e("jszip"),{PassThrough:a}=e("readable-stream"),f=e("../utils/zip-stream"),l=e("../utils/stream-buf"),u=e("../utils/utils"),p=e("../utils/xml-stream"),{bufferToString:m}=e("../utils/browser-buffer-decode"),d=e("./xform/style/styles-xform"),v=e("./xform/core/core-xform"),x=e("./xform/strings/shared-strings-xform"),g=e("./xform/core/relationships-xform"),w=e("./xform/core/content-types-xform"),y=e("./xform/core/app-xform"),_=e("./xform/book/workbook-xform"),k=e("./xform/sheet/worksheet-xform"),F=e("./xform/drawing/drawing-xform"),O=e("./xform/table/table-xform"),N=e("./xform/comment/comments-xform"),U=e("./xform/comment/vml-notes-xform"),z=e("./xml/theme1");function W(J,H){return new Promise((I,M)=>{h.readFile(J,H,(E,A)=>{E?M(E):I(A)})})}class X{constructor(H){this.workbook=H}async readFile(H,I){if(!await u.fs.exists(H))throw new Error(`File not found: ${H}`);const M=h.createReadStream(H);try{const E=await this.read(M,I);return M.close(),E}catch(E){throw M.close(),E}}parseRels(H){return new g().parseStream(H)}parseWorkbook(H){return new _().parseStream(H)}parseSharedStrings(H){return new x().parseStream(H)}reconcile(H,I){const M=new _,E=new k(I),A=new F,B=new O;M.reconcile(H);const L={media:H.media,mediaIndex:H.mediaIndex};Object.keys(H.drawings).forEach(C=>{const S=H.drawings[C],D=H.drawingRels[C];D&&(L.rels=D.reduce((V,te)=>(V[te.Id]=te,V),{}),(S.anchors||[]).forEach(V=>{const te=V.picture&&V.picture.hyperlinks;te&&L.rels[te.rId]&&(te.hyperlink=L.rels[te.rId].Target,delete te.rId)}),A.reconcile(S,L))});const P={styles:H.styles};Object.values(H.tables).forEach(C=>{B.reconcile(C,P)});const R={styles:H.styles,sharedStrings:H.sharedStrings,media:H.media,mediaIndex:H.mediaIndex,date1904:H.properties&&H.properties.date1904,drawings:H.drawings,comments:H.comments,tables:H.tables,vmlDrawings:H.vmlDrawings};H.worksheets.forEach(C=>{C.relationships=H.worksheetRels[C.sheetNo],E.reconcile(C,R)}),delete H.worksheetHash,delete H.worksheetRels,delete H.globalRels,delete H.sharedStrings,delete H.workbookRels,delete H.sheetDefs,delete H.styles,delete H.mediaIndex,delete H.drawings,delete H.drawingRels,delete H.vmlDrawings}async _processWorksheetEntry(H,I,M,E,A){const L=await new k(E).parseStream(H);L.sheetNo=M,I.worksheetHash[A]=L,I.worksheets.push(L)}async _processCommentEntry(H,I,M){const A=await new N().parseStream(H);I.comments[`../${M}.xml`]=A}async _processTableEntry(H,I,M){const A=await new O().parseStream(H);I.tables[`../tables/${M}.xml`]=A}async _processWorksheetRelsEntry(H,I,M){const A=await new g().parseStream(H);I.worksheetRels[M]=A}async _processMediaEntry(H,I,M){const E=M.lastIndexOf(".");if(E>=1){const A=M.substr(E+1),B=M.substr(0,E);await new Promise((L,P)=>{const R=new l;R.on("finish",()=>{I.mediaIndex[M]=I.media.length,I.mediaIndex[B]=I.media.length;const C={type:"image",name:B,extension:A,buffer:R.toBuffer()};I.media.push(C),L()}),H.on("error",C=>{P(C)}),H.pipe(R)})}}async _processDrawingEntry(H,I,M){const A=await new F().parseStream(H);I.drawings[M]=A}async _processDrawingRelsEntry(H,I,M){const A=await new g().parseStream(H);I.drawingRels[M]=A}async _processVmlDrawingEntry(H,I,M){const A=await new U().parseStream(H);I.vmlDrawings[`../drawings/${M}.vml`]=A}async _processThemeEntry(H,I,M){await new Promise((E,A)=>{const B=new l;H.on("error",A),B.on("error",A),B.on("finish",()=>{I.themes[M]=B.read().toString(),E()}),H.pipe(B)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(H,I){!H[Symbol.asyncIterator]&&H.pipe&&(H=H.pipe(new a));const M=[];for await(const E of H)M.push(E);return this.load(o.concat(M),I)}async load(H,I){let M;I&&I.base64?M=o.from(H.toString(),"base64"):M=H;const E={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},A=await c.loadAsync(M);for(const B of Object.values(A.files))if(!B.dir){let L=B.name;L[0]==="/"&&(L=L.substr(1));let P;if(L.match(/xl\/media\//)||L.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))P=new a,P.write(await B.async("nodebuffer"));else{P=new a({writableObjectMode:!0,readableObjectMode:!0});let R;s.browser?R=m(await B.async("nodebuffer")):R=await B.async("string");const C=16*1024;for(let S=0;S{if(M.type==="image"){const E=`xl/media/${M.name}.${M.extension}`;if(M.filename){const A=await W(M.filename);return H.append(A,{name:E})}if(M.buffer)return H.append(M.buffer,{name:E});if(M.base64){const A=M.base64,B=A.substring(A.indexOf(",")+1);return H.append(B,{name:E,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(H,I){const M=new F,E=new g;I.worksheets.forEach(A=>{const{drawing:B}=A;if(B){M.prepare(B,{});let L=M.toXml(B);H.append(L,{name:`xl/drawings/${B.name}.xml`}),L=E.toXml(B.rels),H.append(L,{name:`xl/drawings/_rels/${B.name}.xml.rels`})}})}addTables(H,I){const M=new O;I.worksheets.forEach(E=>{const{tables:A}=E;A.forEach(B=>{M.prepare(B,{});const L=M.toXml(B);H.append(L,{name:`xl/tables/${B.target}`})})})}async addContentTypes(H,I){const E=new w().toXml(I);H.append(E,{name:"[Content_Types].xml"})}async addApp(H,I){const E=new y().toXml(I);H.append(E,{name:"docProps/app.xml"})}async addCore(H,I){const M=new v;H.append(M.toXml(I),{name:"docProps/core.xml"})}async addThemes(H,I){const M=I.themes||{theme1:z};Object.keys(M).forEach(E=>{const A=M[E],B=`xl/theme/${E}.xml`;H.append(A,{name:B})})}async addOfficeRels(H){const M=new g().toXml([{Id:"rId1",Type:X.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:X.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:X.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);H.append(M,{name:"_rels/.rels"})}async addWorkbookRels(H,I){let M=1;const E=[{Id:`rId${M++}`,Type:X.RelType.Styles,Target:"styles.xml"},{Id:`rId${M++}`,Type:X.RelType.Theme,Target:"theme/theme1.xml"}];I.sharedStrings.count&&E.push({Id:`rId${M++}`,Type:X.RelType.SharedStrings,Target:"sharedStrings.xml"}),I.worksheets.forEach(L=>{L.rId=`rId${M++}`,E.push({Id:L.rId,Type:X.RelType.Worksheet,Target:`worksheets/sheet${L.id}.xml`})});const B=new g().toXml(E);H.append(B,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(H,I){I.sharedStrings&&I.sharedStrings.count&&H.append(I.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(H,I){const{xml:M}=I.styles;M&&H.append(M,{name:"xl/styles.xml"})}async addWorkbook(H,I){const M=new _;H.append(M.toXml(I),{name:"xl/workbook.xml"})}async addWorksheets(H,I){const M=new k,E=new g,A=new N,B=new U;I.worksheets.forEach(L=>{let P=new p;M.render(P,L),H.append(P.xml,{name:`xl/worksheets/sheet${L.id}.xml`}),L.rels&&L.rels.length&&(P=new p,E.render(P,L.rels),H.append(P.xml,{name:`xl/worksheets/_rels/sheet${L.id}.xml.rels`})),L.comments.length>0&&(P=new p,A.render(P,L),H.append(P.xml,{name:`xl/comments${L.id}.xml`}),P=new p,B.render(P,L),H.append(P.xml,{name:`xl/drawings/vmlDrawing${L.id}.vml`}))})}_finalize(H){return new Promise((I,M)=>{H.on("finish",()=>{I(this)}),H.on("error",M),H.finalize()})}prepareModel(H,I){H.creator=H.creator||"ExcelJS",H.lastModifiedBy=H.lastModifiedBy||"ExcelJS",H.created=H.created||new Date,H.modified=H.modified||new Date,H.useSharedStrings=I.useSharedStrings!==void 0?I.useSharedStrings:!0,H.useStyles=I.useStyles!==void 0?I.useStyles:!0,H.sharedStrings=new x,H.styles=H.useStyles?new d(!0):new d.Mock;const M=new _,E=new k;M.prepare(H);const A={sharedStrings:H.sharedStrings,styles:H.styles,date1904:H.properties.date1904,drawingsCount:0,media:H.media};A.drawings=H.drawings=[],A.commentRefs=H.commentRefs=[];let B=0;H.tables=[],H.worksheets.forEach(L=>{L.tables.forEach(P=>{B++,P.target=`table${B}.xml`,P.id=B,H.tables.push(P)}),E.prepare(L,A)})}async write(H,I){I=I||{};const{model:M}=this.workbook,E=new f.ZipWriter(I.zip);return E.pipe(H),this.prepareModel(M,I),await this.addContentTypes(E,M),await this.addOfficeRels(E,M),await this.addWorkbookRels(E,M),await this.addWorksheets(E,M),await this.addSharedStrings(E,M),await this.addDrawings(E,M),await this.addTables(E,M),await Promise.all([this.addThemes(E,M),this.addStyles(E,M)]),await this.addMedia(E,M),await Promise.all([this.addApp(E,M),this.addCore(E,M)]),await this.addWorkbook(E,M),this._finalize(E)}writeFile(H,I){const M=h.createWriteStream(H);return new Promise((E,A)=>{M.on("finish",()=>{E()}),M.on("error",B=>{A(B)}),this.write(M,I).then(()=>{M.end()}).catch(B=>{A(B)})})}async writeBuffer(H){const I=new l;return await this.write(I,H),I.read()}}X.RelType=e("./rel-type"),n.exports=X}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(e,n,i){n.exports=` + `},{}],146:[function(e,n,i){(function(s){(function(){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvFormatterStream=void 0;const o=e("stream"),h=e("./formatter");class c extends o.Transform{constructor(f){super({writableObjectMode:f.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=f,this.rowFormatter=new h.RowFormatter(f),this.hasWrittenBOM=!f.writeBOM}transform(f){return this.rowFormatter.rowTransform=f,this}_transform(f,l,u){let p=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(f,(m,d)=>m?(p=!0,u(m)):(d&&d.forEach(v=>{this.push(s.from(v,"utf8"))}),p=!0,u()))}catch(m){if(p)throw m;u(m)}}_flush(f){this.rowFormatter.finish((l,u)=>l?f(l):(u&&u.forEach(p=>{this.push(s.from(p,"utf8"))}),f()))}}i.CsvFormatterStream=c}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.FormatterOptions=void 0;class s{constructor(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var c;this.objectMode=!0,this.delimiter=",",this.rowDelimiter=` +`,this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\uFEFF",this.alwaysWriteHeaders=!1,Object.assign(this,h||{}),typeof(h==null?void 0:h.quoteHeaders)>"u"&&(this.quoteHeaders=this.quoteColumns),(h==null?void 0:h.quote)===!0?this.quote='"':(h==null?void 0:h.quote)===!1&&(this.quote=""),typeof(h==null?void 0:h.escape)!="string"&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&((c=h.writeHeaders)!==null&&c!==void 0?c:!0),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}i.FormatterOptions=s},{}],148:[function(e,n,i){var s=function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(i,"__esModule",{value:!0}),i.FieldFormatter=void 0;const o=s(e("lodash.isboolean")),h=s(e("lodash.isnil")),c=s(e("lodash.escaperegexp"));class a{constructor(l){this._headers=null,this.formatterOptions=l,l.headers!==null&&(this.headers=l.headers),this.REPLACE_REGEXP=new RegExp(l.quote,"g");const u=`[${l.delimiter}${c.default(l.rowDelimiter)}|\r| +]`;this.ESCAPE_REGEXP=new RegExp(u)}set headers(l){this._headers=l}shouldQuote(l,u){const p=u?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return o.default(p)?p:Array.isArray(p)?p[l]:this._headers!==null?p[this._headers[l]]:!1}format(l,u,p){const m=`${h.default(l)?"":l}`.replace(/\0/g,""),{formatterOptions:d}=this;return d.quote!==""&&m.indexOf(d.quote)!==-1?this.quoteField(m.replace(this.REPLACE_REGEXP,d.escapedQuote)):m.search(this.ESCAPE_REGEXP)!==-1||this.shouldQuote(u,p)?this.quoteField(m):m}quoteField(l){const{quote:u}=this.formatterOptions;return`${u}${l}${u}`}}i.FieldFormatter=a},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(e,n,i){var s=function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(i,"__esModule",{value:!0}),i.RowFormatter=void 0;const o=s(e("lodash.isfunction")),h=s(e("lodash.isequal")),c=e("./FieldFormatter"),a=e("../types");class f{constructor(u){this.rowCount=0,this.formatterOptions=u,this.fieldFormatter=new c.FieldFormatter(u),this.headers=u.headers,this.shouldWriteHeaders=u.shouldWriteHeaders,this.hasWrittenHeaders=!1,this.headers!==null&&(this.fieldFormatter.headers=this.headers),u.transform&&(this.rowTransform=u.transform)}static isRowHashArray(u){return Array.isArray(u)?Array.isArray(u[0])&&u[0].length===2:!1}static isRowArray(u){return Array.isArray(u)&&!this.isRowHashArray(u)}static gatherHeaders(u){return f.isRowHashArray(u)?u.map(p=>p[0]):Array.isArray(u)?u:Object.keys(u)}static createTransform(u){return a.isSyncTransform(u)?(p,m)=>{let d=null;try{d=u(p)}catch(v){return m(v)}return m(null,d)}:(p,m)=>{u(p,m)}}set rowTransform(u){if(!o.default(u))throw new TypeError("The transform should be a function");this._rowTransform=f.createTransform(u)}format(u,p){this.callTransformer(u,(m,d)=>{if(m)return p(m);if(!u)return p(null);const v=[];if(d){const{shouldFormatColumns:x,headers:g}=this.checkHeaders(d);if(this.shouldWriteHeaders&&g&&!this.hasWrittenHeaders&&(v.push(this.formatColumns(g,!0)),this.hasWrittenHeaders=!0),x){const w=this.gatherColumns(d);v.push(this.formatColumns(w,!1))}}return p(null,v)})}finish(u){const p=[];if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers)return u(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));p.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&p.push(this.formatterOptions.rowDelimiter),u(null,p)}checkHeaders(u){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const p=f.gatherHeaders(u);return this.headers=p,this.fieldFormatter.headers=p,this.shouldWriteHeaders?{shouldFormatColumns:!h.default(p,u),headers:p}:{shouldFormatColumns:!0,headers:null}}gatherColumns(u){if(this.headers===null)throw new Error("Headers is currently null");return Array.isArray(u)?f.isRowHashArray(u)?this.headers.map((p,m)=>{const d=u[m];return d?d[1]:""}):f.isRowArray(u)&&!this.shouldWriteHeaders?u:this.headers.map((p,m)=>u[m]):this.headers.map(p=>u[p])}callTransformer(u,p){return this._rowTransform?this._rowTransform(u,p):p(null,u)}formatColumns(u,p){const m=u.map((v,x)=>this.fieldFormatter.format(v,x,p)).join(this.formatterOptions.delimiter),{rowCount:d}=this;return this.rowCount+=1,d?[this.formatterOptions.rowDelimiter,m].join(""):m}}i.RowFormatter=f},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.FieldFormatter=i.RowFormatter=void 0;var s=e("./RowFormatter");Object.defineProperty(i,"RowFormatter",{enumerable:!0,get:function(){return s.RowFormatter}});var o=e("./FieldFormatter");Object.defineProperty(i,"FieldFormatter",{enumerable:!0,get:function(){return o.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,n,i){(function(s){(function(){var o=Object.create?function(x,g,w,y){y===void 0&&(y=w),Object.defineProperty(x,y,{enumerable:!0,get:function(){return g[w]}})}:function(x,g,w,y){y===void 0&&(y=w),x[y]=g[w]},h=Object.create?function(x,g){Object.defineProperty(x,"default",{enumerable:!0,value:g})}:function(x,g){x.default=g},c=function(x){if(x&&x.__esModule)return x;var g={};if(x!=null)for(var w in x)w!=="default"&&Object.prototype.hasOwnProperty.call(x,w)&&o(g,x,w);return h(g,x),g},a=function(x,g){for(var w in x)w!=="default"&&!Object.prototype.hasOwnProperty.call(g,w)&&o(g,x,w)};Object.defineProperty(i,"__esModule",{value:!0}),i.writeToPath=i.writeToString=i.writeToBuffer=i.writeToStream=i.write=i.format=i.FormatterOptions=i.CsvFormatterStream=void 0;const f=e("util"),l=e("stream"),u=c(e("fs")),p=e("./FormatterOptions"),m=e("./CsvFormatterStream");a(e("./types"),i);var d=e("./CsvFormatterStream");Object.defineProperty(i,"CsvFormatterStream",{enumerable:!0,get:function(){return d.CsvFormatterStream}});var v=e("./FormatterOptions");Object.defineProperty(i,"FormatterOptions",{enumerable:!0,get:function(){return v.FormatterOptions}}),i.format=x=>new m.CsvFormatterStream(new p.FormatterOptions(x)),i.write=(x,g)=>{const w=i.format(g),y=f.promisify((_,k)=>{w.write(_,void 0,k)});return x.reduce((_,k)=>_.then(()=>y(k)),Promise.resolve()).then(()=>w.end()).catch(_=>{w.emit("error",_)}),w},i.writeToStream=(x,g,w)=>i.write(g,w).pipe(x),i.writeToBuffer=function(x){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const w=[],y=new l.Writable({write(_,k,F){w.push(_),F()}});return new Promise((_,k)=>{y.on("error",k).on("finish",()=>_(s.concat(w))),i.write(x,g).pipe(y)})},i.writeToString=(x,g)=>i.writeToBuffer(x,g).then(w=>w.toString()),i.writeToPath=(x,g,w)=>{const y=u.createWriteStream(x,{encoding:"utf8"});return i.write(g,w).pipe(y)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.isSyncTransform=void 0,i.isSyncTransform=s=>s.length===1},{}],153:[function(e,n,i){(function(s){(function(){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvParserStream=void 0;const o=e("string_decoder"),h=e("stream"),c=e("./transforms"),a=e("./parser");class f extends h.Transform{constructor(u){super({objectMode:u.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=u,this.parser=new a.Parser(u),this.headerTransformer=new c.HeaderTransformer(u),this.decoder=new o.StringDecoder(u.encoding),this.rowTransformerValidator=new c.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(u){return this.rowTransformerValidator.rowTransform=u,this}validate(u){return this.rowTransformerValidator.rowValidator=u,this}emit(u){if(u==="end")return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var p=arguments.length,m=new Array(p>1?p-1:0),d=1;d{const x=y=>{if(y)return p(y);if(v%100===0){s(()=>d(v+1));return}return d(v+1)};if(this.checkAndEmitHeaders(),v>=m||this.hasHitRowLimit)return p();if(this.parsedLineCount+=1,this.shouldSkipLine)return x();const g=u[v];this.rowCount+=1,this.parsedRowCount+=1;const w=this.rowCount;return this.transformRow(g,(y,_)=>{if(y)return this.rowCount-=1,x(y);if(!_)return x(new Error("expected transform result"));if(!_.isValid)this.emit("data-invalid",_.row,w,_.reason);else if(_.row)return this.pushRow(_.row,x);return x()})};d(0)}transformRow(u,p){try{this.headerTransformer.transform(u,(m,d)=>m?p(m):d?d.isValid?d.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(d.row,p):this.skipRow(p):(this.rowCount-=1,this.parsedRowCount-=1,p(null,{row:null,isValid:!0})):this.shouldEmitRows?p(null,{isValid:!1,row:u}):this.skipRow(p):p(new Error("Expected result from header transform")))}catch(m){p(m)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(u){return this.rowCount-=1,u(null,{row:null,isValid:!0})}pushRow(u,p){try{this.parserOptions.objectMode?this.push(u):this.push(JSON.stringify(u)),p()}catch(m){p(m)}}static wrapDoneCallback(u){let p=!1;return function(m){if(m){if(p)throw m;p=!0,u(m);return}for(var d=arguments.length,v=new Array(d>1?d-1:0),x=1;x1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=o.default(this.delimiter),this.escapeChar=(l=this.escape)!==null&&l!==void 0?l:this.quote,this.supportsComments=!h.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}i.ParserOptions=c},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(e,n,i){var s=Object.create?function(d,v,x,g){g===void 0&&(g=x),Object.defineProperty(d,g,{enumerable:!0,get:function(){return v[x]}})}:function(d,v,x,g){g===void 0&&(g=x),d[g]=v[x]},o=Object.create?function(d,v){Object.defineProperty(d,"default",{enumerable:!0,value:v})}:function(d,v){d.default=v},h=function(d){if(d&&d.__esModule)return d;var v={};if(d!=null)for(var x in d)x!=="default"&&Object.prototype.hasOwnProperty.call(d,x)&&s(v,d,x);return o(v,d),v},c=function(d,v){for(var x in d)x!=="default"&&!Object.prototype.hasOwnProperty.call(v,x)&&s(v,d,x)};Object.defineProperty(i,"__esModule",{value:!0}),i.parseString=i.parseFile=i.parseStream=i.parse=i.ParserOptions=i.CsvParserStream=void 0;const a=h(e("fs")),f=e("stream"),l=e("./ParserOptions"),u=e("./CsvParserStream");c(e("./types"),i);var p=e("./CsvParserStream");Object.defineProperty(i,"CsvParserStream",{enumerable:!0,get:function(){return p.CsvParserStream}});var m=e("./ParserOptions");Object.defineProperty(i,"ParserOptions",{enumerable:!0,get:function(){return m.ParserOptions}}),i.parse=d=>new u.CsvParserStream(new l.ParserOptions(d)),i.parseStream=(d,v)=>d.pipe(new u.CsvParserStream(new l.ParserOptions(v))),i.parseFile=function(d){let v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return a.createReadStream(d).pipe(new u.CsvParserStream(new l.ParserOptions(v)))},i.parseString=(d,v)=>{const x=new f.Readable;return x.push(d),x.push(null),x.pipe(new u.CsvParserStream(new l.ParserOptions(v)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Parser=void 0;const s=e("./Scanner"),o=e("./RowParser"),h=e("./Token");class c{constructor(f){this.parserOptions=f,this.rowParser=new o.RowParser(this.parserOptions)}static removeBOM(f){return f&&f.charCodeAt(0)===65279?f.slice(1):f}parse(f,l){const u=new s.Scanner({line:c.removeBOM(f),parserOptions:this.parserOptions,hasMoreData:l});return this.parserOptions.supportsComments?this.parseWithComments(u):this.parseWithoutComments(u)}parseWithoutComments(f){const l=[];let u=!0;for(;u;)u=this.parseRow(f,l);return{line:f.line,rows:l}}parseWithComments(f){const{parserOptions:l}=this,u=[];for(let p=f.nextCharacterToken;p!==null;p=f.nextCharacterToken)if(h.Token.isTokenComment(p,l)){if(f.advancePastLine()===null)return{line:f.lineFromCursor,rows:u};if(!f.hasMoreCharacters)return{line:f.lineFromCursor,rows:u};f.truncateToCursor()}else if(!this.parseRow(f,u))break;return{line:f.line,rows:u}}parseRow(f,l){if(!f.nextNonSpaceToken)return!1;const p=this.rowParser.parse(f);return p===null?!1:(this.parserOptions.ignoreEmpty&&o.RowParser.isEmptyRow(p)||l.push(p),!0)}}i.Parser=c},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.RowParser=void 0;const s=e("./column"),o=e("./Token"),h="";class c{constructor(f){this.parserOptions=f,this.columnParser=new s.ColumnParser(f)}static isEmptyRow(f){return f.join(h).replace(/\s+/g,h)===h}parse(f){const{parserOptions:l}=this,{hasMoreData:u}=f,p=f,m=[];let d=this.getStartToken(p,m);for(;d;){if(o.Token.isTokenRowDelimiter(d))return p.advancePastToken(d),!p.hasMoreCharacters&&o.Token.isTokenCarriageReturn(d,l)&&u?null:(p.truncateToCursor(),m);if(!this.shouldSkipColumnParse(p,d,m)){const v=this.columnParser.parse(p);if(v===null)return null;m.push(v)}d=p.nextNonSpaceToken}return u?null:(p.truncateToCursor(),m)}getStartToken(f,l){const u=f.nextNonSpaceToken;return u!==null&&o.Token.isTokenDelimiter(u,this.parserOptions)?(l.push(""),f.nextNonSpaceToken):u}shouldSkipColumnParse(f,l,u){const{parserOptions:p}=this;if(o.Token.isTokenDelimiter(l,p)){f.advancePastToken(l);const m=f.nextCharacterToken;if(!f.hasMoreCharacters||m!==null&&o.Token.isTokenRowDelimiter(m)||m!==null&&o.Token.isTokenDelimiter(m,p))return u.push(""),!0}return!1}}i.RowParser=c},{"./Token":159,"./column":164}],158:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Scanner=void 0;const s=e("./Token"),o=/((?:\r\n)|\n|\r)/;class h{constructor(a){this.cursor=0,this.line=a.line,this.lineLength=this.line.length,this.parserOptions=a.parserOptions,this.hasMoreData=a.hasMoreData,this.cursor=a.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:a}=this,f=this.parserOptions.NEXT_TOKEN_REGEXP;if(a.search(f)===-1)return null;const l=f.exec(a);if(l==null)return null;const u=l[1],p=this.cursor+(l.index||0);return new s.Token({token:u,startCursor:p,endCursor:p+u.length-1})}get nextCharacterToken(){const{cursor:a,lineLength:f}=this;return f<=a?null:new s.Token({token:this.line[a],startCursor:a,endCursor:a})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const a=o.exec(this.lineFromCursor);return a?(this.cursor+=(a.index||0)+a[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(a){return this.cursor=a,this}advanceToToken(a){return this.cursor=a.startCursor,this}advancePastToken(a){return this.cursor=a.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}i.Scanner=h},{"./Token":159}],159:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.Token=void 0;class s{constructor(h){this.token=h.token,this.startCursor=h.startCursor,this.endCursor=h.endCursor}static isTokenRowDelimiter(h){const c=h.token;return c==="\r"||c===` +`||c===`\r +`}static isTokenCarriageReturn(h,c){return h.token===c.carriageReturn}static isTokenComment(h,c){return c.supportsComments&&!!h&&h.token===c.comment}static isTokenEscapeCharacter(h,c){return h.token===c.escapeChar}static isTokenQuote(h,c){return h.token===c.quote}static isTokenDelimiter(h,c){return h.token===c.delimiter}}i.Token=s},{}],160:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnFormatter=void 0;class s{constructor(h){h.trim?this.format=c=>c.trim():h.ltrim?this.format=c=>c.trimLeft():h.rtrim?this.format=c=>c.trimRight():this.format=c=>c}}i.ColumnFormatter=s},{}],161:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnParser=void 0;const s=e("./NonQuotedColumnParser"),o=e("./QuotedColumnParser"),h=e("../Token");class c{constructor(f){this.parserOptions=f,this.quotedColumnParser=new o.QuotedColumnParser(f),this.nonQuotedColumnParser=new s.NonQuotedColumnParser(f)}parse(f){const{nextNonSpaceToken:l}=f;return l!==null&&h.Token.isTokenQuote(l,this.parserOptions)?(f.advanceToToken(l),this.quotedColumnParser.parse(f)):this.nonQuotedColumnParser.parse(f)}}i.ColumnParser=c},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.NonQuotedColumnParser=void 0;const s=e("./ColumnFormatter"),o=e("../Token");class h{constructor(a){this.parserOptions=a,this.columnFormatter=new s.ColumnFormatter(a)}parse(a){if(!a.hasMoreCharacters)return null;const{parserOptions:f}=this,l=[];let u=a.nextCharacterToken;for(;u&&!(o.Token.isTokenDelimiter(u,f)||o.Token.isTokenRowDelimiter(u));u=a.nextCharacterToken)l.push(u.token),a.advancePastToken(u);return this.columnFormatter.format(l.join(""))}}i.NonQuotedColumnParser=h},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.QuotedColumnParser=void 0;const s=e("./ColumnFormatter"),o=e("../Token");class h{constructor(a){this.parserOptions=a,this.columnFormatter=new s.ColumnFormatter(a)}parse(a){if(!a.hasMoreCharacters)return null;const f=a.cursor,{foundClosingQuote:l,col:u}=this.gatherDataBetweenQuotes(a);if(!l){if(a.advanceTo(f),!a.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${a.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(a),u}gatherDataBetweenQuotes(a){const{parserOptions:f}=this;let l=!1,u=!1;const p=[];let m=a.nextCharacterToken;for(;!u&&m!==null;m=a.nextCharacterToken){const d=o.Token.isTokenQuote(m,f);if(!l&&d)l=!0;else if(l)if(o.Token.isTokenEscapeCharacter(m,f)){a.advancePastToken(m);const v=a.nextCharacterToken;v!==null&&(o.Token.isTokenQuote(v,f)||o.Token.isTokenEscapeCharacter(v,f))?(p.push(v.token),m=v):d?u=!0:p.push(m.token)}else d?u=!0:p.push(m.token);a.advancePastToken(m)}return{col:this.columnFormatter.format(p.join("")),foundClosingQuote:u}}checkForMalformedColumn(a){const{parserOptions:f}=this,{nextNonSpaceToken:l}=a;if(l){const u=o.Token.isTokenDelimiter(l,f),p=o.Token.isTokenRowDelimiter(l);if(!(u||p)){const m=a.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${f.escapedDelimiter}' OR new line got: '${l.token}'. at '${m}`)}a.advanceToToken(l)}else a.hasMoreData||a.advancePastLine()}}i.QuotedColumnParser=h},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.ColumnFormatter=i.QuotedColumnParser=i.NonQuotedColumnParser=i.ColumnParser=void 0;var s=e("./ColumnParser");Object.defineProperty(i,"ColumnParser",{enumerable:!0,get:function(){return s.ColumnParser}});var o=e("./NonQuotedColumnParser");Object.defineProperty(i,"NonQuotedColumnParser",{enumerable:!0,get:function(){return o.NonQuotedColumnParser}});var h=e("./QuotedColumnParser");Object.defineProperty(i,"QuotedColumnParser",{enumerable:!0,get:function(){return h.QuotedColumnParser}});var c=e("./ColumnFormatter");Object.defineProperty(i,"ColumnFormatter",{enumerable:!0,get:function(){return c.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.QuotedColumnParser=i.NonQuotedColumnParser=i.ColumnParser=i.Token=i.Scanner=i.RowParser=i.Parser=void 0;var s=e("./Parser");Object.defineProperty(i,"Parser",{enumerable:!0,get:function(){return s.Parser}});var o=e("./RowParser");Object.defineProperty(i,"RowParser",{enumerable:!0,get:function(){return o.RowParser}});var h=e("./Scanner");Object.defineProperty(i,"Scanner",{enumerable:!0,get:function(){return h.Scanner}});var c=e("./Token");Object.defineProperty(i,"Token",{enumerable:!0,get:function(){return c.Token}});var a=e("./column");Object.defineProperty(i,"ColumnParser",{enumerable:!0,get:function(){return a.ColumnParser}}),Object.defineProperty(i,"NonQuotedColumnParser",{enumerable:!0,get:function(){return a.NonQuotedColumnParser}}),Object.defineProperty(i,"QuotedColumnParser",{enumerable:!0,get:function(){return a.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,n,i){var s=function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(i,"__esModule",{value:!0}),i.HeaderTransformer=void 0;const o=s(e("lodash.isundefined")),h=s(e("lodash.isfunction")),c=s(e("lodash.uniq")),a=s(e("lodash.groupby"));class f{constructor(u){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=u,u.headers===!0?this.shouldUseFirstRow=!0:Array.isArray(u.headers)?this.setHeaders(u.headers):h.default(u.headers)&&(this.headersTransform=u.headers)}transform(u,p){return this.shouldMapRow(u)?p(null,this.processRow(u)):p(null,{row:null,isValid:!0})}shouldMapRow(u){const{parserOptions:p}=this;if(!this.headersTransform&&p.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(u)){if(this.headersTransform)this.setHeaders(this.headersTransform(u));else if(this.shouldUseFirstRow)this.setHeaders(u);else return!0;return!1}return!0}processRow(u){if(!this.headers)return{row:u,isValid:!0};const{parserOptions:p}=this;if(!p.discardUnmappedColumns&&u.length>this.headersLength){if(!p.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${u.length}`);return{row:u,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${u.length}`}}return p.strictColumnHandling&&u.length!!d);if(c.default(m).length!==m.length){const d=a.default(m),v=Object.keys(d).filter(x=>d[x].length>1);throw new Error(`Duplicate headers found ${JSON.stringify(v)}`)}this.headers=u,this.receivedHeaders=!0,this.headersLength=((p=this.headers)===null||p===void 0?void 0:p.length)||0}}i.HeaderTransformer=f},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(e,n,i){var s=function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(i,"__esModule",{value:!0}),i.RowTransformerValidator=void 0;const o=s(e("lodash.isfunction")),h=e("../types");class c{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(f){return h.isSyncTransform(f)?(l,u)=>{let p=null;try{p=f(l)}catch(m){return u(m)}return u(null,p)}:f}static createValidator(f){return h.isSyncValidate(f)?(l,u)=>{u(null,{row:l,isValid:f(l)})}:(l,u)=>{f(l,(p,m,d)=>p?u(p):m?u(null,{row:l,isValid:m,reason:d}):u(null,{row:l,isValid:!1,reason:d}))}}set rowTransform(f){if(!o.default(f))throw new TypeError("The transform should be a function");this._rowTransform=c.createTransform(f)}set rowValidator(f){if(!o.default(f))throw new TypeError("The validate should be a function");this._rowValidator=c.createValidator(f)}transformAndValidate(f,l){return this.callTransformer(f,(u,p)=>u?l(u):p?this.callValidator(p,(m,d)=>m?l(m):d&&!d.isValid?l(null,{row:p,isValid:!1,reason:d.reason}):l(null,{row:p,isValid:!0})):l(null,{row:null,isValid:!0}))}callTransformer(f,l){return this._rowTransform?this._rowTransform(f,l):l(null,f)}callValidator(f,l){return this._rowValidator?this._rowValidator(f,l):l(null,{row:f,isValid:!0})}}i.RowTransformerValidator=c},{"../types":169,"lodash.isfunction":446}],168:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.HeaderTransformer=i.RowTransformerValidator=void 0;var s=e("./RowTransformerValidator");Object.defineProperty(i,"RowTransformerValidator",{enumerable:!0,get:function(){return s.RowTransformerValidator}});var o=e("./HeaderTransformer");Object.defineProperty(i,"HeaderTransformer",{enumerable:!0,get:function(){return o.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.isSyncValidate=i.isSyncTransform=void 0,i.isSyncTransform=s=>s.length===1,i.isSyncValidate=s=>s.length===1},{}],170:[function(e,n,i){const s=i;s.bignum=e("bn.js"),s.define=e("./asn1/api").define,s.base=e("./asn1/base"),s.constants=e("./asn1/constants"),s.decoders=e("./asn1/decoders"),s.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,n,i){const s=e("./encoders"),o=e("./decoders"),h=e("inherits"),c=i;c.define=function(l,u){return new a(l,u)};function a(f,l){this.name=f,this.body=l,this.decoders={},this.encoders={}}a.prototype._createNamed=function(l){const u=this.name;function p(m){this._initNamed(m,u)}return h(p,l),p.prototype._initNamed=function(d,v){l.call(this,d,v)},new p(this)},a.prototype._getDecoder=function(l){return l=l||"der",this.decoders.hasOwnProperty(l)||(this.decoders[l]=this._createNamed(o[l])),this.decoders[l]},a.prototype.decode=function(l,u,p){return this._getDecoder(u).decode(l,p)},a.prototype._getEncoder=function(l){return l=l||"der",this.encoders.hasOwnProperty(l)||(this.encoders[l]=this._createNamed(s[l])),this.encoders[l]},a.prototype.encode=function(l,u,p){return this._getEncoder(u).encode(l,p)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(e,n,i){const s=e("inherits"),o=e("../base/reporter").Reporter,h=e("safer-buffer").Buffer;function c(f,l){if(o.call(this,l),!h.isBuffer(f)){this.error("Input not Buffer");return}this.base=f,this.offset=0,this.length=f.length}s(c,o),i.DecoderBuffer=c,c.isDecoderBuffer=function(l){return l instanceof c?!0:typeof l=="object"&&h.isBuffer(l.base)&&l.constructor.name==="DecoderBuffer"&&typeof l.offset=="number"&&typeof l.length=="number"&&typeof l.save=="function"&&typeof l.restore=="function"&&typeof l.isEmpty=="function"&&typeof l.readUInt8=="function"&&typeof l.skip=="function"&&typeof l.raw=="function"},c.prototype.save=function(){return{offset:this.offset,reporter:o.prototype.save.call(this)}},c.prototype.restore=function(l){const u=new c(this.base);return u.offset=l.offset,u.length=this.offset,this.offset=l.offset,o.prototype.restore.call(this,l.reporter),u},c.prototype.isEmpty=function(){return this.offset===this.length},c.prototype.readUInt8=function(l){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(l||"DecoderBuffer overrun")},c.prototype.skip=function(l,u){if(!(this.offset+l<=this.length))return this.error(u||"DecoderBuffer overrun");const p=new c(this.base);return p._reporterState=this._reporterState,p.offset=this.offset,p.length=this.offset+l,this.offset+=l,p},c.prototype.raw=function(l){return this.base.slice(l?l.offset:this.offset,this.length)};function a(f,l){if(Array.isArray(f))this.length=0,this.value=f.map(function(u){return a.isEncoderBuffer(u)||(u=new a(u,l)),this.length+=u.length,u},this);else if(typeof f=="number"){if(!(0<=f&&f<=255))return l.error("non-byte EncoderBuffer value");this.value=f,this.length=1}else if(typeof f=="string")this.value=f,this.length=h.byteLength(f);else if(h.isBuffer(f))this.value=f,this.length=f.length;else return l.error("Unsupported type: "+typeof f)}i.EncoderBuffer=a,a.isEncoderBuffer=function(l){return l instanceof a?!0:typeof l=="object"&&l.constructor.name==="EncoderBuffer"&&typeof l.length=="number"&&typeof l.join=="function"},a.prototype.join=function(l,u){return l||(l=h.alloc(this.length)),u||(u=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(p){p.join(l,u),u+=p.length}):(typeof this.value=="number"?l[u]=this.value:typeof this.value=="string"?l.write(this.value,u):h.isBuffer(this.value)&&this.value.copy(l,u),u+=this.length)),l}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(e,n,i){const s=i;s.Reporter=e("./reporter").Reporter,s.DecoderBuffer=e("./buffer").DecoderBuffer,s.EncoderBuffer=e("./buffer").EncoderBuffer,s.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,n,i){const s=e("../base/reporter").Reporter,o=e("../base/buffer").EncoderBuffer,h=e("../base/buffer").DecoderBuffer,c=e("minimalistic-assert"),a=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],f=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(a),l=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function u(m,d,v){const x={};this._baseState=x,x.name=v,x.enc=m,x.parent=d||null,x.children=null,x.tag=null,x.args=null,x.reverseArgs=null,x.choice=null,x.optional=!1,x.any=!1,x.obj=!1,x.use=null,x.useDecoder=null,x.key=null,x.default=null,x.explicit=null,x.implicit=null,x.contains=null,x.parent||(x.children=[],this._wrap())}n.exports=u;const p=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];u.prototype.clone=function(){const d=this._baseState,v={};p.forEach(function(g){v[g]=d[g]});const x=new this.constructor(v.parent);return x._baseState=v,x},u.prototype._wrap=function(){const d=this._baseState;f.forEach(function(v){this[v]=function(){const g=new this.constructor(this);return d.children.push(g),g[v].apply(g,arguments)}},this)},u.prototype._init=function(d){const v=this._baseState;c(v.parent===null),d.call(this),v.children=v.children.filter(function(x){return x._baseState.parent===this},this),c.equal(v.children.length,1,"Root node can have only one child")},u.prototype._useArgs=function(d){const v=this._baseState,x=d.filter(function(g){return g instanceof this.constructor},this);d=d.filter(function(g){return!(g instanceof this.constructor)},this),x.length!==0&&(c(v.children===null),v.children=x,x.forEach(function(g){g._baseState.parent=this},this)),d.length!==0&&(c(v.args===null),v.args=d,v.reverseArgs=d.map(function(g){if(typeof g!="object"||g.constructor!==Object)return g;const w={};return Object.keys(g).forEach(function(y){y==(y|0)&&(y|=0);const _=g[y];w[_]=y}),w}))},l.forEach(function(m){u.prototype[m]=function(){const v=this._baseState;throw new Error(m+" not implemented for encoding: "+v.enc)}}),a.forEach(function(m){u.prototype[m]=function(){const v=this._baseState,x=Array.prototype.slice.call(arguments);return c(v.tag===null),v.tag=m,this._useArgs(x),this}}),u.prototype.use=function(d){c(d);const v=this._baseState;return c(v.use===null),v.use=d,this},u.prototype.optional=function(){const d=this._baseState;return d.optional=!0,this},u.prototype.def=function(d){const v=this._baseState;return c(v.default===null),v.default=d,v.optional=!0,this},u.prototype.explicit=function(d){const v=this._baseState;return c(v.explicit===null&&v.implicit===null),v.explicit=d,this},u.prototype.implicit=function(d){const v=this._baseState;return c(v.explicit===null&&v.implicit===null),v.implicit=d,this},u.prototype.obj=function(){const d=this._baseState,v=Array.prototype.slice.call(arguments);return d.obj=!0,v.length!==0&&this._useArgs(v),this},u.prototype.key=function(d){const v=this._baseState;return c(v.key===null),v.key=d,this},u.prototype.any=function(){const d=this._baseState;return d.any=!0,this},u.prototype.choice=function(d){const v=this._baseState;return c(v.choice===null),v.choice=d,this._useArgs(Object.keys(d).map(function(x){return d[x]})),this},u.prototype.contains=function(d){const v=this._baseState;return c(v.use===null),v.contains=d,this},u.prototype._decode=function(d,v){const x=this._baseState;if(x.parent===null)return d.wrapResult(x.children[0]._decode(d,v));let g=x.default,w=!0,y=null;if(x.key!==null&&(y=d.enterKey(x.key)),x.optional){let k=null;if(x.explicit!==null?k=x.explicit:x.implicit!==null?k=x.implicit:x.tag!==null&&(k=x.tag),k===null&&!x.any){const F=d.save();try{x.choice===null?this._decodeGeneric(x.tag,d,v):this._decodeChoice(d,v),w=!0}catch{w=!1}d.restore(F)}else if(w=this._peekTag(d,k,x.any),d.isError(w))return w}let _;if(x.obj&&w&&(_=d.enterObject()),w){if(x.explicit!==null){const F=this._decodeTag(d,x.explicit);if(d.isError(F))return F;d=F}const k=d.offset;if(x.use===null&&x.choice===null){let F;x.any&&(F=d.save());const O=this._decodeTag(d,x.implicit!==null?x.implicit:x.tag,x.any);if(d.isError(O))return O;x.any?g=d.raw(F):d=O}if(v&&v.track&&x.tag!==null&&v.track(d.path(),k,d.length,"tagged"),v&&v.track&&x.tag!==null&&v.track(d.path(),d.offset,d.length,"content"),x.any||(x.choice===null?g=this._decodeGeneric(x.tag,d,v):g=this._decodeChoice(d,v)),d.isError(g))return g;if(!x.any&&x.choice===null&&x.children!==null&&x.children.forEach(function(O){O._decode(d,v)}),x.contains&&(x.tag==="octstr"||x.tag==="bitstr")){const F=new h(g);g=this._getUse(x.contains,d._reporterState.obj)._decode(F,v)}}return x.obj&&w&&(g=d.leaveObject(_)),x.key!==null&&(g!==null||w===!0)?d.leaveKey(y,x.key,g):y!==null&&d.exitKey(y),g},u.prototype._decodeGeneric=function(d,v,x){const g=this._baseState;return d==="seq"||d==="set"?null:d==="seqof"||d==="setof"?this._decodeList(v,d,g.args[0],x):/str$/.test(d)?this._decodeStr(v,d,x):d==="objid"&&g.args?this._decodeObjid(v,g.args[0],g.args[1],x):d==="objid"?this._decodeObjid(v,null,null,x):d==="gentime"||d==="utctime"?this._decodeTime(v,d,x):d==="null_"?this._decodeNull(v,x):d==="bool"?this._decodeBool(v,x):d==="objDesc"?this._decodeStr(v,d,x):d==="int"||d==="enum"?this._decodeInt(v,g.args&&g.args[0],x):g.use!==null?this._getUse(g.use,v._reporterState.obj)._decode(v,x):v.error("unknown tag: "+d)},u.prototype._getUse=function(d,v){const x=this._baseState;return x.useDecoder=this._use(d,v),c(x.useDecoder._baseState.parent===null),x.useDecoder=x.useDecoder._baseState.children[0],x.implicit!==x.useDecoder._baseState.implicit&&(x.useDecoder=x.useDecoder.clone(),x.useDecoder._baseState.implicit=x.implicit),x.useDecoder},u.prototype._decodeChoice=function(d,v){const x=this._baseState;let g=null,w=!1;return Object.keys(x.choice).some(function(y){const _=d.save(),k=x.choice[y];try{const F=k._decode(d,v);if(d.isError(F))return!1;g={type:y,value:F},w=!0}catch{return d.restore(_),!1}return!0},this),w?g:d.error("Choice not matched")},u.prototype._createEncoderBuffer=function(d){return new o(d,this.reporter)},u.prototype._encode=function(d,v,x){const g=this._baseState;if(g.default!==null&&g.default===d)return;const w=this._encodeValue(d,v,x);if(w!==void 0&&!this._skipDefault(w,v,x))return w},u.prototype._encodeValue=function(d,v,x){const g=this._baseState;if(g.parent===null)return g.children[0]._encode(d,v||new s);let w=null;if(this.reporter=v,g.optional&&d===void 0)if(g.default!==null)d=g.default;else return;let y=null,_=!1;if(g.any)w=this._createEncoderBuffer(d);else if(g.choice)w=this._encodeChoice(d,v);else if(g.contains)y=this._getUse(g.contains,x)._encode(d,v),_=!0;else if(g.children)y=g.children.map(function(k){if(k._baseState.tag==="null_")return k._encode(null,v,d);if(k._baseState.key===null)return v.error("Child should have a key");const F=v.enterKey(k._baseState.key);if(typeof d!="object")return v.error("Child expected, but input is not object");const O=k._encode(d[k._baseState.key],v,d);return v.leaveKey(F),O},this).filter(function(k){return k}),y=this._createEncoderBuffer(y);else if(g.tag==="seqof"||g.tag==="setof"){if(!(g.args&&g.args.length===1))return v.error("Too many args for : "+g.tag);if(!Array.isArray(d))return v.error("seqof/setof, but data is not Array");const k=this.clone();k._baseState.implicit=null,y=this._createEncoderBuffer(d.map(function(F){const O=this._baseState;return this._getUse(O.args[0],d)._encode(F,v)},k))}else g.use!==null?w=this._getUse(g.use,x)._encode(d,v):(y=this._encodePrimitive(g.tag,d),_=!0);if(!g.any&&g.choice===null){const k=g.implicit!==null?g.implicit:g.tag,F=g.implicit===null?"universal":"context";k===null?g.use===null&&v.error("Tag could be omitted only for .use()"):g.use===null&&(w=this._encodeComposite(k,_,F,y))}return g.explicit!==null&&(w=this._encodeComposite(g.explicit,!1,"context",w)),w},u.prototype._encodeChoice=function(d,v){const x=this._baseState,g=x.choice[d.type];return g||c(!1,d.type+" not found in "+JSON.stringify(Object.keys(x.choice))),g._encode(d.value,v)},u.prototype._encodePrimitive=function(d,v){const x=this._baseState;if(/str$/.test(d))return this._encodeStr(v,d);if(d==="objid"&&x.args)return this._encodeObjid(v,x.reverseArgs[0],x.args[1]);if(d==="objid")return this._encodeObjid(v,null,null);if(d==="gentime"||d==="utctime")return this._encodeTime(v,d);if(d==="null_")return this._encodeNull();if(d==="int"||d==="enum")return this._encodeInt(v,x.args&&x.reverseArgs[0]);if(d==="bool")return this._encodeBool(v);if(d==="objDesc")return this._encodeStr(v,d);throw new Error("Unsupported tag: "+d)},u.prototype._isNumstr=function(d){return/^[0-9 ]*$/.test(d)},u.prototype._isPrintstr=function(d){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(d)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(e,n,i){const s=e("inherits");function o(c){this._reporterState={obj:null,path:[],options:c||{},errors:[]}}i.Reporter=o,o.prototype.isError=function(a){return a instanceof h},o.prototype.save=function(){const a=this._reporterState;return{obj:a.obj,pathLen:a.path.length}},o.prototype.restore=function(a){const f=this._reporterState;f.obj=a.obj,f.path=f.path.slice(0,a.pathLen)},o.prototype.enterKey=function(a){return this._reporterState.path.push(a)},o.prototype.exitKey=function(a){const f=this._reporterState;f.path=f.path.slice(0,a-1)},o.prototype.leaveKey=function(a,f,l){const u=this._reporterState;this.exitKey(a),u.obj!==null&&(u.obj[f]=l)},o.prototype.path=function(){return this._reporterState.path.join("/")},o.prototype.enterObject=function(){const a=this._reporterState,f=a.obj;return a.obj={},f},o.prototype.leaveObject=function(a){const f=this._reporterState,l=f.obj;return f.obj=a,l},o.prototype.error=function(a){let f;const l=this._reporterState,u=a instanceof h;if(u?f=a:f=new h(l.path.map(function(p){return"["+JSON.stringify(p)+"]"}).join(""),a.message||a,a.stack),!l.options.partial)throw f;return u||l.errors.push(f),f},o.prototype.wrapResult=function(a){const f=this._reporterState;return f.options.partial?{result:this.isError(a)?null:a,errors:f.errors}:a};function h(c,a){this.path=c,this.rethrow(a)}s(h,Error),h.prototype.rethrow=function(a){if(this.message=a+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,h),!this.stack)try{throw new Error(this.message)}catch(f){this.stack=f.stack}return this}},{inherits:440}],176:[function(e,n,i){function s(o){const h={};return Object.keys(o).forEach(function(c){(c|0)==c&&(c=c|0);const a=o[c];h[a]=c}),h}i.tagClass={0:"universal",1:"application",2:"context",3:"private"},i.tagClassByName=s(i.tagClass),i.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},i.tagByName=s(i.tag)},{}],177:[function(e,n,i){const s=i;s._reverse=function(h){const c={};return Object.keys(h).forEach(function(a){(a|0)==a&&(a=a|0);const f=h[a];c[f]=a}),c},s.der=e("./der")},{"./der":176}],178:[function(e,n,i){const s=e("inherits"),o=e("bn.js"),h=e("../base/buffer").DecoderBuffer,c=e("../base/node"),a=e("../constants/der");function f(m){this.enc="der",this.name=m.name,this.entity=m,this.tree=new l,this.tree._init(m.body)}n.exports=f,f.prototype.decode=function(d,v){return h.isDecoderBuffer(d)||(d=new h(d,v)),this.tree._decode(d,v)};function l(m){c.call(this,"der",m)}s(l,c),l.prototype._peekTag=function(d,v,x){if(d.isEmpty())return!1;const g=d.save(),w=u(d,'Failed to peek tag: "'+v+'"');return d.isError(w)?w:(d.restore(g),w.tag===v||w.tagStr===v||w.tagStr+"of"===v||x)},l.prototype._decodeTag=function(d,v,x){const g=u(d,'Failed to decode tag of "'+v+'"');if(d.isError(g))return g;let w=p(d,g.primitive,'Failed to get length of "'+v+'"');if(d.isError(w))return w;if(!x&&g.tag!==v&&g.tagStr!==v&&g.tagStr+"of"!==v)return d.error('Failed to match tag: "'+v+'"');if(g.primitive||w!==null)return d.skip(w,'Failed to match body of: "'+v+'"');const y=d.save(),_=this._skipUntilEnd(d,'Failed to skip indefinite length body: "'+this.tag+'"');return d.isError(_)?_:(w=d.offset-y.offset,d.restore(y),d.skip(w,'Failed to match body of: "'+v+'"'))},l.prototype._skipUntilEnd=function(d,v){for(;;){const x=u(d,v);if(d.isError(x))return x;const g=p(d,x.primitive,v);if(d.isError(g))return g;let w;if(x.primitive||g!==null?w=d.skip(g):w=this._skipUntilEnd(d,v),d.isError(w))return w;if(x.tagStr==="end")break}},l.prototype._decodeList=function(d,v,x,g){const w=[];for(;!d.isEmpty();){const y=this._peekTag(d,"end");if(d.isError(y))return y;const _=x.decode(d,"der",g);if(d.isError(_)&&y)break;w.push(_)}return w},l.prototype._decodeStr=function(d,v){if(v==="bitstr"){const x=d.readUInt8();return d.isError(x)?x:{unused:x,data:d.raw()}}else if(v==="bmpstr"){const x=d.raw();if(x.length%2===1)return d.error("Decoding of string type: bmpstr length mismatch");let g="";for(let w=0;w>6],g=(v&32)===0;if((v&31)===31){let y=v;for(v=0;(y&128)===128;){if(y=m.readUInt8(d),m.isError(y))return y;v<<=7,v|=y&127}}else v&=31;const w=a.tag[v];return{cls:x,primitive:g,tag:v,tagStr:w}}function p(m,d,v){let x=m.readUInt8(v);if(m.isError(x))return x;if(!d&&x===128)return null;if(!(x&128))return x;const g=x&127;if(g>4)return m.error("length octect is too long");x=0;for(let w=0;w=256;_>>=8)w++;const y=o.alloc(1+1+w);y[0]=g,y[1]=128|w;for(let _=1+w,k=x.length;k>0;_--,k>>=8)y[_]=k&255;return this._createEncoderBuffer([y,x])},f.prototype._encodeStr=function(m,d){if(d==="bitstr")return this._createEncoderBuffer([m.unused|0,m.data]);if(d==="bmpstr"){const v=o.alloc(m.length*2);for(let x=0;x=40)return this.reporter.error("Second objid identifier OOB");m.splice(0,2,m[0]*40+m[1])}let x=0;for(let y=0;y=128;_>>=7)x++}const g=o.alloc(x);let w=g.length-1;for(let y=m.length-1;y>=0;y--){let _=m[y];for(g[w--]=_&127;(_>>=7)>0;)g[w--]=128|_&127}return this._createEncoderBuffer(g)};function l(p){return p<10?"0"+p:p}f.prototype._encodeTime=function(m,d){let v;const x=new Date(m);return d==="gentime"?v=[l(x.getUTCFullYear()),l(x.getUTCMonth()+1),l(x.getUTCDate()),l(x.getUTCHours()),l(x.getUTCMinutes()),l(x.getUTCSeconds()),"Z"].join(""):d==="utctime"?v=[l(x.getUTCFullYear()%100),l(x.getUTCMonth()+1),l(x.getUTCDate()),l(x.getUTCHours()),l(x.getUTCMinutes()),l(x.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+d+" time is not supported yet"),this._encodeStr(v,"octstr")},f.prototype._encodeNull=function(){return this._createEncoderBuffer("")},f.prototype._encodeInt=function(m,d){if(typeof m=="string"){if(!d)return this.reporter.error("String int or enum given, but no values map");if(!d.hasOwnProperty(m))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(m));m=d[m]}if(typeof m!="number"&&!o.isBuffer(m)){const g=m.toArray();!m.sign&&g[0]&128&&g.unshift(0),m=o.from(g)}if(o.isBuffer(m)){let g=m.length;m.length===0&&g++;const w=o.alloc(g);return m.copy(w),m.length===0&&(w[0]=0),this._createEncoderBuffer(w)}if(m<128)return this._createEncoderBuffer(m);if(m<256)return this._createEncoderBuffer([0,m]);let v=1;for(let g=m;g>=256;g>>=8)v++;const x=new Array(v);for(let g=x.length-1;g>=0;g--)x[g]=m&255,m>>=8;return x[0]&128&&x.unshift(0),this._createEncoderBuffer(o.from(x))},f.prototype._encodeBool=function(m){return this._createEncoderBuffer(m?255:0)},f.prototype._use=function(m,d){return typeof m=="function"&&(m=m(d)),m._getEncoder("der").tree},f.prototype._skipDefault=function(m,d,v){const x=this._baseState;let g;if(x.default===null)return!1;const w=m.join();if(x.defaultBuffer===void 0&&(x.defaultBuffer=this._encodeValue(x.default,d,v).join()),w.length!==x.defaultBuffer.length)return!1;for(g=0;g=31?v.error("Multi-octet tag encoding unsupported"):(m||(x|=32),x|=c.tagClassByName[d||"universal"]<<6,x)}},{"../base/node":174,"../constants/der":176,inherits:440,"safer-buffer":495}],182:[function(e,n,i){const s=i;s.der=e("./der"),s.pem=e("./pem")},{"./der":181,"./pem":183}],183:[function(e,n,i){const s=e("inherits"),o=e("./der");function h(c){o.call(this,c),this.enc="pem"}s(h,o),n.exports=h,h.prototype.encode=function(a,f){const u=o.prototype.encode.call(this,a).toString("base64"),p=["-----BEGIN "+f.label+"-----"];for(let m=0;m0?I:M},a.min=function(I,M){return I.cmp(M)<0?I:M},a.prototype._init=function(I,M,E){if(typeof I=="number")return this._initNumber(I,M,E);if(typeof I=="object")return this._initArray(I,M,E);M==="hex"&&(M=16),h(M===(M|0)&&M>=2&&M<=36),I=I.toString().replace(/\s+/g,"");var A=0;I[0]==="-"&&(A++,this.negative=1),A=0;A-=3)L=I[A]|I[A-1]<<8|I[A-2]<<16,this.words[B]|=L<>>26-P&67108863,P+=24,P>=26&&(P-=26,B++);else if(E==="le")for(A=0,B=0;A>>26-P&67108863,P+=24,P>=26&&(P-=26,B++);return this.strip()};function l(H,I){var M=H.charCodeAt(I);return M>=65&&M<=70?M-55:M>=97&&M<=102?M-87:M-48&15}function u(H,I,M){var E=l(H,M);return M-1>=I&&(E|=l(H,M-1)<<4),E}a.prototype._parseHex=function(I,M,E){this.length=Math.ceil((I.length-M)/6),this.words=new Array(this.length);for(var A=0;A=M;A-=2)P=u(I,M,A)<=18?(B-=18,L+=1,this.words[L]|=P>>>26):B+=8;else{var R=I.length-M;for(A=R%2===0?M+1:M;A=18?(B-=18,L+=1,this.words[L]|=P>>>26):B+=8}this.strip()};function p(H,I,M,E){for(var A=0,B=Math.min(H.length,M),L=I;L=49?A+=P-49+10:P>=17?A+=P-17+10:A+=P}return A}a.prototype._parseBase=function(I,M,E){this.words=[0],this.length=1;for(var A=0,B=1;B<=67108863;B*=M)A++;A--,B=B/M|0;for(var L=I.length-E,P=L%A,R=Math.min(L,L-P)+E,C=0,S=E;S1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},a.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var m=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],v=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];a.prototype.toString=function(I,M){I=I||10,M=M|0||1;var E;if(I===16||I==="hex"){E="";for(var A=0,B=0,L=0;L>>24-A&16777215,B!==0||L!==this.length-1?E=m[6-R.length]+R+E:E=R+E,A+=2,A>=26&&(A-=26,L--)}for(B!==0&&(E=B.toString(16)+E);E.length%M!==0;)E="0"+E;return this.negative!==0&&(E="-"+E),E}if(I===(I|0)&&I>=2&&I<=36){var C=d[I],S=v[I];E="";var D=this.clone();for(D.negative=0;!D.isZero();){var V=D.modn(S).toString(I);D=D.idivn(S),D.isZero()?E=V+E:E=m[C-V.length]+V+E}for(this.isZero()&&(E="0"+E);E.length%M!==0;)E="0"+E;return this.negative!==0&&(E="-"+E),E}h(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var I=this.words[0];return this.length===2?I+=this.words[1]*67108864:this.length===3&&this.words[2]===1?I+=4503599627370496+this.words[1]*67108864:this.length>2&&h(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-I:I},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(I,M){return h(typeof f<"u"),this.toArrayLike(f,I,M)},a.prototype.toArray=function(I,M){return this.toArrayLike(Array,I,M)},a.prototype.toArrayLike=function(I,M,E){var A=this.byteLength(),B=E||Math.max(1,A);h(A<=B,"byte array longer than desired length"),h(B>0,"Requested array length <= 0"),this.strip();var L=M==="le",P=new I(B),R,C,S=this.clone();if(L){for(C=0;!S.isZero();C++)R=S.andln(255),S.iushrn(8),P[C]=R;for(;C=4096&&(E+=13,M>>>=13),M>=64&&(E+=7,M>>>=7),M>=8&&(E+=4,M>>>=4),M>=2&&(E+=2,M>>>=2),E+M},a.prototype._zeroBits=function(I){if(I===0)return 26;var M=I,E=0;return M&8191||(E+=13,M>>>=13),M&127||(E+=7,M>>>=7),M&15||(E+=4,M>>>=4),M&3||(E+=2,M>>>=2),M&1||E++,E},a.prototype.bitLength=function(){var I=this.words[this.length-1],M=this._countBits(I);return(this.length-1)*26+M};function x(H){for(var I=new Array(H.bitLength()),M=0;M>>A}return I}a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var I=0,M=0;MI.length?this.clone().ior(I):I.clone().ior(this)},a.prototype.uor=function(I){return this.length>I.length?this.clone().iuor(I):I.clone().iuor(this)},a.prototype.iuand=function(I){var M;this.length>I.length?M=I:M=this;for(var E=0;EI.length?this.clone().iand(I):I.clone().iand(this)},a.prototype.uand=function(I){return this.length>I.length?this.clone().iuand(I):I.clone().iuand(this)},a.prototype.iuxor=function(I){var M,E;this.length>I.length?(M=this,E=I):(M=I,E=this);for(var A=0;AI.length?this.clone().ixor(I):I.clone().ixor(this)},a.prototype.uxor=function(I){return this.length>I.length?this.clone().iuxor(I):I.clone().iuxor(this)},a.prototype.inotn=function(I){h(typeof I=="number"&&I>=0);var M=Math.ceil(I/26)|0,E=I%26;this._expand(M),E>0&&M--;for(var A=0;A0&&(this.words[A]=~this.words[A]&67108863>>26-E),this.strip()},a.prototype.notn=function(I){return this.clone().inotn(I)},a.prototype.setn=function(I,M){h(typeof I=="number"&&I>=0);var E=I/26|0,A=I%26;return this._expand(E+1),M?this.words[E]=this.words[E]|1<I.length?(E=this,A=I):(E=I,A=this);for(var B=0,L=0;L>>26;for(;B!==0&&L>>26;if(this.length=E.length,B!==0)this.words[this.length]=B,this.length++;else if(E!==this)for(;LI.length?this.clone().iadd(I):I.clone().iadd(this)},a.prototype.isub=function(I){if(I.negative!==0){I.negative=0;var M=this.iadd(I);return I.negative=1,M._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(I),this.negative=1,this._normSign();var E=this.cmp(I);if(E===0)return this.negative=0,this.length=1,this.words[0]=0,this;var A,B;E>0?(A=this,B=I):(A=I,B=this);for(var L=0,P=0;P>26,this.words[P]=M&67108863;for(;L!==0&&P>26,this.words[P]=M&67108863;if(L===0&&P>>26,D=R&67108863,V=Math.min(C,I.length-1),te=Math.max(0,C-H.length+1);te<=V;te++){var oe=C-te|0;A=H.words[oe]|0,B=I.words[te]|0,L=A*B+D,S+=L/67108864|0,D=L&67108863}M.words[C]=D|0,R=S|0}return R!==0?M.words[C]=R|0:M.length--,M.strip()}var w=function(I,M,E){var A=I.words,B=M.words,L=E.words,P=0,R,C,S,D=A[0]|0,V=D&8191,te=D>>>13,oe=A[1]|0,he=oe&8191,Ne=oe>>>13,q=A[2]|0,ne=q&8191,Q=q>>>13,re=A[3]|0,ve=re&8191,Ce=re>>>13,ce=A[4]|0,se=ce&8191,ee=ce>>>13,G=A[5]|0,Z=G&8191,de=G>>>13,Ae=A[6]|0,K=Ae&8191,Te=Ae>>>13,Oe=A[7]|0,ie=Oe&8191,fe=Oe>>>13,we=A[8]|0,Fe=we&8191,Ue=we>>>13,Pe=A[9]|0,$e=Pe&8191,rt=Pe>>>13,Ze=B[0]|0,Se=Ze&8191,je=Ze>>>13,Ke=B[1]|0,st=Ke&8191,St=Ke>>>13,At=B[2]|0,bt=At&8191,wt=At>>>13,Dt=B[3]|0,gt=Dt&8191,xt=Dt>>>13,Bt=B[4]|0,kt=Bt&8191,er=Bt>>>13,zt=B[5]|0,Ct=zt&8191,Kt=zt>>>13,ir=B[6]|0,Nt=ir&8191,le=ir>>>13,Ee=B[7]|0,pe=Ee&8191,xe=Ee>>>13,ye=B[8]|0,_e=ye&8191,We=ye>>>13,Je=B[9]|0,Le=Je&8191,Ve=Je>>>13;E.negative=I.negative^M.negative,E.length=19,R=Math.imul(V,Se),C=Math.imul(V,je),C=C+Math.imul(te,Se)|0,S=Math.imul(te,je);var He=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(He>>>26)|0,He&=67108863,R=Math.imul(he,Se),C=Math.imul(he,je),C=C+Math.imul(Ne,Se)|0,S=Math.imul(Ne,je),R=R+Math.imul(V,st)|0,C=C+Math.imul(V,St)|0,C=C+Math.imul(te,st)|0,S=S+Math.imul(te,St)|0;var tt=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(tt>>>26)|0,tt&=67108863,R=Math.imul(ne,Se),C=Math.imul(ne,je),C=C+Math.imul(Q,Se)|0,S=Math.imul(Q,je),R=R+Math.imul(he,st)|0,C=C+Math.imul(he,St)|0,C=C+Math.imul(Ne,st)|0,S=S+Math.imul(Ne,St)|0,R=R+Math.imul(V,bt)|0,C=C+Math.imul(V,wt)|0,C=C+Math.imul(te,bt)|0,S=S+Math.imul(te,wt)|0;var me=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(me>>>26)|0,me&=67108863,R=Math.imul(ve,Se),C=Math.imul(ve,je),C=C+Math.imul(Ce,Se)|0,S=Math.imul(Ce,je),R=R+Math.imul(ne,st)|0,C=C+Math.imul(ne,St)|0,C=C+Math.imul(Q,st)|0,S=S+Math.imul(Q,St)|0,R=R+Math.imul(he,bt)|0,C=C+Math.imul(he,wt)|0,C=C+Math.imul(Ne,bt)|0,S=S+Math.imul(Ne,wt)|0,R=R+Math.imul(V,gt)|0,C=C+Math.imul(V,xt)|0,C=C+Math.imul(te,gt)|0,S=S+Math.imul(te,xt)|0;var Me=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Me>>>26)|0,Me&=67108863,R=Math.imul(se,Se),C=Math.imul(se,je),C=C+Math.imul(ee,Se)|0,S=Math.imul(ee,je),R=R+Math.imul(ve,st)|0,C=C+Math.imul(ve,St)|0,C=C+Math.imul(Ce,st)|0,S=S+Math.imul(Ce,St)|0,R=R+Math.imul(ne,bt)|0,C=C+Math.imul(ne,wt)|0,C=C+Math.imul(Q,bt)|0,S=S+Math.imul(Q,wt)|0,R=R+Math.imul(he,gt)|0,C=C+Math.imul(he,xt)|0,C=C+Math.imul(Ne,gt)|0,S=S+Math.imul(Ne,xt)|0,R=R+Math.imul(V,kt)|0,C=C+Math.imul(V,er)|0,C=C+Math.imul(te,kt)|0,S=S+Math.imul(te,er)|0;var Re=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Re>>>26)|0,Re&=67108863,R=Math.imul(Z,Se),C=Math.imul(Z,je),C=C+Math.imul(de,Se)|0,S=Math.imul(de,je),R=R+Math.imul(se,st)|0,C=C+Math.imul(se,St)|0,C=C+Math.imul(ee,st)|0,S=S+Math.imul(ee,St)|0,R=R+Math.imul(ve,bt)|0,C=C+Math.imul(ve,wt)|0,C=C+Math.imul(Ce,bt)|0,S=S+Math.imul(Ce,wt)|0,R=R+Math.imul(ne,gt)|0,C=C+Math.imul(ne,xt)|0,C=C+Math.imul(Q,gt)|0,S=S+Math.imul(Q,xt)|0,R=R+Math.imul(he,kt)|0,C=C+Math.imul(he,er)|0,C=C+Math.imul(Ne,kt)|0,S=S+Math.imul(Ne,er)|0,R=R+Math.imul(V,Ct)|0,C=C+Math.imul(V,Kt)|0,C=C+Math.imul(te,Ct)|0,S=S+Math.imul(te,Kt)|0;var Qe=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Qe>>>26)|0,Qe&=67108863,R=Math.imul(K,Se),C=Math.imul(K,je),C=C+Math.imul(Te,Se)|0,S=Math.imul(Te,je),R=R+Math.imul(Z,st)|0,C=C+Math.imul(Z,St)|0,C=C+Math.imul(de,st)|0,S=S+Math.imul(de,St)|0,R=R+Math.imul(se,bt)|0,C=C+Math.imul(se,wt)|0,C=C+Math.imul(ee,bt)|0,S=S+Math.imul(ee,wt)|0,R=R+Math.imul(ve,gt)|0,C=C+Math.imul(ve,xt)|0,C=C+Math.imul(Ce,gt)|0,S=S+Math.imul(Ce,xt)|0,R=R+Math.imul(ne,kt)|0,C=C+Math.imul(ne,er)|0,C=C+Math.imul(Q,kt)|0,S=S+Math.imul(Q,er)|0,R=R+Math.imul(he,Ct)|0,C=C+Math.imul(he,Kt)|0,C=C+Math.imul(Ne,Ct)|0,S=S+Math.imul(Ne,Kt)|0,R=R+Math.imul(V,Nt)|0,C=C+Math.imul(V,le)|0,C=C+Math.imul(te,Nt)|0,S=S+Math.imul(te,le)|0;var lt=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(lt>>>26)|0,lt&=67108863,R=Math.imul(ie,Se),C=Math.imul(ie,je),C=C+Math.imul(fe,Se)|0,S=Math.imul(fe,je),R=R+Math.imul(K,st)|0,C=C+Math.imul(K,St)|0,C=C+Math.imul(Te,st)|0,S=S+Math.imul(Te,St)|0,R=R+Math.imul(Z,bt)|0,C=C+Math.imul(Z,wt)|0,C=C+Math.imul(de,bt)|0,S=S+Math.imul(de,wt)|0,R=R+Math.imul(se,gt)|0,C=C+Math.imul(se,xt)|0,C=C+Math.imul(ee,gt)|0,S=S+Math.imul(ee,xt)|0,R=R+Math.imul(ve,kt)|0,C=C+Math.imul(ve,er)|0,C=C+Math.imul(Ce,kt)|0,S=S+Math.imul(Ce,er)|0,R=R+Math.imul(ne,Ct)|0,C=C+Math.imul(ne,Kt)|0,C=C+Math.imul(Q,Ct)|0,S=S+Math.imul(Q,Kt)|0,R=R+Math.imul(he,Nt)|0,C=C+Math.imul(he,le)|0,C=C+Math.imul(Ne,Nt)|0,S=S+Math.imul(Ne,le)|0,R=R+Math.imul(V,pe)|0,C=C+Math.imul(V,xe)|0,C=C+Math.imul(te,pe)|0,S=S+Math.imul(te,xe)|0;var Et=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Et>>>26)|0,Et&=67108863,R=Math.imul(Fe,Se),C=Math.imul(Fe,je),C=C+Math.imul(Ue,Se)|0,S=Math.imul(Ue,je),R=R+Math.imul(ie,st)|0,C=C+Math.imul(ie,St)|0,C=C+Math.imul(fe,st)|0,S=S+Math.imul(fe,St)|0,R=R+Math.imul(K,bt)|0,C=C+Math.imul(K,wt)|0,C=C+Math.imul(Te,bt)|0,S=S+Math.imul(Te,wt)|0,R=R+Math.imul(Z,gt)|0,C=C+Math.imul(Z,xt)|0,C=C+Math.imul(de,gt)|0,S=S+Math.imul(de,xt)|0,R=R+Math.imul(se,kt)|0,C=C+Math.imul(se,er)|0,C=C+Math.imul(ee,kt)|0,S=S+Math.imul(ee,er)|0,R=R+Math.imul(ve,Ct)|0,C=C+Math.imul(ve,Kt)|0,C=C+Math.imul(Ce,Ct)|0,S=S+Math.imul(Ce,Kt)|0,R=R+Math.imul(ne,Nt)|0,C=C+Math.imul(ne,le)|0,C=C+Math.imul(Q,Nt)|0,S=S+Math.imul(Q,le)|0,R=R+Math.imul(he,pe)|0,C=C+Math.imul(he,xe)|0,C=C+Math.imul(Ne,pe)|0,S=S+Math.imul(Ne,xe)|0,R=R+Math.imul(V,_e)|0,C=C+Math.imul(V,We)|0,C=C+Math.imul(te,_e)|0,S=S+Math.imul(te,We)|0;var Ot=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,R=Math.imul($e,Se),C=Math.imul($e,je),C=C+Math.imul(rt,Se)|0,S=Math.imul(rt,je),R=R+Math.imul(Fe,st)|0,C=C+Math.imul(Fe,St)|0,C=C+Math.imul(Ue,st)|0,S=S+Math.imul(Ue,St)|0,R=R+Math.imul(ie,bt)|0,C=C+Math.imul(ie,wt)|0,C=C+Math.imul(fe,bt)|0,S=S+Math.imul(fe,wt)|0,R=R+Math.imul(K,gt)|0,C=C+Math.imul(K,xt)|0,C=C+Math.imul(Te,gt)|0,S=S+Math.imul(Te,xt)|0,R=R+Math.imul(Z,kt)|0,C=C+Math.imul(Z,er)|0,C=C+Math.imul(de,kt)|0,S=S+Math.imul(de,er)|0,R=R+Math.imul(se,Ct)|0,C=C+Math.imul(se,Kt)|0,C=C+Math.imul(ee,Ct)|0,S=S+Math.imul(ee,Kt)|0,R=R+Math.imul(ve,Nt)|0,C=C+Math.imul(ve,le)|0,C=C+Math.imul(Ce,Nt)|0,S=S+Math.imul(Ce,le)|0,R=R+Math.imul(ne,pe)|0,C=C+Math.imul(ne,xe)|0,C=C+Math.imul(Q,pe)|0,S=S+Math.imul(Q,xe)|0,R=R+Math.imul(he,_e)|0,C=C+Math.imul(he,We)|0,C=C+Math.imul(Ne,_e)|0,S=S+Math.imul(Ne,We)|0,R=R+Math.imul(V,Le)|0,C=C+Math.imul(V,Ve)|0,C=C+Math.imul(te,Le)|0,S=S+Math.imul(te,Ve)|0;var sr=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(sr>>>26)|0,sr&=67108863,R=Math.imul($e,st),C=Math.imul($e,St),C=C+Math.imul(rt,st)|0,S=Math.imul(rt,St),R=R+Math.imul(Fe,bt)|0,C=C+Math.imul(Fe,wt)|0,C=C+Math.imul(Ue,bt)|0,S=S+Math.imul(Ue,wt)|0,R=R+Math.imul(ie,gt)|0,C=C+Math.imul(ie,xt)|0,C=C+Math.imul(fe,gt)|0,S=S+Math.imul(fe,xt)|0,R=R+Math.imul(K,kt)|0,C=C+Math.imul(K,er)|0,C=C+Math.imul(Te,kt)|0,S=S+Math.imul(Te,er)|0,R=R+Math.imul(Z,Ct)|0,C=C+Math.imul(Z,Kt)|0,C=C+Math.imul(de,Ct)|0,S=S+Math.imul(de,Kt)|0,R=R+Math.imul(se,Nt)|0,C=C+Math.imul(se,le)|0,C=C+Math.imul(ee,Nt)|0,S=S+Math.imul(ee,le)|0,R=R+Math.imul(ve,pe)|0,C=C+Math.imul(ve,xe)|0,C=C+Math.imul(Ce,pe)|0,S=S+Math.imul(Ce,xe)|0,R=R+Math.imul(ne,_e)|0,C=C+Math.imul(ne,We)|0,C=C+Math.imul(Q,_e)|0,S=S+Math.imul(Q,We)|0,R=R+Math.imul(he,Le)|0,C=C+Math.imul(he,Ve)|0,C=C+Math.imul(Ne,Le)|0,S=S+Math.imul(Ne,Ve)|0;var Wr=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,R=Math.imul($e,bt),C=Math.imul($e,wt),C=C+Math.imul(rt,bt)|0,S=Math.imul(rt,wt),R=R+Math.imul(Fe,gt)|0,C=C+Math.imul(Fe,xt)|0,C=C+Math.imul(Ue,gt)|0,S=S+Math.imul(Ue,xt)|0,R=R+Math.imul(ie,kt)|0,C=C+Math.imul(ie,er)|0,C=C+Math.imul(fe,kt)|0,S=S+Math.imul(fe,er)|0,R=R+Math.imul(K,Ct)|0,C=C+Math.imul(K,Kt)|0,C=C+Math.imul(Te,Ct)|0,S=S+Math.imul(Te,Kt)|0,R=R+Math.imul(Z,Nt)|0,C=C+Math.imul(Z,le)|0,C=C+Math.imul(de,Nt)|0,S=S+Math.imul(de,le)|0,R=R+Math.imul(se,pe)|0,C=C+Math.imul(se,xe)|0,C=C+Math.imul(ee,pe)|0,S=S+Math.imul(ee,xe)|0,R=R+Math.imul(ve,_e)|0,C=C+Math.imul(ve,We)|0,C=C+Math.imul(Ce,_e)|0,S=S+Math.imul(Ce,We)|0,R=R+Math.imul(ne,Le)|0,C=C+Math.imul(ne,Ve)|0,C=C+Math.imul(Q,Le)|0,S=S+Math.imul(Q,Ve)|0;var Rr=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Rr>>>26)|0,Rr&=67108863,R=Math.imul($e,gt),C=Math.imul($e,xt),C=C+Math.imul(rt,gt)|0,S=Math.imul(rt,xt),R=R+Math.imul(Fe,kt)|0,C=C+Math.imul(Fe,er)|0,C=C+Math.imul(Ue,kt)|0,S=S+Math.imul(Ue,er)|0,R=R+Math.imul(ie,Ct)|0,C=C+Math.imul(ie,Kt)|0,C=C+Math.imul(fe,Ct)|0,S=S+Math.imul(fe,Kt)|0,R=R+Math.imul(K,Nt)|0,C=C+Math.imul(K,le)|0,C=C+Math.imul(Te,Nt)|0,S=S+Math.imul(Te,le)|0,R=R+Math.imul(Z,pe)|0,C=C+Math.imul(Z,xe)|0,C=C+Math.imul(de,pe)|0,S=S+Math.imul(de,xe)|0,R=R+Math.imul(se,_e)|0,C=C+Math.imul(se,We)|0,C=C+Math.imul(ee,_e)|0,S=S+Math.imul(ee,We)|0,R=R+Math.imul(ve,Le)|0,C=C+Math.imul(ve,Ve)|0,C=C+Math.imul(Ce,Le)|0,S=S+Math.imul(Ce,Ve)|0;var br=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(br>>>26)|0,br&=67108863,R=Math.imul($e,kt),C=Math.imul($e,er),C=C+Math.imul(rt,kt)|0,S=Math.imul(rt,er),R=R+Math.imul(Fe,Ct)|0,C=C+Math.imul(Fe,Kt)|0,C=C+Math.imul(Ue,Ct)|0,S=S+Math.imul(Ue,Kt)|0,R=R+Math.imul(ie,Nt)|0,C=C+Math.imul(ie,le)|0,C=C+Math.imul(fe,Nt)|0,S=S+Math.imul(fe,le)|0,R=R+Math.imul(K,pe)|0,C=C+Math.imul(K,xe)|0,C=C+Math.imul(Te,pe)|0,S=S+Math.imul(Te,xe)|0,R=R+Math.imul(Z,_e)|0,C=C+Math.imul(Z,We)|0,C=C+Math.imul(de,_e)|0,S=S+Math.imul(de,We)|0,R=R+Math.imul(se,Le)|0,C=C+Math.imul(se,Ve)|0,C=C+Math.imul(ee,Le)|0,S=S+Math.imul(ee,Ve)|0;var Vr=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,R=Math.imul($e,Ct),C=Math.imul($e,Kt),C=C+Math.imul(rt,Ct)|0,S=Math.imul(rt,Kt),R=R+Math.imul(Fe,Nt)|0,C=C+Math.imul(Fe,le)|0,C=C+Math.imul(Ue,Nt)|0,S=S+Math.imul(Ue,le)|0,R=R+Math.imul(ie,pe)|0,C=C+Math.imul(ie,xe)|0,C=C+Math.imul(fe,pe)|0,S=S+Math.imul(fe,xe)|0,R=R+Math.imul(K,_e)|0,C=C+Math.imul(K,We)|0,C=C+Math.imul(Te,_e)|0,S=S+Math.imul(Te,We)|0,R=R+Math.imul(Z,Le)|0,C=C+Math.imul(Z,Ve)|0,C=C+Math.imul(de,Le)|0,S=S+Math.imul(de,Ve)|0;var yn=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(yn>>>26)|0,yn&=67108863,R=Math.imul($e,Nt),C=Math.imul($e,le),C=C+Math.imul(rt,Nt)|0,S=Math.imul(rt,le),R=R+Math.imul(Fe,pe)|0,C=C+Math.imul(Fe,xe)|0,C=C+Math.imul(Ue,pe)|0,S=S+Math.imul(Ue,xe)|0,R=R+Math.imul(ie,_e)|0,C=C+Math.imul(ie,We)|0,C=C+Math.imul(fe,_e)|0,S=S+Math.imul(fe,We)|0,R=R+Math.imul(K,Le)|0,C=C+Math.imul(K,Ve)|0,C=C+Math.imul(Te,Le)|0,S=S+Math.imul(Te,Ve)|0;var ar=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(ar>>>26)|0,ar&=67108863,R=Math.imul($e,pe),C=Math.imul($e,xe),C=C+Math.imul(rt,pe)|0,S=Math.imul(rt,xe),R=R+Math.imul(Fe,_e)|0,C=C+Math.imul(Fe,We)|0,C=C+Math.imul(Ue,_e)|0,S=S+Math.imul(Ue,We)|0,R=R+Math.imul(ie,Le)|0,C=C+Math.imul(ie,Ve)|0,C=C+Math.imul(fe,Le)|0,S=S+Math.imul(fe,Ve)|0;var Vn=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,R=Math.imul($e,_e),C=Math.imul($e,We),C=C+Math.imul(rt,_e)|0,S=Math.imul(rt,We),R=R+Math.imul(Fe,Le)|0,C=C+Math.imul(Fe,Ve)|0,C=C+Math.imul(Ue,Le)|0,S=S+Math.imul(Ue,Ve)|0;var Gn=(P+R|0)+((C&8191)<<13)|0;P=(S+(C>>>13)|0)+(Gn>>>26)|0,Gn&=67108863,R=Math.imul($e,Le),C=Math.imul($e,Ve),C=C+Math.imul(rt,Le)|0,S=Math.imul(rt,Ve);var Kn=(P+R|0)+((C&8191)<<13)|0;return P=(S+(C>>>13)|0)+(Kn>>>26)|0,Kn&=67108863,L[0]=He,L[1]=tt,L[2]=me,L[3]=Me,L[4]=Re,L[5]=Qe,L[6]=lt,L[7]=Et,L[8]=Ot,L[9]=sr,L[10]=Wr,L[11]=Rr,L[12]=br,L[13]=Vr,L[14]=yn,L[15]=ar,L[16]=Vn,L[17]=Gn,L[18]=Kn,P!==0&&(L[19]=P,E.length++),E};Math.imul||(w=g);function y(H,I,M){M.negative=I.negative^H.negative,M.length=H.length+I.length;for(var E=0,A=0,B=0;B>>26)|0,A+=L>>>26,L&=67108863}M.words[B]=P,E=L,L=A}return E!==0?M.words[B]=E:M.length--,M.strip()}function _(H,I,M){var E=new k;return E.mulp(H,I,M)}a.prototype.mulTo=function(I,M){var E,A=this.length+I.length;return this.length===10&&I.length===10?E=w(this,I,M):A<63?E=g(this,I,M):A<1024?E=y(this,I,M):E=_(this,I,M),E};function k(H,I){this.x=H,this.y=I}k.prototype.makeRBT=function(I){for(var M=new Array(I),E=a.prototype._countBits(I)-1,A=0;A>=1;return A},k.prototype.permute=function(I,M,E,A,B,L){for(var P=0;P>>1)B++;return 1<>>13,E[2*L+1]=B&8191,B=B>>>13;for(L=2*M;L>=26,M+=A/67108864|0,M+=B>>>26,this.words[E]=B&67108863}return M!==0&&(this.words[E]=M,this.length++),this},a.prototype.muln=function(I){return this.clone().imuln(I)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(I){var M=x(I);if(M.length===0)return new a(1);for(var E=this,A=0;A=0);var M=I%26,E=(I-M)/26,A=67108863>>>26-M<<26-M,B;if(M!==0){var L=0;for(B=0;B>>26-M}L&&(this.words[B]=L,this.length++)}if(E!==0){for(B=this.length-1;B>=0;B--)this.words[B+E]=this.words[B];for(B=0;B=0);var A;M?A=(M-M%26)/26:A=0;var B=I%26,L=Math.min((I-B)/26,this.length),P=67108863^67108863>>>B<L)for(this.length-=L,C=0;C=0&&(S!==0||C>=A);C--){var D=this.words[C]|0;this.words[C]=S<<26-B|D>>>B,S=D&P}return R&&S!==0&&(R.words[R.length++]=S),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(I,M,E){return h(this.negative===0),this.iushrn(I,M,E)},a.prototype.shln=function(I){return this.clone().ishln(I)},a.prototype.ushln=function(I){return this.clone().iushln(I)},a.prototype.shrn=function(I){return this.clone().ishrn(I)},a.prototype.ushrn=function(I){return this.clone().iushrn(I)},a.prototype.testn=function(I){h(typeof I=="number"&&I>=0);var M=I%26,E=(I-M)/26,A=1<=0);var M=I%26,E=(I-M)/26;if(h(this.negative===0,"imaskn works only with positive numbers"),this.length<=E)return this;if(M!==0&&E++,this.length=Math.min(E,this.length),M!==0){var A=67108863^67108863>>>M<=67108864;M++)this.words[M]-=67108864,M===this.length-1?this.words[M+1]=1:this.words[M+1]++;return this.length=Math.max(this.length,M+1),this},a.prototype.isubn=function(I){if(h(typeof I=="number"),h(I<67108864),I<0)return this.iaddn(-I);if(this.negative!==0)return this.negative=0,this.iaddn(I),this.negative=1,this;if(this.words[0]-=I,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var M=0;M>26)-(R/67108864|0),this.words[B+E]=L&67108863}for(;B>26,this.words[B+E]=L&67108863;if(P===0)return this.strip();for(h(P===-1),P=0,B=0;B>26,this.words[B]=L&67108863;return this.negative=1,this.strip()},a.prototype._wordDiv=function(I,M){var E=this.length-I.length,A=this.clone(),B=I,L=B.words[B.length-1]|0,P=this._countBits(L);E=26-P,E!==0&&(B=B.ushln(E),A.iushln(E),L=B.words[B.length-1]|0);var R=A.length-B.length,C;if(M!=="mod"){C=new a(null),C.length=R+1,C.words=new Array(C.length);for(var S=0;S=0;V--){var te=(A.words[B.length+V]|0)*67108864+(A.words[B.length+V-1]|0);for(te=Math.min(te/L|0,67108863),A._ishlnsubmul(B,te,V);A.negative!==0;)te--,A.negative=0,A._ishlnsubmul(B,1,V),A.isZero()||(A.negative^=1);C&&(C.words[V]=te)}return C&&C.strip(),A.strip(),M!=="div"&&E!==0&&A.iushrn(E),{div:C||null,mod:A}},a.prototype.divmod=function(I,M,E){if(h(!I.isZero()),this.isZero())return{div:new a(0),mod:new a(0)};var A,B,L;return this.negative!==0&&I.negative===0?(L=this.neg().divmod(I,M),M!=="mod"&&(A=L.div.neg()),M!=="div"&&(B=L.mod.neg(),E&&B.negative!==0&&B.iadd(I)),{div:A,mod:B}):this.negative===0&&I.negative!==0?(L=this.divmod(I.neg(),M),M!=="mod"&&(A=L.div.neg()),{div:A,mod:L.mod}):this.negative&I.negative?(L=this.neg().divmod(I.neg(),M),M!=="div"&&(B=L.mod.neg(),E&&B.negative!==0&&B.isub(I)),{div:L.div,mod:B}):I.length>this.length||this.cmp(I)<0?{div:new a(0),mod:this}:I.length===1?M==="div"?{div:this.divn(I.words[0]),mod:null}:M==="mod"?{div:null,mod:new a(this.modn(I.words[0]))}:{div:this.divn(I.words[0]),mod:new a(this.modn(I.words[0]))}:this._wordDiv(I,M)},a.prototype.div=function(I){return this.divmod(I,"div",!1).div},a.prototype.mod=function(I){return this.divmod(I,"mod",!1).mod},a.prototype.umod=function(I){return this.divmod(I,"mod",!0).mod},a.prototype.divRound=function(I){var M=this.divmod(I);if(M.mod.isZero())return M.div;var E=M.div.negative!==0?M.mod.isub(I):M.mod,A=I.ushrn(1),B=I.andln(1),L=E.cmp(A);return L<0||B===1&&L===0?M.div:M.div.negative!==0?M.div.isubn(1):M.div.iaddn(1)},a.prototype.modn=function(I){h(I<=67108863);for(var M=(1<<26)%I,E=0,A=this.length-1;A>=0;A--)E=(M*E+(this.words[A]|0))%I;return E},a.prototype.idivn=function(I){h(I<=67108863);for(var M=0,E=this.length-1;E>=0;E--){var A=(this.words[E]|0)+M*67108864;this.words[E]=A/I|0,M=A%I}return this.strip()},a.prototype.divn=function(I){return this.clone().idivn(I)},a.prototype.egcd=function(I){h(I.negative===0),h(!I.isZero());var M=this,E=I.clone();M.negative!==0?M=M.umod(I):M=M.clone();for(var A=new a(1),B=new a(0),L=new a(0),P=new a(1),R=0;M.isEven()&&E.isEven();)M.iushrn(1),E.iushrn(1),++R;for(var C=E.clone(),S=M.clone();!M.isZero();){for(var D=0,V=1;!(M.words[0]&V)&&D<26;++D,V<<=1);if(D>0)for(M.iushrn(D);D-- >0;)(A.isOdd()||B.isOdd())&&(A.iadd(C),B.isub(S)),A.iushrn(1),B.iushrn(1);for(var te=0,oe=1;!(E.words[0]&oe)&&te<26;++te,oe<<=1);if(te>0)for(E.iushrn(te);te-- >0;)(L.isOdd()||P.isOdd())&&(L.iadd(C),P.isub(S)),L.iushrn(1),P.iushrn(1);M.cmp(E)>=0?(M.isub(E),A.isub(L),B.isub(P)):(E.isub(M),L.isub(A),P.isub(B))}return{a:L,b:P,gcd:E.iushln(R)}},a.prototype._invmp=function(I){h(I.negative===0),h(!I.isZero());var M=this,E=I.clone();M.negative!==0?M=M.umod(I):M=M.clone();for(var A=new a(1),B=new a(0),L=E.clone();M.cmpn(1)>0&&E.cmpn(1)>0;){for(var P=0,R=1;!(M.words[0]&R)&&P<26;++P,R<<=1);if(P>0)for(M.iushrn(P);P-- >0;)A.isOdd()&&A.iadd(L),A.iushrn(1);for(var C=0,S=1;!(E.words[0]&S)&&C<26;++C,S<<=1);if(C>0)for(E.iushrn(C);C-- >0;)B.isOdd()&&B.iadd(L),B.iushrn(1);M.cmp(E)>=0?(M.isub(E),A.isub(B)):(E.isub(M),B.isub(A))}var D;return M.cmpn(1)===0?D=A:D=B,D.cmpn(0)<0&&D.iadd(I),D},a.prototype.gcd=function(I){if(this.isZero())return I.abs();if(I.isZero())return this.abs();var M=this.clone(),E=I.clone();M.negative=0,E.negative=0;for(var A=0;M.isEven()&&E.isEven();A++)M.iushrn(1),E.iushrn(1);do{for(;M.isEven();)M.iushrn(1);for(;E.isEven();)E.iushrn(1);var B=M.cmp(E);if(B<0){var L=M;M=E,E=L}else if(B===0||E.cmpn(1)===0)break;M.isub(E)}while(!0);return E.iushln(A)},a.prototype.invm=function(I){return this.egcd(I).a.umod(I)},a.prototype.isEven=function(){return(this.words[0]&1)===0},a.prototype.isOdd=function(){return(this.words[0]&1)===1},a.prototype.andln=function(I){return this.words[0]&I},a.prototype.bincn=function(I){h(typeof I=="number");var M=I%26,E=(I-M)/26,A=1<>>26,P&=67108863,this.words[L]=P}return B!==0&&(this.words[L]=B,this.length++),this},a.prototype.isZero=function(){return this.length===1&&this.words[0]===0},a.prototype.cmpn=function(I){var M=I<0;if(this.negative!==0&&!M)return-1;if(this.negative===0&&M)return 1;this.strip();var E;if(this.length>1)E=1;else{M&&(I=-I),h(I<=67108863,"Number is too big");var A=this.words[0]|0;E=A===I?0:AI.length)return 1;if(this.length=0;E--){var A=this.words[E]|0,B=I.words[E]|0;if(A!==B){AB&&(M=1);break}}return M},a.prototype.gtn=function(I){return this.cmpn(I)===1},a.prototype.gt=function(I){return this.cmp(I)===1},a.prototype.gten=function(I){return this.cmpn(I)>=0},a.prototype.gte=function(I){return this.cmp(I)>=0},a.prototype.ltn=function(I){return this.cmpn(I)===-1},a.prototype.lt=function(I){return this.cmp(I)===-1},a.prototype.lten=function(I){return this.cmpn(I)<=0},a.prototype.lte=function(I){return this.cmp(I)<=0},a.prototype.eqn=function(I){return this.cmpn(I)===0},a.prototype.eq=function(I){return this.cmp(I)===0},a.red=function(I){return new X(I)},a.prototype.toRed=function(I){return h(!this.red,"Already a number in reduction context"),h(this.negative===0,"red works only with positives"),I.convertTo(this)._forceRed(I)},a.prototype.fromRed=function(){return h(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(I){return this.red=I,this},a.prototype.forceRed=function(I){return h(!this.red,"Already a number in reduction context"),this._forceRed(I)},a.prototype.redAdd=function(I){return h(this.red,"redAdd works only with red numbers"),this.red.add(this,I)},a.prototype.redIAdd=function(I){return h(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,I)},a.prototype.redSub=function(I){return h(this.red,"redSub works only with red numbers"),this.red.sub(this,I)},a.prototype.redISub=function(I){return h(this.red,"redISub works only with red numbers"),this.red.isub(this,I)},a.prototype.redShl=function(I){return h(this.red,"redShl works only with red numbers"),this.red.shl(this,I)},a.prototype.redMul=function(I){return h(this.red,"redMul works only with red numbers"),this.red._verify2(this,I),this.red.mul(this,I)},a.prototype.redIMul=function(I){return h(this.red,"redMul works only with red numbers"),this.red._verify2(this,I),this.red.imul(this,I)},a.prototype.redSqr=function(){return h(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return h(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return h(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return h(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return h(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(I){return h(this.red&&!I.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,I)};var F={k256:null,p224:null,p192:null,p25519:null};function O(H,I){this.name=H,this.p=new a(I,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}O.prototype._tmp=function(){var I=new a(null);return I.words=new Array(Math.ceil(this.n/13)),I},O.prototype.ireduce=function(I){var M=I,E;do this.split(M,this.tmp),M=this.imulK(M),M=M.iadd(this.tmp),E=M.bitLength();while(E>this.n);var A=E0?M.isub(this.p):M.strip!==void 0?M.strip():M._strip(),M},O.prototype.split=function(I,M){I.iushrn(this.n,0,M)},O.prototype.imulK=function(I){return I.imul(this.k)};function N(){O.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}c(N,O),N.prototype.split=function(I,M){for(var E=4194303,A=Math.min(I.length,9),B=0;B>>22,L=P}L>>>=22,I.words[B-10]=L,L===0&&I.length>10?I.length-=10:I.length-=9},N.prototype.imulK=function(I){I.words[I.length]=0,I.words[I.length+1]=0,I.length+=2;for(var M=0,E=0;E>>=26,I.words[E]=B,M=A}return M!==0&&(I.words[I.length++]=M),I},a._prime=function(I){if(F[I])return F[I];var M;if(I==="k256")M=new N;else if(I==="p224")M=new U;else if(I==="p192")M=new z;else if(I==="p25519")M=new W;else throw new Error("Unknown prime "+I);return F[I]=M,M};function X(H){if(typeof H=="string"){var I=a._prime(H);this.m=I.p,this.prime=I}else h(H.gtn(1),"modulus must be greater than 1"),this.m=H,this.prime=null}X.prototype._verify1=function(I){h(I.negative===0,"red works only with positives"),h(I.red,"red works only with red numbers")},X.prototype._verify2=function(I,M){h((I.negative|M.negative)===0,"red works only with positives"),h(I.red&&I.red===M.red,"red works only with red numbers")},X.prototype.imod=function(I){return this.prime?this.prime.ireduce(I)._forceRed(this):I.umod(this.m)._forceRed(this)},X.prototype.neg=function(I){return I.isZero()?I.clone():this.m.sub(I)._forceRed(this)},X.prototype.add=function(I,M){this._verify2(I,M);var E=I.add(M);return E.cmp(this.m)>=0&&E.isub(this.m),E._forceRed(this)},X.prototype.iadd=function(I,M){this._verify2(I,M);var E=I.iadd(M);return E.cmp(this.m)>=0&&E.isub(this.m),E},X.prototype.sub=function(I,M){this._verify2(I,M);var E=I.sub(M);return E.cmpn(0)<0&&E.iadd(this.m),E._forceRed(this)},X.prototype.isub=function(I,M){this._verify2(I,M);var E=I.isub(M);return E.cmpn(0)<0&&E.iadd(this.m),E},X.prototype.shl=function(I,M){return this._verify1(I),this.imod(I.ushln(M))},X.prototype.imul=function(I,M){return this._verify2(I,M),this.imod(I.imul(M))},X.prototype.mul=function(I,M){return this._verify2(I,M),this.imod(I.mul(M))},X.prototype.isqr=function(I){return this.imul(I,I.clone())},X.prototype.sqr=function(I){return this.mul(I,I)},X.prototype.sqrt=function(I){if(I.isZero())return I.clone();var M=this.m.andln(3);if(h(M%2===1),M===3){var E=this.m.add(new a(1)).iushrn(2);return this.pow(I,E)}for(var A=this.m.subn(1),B=0;!A.isZero()&&A.andln(1)===0;)B++,A.iushrn(1);h(!A.isZero());var L=new a(1).toRed(this),P=L.redNeg(),R=this.m.subn(1).iushrn(1),C=this.m.bitLength();for(C=new a(2*C*C).toRed(this);this.pow(C,R).cmp(P)!==0;)C.redIAdd(P);for(var S=this.pow(C,A),D=this.pow(I,A.addn(1).iushrn(1)),V=this.pow(I,A),te=B;V.cmp(L)!==0;){for(var oe=V,he=0;oe.cmp(L)!==0;he++)oe=oe.redSqr();h(he=0;B--){for(var S=M.words[B],D=C-1;D>=0;D--){var V=S>>D&1;if(L!==A[0]&&(L=this.sqr(L)),V===0&&P===0){R=0;continue}P<<=1,P|=V,R++,!(R!==E&&(B!==0||D!==0))&&(L=this.mul(L,A[P]),R=0,P=0)}C=26}return L},X.prototype.convertTo=function(I){var M=I.umod(this.m);return M===I?M.clone():M},X.prototype.convertFrom=function(I){var M=I.clone();return M.red=null,M},a.mont=function(I){return new J(I)};function J(H){X.call(this,H),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}c(J,X),J.prototype.convertTo=function(I){return this.imod(I.ushln(this.shift))},J.prototype.convertFrom=function(I){var M=this.imod(I.mul(this.rinv));return M.red=null,M},J.prototype.imul=function(I,M){if(I.isZero()||M.isZero())return I.words[0]=0,I.length=1,I;var E=I.imul(M),A=E.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),B=E.isub(A).iushrn(this.shift),L=B;return B.cmp(this.m)>=0?L=B.isub(this.m):B.cmpn(0)<0&&(L=B.iadd(this.m)),L._forceRed(this)},J.prototype.mul=function(I,M){if(I.isZero()||M.isZero())return new a(0)._forceRed(this);var E=I.mul(M),A=E.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),B=E.isub(A).iushrn(this.shift),L=B;return B.cmp(this.m)>=0?L=B.isub(this.m):B.cmpn(0)<0&&(L=B.iadd(this.m)),L._forceRed(this)},J.prototype.invm=function(I){var M=this.imod(I._invmp(this.m).mul(this.r2));return M._forceRed(this)}})(typeof n>"u"||n,void 0)},{buffer:188}],185:[function(e,n,i){i.byteLength=u,i.toByteArray=m,i.fromByteArray=x;for(var s=[],o=[],h=typeof Uint8Array<"u"?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=c.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var y=g.indexOf("=");y===-1&&(y=w);var _=y===w?0:4-y%4;return[y,_]}function u(g){var w=l(g),y=w[0],_=w[1];return(y+_)*3/4-_}function p(g,w,y){return(w+y)*3/4-y}function m(g){var w,y=l(g),_=y[0],k=y[1],F=new h(p(g,_,k)),O=0,N=k>0?_-4:_,U;for(U=0;U>16&255,F[O++]=w>>8&255,F[O++]=w&255;return k===2&&(w=o[g.charCodeAt(U)]<<2|o[g.charCodeAt(U+1)]>>4,F[O++]=w&255),k===1&&(w=o[g.charCodeAt(U)]<<10|o[g.charCodeAt(U+1)]<<4|o[g.charCodeAt(U+2)]>>2,F[O++]=w>>8&255,F[O++]=w&255),F}function d(g){return s[g>>18&63]+s[g>>12&63]+s[g>>6&63]+s[g&63]}function v(g,w,y){for(var _,k=[],F=w;FN?N:O+F));return _===1?(w=g[y-1],k.push(s[w>>2]+s[w<<4&63]+"==")):_===2&&(w=(g[y-2]<<8)+g[y-1],k.push(s[w>>10]+s[w>>4&63]+s[w<<2&63]+"=")),k.join("")}},{}],186:[function(e,n,i){(function(s,o){function h(M,E){if(!M)throw new Error(E||"Assertion failed")}function c(M,E){M.super_=E;var A=function(){};A.prototype=E.prototype,M.prototype=new A,M.prototype.constructor=M}function a(M,E,A){if(a.isBN(M))return M;this.negative=0,this.words=null,this.length=0,this.red=null,M!==null&&((E==="le"||E==="be")&&(A=E,E=10),this._init(M||0,E||10,A||"be"))}typeof s=="object"?s.exports=a:o.BN=a,a.BN=a,a.wordSize=26;var f;try{typeof window<"u"&&typeof window.Buffer<"u"?f=window.Buffer:f=e("buffer").Buffer}catch{}a.isBN=function(E){return E instanceof a?!0:E!==null&&typeof E=="object"&&E.constructor.wordSize===a.wordSize&&Array.isArray(E.words)},a.max=function(E,A){return E.cmp(A)>0?E:A},a.min=function(E,A){return E.cmp(A)<0?E:A},a.prototype._init=function(E,A,B){if(typeof E=="number")return this._initNumber(E,A,B);if(typeof E=="object")return this._initArray(E,A,B);A==="hex"&&(A=16),h(A===(A|0)&&A>=2&&A<=36),E=E.toString().replace(/\s+/g,"");var L=0;E[0]==="-"&&(L++,this.negative=1),L=0;L-=3)R=E[L]|E[L-1]<<8|E[L-2]<<16,this.words[P]|=R<>>26-C&67108863,C+=24,C>=26&&(C-=26,P++);else if(B==="le")for(L=0,P=0;L>>26-C&67108863,C+=24,C>=26&&(C-=26,P++);return this._strip()};function l(M,E){var A=M.charCodeAt(E);if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-55;if(A>=97&&A<=102)return A-87;h(!1,"Invalid character in "+M)}function u(M,E,A){var B=l(M,A);return A-1>=E&&(B|=l(M,A-1)<<4),B}a.prototype._parseHex=function(E,A,B){this.length=Math.ceil((E.length-A)/6),this.words=new Array(this.length);for(var L=0;L=A;L-=2)C=u(E,A,L)<=18?(P-=18,R+=1,this.words[R]|=C>>>26):P+=8;else{var S=E.length-A;for(L=S%2===0?A+1:A;L=18?(P-=18,R+=1,this.words[R]|=C>>>26):P+=8}this._strip()};function p(M,E,A,B){for(var L=0,P=0,R=Math.min(M.length,A),C=E;C=49?P=S-49+10:S>=17?P=S-17+10:P=S,h(S>=0&&P1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},a.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{a.prototype[Symbol.for("nodejs.util.inspect.custom")]=d}catch{a.prototype.inspect=d}else a.prototype.inspect=d;function d(){return(this.red?""}var v=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],x=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];a.prototype.toString=function(E,A){E=E||10,A=A|0||1;var B;if(E===16||E==="hex"){B="";for(var L=0,P=0,R=0;R>>24-L&16777215,L+=2,L>=26&&(L-=26,R--),P!==0||R!==this.length-1?B=v[6-S.length]+S+B:B=S+B}for(P!==0&&(B=P.toString(16)+B);B.length%A!==0;)B="0"+B;return this.negative!==0&&(B="-"+B),B}if(E===(E|0)&&E>=2&&E<=36){var D=x[E],V=g[E];B="";var te=this.clone();for(te.negative=0;!te.isZero();){var oe=te.modrn(V).toString(E);te=te.idivn(V),te.isZero()?B=oe+B:B=v[D-oe.length]+oe+B}for(this.isZero()&&(B="0"+B);B.length%A!==0;)B="0"+B;return this.negative!==0&&(B="-"+B),B}h(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var E=this.words[0];return this.length===2?E+=this.words[1]*67108864:this.length===3&&this.words[2]===1?E+=4503599627370496+this.words[1]*67108864:this.length>2&&h(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-E:E},a.prototype.toJSON=function(){return this.toString(16,2)},f&&(a.prototype.toBuffer=function(E,A){return this.toArrayLike(f,E,A)}),a.prototype.toArray=function(E,A){return this.toArrayLike(Array,E,A)};var w=function(E,A){return E.allocUnsafe?E.allocUnsafe(A):new E(A)};a.prototype.toArrayLike=function(E,A,B){this._strip();var L=this.byteLength(),P=B||Math.max(1,L);h(L<=P,"byte array longer than desired length"),h(P>0,"Requested array length <= 0");var R=w(E,P),C=A==="le"?"LE":"BE";return this["_toArrayLike"+C](R,L),R},a.prototype._toArrayLikeLE=function(E,A){for(var B=0,L=0,P=0,R=0;P>8&255),B>16&255),R===6?(B>24&255),L=0,R=0):(L=C>>>24,R+=2)}if(B=0&&(E[B--]=C>>8&255),B>=0&&(E[B--]=C>>16&255),R===6?(B>=0&&(E[B--]=C>>24&255),L=0,R=0):(L=C>>>24,R+=2)}if(B>=0)for(E[B--]=L;B>=0;)E[B--]=0},Math.clz32?a.prototype._countBits=function(E){return 32-Math.clz32(E)}:a.prototype._countBits=function(E){var A=E,B=0;return A>=4096&&(B+=13,A>>>=13),A>=64&&(B+=7,A>>>=7),A>=8&&(B+=4,A>>>=4),A>=2&&(B+=2,A>>>=2),B+A},a.prototype._zeroBits=function(E){if(E===0)return 26;var A=E,B=0;return A&8191||(B+=13,A>>>=13),A&127||(B+=7,A>>>=7),A&15||(B+=4,A>>>=4),A&3||(B+=2,A>>>=2),A&1||B++,B},a.prototype.bitLength=function(){var E=this.words[this.length-1],A=this._countBits(E);return(this.length-1)*26+A};function y(M){for(var E=new Array(M.bitLength()),A=0;A>>L&1}return E}a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var E=0,A=0;AE.length?this.clone().ior(E):E.clone().ior(this)},a.prototype.uor=function(E){return this.length>E.length?this.clone().iuor(E):E.clone().iuor(this)},a.prototype.iuand=function(E){var A;this.length>E.length?A=E:A=this;for(var B=0;BE.length?this.clone().iand(E):E.clone().iand(this)},a.prototype.uand=function(E){return this.length>E.length?this.clone().iuand(E):E.clone().iuand(this)},a.prototype.iuxor=function(E){var A,B;this.length>E.length?(A=this,B=E):(A=E,B=this);for(var L=0;LE.length?this.clone().ixor(E):E.clone().ixor(this)},a.prototype.uxor=function(E){return this.length>E.length?this.clone().iuxor(E):E.clone().iuxor(this)},a.prototype.inotn=function(E){h(typeof E=="number"&&E>=0);var A=Math.ceil(E/26)|0,B=E%26;this._expand(A),B>0&&A--;for(var L=0;L0&&(this.words[L]=~this.words[L]&67108863>>26-B),this._strip()},a.prototype.notn=function(E){return this.clone().inotn(E)},a.prototype.setn=function(E,A){h(typeof E=="number"&&E>=0);var B=E/26|0,L=E%26;return this._expand(B+1),A?this.words[B]=this.words[B]|1<E.length?(B=this,L=E):(B=E,L=this);for(var P=0,R=0;R>>26;for(;P!==0&&R>>26;if(this.length=B.length,P!==0)this.words[this.length]=P,this.length++;else if(B!==this)for(;RE.length?this.clone().iadd(E):E.clone().iadd(this)},a.prototype.isub=function(E){if(E.negative!==0){E.negative=0;var A=this.iadd(E);return E.negative=1,A._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(E),this.negative=1,this._normSign();var B=this.cmp(E);if(B===0)return this.negative=0,this.length=1,this.words[0]=0,this;var L,P;B>0?(L=this,P=E):(L=E,P=this);for(var R=0,C=0;C>26,this.words[C]=A&67108863;for(;R!==0&&C>26,this.words[C]=A&67108863;if(R===0&&C>>26,te=S&67108863,oe=Math.min(D,E.length-1),he=Math.max(0,D-M.length+1);he<=oe;he++){var Ne=D-he|0;L=M.words[Ne]|0,P=E.words[he]|0,R=L*P+te,V+=R/67108864|0,te=R&67108863}A.words[D]=te|0,S=V|0}return S!==0?A.words[D]=S|0:A.length--,A._strip()}var k=function(E,A,B){var L=E.words,P=A.words,R=B.words,C=0,S,D,V,te=L[0]|0,oe=te&8191,he=te>>>13,Ne=L[1]|0,q=Ne&8191,ne=Ne>>>13,Q=L[2]|0,re=Q&8191,ve=Q>>>13,Ce=L[3]|0,ce=Ce&8191,se=Ce>>>13,ee=L[4]|0,G=ee&8191,Z=ee>>>13,de=L[5]|0,Ae=de&8191,K=de>>>13,Te=L[6]|0,Oe=Te&8191,ie=Te>>>13,fe=L[7]|0,we=fe&8191,Fe=fe>>>13,Ue=L[8]|0,Pe=Ue&8191,$e=Ue>>>13,rt=L[9]|0,Ze=rt&8191,Se=rt>>>13,je=P[0]|0,Ke=je&8191,st=je>>>13,St=P[1]|0,At=St&8191,bt=St>>>13,wt=P[2]|0,Dt=wt&8191,gt=wt>>>13,xt=P[3]|0,Bt=xt&8191,kt=xt>>>13,er=P[4]|0,zt=er&8191,Ct=er>>>13,Kt=P[5]|0,ir=Kt&8191,Nt=Kt>>>13,le=P[6]|0,Ee=le&8191,pe=le>>>13,xe=P[7]|0,ye=xe&8191,_e=xe>>>13,We=P[8]|0,Je=We&8191,Le=We>>>13,Ve=P[9]|0,He=Ve&8191,tt=Ve>>>13;B.negative=E.negative^A.negative,B.length=19,S=Math.imul(oe,Ke),D=Math.imul(oe,st),D=D+Math.imul(he,Ke)|0,V=Math.imul(he,st);var me=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(me>>>26)|0,me&=67108863,S=Math.imul(q,Ke),D=Math.imul(q,st),D=D+Math.imul(ne,Ke)|0,V=Math.imul(ne,st),S=S+Math.imul(oe,At)|0,D=D+Math.imul(oe,bt)|0,D=D+Math.imul(he,At)|0,V=V+Math.imul(he,bt)|0;var Me=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Me>>>26)|0,Me&=67108863,S=Math.imul(re,Ke),D=Math.imul(re,st),D=D+Math.imul(ve,Ke)|0,V=Math.imul(ve,st),S=S+Math.imul(q,At)|0,D=D+Math.imul(q,bt)|0,D=D+Math.imul(ne,At)|0,V=V+Math.imul(ne,bt)|0,S=S+Math.imul(oe,Dt)|0,D=D+Math.imul(oe,gt)|0,D=D+Math.imul(he,Dt)|0,V=V+Math.imul(he,gt)|0;var Re=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Re>>>26)|0,Re&=67108863,S=Math.imul(ce,Ke),D=Math.imul(ce,st),D=D+Math.imul(se,Ke)|0,V=Math.imul(se,st),S=S+Math.imul(re,At)|0,D=D+Math.imul(re,bt)|0,D=D+Math.imul(ve,At)|0,V=V+Math.imul(ve,bt)|0,S=S+Math.imul(q,Dt)|0,D=D+Math.imul(q,gt)|0,D=D+Math.imul(ne,Dt)|0,V=V+Math.imul(ne,gt)|0,S=S+Math.imul(oe,Bt)|0,D=D+Math.imul(oe,kt)|0,D=D+Math.imul(he,Bt)|0,V=V+Math.imul(he,kt)|0;var Qe=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Qe>>>26)|0,Qe&=67108863,S=Math.imul(G,Ke),D=Math.imul(G,st),D=D+Math.imul(Z,Ke)|0,V=Math.imul(Z,st),S=S+Math.imul(ce,At)|0,D=D+Math.imul(ce,bt)|0,D=D+Math.imul(se,At)|0,V=V+Math.imul(se,bt)|0,S=S+Math.imul(re,Dt)|0,D=D+Math.imul(re,gt)|0,D=D+Math.imul(ve,Dt)|0,V=V+Math.imul(ve,gt)|0,S=S+Math.imul(q,Bt)|0,D=D+Math.imul(q,kt)|0,D=D+Math.imul(ne,Bt)|0,V=V+Math.imul(ne,kt)|0,S=S+Math.imul(oe,zt)|0,D=D+Math.imul(oe,Ct)|0,D=D+Math.imul(he,zt)|0,V=V+Math.imul(he,Ct)|0;var lt=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(lt>>>26)|0,lt&=67108863,S=Math.imul(Ae,Ke),D=Math.imul(Ae,st),D=D+Math.imul(K,Ke)|0,V=Math.imul(K,st),S=S+Math.imul(G,At)|0,D=D+Math.imul(G,bt)|0,D=D+Math.imul(Z,At)|0,V=V+Math.imul(Z,bt)|0,S=S+Math.imul(ce,Dt)|0,D=D+Math.imul(ce,gt)|0,D=D+Math.imul(se,Dt)|0,V=V+Math.imul(se,gt)|0,S=S+Math.imul(re,Bt)|0,D=D+Math.imul(re,kt)|0,D=D+Math.imul(ve,Bt)|0,V=V+Math.imul(ve,kt)|0,S=S+Math.imul(q,zt)|0,D=D+Math.imul(q,Ct)|0,D=D+Math.imul(ne,zt)|0,V=V+Math.imul(ne,Ct)|0,S=S+Math.imul(oe,ir)|0,D=D+Math.imul(oe,Nt)|0,D=D+Math.imul(he,ir)|0,V=V+Math.imul(he,Nt)|0;var Et=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Et>>>26)|0,Et&=67108863,S=Math.imul(Oe,Ke),D=Math.imul(Oe,st),D=D+Math.imul(ie,Ke)|0,V=Math.imul(ie,st),S=S+Math.imul(Ae,At)|0,D=D+Math.imul(Ae,bt)|0,D=D+Math.imul(K,At)|0,V=V+Math.imul(K,bt)|0,S=S+Math.imul(G,Dt)|0,D=D+Math.imul(G,gt)|0,D=D+Math.imul(Z,Dt)|0,V=V+Math.imul(Z,gt)|0,S=S+Math.imul(ce,Bt)|0,D=D+Math.imul(ce,kt)|0,D=D+Math.imul(se,Bt)|0,V=V+Math.imul(se,kt)|0,S=S+Math.imul(re,zt)|0,D=D+Math.imul(re,Ct)|0,D=D+Math.imul(ve,zt)|0,V=V+Math.imul(ve,Ct)|0,S=S+Math.imul(q,ir)|0,D=D+Math.imul(q,Nt)|0,D=D+Math.imul(ne,ir)|0,V=V+Math.imul(ne,Nt)|0,S=S+Math.imul(oe,Ee)|0,D=D+Math.imul(oe,pe)|0,D=D+Math.imul(he,Ee)|0,V=V+Math.imul(he,pe)|0;var Ot=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,S=Math.imul(we,Ke),D=Math.imul(we,st),D=D+Math.imul(Fe,Ke)|0,V=Math.imul(Fe,st),S=S+Math.imul(Oe,At)|0,D=D+Math.imul(Oe,bt)|0,D=D+Math.imul(ie,At)|0,V=V+Math.imul(ie,bt)|0,S=S+Math.imul(Ae,Dt)|0,D=D+Math.imul(Ae,gt)|0,D=D+Math.imul(K,Dt)|0,V=V+Math.imul(K,gt)|0,S=S+Math.imul(G,Bt)|0,D=D+Math.imul(G,kt)|0,D=D+Math.imul(Z,Bt)|0,V=V+Math.imul(Z,kt)|0,S=S+Math.imul(ce,zt)|0,D=D+Math.imul(ce,Ct)|0,D=D+Math.imul(se,zt)|0,V=V+Math.imul(se,Ct)|0,S=S+Math.imul(re,ir)|0,D=D+Math.imul(re,Nt)|0,D=D+Math.imul(ve,ir)|0,V=V+Math.imul(ve,Nt)|0,S=S+Math.imul(q,Ee)|0,D=D+Math.imul(q,pe)|0,D=D+Math.imul(ne,Ee)|0,V=V+Math.imul(ne,pe)|0,S=S+Math.imul(oe,ye)|0,D=D+Math.imul(oe,_e)|0,D=D+Math.imul(he,ye)|0,V=V+Math.imul(he,_e)|0;var sr=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(sr>>>26)|0,sr&=67108863,S=Math.imul(Pe,Ke),D=Math.imul(Pe,st),D=D+Math.imul($e,Ke)|0,V=Math.imul($e,st),S=S+Math.imul(we,At)|0,D=D+Math.imul(we,bt)|0,D=D+Math.imul(Fe,At)|0,V=V+Math.imul(Fe,bt)|0,S=S+Math.imul(Oe,Dt)|0,D=D+Math.imul(Oe,gt)|0,D=D+Math.imul(ie,Dt)|0,V=V+Math.imul(ie,gt)|0,S=S+Math.imul(Ae,Bt)|0,D=D+Math.imul(Ae,kt)|0,D=D+Math.imul(K,Bt)|0,V=V+Math.imul(K,kt)|0,S=S+Math.imul(G,zt)|0,D=D+Math.imul(G,Ct)|0,D=D+Math.imul(Z,zt)|0,V=V+Math.imul(Z,Ct)|0,S=S+Math.imul(ce,ir)|0,D=D+Math.imul(ce,Nt)|0,D=D+Math.imul(se,ir)|0,V=V+Math.imul(se,Nt)|0,S=S+Math.imul(re,Ee)|0,D=D+Math.imul(re,pe)|0,D=D+Math.imul(ve,Ee)|0,V=V+Math.imul(ve,pe)|0,S=S+Math.imul(q,ye)|0,D=D+Math.imul(q,_e)|0,D=D+Math.imul(ne,ye)|0,V=V+Math.imul(ne,_e)|0,S=S+Math.imul(oe,Je)|0,D=D+Math.imul(oe,Le)|0,D=D+Math.imul(he,Je)|0,V=V+Math.imul(he,Le)|0;var Wr=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,S=Math.imul(Ze,Ke),D=Math.imul(Ze,st),D=D+Math.imul(Se,Ke)|0,V=Math.imul(Se,st),S=S+Math.imul(Pe,At)|0,D=D+Math.imul(Pe,bt)|0,D=D+Math.imul($e,At)|0,V=V+Math.imul($e,bt)|0,S=S+Math.imul(we,Dt)|0,D=D+Math.imul(we,gt)|0,D=D+Math.imul(Fe,Dt)|0,V=V+Math.imul(Fe,gt)|0,S=S+Math.imul(Oe,Bt)|0,D=D+Math.imul(Oe,kt)|0,D=D+Math.imul(ie,Bt)|0,V=V+Math.imul(ie,kt)|0,S=S+Math.imul(Ae,zt)|0,D=D+Math.imul(Ae,Ct)|0,D=D+Math.imul(K,zt)|0,V=V+Math.imul(K,Ct)|0,S=S+Math.imul(G,ir)|0,D=D+Math.imul(G,Nt)|0,D=D+Math.imul(Z,ir)|0,V=V+Math.imul(Z,Nt)|0,S=S+Math.imul(ce,Ee)|0,D=D+Math.imul(ce,pe)|0,D=D+Math.imul(se,Ee)|0,V=V+Math.imul(se,pe)|0,S=S+Math.imul(re,ye)|0,D=D+Math.imul(re,_e)|0,D=D+Math.imul(ve,ye)|0,V=V+Math.imul(ve,_e)|0,S=S+Math.imul(q,Je)|0,D=D+Math.imul(q,Le)|0,D=D+Math.imul(ne,Je)|0,V=V+Math.imul(ne,Le)|0,S=S+Math.imul(oe,He)|0,D=D+Math.imul(oe,tt)|0,D=D+Math.imul(he,He)|0,V=V+Math.imul(he,tt)|0;var Rr=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Rr>>>26)|0,Rr&=67108863,S=Math.imul(Ze,At),D=Math.imul(Ze,bt),D=D+Math.imul(Se,At)|0,V=Math.imul(Se,bt),S=S+Math.imul(Pe,Dt)|0,D=D+Math.imul(Pe,gt)|0,D=D+Math.imul($e,Dt)|0,V=V+Math.imul($e,gt)|0,S=S+Math.imul(we,Bt)|0,D=D+Math.imul(we,kt)|0,D=D+Math.imul(Fe,Bt)|0,V=V+Math.imul(Fe,kt)|0,S=S+Math.imul(Oe,zt)|0,D=D+Math.imul(Oe,Ct)|0,D=D+Math.imul(ie,zt)|0,V=V+Math.imul(ie,Ct)|0,S=S+Math.imul(Ae,ir)|0,D=D+Math.imul(Ae,Nt)|0,D=D+Math.imul(K,ir)|0,V=V+Math.imul(K,Nt)|0,S=S+Math.imul(G,Ee)|0,D=D+Math.imul(G,pe)|0,D=D+Math.imul(Z,Ee)|0,V=V+Math.imul(Z,pe)|0,S=S+Math.imul(ce,ye)|0,D=D+Math.imul(ce,_e)|0,D=D+Math.imul(se,ye)|0,V=V+Math.imul(se,_e)|0,S=S+Math.imul(re,Je)|0,D=D+Math.imul(re,Le)|0,D=D+Math.imul(ve,Je)|0,V=V+Math.imul(ve,Le)|0,S=S+Math.imul(q,He)|0,D=D+Math.imul(q,tt)|0,D=D+Math.imul(ne,He)|0,V=V+Math.imul(ne,tt)|0;var br=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(br>>>26)|0,br&=67108863,S=Math.imul(Ze,Dt),D=Math.imul(Ze,gt),D=D+Math.imul(Se,Dt)|0,V=Math.imul(Se,gt),S=S+Math.imul(Pe,Bt)|0,D=D+Math.imul(Pe,kt)|0,D=D+Math.imul($e,Bt)|0,V=V+Math.imul($e,kt)|0,S=S+Math.imul(we,zt)|0,D=D+Math.imul(we,Ct)|0,D=D+Math.imul(Fe,zt)|0,V=V+Math.imul(Fe,Ct)|0,S=S+Math.imul(Oe,ir)|0,D=D+Math.imul(Oe,Nt)|0,D=D+Math.imul(ie,ir)|0,V=V+Math.imul(ie,Nt)|0,S=S+Math.imul(Ae,Ee)|0,D=D+Math.imul(Ae,pe)|0,D=D+Math.imul(K,Ee)|0,V=V+Math.imul(K,pe)|0,S=S+Math.imul(G,ye)|0,D=D+Math.imul(G,_e)|0,D=D+Math.imul(Z,ye)|0,V=V+Math.imul(Z,_e)|0,S=S+Math.imul(ce,Je)|0,D=D+Math.imul(ce,Le)|0,D=D+Math.imul(se,Je)|0,V=V+Math.imul(se,Le)|0,S=S+Math.imul(re,He)|0,D=D+Math.imul(re,tt)|0,D=D+Math.imul(ve,He)|0,V=V+Math.imul(ve,tt)|0;var Vr=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,S=Math.imul(Ze,Bt),D=Math.imul(Ze,kt),D=D+Math.imul(Se,Bt)|0,V=Math.imul(Se,kt),S=S+Math.imul(Pe,zt)|0,D=D+Math.imul(Pe,Ct)|0,D=D+Math.imul($e,zt)|0,V=V+Math.imul($e,Ct)|0,S=S+Math.imul(we,ir)|0,D=D+Math.imul(we,Nt)|0,D=D+Math.imul(Fe,ir)|0,V=V+Math.imul(Fe,Nt)|0,S=S+Math.imul(Oe,Ee)|0,D=D+Math.imul(Oe,pe)|0,D=D+Math.imul(ie,Ee)|0,V=V+Math.imul(ie,pe)|0,S=S+Math.imul(Ae,ye)|0,D=D+Math.imul(Ae,_e)|0,D=D+Math.imul(K,ye)|0,V=V+Math.imul(K,_e)|0,S=S+Math.imul(G,Je)|0,D=D+Math.imul(G,Le)|0,D=D+Math.imul(Z,Je)|0,V=V+Math.imul(Z,Le)|0,S=S+Math.imul(ce,He)|0,D=D+Math.imul(ce,tt)|0,D=D+Math.imul(se,He)|0,V=V+Math.imul(se,tt)|0;var yn=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(yn>>>26)|0,yn&=67108863,S=Math.imul(Ze,zt),D=Math.imul(Ze,Ct),D=D+Math.imul(Se,zt)|0,V=Math.imul(Se,Ct),S=S+Math.imul(Pe,ir)|0,D=D+Math.imul(Pe,Nt)|0,D=D+Math.imul($e,ir)|0,V=V+Math.imul($e,Nt)|0,S=S+Math.imul(we,Ee)|0,D=D+Math.imul(we,pe)|0,D=D+Math.imul(Fe,Ee)|0,V=V+Math.imul(Fe,pe)|0,S=S+Math.imul(Oe,ye)|0,D=D+Math.imul(Oe,_e)|0,D=D+Math.imul(ie,ye)|0,V=V+Math.imul(ie,_e)|0,S=S+Math.imul(Ae,Je)|0,D=D+Math.imul(Ae,Le)|0,D=D+Math.imul(K,Je)|0,V=V+Math.imul(K,Le)|0,S=S+Math.imul(G,He)|0,D=D+Math.imul(G,tt)|0,D=D+Math.imul(Z,He)|0,V=V+Math.imul(Z,tt)|0;var ar=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(ar>>>26)|0,ar&=67108863,S=Math.imul(Ze,ir),D=Math.imul(Ze,Nt),D=D+Math.imul(Se,ir)|0,V=Math.imul(Se,Nt),S=S+Math.imul(Pe,Ee)|0,D=D+Math.imul(Pe,pe)|0,D=D+Math.imul($e,Ee)|0,V=V+Math.imul($e,pe)|0,S=S+Math.imul(we,ye)|0,D=D+Math.imul(we,_e)|0,D=D+Math.imul(Fe,ye)|0,V=V+Math.imul(Fe,_e)|0,S=S+Math.imul(Oe,Je)|0,D=D+Math.imul(Oe,Le)|0,D=D+Math.imul(ie,Je)|0,V=V+Math.imul(ie,Le)|0,S=S+Math.imul(Ae,He)|0,D=D+Math.imul(Ae,tt)|0,D=D+Math.imul(K,He)|0,V=V+Math.imul(K,tt)|0;var Vn=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,S=Math.imul(Ze,Ee),D=Math.imul(Ze,pe),D=D+Math.imul(Se,Ee)|0,V=Math.imul(Se,pe),S=S+Math.imul(Pe,ye)|0,D=D+Math.imul(Pe,_e)|0,D=D+Math.imul($e,ye)|0,V=V+Math.imul($e,_e)|0,S=S+Math.imul(we,Je)|0,D=D+Math.imul(we,Le)|0,D=D+Math.imul(Fe,Je)|0,V=V+Math.imul(Fe,Le)|0,S=S+Math.imul(Oe,He)|0,D=D+Math.imul(Oe,tt)|0,D=D+Math.imul(ie,He)|0,V=V+Math.imul(ie,tt)|0;var Gn=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Gn>>>26)|0,Gn&=67108863,S=Math.imul(Ze,ye),D=Math.imul(Ze,_e),D=D+Math.imul(Se,ye)|0,V=Math.imul(Se,_e),S=S+Math.imul(Pe,Je)|0,D=D+Math.imul(Pe,Le)|0,D=D+Math.imul($e,Je)|0,V=V+Math.imul($e,Le)|0,S=S+Math.imul(we,He)|0,D=D+Math.imul(we,tt)|0,D=D+Math.imul(Fe,He)|0,V=V+Math.imul(Fe,tt)|0;var Kn=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(Kn>>>26)|0,Kn&=67108863,S=Math.imul(Ze,Je),D=Math.imul(Ze,Le),D=D+Math.imul(Se,Je)|0,V=Math.imul(Se,Le),S=S+Math.imul(Pe,He)|0,D=D+Math.imul(Pe,tt)|0,D=D+Math.imul($e,He)|0,V=V+Math.imul($e,tt)|0;var ji=(C+S|0)+((D&8191)<<13)|0;C=(V+(D>>>13)|0)+(ji>>>26)|0,ji&=67108863,S=Math.imul(Ze,He),D=Math.imul(Ze,tt),D=D+Math.imul(Se,He)|0,V=Math.imul(Se,tt);var xs=(C+S|0)+((D&8191)<<13)|0;return C=(V+(D>>>13)|0)+(xs>>>26)|0,xs&=67108863,R[0]=me,R[1]=Me,R[2]=Re,R[3]=Qe,R[4]=lt,R[5]=Et,R[6]=Ot,R[7]=sr,R[8]=Wr,R[9]=Rr,R[10]=br,R[11]=Vr,R[12]=yn,R[13]=ar,R[14]=Vn,R[15]=Gn,R[16]=Kn,R[17]=ji,R[18]=xs,C!==0&&(R[19]=C,B.length++),B};Math.imul||(k=_);function F(M,E,A){A.negative=E.negative^M.negative,A.length=M.length+E.length;for(var B=0,L=0,P=0;P>>26)|0,L+=R>>>26,R&=67108863}A.words[P]=C,B=R,R=L}return B!==0?A.words[P]=B:A.length--,A._strip()}function O(M,E,A){return F(M,E,A)}a.prototype.mulTo=function(E,A){var B,L=this.length+E.length;return this.length===10&&E.length===10?B=k(this,E,A):L<63?B=_(this,E,A):L<1024?B=F(this,E,A):B=O(this,E,A),B},a.prototype.mul=function(E){var A=new a(null);return A.words=new Array(this.length+E.length),this.mulTo(E,A)},a.prototype.mulf=function(E){var A=new a(null);return A.words=new Array(this.length+E.length),O(this,E,A)},a.prototype.imul=function(E){return this.clone().mulTo(E,this)},a.prototype.imuln=function(E){var A=E<0;A&&(E=-E),h(typeof E=="number"),h(E<67108864);for(var B=0,L=0;L>=26,B+=P/67108864|0,B+=R>>>26,this.words[L]=R&67108863}return B!==0&&(this.words[L]=B,this.length++),A?this.ineg():this},a.prototype.muln=function(E){return this.clone().imuln(E)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(E){var A=y(E);if(A.length===0)return new a(1);for(var B=this,L=0;L=0);var A=E%26,B=(E-A)/26,L=67108863>>>26-A<<26-A,P;if(A!==0){var R=0;for(P=0;P>>26-A}R&&(this.words[P]=R,this.length++)}if(B!==0){for(P=this.length-1;P>=0;P--)this.words[P+B]=this.words[P];for(P=0;P=0);var L;A?L=(A-A%26)/26:L=0;var P=E%26,R=Math.min((E-P)/26,this.length),C=67108863^67108863>>>P<R)for(this.length-=R,D=0;D=0&&(V!==0||D>=L);D--){var te=this.words[D]|0;this.words[D]=V<<26-P|te>>>P,V=te&C}return S&&V!==0&&(S.words[S.length++]=V),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},a.prototype.ishrn=function(E,A,B){return h(this.negative===0),this.iushrn(E,A,B)},a.prototype.shln=function(E){return this.clone().ishln(E)},a.prototype.ushln=function(E){return this.clone().iushln(E)},a.prototype.shrn=function(E){return this.clone().ishrn(E)},a.prototype.ushrn=function(E){return this.clone().iushrn(E)},a.prototype.testn=function(E){h(typeof E=="number"&&E>=0);var A=E%26,B=(E-A)/26,L=1<=0);var A=E%26,B=(E-A)/26;if(h(this.negative===0,"imaskn works only with positive numbers"),this.length<=B)return this;if(A!==0&&B++,this.length=Math.min(B,this.length),A!==0){var L=67108863^67108863>>>A<=67108864;A++)this.words[A]-=67108864,A===this.length-1?this.words[A+1]=1:this.words[A+1]++;return this.length=Math.max(this.length,A+1),this},a.prototype.isubn=function(E){if(h(typeof E=="number"),h(E<67108864),E<0)return this.iaddn(-E);if(this.negative!==0)return this.negative=0,this.iaddn(E),this.negative=1,this;if(this.words[0]-=E,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var A=0;A>26)-(S/67108864|0),this.words[P+B]=R&67108863}for(;P>26,this.words[P+B]=R&67108863;if(C===0)return this._strip();for(h(C===-1),C=0,P=0;P>26,this.words[P]=R&67108863;return this.negative=1,this._strip()},a.prototype._wordDiv=function(E,A){var B=this.length-E.length,L=this.clone(),P=E,R=P.words[P.length-1]|0,C=this._countBits(R);B=26-C,B!==0&&(P=P.ushln(B),L.iushln(B),R=P.words[P.length-1]|0);var S=L.length-P.length,D;if(A!=="mod"){D=new a(null),D.length=S+1,D.words=new Array(D.length);for(var V=0;V=0;oe--){var he=(L.words[P.length+oe]|0)*67108864+(L.words[P.length+oe-1]|0);for(he=Math.min(he/R|0,67108863),L._ishlnsubmul(P,he,oe);L.negative!==0;)he--,L.negative=0,L._ishlnsubmul(P,1,oe),L.isZero()||(L.negative^=1);D&&(D.words[oe]=he)}return D&&D._strip(),L._strip(),A!=="div"&&B!==0&&L.iushrn(B),{div:D||null,mod:L}},a.prototype.divmod=function(E,A,B){if(h(!E.isZero()),this.isZero())return{div:new a(0),mod:new a(0)};var L,P,R;return this.negative!==0&&E.negative===0?(R=this.neg().divmod(E,A),A!=="mod"&&(L=R.div.neg()),A!=="div"&&(P=R.mod.neg(),B&&P.negative!==0&&P.iadd(E)),{div:L,mod:P}):this.negative===0&&E.negative!==0?(R=this.divmod(E.neg(),A),A!=="mod"&&(L=R.div.neg()),{div:L,mod:R.mod}):this.negative&E.negative?(R=this.neg().divmod(E.neg(),A),A!=="div"&&(P=R.mod.neg(),B&&P.negative!==0&&P.isub(E)),{div:R.div,mod:P}):E.length>this.length||this.cmp(E)<0?{div:new a(0),mod:this}:E.length===1?A==="div"?{div:this.divn(E.words[0]),mod:null}:A==="mod"?{div:null,mod:new a(this.modrn(E.words[0]))}:{div:this.divn(E.words[0]),mod:new a(this.modrn(E.words[0]))}:this._wordDiv(E,A)},a.prototype.div=function(E){return this.divmod(E,"div",!1).div},a.prototype.mod=function(E){return this.divmod(E,"mod",!1).mod},a.prototype.umod=function(E){return this.divmod(E,"mod",!0).mod},a.prototype.divRound=function(E){var A=this.divmod(E);if(A.mod.isZero())return A.div;var B=A.div.negative!==0?A.mod.isub(E):A.mod,L=E.ushrn(1),P=E.andln(1),R=B.cmp(L);return R<0||P===1&&R===0?A.div:A.div.negative!==0?A.div.isubn(1):A.div.iaddn(1)},a.prototype.modrn=function(E){var A=E<0;A&&(E=-E),h(E<=67108863);for(var B=(1<<26)%E,L=0,P=this.length-1;P>=0;P--)L=(B*L+(this.words[P]|0))%E;return A?-L:L},a.prototype.modn=function(E){return this.modrn(E)},a.prototype.idivn=function(E){var A=E<0;A&&(E=-E),h(E<=67108863);for(var B=0,L=this.length-1;L>=0;L--){var P=(this.words[L]|0)+B*67108864;this.words[L]=P/E|0,B=P%E}return this._strip(),A?this.ineg():this},a.prototype.divn=function(E){return this.clone().idivn(E)},a.prototype.egcd=function(E){h(E.negative===0),h(!E.isZero());var A=this,B=E.clone();A.negative!==0?A=A.umod(E):A=A.clone();for(var L=new a(1),P=new a(0),R=new a(0),C=new a(1),S=0;A.isEven()&&B.isEven();)A.iushrn(1),B.iushrn(1),++S;for(var D=B.clone(),V=A.clone();!A.isZero();){for(var te=0,oe=1;!(A.words[0]&oe)&&te<26;++te,oe<<=1);if(te>0)for(A.iushrn(te);te-- >0;)(L.isOdd()||P.isOdd())&&(L.iadd(D),P.isub(V)),L.iushrn(1),P.iushrn(1);for(var he=0,Ne=1;!(B.words[0]&Ne)&&he<26;++he,Ne<<=1);if(he>0)for(B.iushrn(he);he-- >0;)(R.isOdd()||C.isOdd())&&(R.iadd(D),C.isub(V)),R.iushrn(1),C.iushrn(1);A.cmp(B)>=0?(A.isub(B),L.isub(R),P.isub(C)):(B.isub(A),R.isub(L),C.isub(P))}return{a:R,b:C,gcd:B.iushln(S)}},a.prototype._invmp=function(E){h(E.negative===0),h(!E.isZero());var A=this,B=E.clone();A.negative!==0?A=A.umod(E):A=A.clone();for(var L=new a(1),P=new a(0),R=B.clone();A.cmpn(1)>0&&B.cmpn(1)>0;){for(var C=0,S=1;!(A.words[0]&S)&&C<26;++C,S<<=1);if(C>0)for(A.iushrn(C);C-- >0;)L.isOdd()&&L.iadd(R),L.iushrn(1);for(var D=0,V=1;!(B.words[0]&V)&&D<26;++D,V<<=1);if(D>0)for(B.iushrn(D);D-- >0;)P.isOdd()&&P.iadd(R),P.iushrn(1);A.cmp(B)>=0?(A.isub(B),L.isub(P)):(B.isub(A),P.isub(L))}var te;return A.cmpn(1)===0?te=L:te=P,te.cmpn(0)<0&&te.iadd(E),te},a.prototype.gcd=function(E){if(this.isZero())return E.abs();if(E.isZero())return this.abs();var A=this.clone(),B=E.clone();A.negative=0,B.negative=0;for(var L=0;A.isEven()&&B.isEven();L++)A.iushrn(1),B.iushrn(1);do{for(;A.isEven();)A.iushrn(1);for(;B.isEven();)B.iushrn(1);var P=A.cmp(B);if(P<0){var R=A;A=B,B=R}else if(P===0||B.cmpn(1)===0)break;A.isub(B)}while(!0);return B.iushln(L)},a.prototype.invm=function(E){return this.egcd(E).a.umod(E)},a.prototype.isEven=function(){return(this.words[0]&1)===0},a.prototype.isOdd=function(){return(this.words[0]&1)===1},a.prototype.andln=function(E){return this.words[0]&E},a.prototype.bincn=function(E){h(typeof E=="number");var A=E%26,B=(E-A)/26,L=1<>>26,C&=67108863,this.words[R]=C}return P!==0&&(this.words[R]=P,this.length++),this},a.prototype.isZero=function(){return this.length===1&&this.words[0]===0},a.prototype.cmpn=function(E){var A=E<0;if(this.negative!==0&&!A)return-1;if(this.negative===0&&A)return 1;this._strip();var B;if(this.length>1)B=1;else{A&&(E=-E),h(E<=67108863,"Number is too big");var L=this.words[0]|0;B=L===E?0:LE.length)return 1;if(this.length=0;B--){var L=this.words[B]|0,P=E.words[B]|0;if(L!==P){LP&&(A=1);break}}return A},a.prototype.gtn=function(E){return this.cmpn(E)===1},a.prototype.gt=function(E){return this.cmp(E)===1},a.prototype.gten=function(E){return this.cmpn(E)>=0},a.prototype.gte=function(E){return this.cmp(E)>=0},a.prototype.ltn=function(E){return this.cmpn(E)===-1},a.prototype.lt=function(E){return this.cmp(E)===-1},a.prototype.lten=function(E){return this.cmpn(E)<=0},a.prototype.lte=function(E){return this.cmp(E)<=0},a.prototype.eqn=function(E){return this.cmpn(E)===0},a.prototype.eq=function(E){return this.cmp(E)===0},a.red=function(E){return new H(E)},a.prototype.toRed=function(E){return h(!this.red,"Already a number in reduction context"),h(this.negative===0,"red works only with positives"),E.convertTo(this)._forceRed(E)},a.prototype.fromRed=function(){return h(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(E){return this.red=E,this},a.prototype.forceRed=function(E){return h(!this.red,"Already a number in reduction context"),this._forceRed(E)},a.prototype.redAdd=function(E){return h(this.red,"redAdd works only with red numbers"),this.red.add(this,E)},a.prototype.redIAdd=function(E){return h(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,E)},a.prototype.redSub=function(E){return h(this.red,"redSub works only with red numbers"),this.red.sub(this,E)},a.prototype.redISub=function(E){return h(this.red,"redISub works only with red numbers"),this.red.isub(this,E)},a.prototype.redShl=function(E){return h(this.red,"redShl works only with red numbers"),this.red.shl(this,E)},a.prototype.redMul=function(E){return h(this.red,"redMul works only with red numbers"),this.red._verify2(this,E),this.red.mul(this,E)},a.prototype.redIMul=function(E){return h(this.red,"redMul works only with red numbers"),this.red._verify2(this,E),this.red.imul(this,E)},a.prototype.redSqr=function(){return h(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return h(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return h(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return h(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return h(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(E){return h(this.red&&!E.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,E)};var N={k256:null,p224:null,p192:null,p25519:null};function U(M,E){this.name=M,this.p=new a(E,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}U.prototype._tmp=function(){var E=new a(null);return E.words=new Array(Math.ceil(this.n/13)),E},U.prototype.ireduce=function(E){var A=E,B;do this.split(A,this.tmp),A=this.imulK(A),A=A.iadd(this.tmp),B=A.bitLength();while(B>this.n);var L=B0?A.isub(this.p):A.strip!==void 0?A.strip():A._strip(),A},U.prototype.split=function(E,A){E.iushrn(this.n,0,A)},U.prototype.imulK=function(E){return E.imul(this.k)};function z(){U.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}c(z,U),z.prototype.split=function(E,A){for(var B=4194303,L=Math.min(E.length,9),P=0;P>>22,R=C}R>>>=22,E.words[P-10]=R,R===0&&E.length>10?E.length-=10:E.length-=9},z.prototype.imulK=function(E){E.words[E.length]=0,E.words[E.length+1]=0,E.length+=2;for(var A=0,B=0;B>>=26,E.words[B]=P,A=L}return A!==0&&(E.words[E.length++]=A),E},a._prime=function(E){if(N[E])return N[E];var A;if(E==="k256")A=new z;else if(E==="p224")A=new W;else if(E==="p192")A=new X;else if(E==="p25519")A=new J;else throw new Error("Unknown prime "+E);return N[E]=A,A};function H(M){if(typeof M=="string"){var E=a._prime(M);this.m=E.p,this.prime=E}else h(M.gtn(1),"modulus must be greater than 1"),this.m=M,this.prime=null}H.prototype._verify1=function(E){h(E.negative===0,"red works only with positives"),h(E.red,"red works only with red numbers")},H.prototype._verify2=function(E,A){h((E.negative|A.negative)===0,"red works only with positives"),h(E.red&&E.red===A.red,"red works only with red numbers")},H.prototype.imod=function(E){return this.prime?this.prime.ireduce(E)._forceRed(this):(m(E,E.umod(this.m)._forceRed(this)),E)},H.prototype.neg=function(E){return E.isZero()?E.clone():this.m.sub(E)._forceRed(this)},H.prototype.add=function(E,A){this._verify2(E,A);var B=E.add(A);return B.cmp(this.m)>=0&&B.isub(this.m),B._forceRed(this)},H.prototype.iadd=function(E,A){this._verify2(E,A);var B=E.iadd(A);return B.cmp(this.m)>=0&&B.isub(this.m),B},H.prototype.sub=function(E,A){this._verify2(E,A);var B=E.sub(A);return B.cmpn(0)<0&&B.iadd(this.m),B._forceRed(this)},H.prototype.isub=function(E,A){this._verify2(E,A);var B=E.isub(A);return B.cmpn(0)<0&&B.iadd(this.m),B},H.prototype.shl=function(E,A){return this._verify1(E),this.imod(E.ushln(A))},H.prototype.imul=function(E,A){return this._verify2(E,A),this.imod(E.imul(A))},H.prototype.mul=function(E,A){return this._verify2(E,A),this.imod(E.mul(A))},H.prototype.isqr=function(E){return this.imul(E,E.clone())},H.prototype.sqr=function(E){return this.mul(E,E)},H.prototype.sqrt=function(E){if(E.isZero())return E.clone();var A=this.m.andln(3);if(h(A%2===1),A===3){var B=this.m.add(new a(1)).iushrn(2);return this.pow(E,B)}for(var L=this.m.subn(1),P=0;!L.isZero()&&L.andln(1)===0;)P++,L.iushrn(1);h(!L.isZero());var R=new a(1).toRed(this),C=R.redNeg(),S=this.m.subn(1).iushrn(1),D=this.m.bitLength();for(D=new a(2*D*D).toRed(this);this.pow(D,S).cmp(C)!==0;)D.redIAdd(C);for(var V=this.pow(D,L),te=this.pow(E,L.addn(1).iushrn(1)),oe=this.pow(E,L),he=P;oe.cmp(R)!==0;){for(var Ne=oe,q=0;Ne.cmp(R)!==0;q++)Ne=Ne.redSqr();h(q=0;P--){for(var V=A.words[P],te=D-1;te>=0;te--){var oe=V>>te&1;if(R!==L[0]&&(R=this.sqr(R)),oe===0&&C===0){S=0;continue}C<<=1,C|=oe,S++,!(S!==B&&(P!==0||te!==0))&&(R=this.mul(R,L[C]),S=0,C=0)}D=26}return R},H.prototype.convertTo=function(E){var A=E.umod(this.m);return A===E?A.clone():A},H.prototype.convertFrom=function(E){var A=E.clone();return A.red=null,A},a.mont=function(E){return new I(E)};function I(M){H.call(this,M),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}c(I,H),I.prototype.convertTo=function(E){return this.imod(E.ushln(this.shift))},I.prototype.convertFrom=function(E){var A=this.imod(E.mul(this.rinv));return A.red=null,A},I.prototype.imul=function(E,A){if(E.isZero()||A.isZero())return E.words[0]=0,E.length=1,E;var B=E.imul(A),L=B.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=B.isub(L).iushrn(this.shift),R=P;return P.cmp(this.m)>=0?R=P.isub(this.m):P.cmpn(0)<0&&(R=P.iadd(this.m)),R._forceRed(this)},I.prototype.mul=function(E,A){if(E.isZero()||A.isZero())return new a(0)._forceRed(this);var B=E.mul(A),L=B.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=B.isub(L).iushrn(this.shift),R=P;return P.cmp(this.m)>=0?R=P.isub(this.m):P.cmpn(0)<0&&(R=P.iadd(this.m)),R._forceRed(this)},I.prototype.invm=function(E){var A=this.imod(E._invmp(this.m).mul(this.r2));return A._forceRed(this)}})(typeof n>"u"||n,void 0)},{buffer:188}],187:[function(e,n,i){var s;n.exports=function(a){return s||(s=new o(null)),s.generate(a)};function o(c){this.rand=c}if(n.exports.Rand=o,o.prototype.generate=function(a){return this._rand(a)},o.prototype._rand=function(a){if(this.rand.getBytes)return this.rand.getBytes(a);for(var f=new Uint8Array(a),l=0;l>>24]^g[k>>>16&255]^w[F>>>8&255]^y[O&255]^p[X++],U=x[k>>>24]^g[F>>>16&255]^w[O>>>8&255]^y[_&255]^p[X++],z=x[F>>>24]^g[O>>>16&255]^w[_>>>8&255]^y[k&255]^p[X++],W=x[O>>>24]^g[_>>>16&255]^w[k>>>8&255]^y[F&255]^p[X++],_=N,k=U,F=z,O=W;return N=(d[_>>>24]<<24|d[k>>>16&255]<<16|d[F>>>8&255]<<8|d[O&255])^p[X++],U=(d[k>>>24]<<24|d[F>>>16&255]<<16|d[O>>>8&255]<<8|d[_&255])^p[X++],z=(d[F>>>24]<<24|d[O>>>16&255]<<16|d[_>>>8&255]<<8|d[k&255])^p[X++],W=(d[O>>>24]<<24|d[_>>>16&255]<<16|d[k>>>8&255]<<8|d[F&255])^p[X++],N=N>>>0,U=U>>>0,z=z>>>0,W=W>>>0,[N,U,z,W]}var a=[0,1,2,4,8,16,32,64,128,27,54],f=function(){for(var u=new Array(256),p=0;p<256;p++)p<128?u[p]=p<<1:u[p]=p<<1^283;for(var m=[],d=[],v=[[],[],[],[]],x=[[],[],[],[]],g=0,w=0,y=0;y<256;++y){var _=w^w<<1^w<<2^w<<3^w<<4;_=_>>>8^_&255^99,m[g]=_,d[_]=g;var k=u[g],F=u[k],O=u[F],N=u[_]*257^_*16843008;v[0][g]=N<<24|N>>>8,v[1][g]=N<<16|N>>>16,v[2][g]=N<<8|N>>>24,v[3][g]=N,N=O*16843009^F*65537^k*257^g*16843008,x[0][_]=N<<24|N>>>8,x[1][_]=N<<16|N>>>16,x[2][_]=N<<8|N>>>24,x[3][_]=N,g===0?g=w=1:(g=k^u[u[u[O^k]]],w^=u[u[w]])}return{SBOX:m,INV_SBOX:d,SUB_MIX:v,INV_SUB_MIX:x}}();function l(u){this._key=o(u),this._reset()}l.blockSize=4*4,l.keySize=256/8,l.prototype.blockSize=l.blockSize,l.prototype.keySize=l.keySize,l.prototype._reset=function(){for(var u=this._key,p=u.length,m=p+6,d=(m+1)*4,v=[],x=0;x>>24,g=f.SBOX[g>>>24]<<24|f.SBOX[g>>>16&255]<<16|f.SBOX[g>>>8&255]<<8|f.SBOX[g&255],g^=a[x/p|0]<<24):p>6&&x%p===4&&(g=f.SBOX[g>>>24]<<24|f.SBOX[g>>>16&255]<<16|f.SBOX[g>>>8&255]<<8|f.SBOX[g&255]),v[x]=v[x-p]^g}for(var w=[],y=0;y>>24]]^f.INV_SUB_MIX[1][f.SBOX[k>>>16&255]]^f.INV_SUB_MIX[2][f.SBOX[k>>>8&255]]^f.INV_SUB_MIX[3][f.SBOX[k&255]]}this._nRounds=m,this._keySchedule=v,this._invKeySchedule=w},l.prototype.encryptBlockRaw=function(u){return u=o(u),c(u,this._keySchedule,f.SUB_MIX,f.SBOX,this._nRounds)},l.prototype.encryptBlock=function(u){var p=this.encryptBlockRaw(u),m=s.allocUnsafe(16);return m.writeUInt32BE(p[0],0),m.writeUInt32BE(p[1],4),m.writeUInt32BE(p[2],8),m.writeUInt32BE(p[3],12),m},l.prototype.decryptBlock=function(u){u=o(u);var p=u[1];u[1]=u[3],u[3]=p;var m=c(u,this._invKeySchedule,f.INV_SUB_MIX,f.INV_SBOX,this._nRounds),d=s.allocUnsafe(16);return d.writeUInt32BE(m[0],0),d.writeUInt32BE(m[3],4),d.writeUInt32BE(m[2],8),d.writeUInt32BE(m[1],12),d},l.prototype.scrub=function(){h(this._keySchedule),h(this._invKeySchedule),h(this._key)},n.exports.AES=l},{"safe-buffer":494}],190:[function(e,n,i){var s=e("./aes"),o=e("safe-buffer").Buffer,h=e("cipher-base"),c=e("inherits"),a=e("./ghash"),f=e("buffer-xor"),l=e("./incr32");function u(d,v){var x=0;d.length!==v.length&&x++;for(var g=Math.min(d.length,v.length),w=0;w16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w}else if(this.cache.length>=16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w;return null},m.prototype.flush=function(){if(this.cache.length)return this.cache};function d(g){var w=g[15];if(w<1||w>16)throw new Error("unable to decrypt data");for(var y=-1;++y15){var g=this.cache.slice(0,16);return this.cache=this.cache.slice(16),g}return null},d.prototype.flush=function(){for(var g=16-this.cache.length,w=h.allocUnsafe(g),y=-1;++y>>0,0),l.writeUInt32BE(f[1]>>>0,4),l.writeUInt32BE(f[2]>>>0,8),l.writeUInt32BE(f[3]>>>0,12),l}function a(f){this.h=f,this.state=s.alloc(16,0),this.cache=s.allocUnsafe(0)}a.prototype.ghash=function(f){for(var l=-1;++l0;u--)f[u]=f[u]>>>1|(f[u-1]&1)<<31;f[0]=f[0]>>>1,m&&(f[0]=f[0]^225<<24)}this.state=c(l)},a.prototype.update=function(f){this.cache=s.concat([this.cache,f]);for(var l;this.cache.length>=16;)l=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(l)},a.prototype.final=function(f,l){return this.cache.length&&this.ghash(s.concat([this.cache,o],16)),this.ghash(c([0,f,0,l])),this.state},n.exports=a},{"safe-buffer":494}],195:[function(e,n,i){function s(o){for(var h=o.length,c;h--;)if(c=o.readUInt8(h),c===255)o.writeUInt8(0,h);else{c++,o.writeUInt8(c,h);break}}n.exports=s},{}],196:[function(e,n,i){var s=e("buffer-xor");i.encrypt=function(o,h){var c=s(h,o._prev);return o._prev=o._cipher.encryptBlock(c),o._prev},i.decrypt=function(o,h){var c=o._prev;o._prev=h;var a=o._cipher.decryptBlock(h);return s(a,c)}},{"buffer-xor":219}],197:[function(e,n,i){var s=e("safe-buffer").Buffer,o=e("buffer-xor");function h(c,a,f){var l=a.length,u=o(a,c._cache);return c._cache=c._cache.slice(l),c._prev=s.concat([c._prev,f?a:u]),u}i.encrypt=function(c,a,f){for(var l=s.allocUnsafe(0),u;a.length;)if(c._cache.length===0&&(c._cache=c._cipher.encryptBlock(c._prev),c._prev=s.allocUnsafe(0)),c._cache.length<=a.length)u=c._cache.length,l=s.concat([l,h(c,a.slice(0,u),f)]),a=a.slice(u);else{l=s.concat([l,h(c,a,f)]);break}return l}},{"buffer-xor":219,"safe-buffer":494}],198:[function(e,n,i){var s=e("safe-buffer").Buffer;function o(c,a,f){for(var l,u=-1,p=8,m=0,d,v;++u>u%8,c._prev=h(c._prev,f?d:v);return m}function h(c,a){var f=c.length,l=-1,u=s.allocUnsafe(c.length);for(c=s.concat([c,s.from([a])]);++l>7;return u}i.encrypt=function(c,a,f){for(var l=a.length,u=s.allocUnsafe(l),p=-1;++p=0||!p.umod(l.prime1)||!p.umod(l.prime2));return p}function f(l,u){var p=c(u),m=u.modulus.byteLength(),d=new o(l).mul(p.blinder).umod(u.modulus),v=d.toRed(o.mont(u.prime1)),x=d.toRed(o.mont(u.prime2)),g=u.coefficient,w=u.prime1,y=u.prime2,_=v.redPow(u.exponent1).fromRed(),k=x.redPow(u.exponent2).fromRed(),F=_.isub(k).imul(g).umod(w).imul(y);return k.iadd(F).imul(p.unblinder).umod(u.modulus).toArrayLike(s,"be",m)}f.getr=a,n.exports=f}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(e,n,i){n.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,n,i){n.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,n,i){n.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,n,i){var s=e("safe-buffer").Buffer,o=e("create-hash"),h=e("readable-stream"),c=e("inherits"),a=e("./sign"),f=e("./verify"),l=e("./algorithms.json");Object.keys(l).forEach(function(v){l[v].id=s.from(l[v].id,"hex"),l[v.toLowerCase()]=l[v]});function u(v){h.Writable.call(this);var x=l[v];if(!x)throw new Error("Unknown message digest");this._hashType=x.hash,this._hash=o(x.hash),this._tag=x.id,this._signType=x.sign}c(u,h.Writable),u.prototype._write=function(x,g,w){this._hash.update(x),w()},u.prototype.update=function(x,g){return typeof x=="string"&&(x=s.from(x,g)),this._hash.update(x),this},u.prototype.sign=function(x,g){this.end();var w=this._hash.digest(),y=a(w,x,this._hashType,this._signType,this._tag);return g?y.toString(g):y};function p(v){h.Writable.call(this);var x=l[v];if(!x)throw new Error("Unknown message digest");this._hash=o(x.hash),this._tag=x.id,this._signType=x.sign}c(p,h.Writable),p.prototype._write=function(x,g,w){this._hash.update(x),w()},p.prototype.update=function(x,g){return typeof x=="string"&&(x=s.from(x,g)),this._hash.update(x),this},p.prototype.verify=function(x,g,w){typeof g=="string"&&(g=s.from(g,w)),this.end();var y=this._hash.digest();return f(g,y,x,this._signType,this._tag)};function m(v){return new u(v)}function d(v){return new p(v)}n.exports={Sign:m,Verify:d,createSign:m,createVerify:d}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(e,n,i){var s=e("safe-buffer").Buffer,o=e("create-hmac"),h=e("browserify-rsa"),c=e("elliptic").ec,a=e("bn.js"),f=e("parse-asn1"),l=e("./curves.json");function u(_,k,F,O,N){var U=f(k);if(U.curve){if(O!=="ecdsa"&&O!=="ecdsa/rsa")throw new Error("wrong private key type");return p(_,U)}else if(U.type==="dsa"){if(O!=="dsa")throw new Error("wrong private key type");return m(_,U,F)}else if(O!=="rsa"&&O!=="ecdsa/rsa")throw new Error("wrong private key type");_=s.concat([N,_]);for(var z=U.modulus.byteLength(),W=[0,1];_.length+W.length+10&&F.ishrn(O),F}function g(_,k){_=x(_,k),_=_.mod(k);var F=s.from(_.toArray());if(F.length=d)throw new Error("invalid sig")}n.exports=f},{"./curves.json":212,"bn.js":186,elliptic:405,"parse-asn1":459,"safe-buffer":494}],216:[function(e,n,i){},{}],217:[function(e,n,i){var s=e("buffer"),o=s.Buffer;function h(a,f){for(var l in a)f[l]=a[l]}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?n.exports=s:(h(s,i),i.Buffer=c);function c(a,f,l){return o(a,f,l)}h(o,c),c.from=function(a,f,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return o(a,f,l)},c.alloc=function(a,f,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=o(a);return f!==void 0?typeof l=="string"?u.fill(f,l):u.fill(f):u.fill(0),u},c.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return o(a)},c.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return s.SlowBuffer(a)}},{buffer:220}],218:[function(e,n,i){var s=e("safe-buffer").Buffer,o=s.isEncoding||function(k){switch(k=""+k,k&&k.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function h(k){if(!k)return"utf8";for(var F;;)switch(k){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return k;default:if(F)return;k=(""+k).toLowerCase(),F=!0}}function c(k){var F=h(k);if(typeof F!="string"&&(s.isEncoding===o||!o(k)))throw new Error("Unknown encoding: "+k);return F||k}i.StringDecoder=a;function a(k){this.encoding=c(k);var F;switch(this.encoding){case"utf16le":this.text=v,this.end=x,F=4;break;case"utf8":this.fillLast=p,F=4;break;case"base64":this.text=g,this.end=w,F=3;break;default:this.write=y,this.end=_;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=s.allocUnsafe(F)}a.prototype.write=function(k){if(k.length===0)return"";var F,O;if(this.lastNeed){if(F=this.fillLast(k),F===void 0)return"";O=this.lastNeed,this.lastNeed=0}else O=0;return O>5===6?2:k>>4===14?3:k>>3===30?4:k>>6===2?-1:-2}function l(k,F,O){var N=F.length-1;if(N=0?(U>0&&(k.lastNeed=U-1),U):--N=0?(U>0&&(k.lastNeed=U-2),U):--N=0?(U>0&&(U===2?U=0:k.lastNeed=U-3),U):0))}function u(k,F,O){if((F[0]&192)!==128)return k.lastNeed=0,"�";if(k.lastNeed>1&&F.length>1){if((F[1]&192)!==128)return k.lastNeed=1,"�";if(k.lastNeed>2&&F.length>2&&(F[2]&192)!==128)return k.lastNeed=2,"�"}}function p(k){var F=this.lastTotal-this.lastNeed,O=u(this,k);if(O!==void 0)return O;if(this.lastNeed<=k.length)return k.copy(this.lastChar,F,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);k.copy(this.lastChar,F,0,k.length),this.lastNeed-=k.length}function m(k,F){var O=l(this,k,F);if(!this.lastNeed)return k.toString("utf8",F);this.lastTotal=O;var N=k.length-(O-this.lastNeed);return k.copy(this.lastChar,0,N),k.toString("utf8",F,N)}function d(k){var F=k&&k.length?this.write(k):"";return this.lastNeed?F+"�":F}function v(k,F){if((k.length-F)%2===0){var O=k.toString("utf16le",F);if(O){var N=O.charCodeAt(O.length-1);if(N>=55296&&N<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=k[k.length-2],this.lastChar[1]=k[k.length-1],O.slice(0,-1)}return O}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=k[k.length-1],k.toString("utf16le",F,k.length-1)}function x(k){var F=k&&k.length?this.write(k):"";if(this.lastNeed){var O=this.lastTotal-this.lastNeed;return F+this.lastChar.toString("utf16le",0,O)}return F}function g(k,F){var O=(k.length-F)%3;return O===0?k.toString("base64",F):(this.lastNeed=3-O,this.lastTotal=3,O===1?this.lastChar[0]=k[k.length-1]:(this.lastChar[0]=k[k.length-2],this.lastChar[1]=k[k.length-1]),k.toString("base64",F,k.length-O))}function w(k){var F=k&&k.length?this.write(k):"";return this.lastNeed?F+this.lastChar.toString("base64",0,3-this.lastNeed):F}function y(k){return k.toString(this.encoding)}function _(k){return k&&k.length?this.write(k):""}},{"safe-buffer":217}],219:[function(e,n,i){(function(s){(function(){n.exports=function(h,c){for(var a=Math.min(h.length,c.length),f=new s(a),l=0;lc)throw new RangeError('The value "'+ee+'" is invalid for option "size"');var G=new Uint8Array(ee);return G.__proto__=l.prototype,G}function l(ee,G,Z){if(typeof ee=="number"){if(typeof G=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return d(ee)}return u(ee,G,Z)}typeof Symbol<"u"&&Symbol.species!=null&&l[Symbol.species]===l&&Object.defineProperty(l,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),l.poolSize=8192;function u(ee,G,Z){if(typeof ee=="string")return v(ee,G);if(ArrayBuffer.isView(ee))return x(ee);if(ee==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof ee);if(ce(ee,ArrayBuffer)||ee&&ce(ee.buffer,ArrayBuffer))return g(ee,G,Z);if(typeof ee=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var de=ee.valueOf&&ee.valueOf();if(de!=null&&de!==ee)return l.from(de,G,Z);var Ae=w(ee);if(Ae)return Ae;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof ee[Symbol.toPrimitive]=="function")return l.from(ee[Symbol.toPrimitive]("string"),G,Z);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof ee)}l.from=function(ee,G,Z){return u(ee,G,Z)},l.prototype.__proto__=Uint8Array.prototype,l.__proto__=Uint8Array;function p(ee){if(typeof ee!="number")throw new TypeError('"size" argument must be of type number');if(ee<0)throw new RangeError('The value "'+ee+'" is invalid for option "size"')}function m(ee,G,Z){return p(ee),ee<=0?f(ee):G!==void 0?typeof Z=="string"?f(ee).fill(G,Z):f(ee).fill(G):f(ee)}l.alloc=function(ee,G,Z){return m(ee,G,Z)};function d(ee){return p(ee),f(ee<0?0:y(ee)|0)}l.allocUnsafe=function(ee){return d(ee)},l.allocUnsafeSlow=function(ee){return d(ee)};function v(ee,G){if((typeof G!="string"||G==="")&&(G="utf8"),!l.isEncoding(G))throw new TypeError("Unknown encoding: "+G);var Z=k(ee,G)|0,de=f(Z),Ae=de.write(ee,G);return Ae!==Z&&(de=de.slice(0,Ae)),de}function x(ee){for(var G=ee.length<0?0:y(ee.length)|0,Z=f(G),de=0;de=c)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+c.toString(16)+" bytes");return ee|0}function _(ee){return+ee!=ee&&(ee=0),l.alloc(+ee)}l.isBuffer=function(G){return G!=null&&G._isBuffer===!0&&G!==l.prototype},l.compare=function(G,Z){if(ce(G,Uint8Array)&&(G=l.from(G,G.offset,G.byteLength)),ce(Z,Uint8Array)&&(Z=l.from(Z,Z.offset,Z.byteLength)),!l.isBuffer(G)||!l.isBuffer(Z))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(G===Z)return 0;for(var de=G.length,Ae=Z.length,K=0,Te=Math.min(de,Ae);K2&&arguments[2]===!0;if(!de&&Z===0)return 0;for(var Ae=!1;;)switch(G){case"ascii":case"latin1":case"binary":return Z;case"utf8":case"utf-8":return ne(ee).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Z*2;case"hex":return Z>>>1;case"base64":return ve(ee).length;default:if(Ae)return de?-1:ne(ee).length;G=(""+G).toLowerCase(),Ae=!0}}l.byteLength=k;function F(ee,G,Z){var de=!1;if((G===void 0||G<0)&&(G=0),G>this.length||((Z===void 0||Z>this.length)&&(Z=this.length),Z<=0)||(Z>>>=0,G>>>=0,Z<=G))return"";for(ee||(ee="utf8");;)switch(ee){case"hex":return R(this,G,Z);case"utf8":case"utf-8":return E(this,G,Z);case"ascii":return L(this,G,Z);case"latin1":case"binary":return P(this,G,Z);case"base64":return M(this,G,Z);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,G,Z);default:if(de)throw new TypeError("Unknown encoding: "+ee);ee=(ee+"").toLowerCase(),de=!0}}l.prototype._isBuffer=!0;function O(ee,G,Z){var de=ee[G];ee[G]=ee[Z],ee[Z]=de}l.prototype.swap16=function(){var G=this.length;if(G%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var Z=0;ZZ&&(G+=" ... "),""},l.prototype.compare=function(G,Z,de,Ae,K){if(ce(G,Uint8Array)&&(G=l.from(G,G.offset,G.byteLength)),!l.isBuffer(G))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof G);if(Z===void 0&&(Z=0),de===void 0&&(de=G?G.length:0),Ae===void 0&&(Ae=0),K===void 0&&(K=this.length),Z<0||de>G.length||Ae<0||K>this.length)throw new RangeError("out of range index");if(Ae>=K&&Z>=de)return 0;if(Ae>=K)return-1;if(Z>=de)return 1;if(Z>>>=0,de>>>=0,Ae>>>=0,K>>>=0,this===G)return 0;for(var Te=K-Ae,Oe=de-Z,ie=Math.min(Te,Oe),fe=this.slice(Ae,K),we=G.slice(Z,de),Fe=0;Fe2147483647?Z=2147483647:Z<-2147483648&&(Z=-2147483648),Z=+Z,se(Z)&&(Z=Ae?0:ee.length-1),Z<0&&(Z=ee.length+Z),Z>=ee.length){if(Ae)return-1;Z=ee.length-1}else if(Z<0)if(Ae)Z=0;else return-1;if(typeof G=="string"&&(G=l.from(G,de)),l.isBuffer(G))return G.length===0?-1:U(ee,G,Z,de,Ae);if(typeof G=="number")return G=G&255,typeof Uint8Array.prototype.indexOf=="function"?Ae?Uint8Array.prototype.indexOf.call(ee,G,Z):Uint8Array.prototype.lastIndexOf.call(ee,G,Z):U(ee,[G],Z,de,Ae);throw new TypeError("val must be string, number or Buffer")}function U(ee,G,Z,de,Ae){var K=1,Te=ee.length,Oe=G.length;if(de!==void 0&&(de=String(de).toLowerCase(),de==="ucs2"||de==="ucs-2"||de==="utf16le"||de==="utf-16le")){if(ee.length<2||G.length<2)return-1;K=2,Te/=2,Oe/=2,Z/=2}function ie(Pe,$e){return K===1?Pe[$e]:Pe.readUInt16BE($e*K)}var fe;if(Ae){var we=-1;for(fe=Z;feTe&&(Z=Te-Oe),fe=Z;fe>=0;fe--){for(var Fe=!0,Ue=0;UeAe&&(de=Ae)):de=Ae;var K=G.length;de>K/2&&(de=K/2);for(var Te=0;Te>>0,isFinite(de)?(de=de>>>0,Ae===void 0&&(Ae="utf8")):(Ae=de,de=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var K=this.length-Z;if((de===void 0||de>K)&&(de=K),G.length>0&&(de<0||Z<0)||Z>this.length)throw new RangeError("Attempt to write outside buffer bounds");Ae||(Ae="utf8");for(var Te=!1;;)switch(Ae){case"hex":return z(this,G,Z,de);case"utf8":case"utf-8":return W(this,G,Z,de);case"ascii":return X(this,G,Z,de);case"latin1":case"binary":return J(this,G,Z,de);case"base64":return H(this,G,Z,de);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,G,Z,de);default:if(Te)throw new TypeError("Unknown encoding: "+Ae);Ae=(""+Ae).toLowerCase(),Te=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function M(ee,G,Z){return G===0&&Z===ee.length?o.fromByteArray(ee):o.fromByteArray(ee.slice(G,Z))}function E(ee,G,Z){Z=Math.min(ee.length,Z);for(var de=[],Ae=G;Ae239?4:K>223?3:K>191?2:1;if(Ae+Oe<=Z){var ie,fe,we,Fe;switch(Oe){case 1:K<128&&(Te=K);break;case 2:ie=ee[Ae+1],(ie&192)===128&&(Fe=(K&31)<<6|ie&63,Fe>127&&(Te=Fe));break;case 3:ie=ee[Ae+1],fe=ee[Ae+2],(ie&192)===128&&(fe&192)===128&&(Fe=(K&15)<<12|(ie&63)<<6|fe&63,Fe>2047&&(Fe<55296||Fe>57343)&&(Te=Fe));break;case 4:ie=ee[Ae+1],fe=ee[Ae+2],we=ee[Ae+3],(ie&192)===128&&(fe&192)===128&&(we&192)===128&&(Fe=(K&15)<<18|(ie&63)<<12|(fe&63)<<6|we&63,Fe>65535&&Fe<1114112&&(Te=Fe))}}Te===null?(Te=65533,Oe=1):Te>65535&&(Te-=65536,de.push(Te>>>10&1023|55296),Te=56320|Te&1023),de.push(Te),Ae+=Oe}return B(de)}var A=4096;function B(ee){var G=ee.length;if(G<=A)return String.fromCharCode.apply(String,ee);for(var Z="",de=0;dede)&&(Z=de);for(var Ae="",K=G;Kde&&(G=de),Z<0?(Z+=de,Z<0&&(Z=0)):Z>de&&(Z=de),ZZ)throw new RangeError("Trying to access beyond buffer length")}l.prototype.readUIntLE=function(G,Z,de){G=G>>>0,Z=Z>>>0,de||S(G,Z,this.length);for(var Ae=this[G],K=1,Te=0;++Te>>0,Z=Z>>>0,de||S(G,Z,this.length);for(var Ae=this[G+--Z],K=1;Z>0&&(K*=256);)Ae+=this[G+--Z]*K;return Ae},l.prototype.readUInt8=function(G,Z){return G=G>>>0,Z||S(G,1,this.length),this[G]},l.prototype.readUInt16LE=function(G,Z){return G=G>>>0,Z||S(G,2,this.length),this[G]|this[G+1]<<8},l.prototype.readUInt16BE=function(G,Z){return G=G>>>0,Z||S(G,2,this.length),this[G]<<8|this[G+1]},l.prototype.readUInt32LE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),(this[G]|this[G+1]<<8|this[G+2]<<16)+this[G+3]*16777216},l.prototype.readUInt32BE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),this[G]*16777216+(this[G+1]<<16|this[G+2]<<8|this[G+3])},l.prototype.readIntLE=function(G,Z,de){G=G>>>0,Z=Z>>>0,de||S(G,Z,this.length);for(var Ae=this[G],K=1,Te=0;++Te=K&&(Ae-=Math.pow(2,8*Z)),Ae},l.prototype.readIntBE=function(G,Z,de){G=G>>>0,Z=Z>>>0,de||S(G,Z,this.length);for(var Ae=Z,K=1,Te=this[G+--Ae];Ae>0&&(K*=256);)Te+=this[G+--Ae]*K;return K*=128,Te>=K&&(Te-=Math.pow(2,8*Z)),Te},l.prototype.readInt8=function(G,Z){return G=G>>>0,Z||S(G,1,this.length),this[G]&128?(255-this[G]+1)*-1:this[G]},l.prototype.readInt16LE=function(G,Z){G=G>>>0,Z||S(G,2,this.length);var de=this[G]|this[G+1]<<8;return de&32768?de|4294901760:de},l.prototype.readInt16BE=function(G,Z){G=G>>>0,Z||S(G,2,this.length);var de=this[G+1]|this[G]<<8;return de&32768?de|4294901760:de},l.prototype.readInt32LE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),this[G]|this[G+1]<<8|this[G+2]<<16|this[G+3]<<24},l.prototype.readInt32BE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),this[G]<<24|this[G+1]<<16|this[G+2]<<8|this[G+3]},l.prototype.readFloatLE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),h.read(this,G,!0,23,4)},l.prototype.readFloatBE=function(G,Z){return G=G>>>0,Z||S(G,4,this.length),h.read(this,G,!1,23,4)},l.prototype.readDoubleLE=function(G,Z){return G=G>>>0,Z||S(G,8,this.length),h.read(this,G,!0,52,8)},l.prototype.readDoubleBE=function(G,Z){return G=G>>>0,Z||S(G,8,this.length),h.read(this,G,!1,52,8)};function D(ee,G,Z,de,Ae,K){if(!l.isBuffer(ee))throw new TypeError('"buffer" argument must be a Buffer instance');if(G>Ae||Gee.length)throw new RangeError("Index out of range")}l.prototype.writeUIntLE=function(G,Z,de,Ae){if(G=+G,Z=Z>>>0,de=de>>>0,!Ae){var K=Math.pow(2,8*de)-1;D(this,G,Z,de,K,0)}var Te=1,Oe=0;for(this[Z]=G&255;++Oe>>0,de=de>>>0,!Ae){var K=Math.pow(2,8*de)-1;D(this,G,Z,de,K,0)}var Te=de-1,Oe=1;for(this[Z+Te]=G&255;--Te>=0&&(Oe*=256);)this[Z+Te]=G/Oe&255;return Z+de},l.prototype.writeUInt8=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,1,255,0),this[Z]=G&255,Z+1},l.prototype.writeUInt16LE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,2,65535,0),this[Z]=G&255,this[Z+1]=G>>>8,Z+2},l.prototype.writeUInt16BE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,2,65535,0),this[Z]=G>>>8,this[Z+1]=G&255,Z+2},l.prototype.writeUInt32LE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,4,4294967295,0),this[Z+3]=G>>>24,this[Z+2]=G>>>16,this[Z+1]=G>>>8,this[Z]=G&255,Z+4},l.prototype.writeUInt32BE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,4,4294967295,0),this[Z]=G>>>24,this[Z+1]=G>>>16,this[Z+2]=G>>>8,this[Z+3]=G&255,Z+4},l.prototype.writeIntLE=function(G,Z,de,Ae){if(G=+G,Z=Z>>>0,!Ae){var K=Math.pow(2,8*de-1);D(this,G,Z,de,K-1,-K)}var Te=0,Oe=1,ie=0;for(this[Z]=G&255;++Te>0)-ie&255;return Z+de},l.prototype.writeIntBE=function(G,Z,de,Ae){if(G=+G,Z=Z>>>0,!Ae){var K=Math.pow(2,8*de-1);D(this,G,Z,de,K-1,-K)}var Te=de-1,Oe=1,ie=0;for(this[Z+Te]=G&255;--Te>=0&&(Oe*=256);)G<0&&ie===0&&this[Z+Te+1]!==0&&(ie=1),this[Z+Te]=(G/Oe>>0)-ie&255;return Z+de},l.prototype.writeInt8=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,1,127,-128),G<0&&(G=255+G+1),this[Z]=G&255,Z+1},l.prototype.writeInt16LE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,2,32767,-32768),this[Z]=G&255,this[Z+1]=G>>>8,Z+2},l.prototype.writeInt16BE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,2,32767,-32768),this[Z]=G>>>8,this[Z+1]=G&255,Z+2},l.prototype.writeInt32LE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,4,2147483647,-2147483648),this[Z]=G&255,this[Z+1]=G>>>8,this[Z+2]=G>>>16,this[Z+3]=G>>>24,Z+4},l.prototype.writeInt32BE=function(G,Z,de){return G=+G,Z=Z>>>0,de||D(this,G,Z,4,2147483647,-2147483648),G<0&&(G=4294967295+G+1),this[Z]=G>>>24,this[Z+1]=G>>>16,this[Z+2]=G>>>8,this[Z+3]=G&255,Z+4};function V(ee,G,Z,de,Ae,K){if(Z+de>ee.length)throw new RangeError("Index out of range");if(Z<0)throw new RangeError("Index out of range")}function te(ee,G,Z,de,Ae){return G=+G,Z=Z>>>0,Ae||V(ee,G,Z,4),h.write(ee,G,Z,de,23,4),Z+4}l.prototype.writeFloatLE=function(G,Z,de){return te(this,G,Z,!0,de)},l.prototype.writeFloatBE=function(G,Z,de){return te(this,G,Z,!1,de)};function oe(ee,G,Z,de,Ae){return G=+G,Z=Z>>>0,Ae||V(ee,G,Z,8),h.write(ee,G,Z,de,52,8),Z+8}l.prototype.writeDoubleLE=function(G,Z,de){return oe(this,G,Z,!0,de)},l.prototype.writeDoubleBE=function(G,Z,de){return oe(this,G,Z,!1,de)},l.prototype.copy=function(G,Z,de,Ae){if(!l.isBuffer(G))throw new TypeError("argument should be a Buffer");if(de||(de=0),!Ae&&Ae!==0&&(Ae=this.length),Z>=G.length&&(Z=G.length),Z||(Z=0),Ae>0&&Ae=this.length)throw new RangeError("Index out of range");if(Ae<0)throw new RangeError("sourceEnd out of bounds");Ae>this.length&&(Ae=this.length),G.length-Z=0;--Te)G[Te+Z]=this[Te+de];else Uint8Array.prototype.set.call(G,this.subarray(de,Ae),Z);return K},l.prototype.fill=function(G,Z,de,Ae){if(typeof G=="string"){if(typeof Z=="string"?(Ae=Z,Z=0,de=this.length):typeof de=="string"&&(Ae=de,de=this.length),Ae!==void 0&&typeof Ae!="string")throw new TypeError("encoding must be a string");if(typeof Ae=="string"&&!l.isEncoding(Ae))throw new TypeError("Unknown encoding: "+Ae);if(G.length===1){var K=G.charCodeAt(0);(Ae==="utf8"&&K<128||Ae==="latin1")&&(G=K)}}else typeof G=="number"&&(G=G&255);if(Z<0||this.length>>0,de=de===void 0?this.length:de>>>0,G||(G=0);var Te;if(typeof G=="number")for(Te=Z;Te55295&&Z<57344){if(!Ae){if(Z>56319){(G-=3)>-1&&K.push(239,191,189);continue}else if(Te+1===de){(G-=3)>-1&&K.push(239,191,189);continue}Ae=Z;continue}if(Z<56320){(G-=3)>-1&&K.push(239,191,189),Ae=Z;continue}Z=(Ae-55296<<10|Z-56320)+65536}else Ae&&(G-=3)>-1&&K.push(239,191,189);if(Ae=null,Z<128){if((G-=1)<0)break;K.push(Z)}else if(Z<2048){if((G-=2)<0)break;K.push(Z>>6|192,Z&63|128)}else if(Z<65536){if((G-=3)<0)break;K.push(Z>>12|224,Z>>6&63|128,Z&63|128)}else if(Z<1114112){if((G-=4)<0)break;K.push(Z>>18|240,Z>>12&63|128,Z>>6&63|128,Z&63|128)}else throw new Error("Invalid code point")}return K}function Q(ee){for(var G=[],Z=0;Z>8,Ae=Z%256,K.push(Ae),K.push(de);return K}function ve(ee){return o.toByteArray(Ne(ee))}function Ce(ee,G,Z,de){for(var Ae=0;Ae=G.length||Ae>=ee.length);++Ae)G[Ae+Z]=ee[Ae];return Ae}function ce(ee,G){return ee instanceof G||ee!=null&&ee.constructor!=null&&ee.constructor.name!=null&&ee.constructor.name===G.name}function se(ee){return ee!==ee}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(e,n,i){var s=e("safe-buffer").Buffer,o=e("stream").Transform,h=e("string_decoder").StringDecoder,c=e("inherits");function a(f){o.call(this),this.hashMode=typeof f=="string",this.hashMode?this[f]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}c(a,o),a.prototype.update=function(f,l,u){typeof f=="string"&&(f=s.from(f,l));var p=this._update(f);return this.hashMode?this:(u&&(p=this._toString(p,u)),p)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},a.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},a.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},a.prototype._transform=function(f,l,u){var p;try{this.hashMode?this._update(f):this.push(this._update(f))}catch(m){p=m}finally{u(p)}},a.prototype._flush=function(f){var l;try{this.push(this.__final())}catch(u){l=u}f(l)},a.prototype._finalOrDigest=function(f){var l=this.__final()||s.alloc(0);return f&&(l=this._toString(l,f,!0)),l},a.prototype._toString=function(f,l,u){if(this._decoder||(this._decoder=new h(l),this._encoding=l),this._encoding!==l)throw new Error("can't switch encodings");var p=this._decoder.write(f);return u&&(p+=this._decoder.end()),p},n.exports=a},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(e,n,i){var s=e("../internals/is-callable"),o=e("../internals/try-to-string"),h=TypeError;n.exports=function(c){if(s(c))return c;throw new h(o(c)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(e,n,i){var s=e("../internals/is-constructor"),o=e("../internals/try-to-string"),h=TypeError;n.exports=function(c){if(s(c))return c;throw new h(o(c)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(e,n,i){var s=e("../internals/is-callable"),o=String,h=TypeError;n.exports=function(c){if(typeof c=="object"||s(c))return c;throw new h("Can't set "+o(c)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(e,n,i){var s=e("../internals/well-known-symbol"),o=e("../internals/object-create"),h=e("../internals/object-define-property").f,c=s("unscopables"),a=Array.prototype;a[c]===void 0&&h(a,c,{configurable:!0,value:o(null)}),n.exports=function(f){a[c][f]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(e,n,i){var s=e("../internals/object-is-prototype-of"),o=TypeError;n.exports=function(h,c){if(s(c,h))return h;throw new o("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(e,n,i){var s=e("../internals/is-object"),o=String,h=TypeError;n.exports=function(c){if(s(c))return c;throw new h(o(c)+" is not an object")}},{"../internals/is-object":289}],228:[function(e,n,i){var s=e("../internals/to-indexed-object"),o=e("../internals/to-absolute-index"),h=e("../internals/length-of-array-like"),c=function(a){return function(f,l,u){var p=s(f),m=h(p),d=o(u,m),v;if(a&&l!==l){for(;m>d;)if(v=p[d++],v!==v)return!0}else for(;m>d;d++)if((a||d in p)&&p[d]===l)return a||d||0;return!a&&-1}};n.exports={includes:c(!0),indexOf:c(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(e,n,i){var s=e("../internals/function-bind-context"),o=e("../internals/function-uncurry-this"),h=e("../internals/indexed-object"),c=e("../internals/to-object"),a=e("../internals/length-of-array-like"),f=e("../internals/array-species-create"),l=o([].push),u=function(p){var m=p===1,d=p===2,v=p===3,x=p===4,g=p===6,w=p===7,y=p===5||g;return function(_,k,F,O){for(var N=c(_),U=h(N),z=s(k,F),W=a(U),X=0,J=O||f,H=m?J(_,W):d||w?J(_,0):void 0,I,M;W>X;X++)if((y||X in U)&&(I=U[X],M=z(I,X,N),p))if(m)H[X]=M;else if(M)switch(p){case 3:return!0;case 5:return I;case 6:return X;case 2:l(H,I)}else switch(p){case 4:return!1;case 7:l(H,I)}return g?-1:v||x?x:H}};n.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(e,n,i){var s=e("../internals/to-absolute-index"),o=e("../internals/length-of-array-like"),h=e("../internals/create-property"),c=Array,a=Math.max;n.exports=function(f,l,u){for(var p=o(f),m=s(l,p),d=s(u===void 0?p:u,p),v=c(a(d-m,0)),x=0;m"u"&&s!==void 0;n.exports={all:s,IS_HTMLDDA:o}},{}],249:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/is-object"),h=s.document,c=o(h)&&o(h.createElement);n.exports=function(a){return c?h.createElement(a):{}}},{"../internals/global":274,"../internals/is-object":289}],250:[function(e,n,i){var s=e("../internals/engine-is-deno"),o=e("../internals/engine-is-node");n.exports=!s&&!o&&typeof window=="object"&&typeof document=="object"},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(e,n,i){n.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},{}],252:[function(e,n,i){var s=e("../internals/engine-user-agent");n.exports=/ipad|iphone|ipod/i.test(s)&&typeof Pebble<"u"},{"../internals/engine-user-agent":256}],253:[function(e,n,i){var s=e("../internals/engine-user-agent");n.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(s)},{"../internals/engine-user-agent":256}],254:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/classof-raw");n.exports=o(s.process)==="process"},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(e,n,i){var s=e("../internals/engine-user-agent");n.exports=/web0s(?!.*chrome)/i.test(s)},{"../internals/engine-user-agent":256}],256:[function(e,n,i){n.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},{}],257:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/engine-user-agent"),h=s.process,c=s.Deno,a=h&&h.versions||c&&c.version,f=a&&a.v8,l,u;f&&(l=f.split("."),u=l[0]>0&&l[0]<4?1:+(l[0]+l[1])),!u&&o&&(l=o.match(/Edge\/(\d+)/),(!l||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/),l&&(u=+l[1]))),n.exports=u},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(e,n,i){n.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/object-get-own-property-descriptor").f,h=e("../internals/create-non-enumerable-property"),c=e("../internals/define-built-in"),a=e("../internals/define-global-property"),f=e("../internals/copy-constructor-properties"),l=e("../internals/is-forced");n.exports=function(u,p){var m=u.target,d=u.global,v=u.stat,x,g,w,y,_,k;if(d?g=s:v?g=s[m]||a(m,{}):g=(s[m]||{}).prototype,g)for(w in p){if(_=p[w],u.dontCallGetSet?(k=o(g,w),y=k&&k.value):y=g[w],x=l(d?w:m+(v?".":"#")+w,u.forced),!x&&y!==void 0){if(typeof _==typeof y)continue;f(_,y)}(u.sham||y&&y.sham)&&h(_,"sham",!0),c(g,w,_,u)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(e,n,i){n.exports=function(s){try{return!!s()}catch{return!0}}},{}],261:[function(e,n,i){var s=e("../internals/function-bind-native"),o=Function.prototype,h=o.apply,c=o.call;n.exports=typeof Reflect=="object"&&Reflect.apply||(s?c.bind(h):function(){return c.apply(h,arguments)})},{"../internals/function-bind-native":263}],262:[function(e,n,i){var s=e("../internals/function-uncurry-this-clause"),o=e("../internals/a-callable"),h=e("../internals/function-bind-native"),c=s(s.bind);n.exports=function(a,f){return o(a),f===void 0?a:h?c(a,f):function(){return a.apply(f,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(e,n,i){var s=e("../internals/fails");n.exports=!s(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")})},{"../internals/fails":260}],264:[function(e,n,i){var s=e("../internals/function-bind-native"),o=Function.prototype.call;n.exports=s?o.bind(o):function(){return o.apply(o,arguments)}},{"../internals/function-bind-native":263}],265:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/has-own-property"),h=Function.prototype,c=s&&Object.getOwnPropertyDescriptor,a=o(h,"name"),f=a&&(function(){}).name==="something",l=a&&(!s||s&&c(h,"name").configurable);n.exports={EXISTS:a,PROPER:f,CONFIGURABLE:l}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(e,n,i){var s=e("../internals/function-uncurry-this"),o=e("../internals/a-callable");n.exports=function(h,c,a){try{return s(o(Object.getOwnPropertyDescriptor(h,c)[a]))}catch{}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(e,n,i){var s=e("../internals/classof-raw"),o=e("../internals/function-uncurry-this");n.exports=function(h){if(s(h)==="Function")return o(h)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(e,n,i){var s=e("../internals/function-bind-native"),o=Function.prototype,h=o.call,c=s&&o.bind.bind(h,h);n.exports=s?c:function(a){return function(){return h.apply(a,arguments)}}},{"../internals/function-bind-native":263}],269:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/is-callable"),h=function(c){return o(c)?c:void 0};n.exports=function(c,a){return arguments.length<2?h(s[c]):s[c]&&s[c][a]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(e,n,i){var s=e("../internals/classof"),o=e("../internals/get-method"),h=e("../internals/is-null-or-undefined"),c=e("../internals/iterators"),a=e("../internals/well-known-symbol"),f=a("iterator");n.exports=function(l){if(!h(l))return o(l,f)||o(l,"@@iterator")||c[s(l)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(e,n,i){var s=e("../internals/function-call"),o=e("../internals/a-callable"),h=e("../internals/an-object"),c=e("../internals/try-to-string"),a=e("../internals/get-iterator-method"),f=TypeError;n.exports=function(l,u){var p=arguments.length<2?a(l):u;if(o(p))return h(s(p,l));throw new f(c(l)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(e,n,i){var s=e("../internals/function-uncurry-this"),o=e("../internals/is-array"),h=e("../internals/is-callable"),c=e("../internals/classof-raw"),a=e("../internals/to-string"),f=s([].push);n.exports=function(l){if(h(l))return l;if(o(l)){for(var u=l.length,p=[],m=0;mX;X++)if(H=A(g[X]),H&&l(x,H))return H;return new v(!1)}z=u(g,W)}for(I=F?g.next:z.next;!(M=o(I,z)).done;){try{H=A(M.value)}catch(B){m(z,"throw",B)}if(typeof H=="object"&&H&&l(x,H))return H}return new v(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(e,n,i){var s=e("../internals/function-call"),o=e("../internals/an-object"),h=e("../internals/get-method");n.exports=function(c,a,f){var l,u;o(c);try{if(l=h(c,"return"),!l){if(a==="throw")throw f;return f}l=s(l,c)}catch(p){u=!0,l=p}if(a==="throw")throw f;if(u)throw l;return o(l),f}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(e,n,i){var s=e("../internals/iterators-core").IteratorPrototype,o=e("../internals/object-create"),h=e("../internals/create-property-descriptor"),c=e("../internals/set-to-string-tag"),a=e("../internals/iterators"),f=function(){return this};n.exports=function(l,u,p,m){var d=u+" Iterator";return l.prototype=o(s,{next:h(+!m,p)}),c(l,d,!1,!0),a[d]=f,l}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-call"),h=e("../internals/is-pure"),c=e("../internals/function-name"),a=e("../internals/is-callable"),f=e("../internals/iterator-create-constructor"),l=e("../internals/object-get-prototype-of"),u=e("../internals/object-set-prototype-of"),p=e("../internals/set-to-string-tag"),m=e("../internals/create-non-enumerable-property"),d=e("../internals/define-built-in"),v=e("../internals/well-known-symbol"),x=e("../internals/iterators"),g=e("../internals/iterators-core"),w=c.PROPER,y=c.CONFIGURABLE,_=g.IteratorPrototype,k=g.BUGGY_SAFARI_ITERATORS,F=v("iterator"),O="keys",N="values",U="entries",z=function(){return this};n.exports=function(W,X,J,H,I,M,E){f(J,X,H);var A=function(oe){if(oe===I&&C)return C;if(!k&&oe&&oe in P)return P[oe];switch(oe){case O:return function(){return new J(this,oe)};case N:return function(){return new J(this,oe)};case U:return function(){return new J(this,oe)}}return function(){return new J(this)}},B=X+" Iterator",L=!1,P=W.prototype,R=P[F]||P["@@iterator"]||I&&P[I],C=!k&&R||A(I),S=X==="Array"&&P.entries||R,D,V,te;if(S&&(D=l(S.call(new W)),D!==Object.prototype&&D.next&&(!h&&l(D)!==_&&(u?u(D,_):a(D[F])||d(D,F,z)),p(D,B,!0,!0),h&&(x[B]=z))),w&&I===N&&R&&R.name!==N&&(!h&&y?m(P,"name",N):(L=!0,C=function(){return o(R,this)})),I)if(V={values:A(N),keys:M?C:A(O),entries:A(U)},E)for(te in V)(k||L||!(te in P))&&d(P,te,V[te]);else s({target:X,proto:!0,forced:k||L},V);return(!h||E)&&P[F]!==C&&d(P,F,C,{name:I}),x[X]=C,V}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(e,n,i){var s=e("../internals/fails"),o=e("../internals/is-callable"),h=e("../internals/is-object"),c=e("../internals/object-create"),a=e("../internals/object-get-prototype-of"),f=e("../internals/define-built-in"),l=e("../internals/well-known-symbol"),u=e("../internals/is-pure"),p=l("iterator"),m=!1,d,v,x;[].keys&&(x=[].keys(),"next"in x?(v=a(a(x)),v!==Object.prototype&&(d=v)):m=!0);var g=!h(d)||s(function(){var w={};return d[p].call(w)!==w});g?d={}:u&&(d=c(d)),o(d[p])||f(d,p,function(){return this}),n.exports={IteratorPrototype:d,BUGGY_SAFARI_ITERATORS:m}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(e,n,i){arguments[4][276][0].apply(i,arguments)},{dup:276}],299:[function(e,n,i){var s=e("../internals/to-length");n.exports=function(o){return s(o.length)}},{"../internals/to-length":343}],300:[function(e,n,i){var s=e("../internals/function-uncurry-this"),o=e("../internals/fails"),h=e("../internals/is-callable"),c=e("../internals/has-own-property"),a=e("../internals/descriptors"),f=e("../internals/function-name").CONFIGURABLE,l=e("../internals/inspect-source"),u=e("../internals/internal-state"),p=u.enforce,m=u.get,d=String,v=Object.defineProperty,x=s("".slice),g=s("".replace),w=s([].join),y=a&&!o(function(){return v(function(){},"length",{value:8}).length!==8}),_=String(String).split("String"),k=n.exports=function(F,O,N){x(d(O),0,7)==="Symbol("&&(O="["+g(d(O),/^Symbol\(([^)]*)\)/,"$1")+"]"),N&&N.getter&&(O="get "+O),N&&N.setter&&(O="set "+O),(!c(F,"name")||f&&F.name!==O)&&(a?v(F,"name",{value:O,configurable:!0}):F.name=O),y&&N&&c(N,"arity")&&F.length!==N.arity&&v(F,"length",{value:N.arity});try{N&&c(N,"constructor")&&N.constructor?a&&v(F,"prototype",{writable:!1}):F.prototype&&(F.prototype=void 0)}catch{}var U=p(F);return c(U,"source")||(U.source=w(_,typeof O=="string"?O:"")),F};Function.prototype.toString=k(function(){return h(this)&&m(this).source||l(this)},"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(e,n,i){var s=Math.ceil,o=Math.floor;n.exports=Math.trunc||function(c){var a=+c;return(a>0?o:s)(a)}},{}],302:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/function-bind-context"),h=e("../internals/object-get-own-property-descriptor").f,c=e("../internals/task").set,a=e("../internals/queue"),f=e("../internals/engine-is-ios"),l=e("../internals/engine-is-ios-pebble"),u=e("../internals/engine-is-webos-webkit"),p=e("../internals/engine-is-node"),m=s.MutationObserver||s.WebKitMutationObserver,d=s.document,v=s.process,x=s.Promise,g=h(s,"queueMicrotask"),w=g&&g.value,y,_,k,F,O;if(!w){var N=new a,U=function(){var z,W;for(p&&(z=v.domain)&&z.exit();W=N.get();)try{W()}catch(X){throw N.head&&y(),X}z&&z.enter()};!f&&!p&&!u&&m&&d?(_=!0,k=d.createTextNode(""),new m(U).observe(k,{characterData:!0}),y=function(){k.data=_=!_}):!l&&x&&x.resolve?(F=x.resolve(void 0),F.constructor=x,O=o(F.then,F),y=function(){O(U)}):p?y=function(){v.nextTick(U)}:(c=o(c,s),y=function(){c(U)}),w=function(z){N.head||y(),N.add(z)}}n.exports=w},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(e,n,i){var s=e("../internals/a-callable"),o=TypeError,h=function(c){var a,f;this.promise=new c(function(l,u){if(a!==void 0||f!==void 0)throw new o("Bad Promise constructor");a=l,f=u}),this.resolve=s(a),this.reject=s(f)};n.exports.f=function(c){return new h(c)}},{"../internals/a-callable":222}],304:[function(e,n,i){var s=e("../internals/is-regexp"),o=TypeError;n.exports=function(h){if(s(h))throw new o("The method doesn't accept regular expressions");return h}},{"../internals/is-regexp":291}],305:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/function-uncurry-this"),h=e("../internals/function-call"),c=e("../internals/fails"),a=e("../internals/object-keys"),f=e("../internals/object-get-own-property-symbols"),l=e("../internals/object-property-is-enumerable"),u=e("../internals/to-object"),p=e("../internals/indexed-object"),m=Object.assign,d=Object.defineProperty,v=o([].concat);n.exports=!m||c(function(){if(s&&m({b:1},m(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var x={},g={},w=Symbol("assign detection"),y="abcdefghijklmnopqrst";return x[w]=7,y.split("").forEach(function(_){g[_]=_}),m({},x)[w]!==7||a(m({},g)).join("")!==y})?function(g,w){for(var y=u(g),_=arguments.length,k=1,F=f.f,O=l.f;_>k;)for(var N=p(arguments[k++]),U=F?v(a(N),F(N)):a(N),z=U.length,W=0,X;z>W;)X=U[W++],(!s||h(O,N,X))&&(y[X]=N[X]);return y}:m},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(e,n,i){var s=e("../internals/an-object"),o=e("../internals/object-define-properties"),h=e("../internals/enum-bug-keys"),c=e("../internals/hidden-keys"),a=e("../internals/html"),f=e("../internals/document-create-element"),l=e("../internals/shared-key"),u=">",p="<",m="prototype",d="script",v=l("IE_PROTO"),x=function(){},g=function(F){return p+d+u+F+p+"/"+d+u},w=function(F){F.write(g("")),F.close();var O=F.parentWindow.Object;return F=null,O},y=function(){var F=f("iframe"),O="java"+d+":",N;return F.style.display="none",a.appendChild(F),F.src=String(O),N=F.contentWindow.document,N.open(),N.write(g("document.F=Object")),N.close(),N.F},_,k=function(){try{_=new ActiveXObject("htmlfile")}catch{}k=typeof document<"u"?document.domain&&_?w(_):y():w(_);for(var F=h.length;F--;)delete k[m][h[F]];return k()};c[v]=!0,n.exports=Object.create||function(O,N){var U;return O!==null?(x[m]=s(O),U=new x,x[m]=null,U[v]=O):U=k(),N===void 0?U:o.f(U,N)}},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/v8-prototype-define-bug"),h=e("../internals/object-define-property"),c=e("../internals/an-object"),a=e("../internals/to-indexed-object"),f=e("../internals/object-keys");i.f=s&&!o?Object.defineProperties:function(u,p){c(u);for(var m=a(p),d=f(p),v=d.length,x=0,g;v>x;)h.f(u,g=d[x++],m[g]);return u}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/ie8-dom-define"),h=e("../internals/v8-prototype-define-bug"),c=e("../internals/an-object"),a=e("../internals/to-property-key"),f=TypeError,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,p="enumerable",m="configurable",d="writable";i.f=s?h?function(x,g,w){if(c(x),g=a(g),c(w),typeof x=="function"&&g==="prototype"&&"value"in w&&d in w&&!w[d]){var y=u(x,g);y&&y[d]&&(x[g]=w.value,w={configurable:m in w?w[m]:y[m],enumerable:p in w?w[p]:y[p],writable:!1})}return l(x,g,w)}:l:function(x,g,w){if(c(x),g=a(g),c(w),o)try{return l(x,g,w)}catch{}if("get"in w||"set"in w)throw new f("Accessors not supported");return"value"in w&&(x[g]=w.value),x}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/function-call"),h=e("../internals/object-property-is-enumerable"),c=e("../internals/create-property-descriptor"),a=e("../internals/to-indexed-object"),f=e("../internals/to-property-key"),l=e("../internals/has-own-property"),u=e("../internals/ie8-dom-define"),p=Object.getOwnPropertyDescriptor;i.f=s?p:function(d,v){if(d=a(d),v=f(v),u)try{return p(d,v)}catch{}if(l(d,v))return c(!o(h.f,d,v),d[v])}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(e,n,i){var s=e("../internals/classof-raw"),o=e("../internals/to-indexed-object"),h=e("../internals/object-get-own-property-names").f,c=e("../internals/array-slice-simple"),a=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],f=function(l){try{return h(l)}catch{return c(a)}};n.exports.f=function(u){return a&&s(u)==="Window"?f(u):h(o(u))}},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(e,n,i){var s=e("../internals/object-keys-internal"),o=e("../internals/enum-bug-keys"),h=o.concat("length","prototype");i.f=Object.getOwnPropertyNames||function(a){return s(a,h)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(e,n,i){i.f=Object.getOwnPropertySymbols},{}],313:[function(e,n,i){var s=e("../internals/has-own-property"),o=e("../internals/is-callable"),h=e("../internals/to-object"),c=e("../internals/shared-key"),a=e("../internals/correct-prototype-getter"),f=c("IE_PROTO"),l=Object,u=l.prototype;n.exports=a?l.getPrototypeOf:function(p){var m=h(p);if(s(m,f))return m[f];var d=m.constructor;return o(d)&&m instanceof d?d.prototype:m instanceof l?u:null}},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(e,n,i){var s=e("../internals/function-uncurry-this");n.exports=s({}.isPrototypeOf)},{"../internals/function-uncurry-this":268}],315:[function(e,n,i){var s=e("../internals/function-uncurry-this"),o=e("../internals/has-own-property"),h=e("../internals/to-indexed-object"),c=e("../internals/array-includes").indexOf,a=e("../internals/hidden-keys"),f=s([].push);n.exports=function(l,u){var p=h(l),m=0,d=[],v;for(v in p)!o(a,v)&&o(p,v)&&f(d,v);for(;u.length>m;)o(p,v=u[m++])&&(~c(d,v)||f(d,v));return d}},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(e,n,i){var s=e("../internals/object-keys-internal"),o=e("../internals/enum-bug-keys");n.exports=Object.keys||function(c){return s(c,o)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(e,n,i){var s={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,h=o&&!s.call({1:2},1);i.f=h?function(a){var f=o(this,a);return!!f&&f.enumerable}:s},{}],318:[function(e,n,i){var s=e("../internals/function-uncurry-this-accessor"),o=e("../internals/an-object"),h=e("../internals/a-possible-prototype");n.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var c=!1,a={},f;try{f=s(Object.prototype,"__proto__","set"),f(a,[]),c=a instanceof Array}catch{}return function(u,p){return o(u),h(p),c?f(u,p):u.__proto__=p,u}}():void 0)},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/fails"),h=e("../internals/function-uncurry-this"),c=e("../internals/object-get-prototype-of"),a=e("../internals/object-keys"),f=e("../internals/to-indexed-object"),l=e("../internals/object-property-is-enumerable").f,u=h(l),p=h([].push),m=s&&o(function(){var v=Object.create(null);return v[2]=2,!u(v,2)}),d=function(v){return function(x){for(var g=f(x),w=a(g),y=m&&c(g)===null,_=w.length,k=0,F=[],O;_>k;)O=w[k++],(!s||(y?O in g:u(g,O)))&&p(F,v?[O,g[O]]:g[O]);return F}};n.exports={entries:d(!0),values:d(!1)}},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(e,n,i){var s=e("../internals/function-call"),o=e("../internals/is-callable"),h=e("../internals/is-object"),c=TypeError;n.exports=function(a,f){var l,u;if(f==="string"&&o(l=a.toString)&&!h(u=s(l,a))||o(l=a.valueOf)&&!h(u=s(l,a))||f!=="string"&&o(l=a.toString)&&!h(u=s(l,a)))return u;throw new c("Can't convert object to primitive value")}},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(e,n,i){var s=e("../internals/get-built-in"),o=e("../internals/function-uncurry-this"),h=e("../internals/object-get-own-property-names"),c=e("../internals/object-get-own-property-symbols"),a=e("../internals/an-object"),f=o([].concat);n.exports=s("Reflect","ownKeys")||function(u){var p=h.f(a(u)),m=c.f;return m?f(p,m(u)):p}},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(e,n,i){var s=e("../internals/global");n.exports=s},{"../internals/global":274}],323:[function(e,n,i){n.exports=function(s){try{return{error:!1,value:s()}}catch(o){return{error:!0,value:o}}}},{}],324:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/promise-native-constructor"),h=e("../internals/is-callable"),c=e("../internals/is-forced"),a=e("../internals/inspect-source"),f=e("../internals/well-known-symbol"),l=e("../internals/engine-is-browser"),u=e("../internals/engine-is-deno"),p=e("../internals/is-pure"),m=e("../internals/engine-v8-version"),d=o&&o.prototype,v=f("species"),x=!1,g=h(s.PromiseRejectionEvent),w=c("Promise",function(){var y=a(o),_=y!==String(o);if(!_&&m===66||p&&!(d.catch&&d.finally))return!0;if(!m||m<51||!/native code/.test(y)){var k=new o(function(N){N(1)}),F=function(N){N(function(){},function(){})},O=k.constructor={};if(O[v]=F,x=k.then(function(){})instanceof F,!x)return!0}return!_&&(l||u)&&!g});n.exports={CONSTRUCTOR:w,REJECTION_EVENT:g,SUBCLASSING:x}},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(e,n,i){var s=e("../internals/global");n.exports=s.Promise},{"../internals/global":274}],326:[function(e,n,i){var s=e("../internals/an-object"),o=e("../internals/is-object"),h=e("../internals/new-promise-capability");n.exports=function(c,a){if(s(c),o(a)&&a.constructor===c)return a;var f=h.f(c),l=f.resolve;return l(a),f.promise}},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(e,n,i){var s=e("../internals/promise-native-constructor"),o=e("../internals/check-correctness-of-iteration"),h=e("../internals/promise-constructor-detection").CONSTRUCTOR;n.exports=h||!o(function(c){s.all(c).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(e,n,i){var s=function(){this.head=null,this.tail=null};s.prototype={add:function(o){var h={item:o,next:null},c=this.tail;c?c.next=h:this.head=h,this.tail=h},get:function(){var o=this.head;if(o){var h=this.head=o.next;return h===null&&(this.tail=null),o.item}}},n.exports=s},{}],329:[function(e,n,i){var s=e("../internals/is-null-or-undefined"),o=TypeError;n.exports=function(h){if(s(h))throw new o("Can't call method on "+h);return h}},{"../internals/is-null-or-undefined":288}],330:[function(e,n,i){var s=e("../internals/get-built-in"),o=e("../internals/define-built-in-accessor"),h=e("../internals/well-known-symbol"),c=e("../internals/descriptors"),a=h("species");n.exports=function(f){var l=s(f);c&&l&&!l[a]&&o(l,a,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(e,n,i){var s=e("../internals/object-define-property").f,o=e("../internals/has-own-property"),h=e("../internals/well-known-symbol"),c=h("toStringTag");n.exports=function(a,f,l){a&&!l&&(a=a.prototype),a&&!o(a,c)&&s(a,c,{configurable:!0,value:f})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(e,n,i){var s=e("../internals/shared"),o=e("../internals/uid"),h=s("keys");n.exports=function(c){return h[c]||(h[c]=o(c))}},{"../internals/shared":334,"../internals/uid":350}],333:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/define-global-property"),h="__core-js_shared__",c=s[h]||o(h,{});n.exports=c},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(e,n,i){var s=e("../internals/is-pure"),o=e("../internals/shared-store");(n.exports=function(h,c){return o[h]||(o[h]=c!==void 0?c:{})})("versions",[]).push({version:"3.33.0",mode:s?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(e,n,i){var s=e("../internals/an-object"),o=e("../internals/a-constructor"),h=e("../internals/is-null-or-undefined"),c=e("../internals/well-known-symbol"),a=c("species");n.exports=function(f,l){var u=s(f).constructor,p;return u===void 0||h(p=s(u)[a])?l:o(p)}},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(e,n,i){var s=e("../internals/engine-v8-version"),o=e("../internals/fails"),h=e("../internals/global"),c=h.String;n.exports=!!Object.getOwnPropertySymbols&&!o(function(){var a=Symbol("symbol detection");return!c(a)||!(Object(a)instanceof Symbol)||!Symbol.sham&&s&&s<41})},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(e,n,i){var s=e("../internals/function-call"),o=e("../internals/get-built-in"),h=e("../internals/well-known-symbol"),c=e("../internals/define-built-in");n.exports=function(){var a=o("Symbol"),f=a&&a.prototype,l=f&&f.valueOf,u=h("toPrimitive");f&&!f[u]&&c(f,u,function(p){return s(l,this)},{arity:1})}},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(e,n,i){var s=e("../internals/symbol-constructor-detection");n.exports=s&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":336}],339:[function(e,n,i){var s=e("../internals/global"),o=e("../internals/function-apply"),h=e("../internals/function-bind-context"),c=e("../internals/is-callable"),a=e("../internals/has-own-property"),f=e("../internals/fails"),l=e("../internals/html"),u=e("../internals/array-slice"),p=e("../internals/document-create-element"),m=e("../internals/validate-arguments-length"),d=e("../internals/engine-is-ios"),v=e("../internals/engine-is-node"),x=s.setImmediate,g=s.clearImmediate,w=s.process,y=s.Dispatch,_=s.Function,k=s.MessageChannel,F=s.String,O=0,N={},U="onreadystatechange",z,W,X,J;f(function(){z=s.location});var H=function(A){if(a(N,A)){var B=N[A];delete N[A],B()}},I=function(A){return function(){H(A)}},M=function(A){H(A.data)},E=function(A){s.postMessage(F(A),z.protocol+"//"+z.host)};(!x||!g)&&(x=function(B){m(arguments.length,1);var L=c(B)?B:_(B),P=u(arguments,1);return N[++O]=function(){o(L,void 0,P)},W(O),O},g=function(B){delete N[B]},v?W=function(A){w.nextTick(I(A))}:y&&y.now?W=function(A){y.now(I(A))}:k&&!d?(X=new k,J=X.port2,X.port1.onmessage=M,W=h(J.postMessage,J)):s.addEventListener&&c(s.postMessage)&&!s.importScripts&&z&&z.protocol!=="file:"&&!f(E)?(W=E,s.addEventListener("message",M,!1)):U in p("script")?W=function(A){l.appendChild(p("script"))[U]=function(){l.removeChild(this),H(A)}}:W=function(A){setTimeout(I(A),0)}),n.exports={set:x,clear:g}},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(e,n,i){var s=e("../internals/to-integer-or-infinity"),o=Math.max,h=Math.min;n.exports=function(c,a){var f=s(c);return f<0?o(f+a,0):h(f,a)}},{"../internals/to-integer-or-infinity":342}],341:[function(e,n,i){var s=e("../internals/indexed-object"),o=e("../internals/require-object-coercible");n.exports=function(h){return s(o(h))}},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(e,n,i){var s=e("../internals/math-trunc");n.exports=function(o){var h=+o;return h!==h||h===0?0:s(h)}},{"../internals/math-trunc":301}],343:[function(e,n,i){var s=e("../internals/to-integer-or-infinity"),o=Math.min;n.exports=function(h){return h>0?o(s(h),9007199254740991):0}},{"../internals/to-integer-or-infinity":342}],344:[function(e,n,i){var s=e("../internals/require-object-coercible"),o=Object;n.exports=function(h){return o(s(h))}},{"../internals/require-object-coercible":329}],345:[function(e,n,i){var s=e("../internals/function-call"),o=e("../internals/is-object"),h=e("../internals/is-symbol"),c=e("../internals/get-method"),a=e("../internals/ordinary-to-primitive"),f=e("../internals/well-known-symbol"),l=TypeError,u=f("toPrimitive");n.exports=function(p,m){if(!o(p)||h(p))return p;var d=c(p,u),v;if(d){if(m===void 0&&(m="default"),v=s(d,p,m),!o(v)||h(v))return v;throw new l("Can't convert object to primitive value")}return m===void 0&&(m="number"),a(p,m)}},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(e,n,i){var s=e("../internals/to-primitive"),o=e("../internals/is-symbol");n.exports=function(h){var c=s(h,"string");return o(c)?c:c+""}},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(e,n,i){var s=e("../internals/well-known-symbol"),o=s("toStringTag"),h={};h[o]="z",n.exports=String(h)==="[object z]"},{"../internals/well-known-symbol":357}],348:[function(e,n,i){var s=e("../internals/classof"),o=String;n.exports=function(h){if(s(h)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return o(h)}},{"../internals/classof":236}],349:[function(e,n,i){var s=String;n.exports=function(o){try{return s(o)}catch{return"Object"}}},{}],350:[function(e,n,i){var s=e("../internals/function-uncurry-this"),o=0,h=Math.random(),c=s(1 .toString);n.exports=function(a){return"Symbol("+(a===void 0?"":a)+")_"+c(++o+h,36)}},{"../internals/function-uncurry-this":268}],351:[function(e,n,i){var s=e("../internals/symbol-constructor-detection");n.exports=s&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},{"../internals/symbol-constructor-detection":336}],352:[function(e,n,i){var s=e("../internals/descriptors"),o=e("../internals/fails");n.exports=s&&o(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(e,n,i){var s=TypeError;n.exports=function(o,h){if(o1?arguments[1]:void 0)}}),h(c)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/array-iteration").find,h=e("../internals/add-to-unscopables"),c="find",a=!0;c in[]&&Array(1)[c](function(){a=!1}),s({target:"Array",proto:!0,forced:a},{find:function(l){return o(this,l,arguments.length>1?arguments[1]:void 0)}}),h(c)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/array-includes").includes,h=e("../internals/fails"),c=e("../internals/add-to-unscopables"),a=h(function(){return!Array(1).includes()});s({target:"Array",proto:!0,forced:a},{includes:function(l){return o(this,l,arguments.length>1?arguments[1]:void 0)}}),c("includes")},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(e,n,i){var s=e("../internals/to-indexed-object"),o=e("../internals/add-to-unscopables"),h=e("../internals/iterators"),c=e("../internals/internal-state"),a=e("../internals/object-define-property").f,f=e("../internals/iterator-define"),l=e("../internals/create-iter-result-object"),u=e("../internals/is-pure"),p=e("../internals/descriptors"),m="Array Iterator",d=c.set,v=c.getterFor(m);n.exports=f(Array,"Array",function(g,w){d(this,{type:m,target:s(g),index:0,kind:w})},function(){var g=v(this),w=g.target,y=g.kind,_=g.index++;if(!w||_>=w.length)return g.target=void 0,l(void 0,!0);switch(y){case"keys":return l(_,!1);case"values":return l(w[_],!1)}return l([_,w[_]],!1)},"values");var x=h.Arguments=h.Array;if(o("keys"),o("values"),o("entries"),!u&&p&&x.name!=="values")try{a(x,"name",{value:"values"})}catch{}},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/get-built-in"),h=e("../internals/function-apply"),c=e("../internals/function-call"),a=e("../internals/function-uncurry-this"),f=e("../internals/fails"),l=e("../internals/is-callable"),u=e("../internals/is-symbol"),p=e("../internals/array-slice"),m=e("../internals/get-json-replacer-function"),d=e("../internals/symbol-constructor-detection"),v=String,x=o("JSON","stringify"),g=a(/./.exec),w=a("".charAt),y=a("".charCodeAt),_=a("".replace),k=a(1 .toString),F=/[\uD800-\uDFFF]/g,O=/^[\uD800-\uDBFF]$/,N=/^[\uDC00-\uDFFF]$/,U=!d||f(function(){var J=o("Symbol")("stringify detection");return x([J])!=="[null]"||x({a:J})!=="{}"||x(Object(J))!=="{}"}),z=f(function(){return x("\uDF06\uD834")!=='"\\udf06\\ud834"'||x("\uDEAD")!=='"\\udead"'}),W=function(J,H){var I=p(arguments),M=m(H);if(!(!l(M)&&(J===void 0||u(J))))return I[1]=function(E,A){if(l(M)&&(A=c(M,this,v(E),A)),!u(A))return A},h(x,null,I)},X=function(J,H,I){var M=w(I,H-1),E=w(I,H+1);return g(O,J)&&!g(N,E)||g(N,J)&&!g(O,M)?"\\u"+k(y(J,0),16):J};x&&s({target:"JSON",stat:!0,arity:3,forced:U||z},{stringify:function(H,I,M){var E=p(arguments),A=h(U?W:x,null,E);return z&&typeof A=="string"?_(A,F,X):A}})},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(e,n,i){var s=e("../internals/export");s({target:"Number",stat:!0},{isNaN:function(h){return h!==h}})},{"../internals/export":259}],364:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/object-assign");s({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},{"../internals/export":259,"../internals/object-assign":305}],365:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/symbol-constructor-detection"),h=e("../internals/fails"),c=e("../internals/object-get-own-property-symbols"),a=e("../internals/to-object"),f=!o||h(function(){c.f(1)});s({target:"Object",stat:!0,forced:f},{getOwnPropertySymbols:function(u){var p=c.f;return p?p(a(u)):[]}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/to-object"),h=e("../internals/object-keys"),c=e("../internals/fails"),a=c(function(){h(1)});s({target:"Object",stat:!0,forced:a},{keys:function(l){return h(o(l))}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/object-to-array").values;s({target:"Object",stat:!0},{values:function(c){return o(c)}})},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-call"),h=e("../internals/a-callable"),c=e("../internals/new-promise-capability"),a=e("../internals/perform"),f=e("../internals/iterate"),l=e("../internals/promise-statics-incorrect-iteration");s({target:"Promise",stat:!0,forced:l},{all:function(p){var m=this,d=c.f(m),v=d.resolve,x=d.reject,g=a(function(){var w=h(m.resolve),y=[],_=0,k=1;f(p,function(F){var O=_++,N=!1;k++,o(w,m,F).then(function(U){N||(N=!0,y[O]=U,--k||v(y))},x)}),--k||v(y)});return g.error&&x(g.value),d.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/is-pure"),h=e("../internals/promise-constructor-detection").CONSTRUCTOR,c=e("../internals/promise-native-constructor"),a=e("../internals/get-built-in"),f=e("../internals/is-callable"),l=e("../internals/define-built-in"),u=c&&c.prototype;if(s({target:"Promise",proto:!0,forced:h,real:!0},{catch:function(m){return this.then(void 0,m)}}),!o&&f(c)){var p=a("Promise").prototype.catch;u.catch!==p&&l(u,"catch",p,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/is-pure"),h=e("../internals/engine-is-node"),c=e("../internals/global"),a=e("../internals/function-call"),f=e("../internals/define-built-in"),l=e("../internals/object-set-prototype-of"),u=e("../internals/set-to-string-tag"),p=e("../internals/set-species"),m=e("../internals/a-callable"),d=e("../internals/is-callable"),v=e("../internals/is-object"),x=e("../internals/an-instance"),g=e("../internals/species-constructor"),w=e("../internals/task").set,y=e("../internals/microtask"),_=e("../internals/host-report-errors"),k=e("../internals/perform"),F=e("../internals/queue"),O=e("../internals/internal-state"),N=e("../internals/promise-native-constructor"),U=e("../internals/promise-constructor-detection"),z=e("../internals/new-promise-capability"),W="Promise",X=U.CONSTRUCTOR,J=U.REJECTION_EVENT,H=U.SUBCLASSING,I=O.getterFor(W),M=O.set,E=N&&N.prototype,A=N,B=E,L=c.TypeError,P=c.document,R=c.process,C=z.f,S=C,D=!!(P&&P.createEvent&&c.dispatchEvent),V="unhandledrejection",te="rejectionhandled",oe=0,he=1,Ne=2,q=1,ne=2,Q,re,ve,Ce,ce=function(ie){var fe;return v(ie)&&d(fe=ie.then)?fe:!1},se=function(ie,fe){var we=fe.value,Fe=fe.state===he,Ue=Fe?ie.ok:ie.fail,Pe=ie.resolve,$e=ie.reject,rt=ie.domain,Ze,Se,je;try{Ue?(Fe||(fe.rejection===ne&&Ae(fe),fe.rejection=q),Ue===!0?Ze=we:(rt&&rt.enter(),Ze=Ue(we),rt&&(rt.exit(),je=!0)),Ze===ie.promise?$e(new L("Promise-chain cycle")):(Se=ce(Ze))?a(Se,Ze,Pe,$e):Pe(Ze)):$e(we)}catch(Ke){rt&&!je&&rt.exit(),$e(Ke)}},ee=function(ie,fe){ie.notified||(ie.notified=!0,y(function(){for(var we=ie.reactions,Fe;Fe=we.get();)se(Fe,ie);ie.notified=!1,fe&&!ie.rejection&&Z(ie)}))},G=function(ie,fe,we){var Fe,Ue;D?(Fe=P.createEvent("Event"),Fe.promise=fe,Fe.reason=we,Fe.initEvent(ie,!1,!0),c.dispatchEvent(Fe)):Fe={promise:fe,reason:we},!J&&(Ue=c["on"+ie])?Ue(Fe):ie===V&&_("Unhandled promise rejection",we)},Z=function(ie){a(w,c,function(){var fe=ie.facade,we=ie.value,Fe=de(ie),Ue;if(Fe&&(Ue=k(function(){h?R.emit("unhandledRejection",we,fe):G(V,fe,we)}),ie.rejection=h||de(ie)?ne:q,Ue.error))throw Ue.value})},de=function(ie){return ie.rejection!==q&&!ie.parent},Ae=function(ie){a(w,c,function(){var fe=ie.facade;h?R.emit("rejectionHandled",fe):G(te,fe,ie.value)})},K=function(ie,fe,we){return function(Fe){ie(fe,Fe,we)}},Te=function(ie,fe,we){ie.done||(ie.done=!0,we&&(ie=we),ie.value=fe,ie.state=Ne,ee(ie,!0))},Oe=function(ie,fe,we){if(!ie.done){ie.done=!0,we&&(ie=we);try{if(ie.facade===fe)throw new L("Promise can't be resolved itself");var Fe=ce(fe);Fe?y(function(){var Ue={done:!1};try{a(Fe,fe,K(Oe,Ue,ie),K(Te,Ue,ie))}catch(Pe){Te(Ue,Pe,ie)}}):(ie.value=fe,ie.state=he,ee(ie,!1))}catch(Ue){Te({done:!1},Ue,ie)}}};if(X&&(A=function(fe){x(this,B),m(fe),a(Q,this);var we=I(this);try{fe(K(Oe,we),K(Te,we))}catch(Fe){Te(we,Fe)}},B=A.prototype,Q=function(fe){M(this,{type:W,done:!1,notified:!1,parent:!1,reactions:new F,rejection:!1,state:oe,value:void 0})},Q.prototype=f(B,"then",function(fe,we){var Fe=I(this),Ue=C(g(this,A));return Fe.parent=!0,Ue.ok=d(fe)?fe:!0,Ue.fail=d(we)&&we,Ue.domain=h?R.domain:void 0,Fe.state===oe?Fe.reactions.add(Ue):y(function(){se(Ue,Fe)}),Ue.promise}),re=function(){var ie=new Q,fe=I(ie);this.promise=ie,this.resolve=K(Oe,fe),this.reject=K(Te,fe)},z.f=C=function(ie){return ie===A||ie===ve?new re(ie):S(ie)},!o&&d(N)&&E!==Object.prototype)){Ce=E.then,H||f(E,"then",function(fe,we){var Fe=this;return new A(function(Ue,Pe){a(Ce,Fe,Ue,Pe)}).then(fe,we)},{unsafe:!0});try{delete E.constructor}catch{}l&&l(E,B)}s({global:!0,constructor:!0,wrap:!0,forced:X},{Promise:A}),u(A,W,!1,!0),p(W)},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/is-pure"),h=e("../internals/promise-native-constructor"),c=e("../internals/fails"),a=e("../internals/get-built-in"),f=e("../internals/is-callable"),l=e("../internals/species-constructor"),u=e("../internals/promise-resolve"),p=e("../internals/define-built-in"),m=h&&h.prototype,d=!!h&&c(function(){m.finally.call({then:function(){}},function(){})});if(s({target:"Promise",proto:!0,real:!0,forced:d},{finally:function(x){var g=l(this,a("Promise")),w=f(x);return this.then(w?function(y){return u(g,x()).then(function(){return y})}:x,w?function(y){return u(g,x()).then(function(){throw y})}:x)}}),!o&&f(h)){var v=a("Promise").prototype.finally;m.finally!==v&&p(m,"finally",v,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(e,n,i){e("../modules/es.promise.constructor"),e("../modules/es.promise.all"),e("../modules/es.promise.catch"),e("../modules/es.promise.race"),e("../modules/es.promise.reject"),e("../modules/es.promise.resolve")},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-call"),h=e("../internals/a-callable"),c=e("../internals/new-promise-capability"),a=e("../internals/perform"),f=e("../internals/iterate"),l=e("../internals/promise-statics-incorrect-iteration");s({target:"Promise",stat:!0,forced:l},{race:function(p){var m=this,d=c.f(m),v=d.reject,x=a(function(){var g=h(m.resolve);f(p,function(w){o(g,m,w).then(d.resolve,v)})});return x.error&&v(x.value),d.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-call"),h=e("../internals/new-promise-capability"),c=e("../internals/promise-constructor-detection").CONSTRUCTOR;s({target:"Promise",stat:!0,forced:c},{reject:function(f){var l=h.f(this);return o(l.reject,void 0,f),l.promise}})},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/get-built-in"),h=e("../internals/is-pure"),c=e("../internals/promise-native-constructor"),a=e("../internals/promise-constructor-detection").CONSTRUCTOR,f=e("../internals/promise-resolve"),l=o("Promise"),u=h&&!a;s({target:"Promise",stat:!0,forced:h||a},{resolve:function(m){return f(u&&this===l?c:this,m)}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-uncurry-this"),h=e("../internals/to-absolute-index"),c=RangeError,a=String.fromCharCode,f=String.fromCodePoint,l=o([].join),u=!!f&&f.length!==1;s({target:"String",stat:!0,arity:1,forced:u},{fromCodePoint:function(m){for(var d=[],v=arguments.length,x=0,g;v>x;){if(g=+arguments[x++],h(g,1114111)!==g)throw new c(g+" is not a valid code point");d[x]=g<65536?a(g):a(((g-=65536)>>10)+55296,g%1024+56320)}return l(d,"")}})},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/function-uncurry-this"),h=e("../internals/not-a-regexp"),c=e("../internals/require-object-coercible"),a=e("../internals/to-string"),f=e("../internals/correct-is-regexp-logic"),l=o("".indexOf);s({target:"String",proto:!0,forced:!f("includes")},{includes:function(p){return!!~l(a(c(this)),a(h(p)),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(e,n,i){var s=e("../internals/well-known-symbol-define");s("asyncIterator")},{"../internals/well-known-symbol-define":355}],379:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/global"),h=e("../internals/function-call"),c=e("../internals/function-uncurry-this"),a=e("../internals/is-pure"),f=e("../internals/descriptors"),l=e("../internals/symbol-constructor-detection"),u=e("../internals/fails"),p=e("../internals/has-own-property"),m=e("../internals/object-is-prototype-of"),d=e("../internals/an-object"),v=e("../internals/to-indexed-object"),x=e("../internals/to-property-key"),g=e("../internals/to-string"),w=e("../internals/create-property-descriptor"),y=e("../internals/object-create"),_=e("../internals/object-keys"),k=e("../internals/object-get-own-property-names"),F=e("../internals/object-get-own-property-names-external"),O=e("../internals/object-get-own-property-symbols"),N=e("../internals/object-get-own-property-descriptor"),U=e("../internals/object-define-property"),z=e("../internals/object-define-properties"),W=e("../internals/object-property-is-enumerable"),X=e("../internals/define-built-in"),J=e("../internals/define-built-in-accessor"),H=e("../internals/shared"),I=e("../internals/shared-key"),M=e("../internals/hidden-keys"),E=e("../internals/uid"),A=e("../internals/well-known-symbol"),B=e("../internals/well-known-symbol-wrapped"),L=e("../internals/well-known-symbol-define"),P=e("../internals/symbol-define-to-primitive"),R=e("../internals/set-to-string-tag"),C=e("../internals/internal-state"),S=e("../internals/array-iteration").forEach,D=I("hidden"),V="Symbol",te="prototype",oe=C.set,he=C.getterFor(V),Ne=Object[te],q=o.Symbol,ne=q&&q[te],Q=o.RangeError,re=o.TypeError,ve=o.QObject,Ce=N.f,ce=U.f,se=F.f,ee=W.f,G=c([].push),Z=H("symbols"),de=H("op-symbols"),Ae=H("wks"),K=!ve||!ve[te]||!ve[te].findChild,Te=function(Ze,Se,je){var Ke=Ce(Ne,Se);Ke&&delete Ne[Se],ce(Ze,Se,je),Ke&&Ze!==Ne&&ce(Ne,Se,Ke)},Oe=f&&u(function(){return y(ce({},"a",{get:function(){return ce(this,"a",{value:7}).a}})).a!==7})?Te:ce,ie=function(Ze,Se){var je=Z[Ze]=y(ne);return oe(je,{type:V,tag:Ze,description:Se}),f||(je.description=Se),je},fe=function(Se,je,Ke){Se===Ne&&fe(de,je,Ke),d(Se);var st=x(je);return d(Ke),p(Z,st)?(Ke.enumerable?(p(Se,D)&&Se[D][st]&&(Se[D][st]=!1),Ke=y(Ke,{enumerable:w(0,!1)})):(p(Se,D)||ce(Se,D,w(1,{})),Se[D][st]=!0),Oe(Se,st,Ke)):ce(Se,st,Ke)},we=function(Se,je){d(Se);var Ke=v(je),st=_(Ke).concat(rt(Ke));return S(st,function(St){(!f||h(Ue,Ke,St))&&fe(Se,St,Ke[St])}),Se},Fe=function(Se,je){return je===void 0?y(Se):we(y(Se),je)},Ue=function(Se){var je=x(Se),Ke=h(ee,this,je);return this===Ne&&p(Z,je)&&!p(de,je)?!1:Ke||!p(this,je)||!p(Z,je)||p(this,D)&&this[D][je]?Ke:!0},Pe=function(Se,je){var Ke=v(Se),st=x(je);if(!(Ke===Ne&&p(Z,st)&&!p(de,st))){var St=Ce(Ke,st);return St&&p(Z,st)&&!(p(Ke,D)&&Ke[D][st])&&(St.enumerable=!0),St}},$e=function(Se){var je=se(v(Se)),Ke=[];return S(je,function(st){!p(Z,st)&&!p(M,st)&&G(Ke,st)}),Ke},rt=function(Ze){var Se=Ze===Ne,je=se(Se?de:v(Ze)),Ke=[];return S(je,function(st){p(Z,st)&&(!Se||p(Ne,st))&&G(Ke,Z[st])}),Ke};l||(q=function(){if(m(ne,this))throw new re("Symbol is not a constructor");var Se=!arguments.length||arguments[0]===void 0?void 0:g(arguments[0]),je=E(Se),Ke=function(st){this===Ne&&h(Ke,de,st),p(this,D)&&p(this[D],je)&&(this[D][je]=!1);var St=w(1,st);try{Oe(this,je,St)}catch(At){if(!(At instanceof Q))throw At;Te(this,je,St)}};return f&&K&&Oe(Ne,je,{configurable:!0,set:Ke}),ie(je,Se)},ne=q[te],X(ne,"toString",function(){return he(this).tag}),X(q,"withoutSetter",function(Ze){return ie(E(Ze),Ze)}),W.f=Ue,U.f=fe,z.f=we,N.f=Pe,k.f=F.f=$e,O.f=rt,B.f=function(Ze){return ie(A(Ze),Ze)},f&&(J(ne,"description",{configurable:!0,get:function(){return he(this).description}}),a||X(Ne,"propertyIsEnumerable",Ue,{unsafe:!0}))),s({global:!0,constructor:!0,wrap:!0,forced:!l,sham:!l},{Symbol:q}),S(_(Ae),function(Ze){L(Ze)}),s({target:V,stat:!0,forced:!l},{useSetter:function(){K=!0},useSimple:function(){K=!1}}),s({target:"Object",stat:!0,forced:!l,sham:!f},{create:Fe,defineProperty:fe,defineProperties:we,getOwnPropertyDescriptor:Pe}),s({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:$e}),P(),R(q,V),M[D]=!0},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/get-built-in"),h=e("../internals/has-own-property"),c=e("../internals/to-string"),a=e("../internals/shared"),f=e("../internals/symbol-registry-detection"),l=a("string-to-symbol-registry"),u=a("symbol-to-string-registry");s({target:"Symbol",stat:!0,forced:!f},{for:function(p){var m=c(p);if(h(l,m))return l[m];var d=o("Symbol")(m);return l[m]=d,u[d]=m,d}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(e,n,i){e("../modules/es.symbol.constructor"),e("../modules/es.symbol.for"),e("../modules/es.symbol.key-for"),e("../modules/es.json.stringify"),e("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(e,n,i){var s=e("../internals/export"),o=e("../internals/has-own-property"),h=e("../internals/is-symbol"),c=e("../internals/try-to-string"),a=e("../internals/shared"),f=e("../internals/symbol-registry-detection"),l=a("symbol-to-string-registry");s({target:"Symbol",stat:!0,forced:!f},{keyFor:function(p){if(!h(p))throw new TypeError(c(p)+" is not a symbol");if(o(l,p))return l[p]}})},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(e,n,i){function s(y){return Array.isArray?Array.isArray(y):w(y)==="[object Array]"}i.isArray=s;function o(y){return typeof y=="boolean"}i.isBoolean=o;function h(y){return y===null}i.isNull=h;function c(y){return y==null}i.isNullOrUndefined=c;function a(y){return typeof y=="number"}i.isNumber=a;function f(y){return typeof y=="string"}i.isString=f;function l(y){return typeof y=="symbol"}i.isSymbol=l;function u(y){return y===void 0}i.isUndefined=u;function p(y){return w(y)==="[object RegExp]"}i.isRegExp=p;function m(y){return typeof y=="object"&&y!==null}i.isObject=m;function d(y){return w(y)==="[object Date]"}i.isDate=d;function v(y){return w(y)==="[object Error]"||y instanceof Error}i.isError=v;function x(y){return typeof y=="function"}i.isFunction=x;function g(y){return y===null||typeof y=="boolean"||typeof y=="number"||typeof y=="string"||typeof y=="symbol"||typeof y>"u"}i.isPrimitive=g,i.isBuffer=e("buffer").Buffer.isBuffer;function w(y){return Object.prototype.toString.call(y)}},{buffer:220}],384:[function(e,n,i){(function(s){(function(){var o=e("elliptic"),h=e("bn.js");n.exports=function(u){return new a(u)};var c={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};c.p224=c.secp224r1,c.p256=c.secp256r1=c.prime256v1,c.p192=c.secp192r1=c.prime192v1,c.p384=c.secp384r1,c.p521=c.secp521r1;function a(l){this.curveType=c[l],this.curveType||(this.curveType={name:l}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}a.prototype.generateKeys=function(l,u){return this.keys=this.curve.genKeyPair(),this.getPublicKey(l,u)},a.prototype.computeSecret=function(l,u,p){u=u||"utf8",s.isBuffer(l)||(l=new s(l,u));var m=this.curve.keyFromPublic(l).getPublic(),d=m.mul(this.keys.getPrivate()).getX();return f(d,p,this.curveType.byteLength)},a.prototype.getPublicKey=function(l,u){var p=this.keys.getPublic(u==="compressed",!0);return u==="hybrid"&&(p[p.length-1]%2?p[0]=7:p[0]=6),f(p,l)},a.prototype.getPrivateKey=function(l){return f(this.keys.getPrivate(),l)},a.prototype.setPublicKey=function(l,u){return u=u||"utf8",s.isBuffer(l)||(l=new s(l,u)),this.keys._importPublic(l),this},a.prototype.setPrivateKey=function(l,u){u=u||"utf8",s.isBuffer(l)||(l=new s(l,u));var p=new h(l);return p=p.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(p),this};function f(l,u,p){Array.isArray(l)||(l=l.toArray());var m=new s(l);if(p&&m.lengthv){var x=m==="rmd160"?new f:l(m);d=x.update(d).digest()}else d.lengtha?u=l(u):u.length=E?M:""+Array(E+1-B.length).join(A)+M},F={s:k,z:function(M){var E=-M.utcOffset(),A=Math.abs(E),B=Math.floor(A/60),L=A%60;return(E<=0?"+":"-")+k(B,2,"0")+":"+k(L,2,"0")},m:function M(E,A){if(E.date()1)return M(R[0])}else{var C=E.name;N[C]=E,L=C}return!B&&L&&(O=L),L||!B&&O},X=function(M,E){if(z(M))return M.clone();var A=typeof E=="object"?E:{};return A.date=M,A.args=arguments,new H(A)},J=F;J.l=W,J.i=z,J.w=function(M,E){return X(M,{locale:E.$L,utc:E.$u,x:E.$x,$offset:E.$offset})};var H=function(){function M(A){this.$L=W(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[U]=!0}var E=M.prototype;return E.parse=function(A){this.$d=function(B){var L=B.date,P=B.utc;if(L===null)return new Date(NaN);if(J.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var R=L.match(w);if(R){var C=R[2]-1||0,S=(R[7]||"0").substring(0,3);return P?new Date(Date.UTC(R[1],C,R[3]||1,R[4]||0,R[5]||0,R[6]||0,S)):new Date(R[1],C,R[3]||1,R[4]||0,R[5]||0,R[6]||0,S)}}return new Date(L)}(A),this.init()},E.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},E.$utils=function(){return J},E.isValid=function(){return this.$d.toString()!==g},E.isSame=function(A,B){var L=X(A);return this.startOf(B)<=L&&L<=this.endOf(B)},E.isAfter=function(A,B){return X(A)68?1900:2e3)},u=function(g){return function(w){this[g]=+w}},p=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(w){if(!w||w==="Z")return 0;var y=w.match(/([+-]|\d\d)/g),_=60*y[1]+(+y[2]||0);return _===0?0:y[0]==="+"?-_:_}(g)}],m=function(g){var w=f[g];return w&&(w.indexOf?w:w.s.concat(w.f))},d=function(g,w){var y,_=f.meridiem;if(_){for(var k=1;k<=24;k+=1)if(g.indexOf(_(k,0,w))>-1){y=k>12;break}}else y=g===(w?"pm":"PM");return y},v={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],S:[/\d/,function(g){this.milliseconds=100*+g}],SS:[h,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[c,u("seconds")],ss:[c,u("seconds")],m:[c,u("minutes")],mm:[c,u("minutes")],H:[c,u("hours")],h:[c,u("hours")],HH:[c,u("hours")],hh:[c,u("hours")],D:[c,u("day")],DD:[h,u("day")],Do:[a,function(g){var w=f.ordinal,y=g.match(/\d+/);if(this.day=y[0],w)for(var _=1;_<=31;_+=1)w(_).replace(/\[|\]/g,"")===g&&(this.day=_)}],M:[c,u("month")],MM:[h,u("month")],MMM:[a,function(g){var w=m("months"),y=(m("monthsShort")||w.map(function(_){return _.slice(0,3)})).indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],MMMM:[a,function(g){var w=m("months").indexOf(g)+1;if(w<1)throw new Error;this.month=w%12||w}],Y:[/[+-]?\d+/,u("year")],YY:[h,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:p,ZZ:p};function x(g){var w,y;w=g,y=f&&f.formats;for(var _=(g=w.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(W,X,J){var H=J&&J.toUpperCase();return X||y[J]||s[J]||y[H].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(I,M,E){return M||E.slice(1)})})).match(o),k=_.length,F=0;F-1)return new Date((B==="X"?1e3:1)*A);var P=x(B)(A),R=P.year,C=P.month,S=P.day,D=P.hours,V=P.minutes,te=P.seconds,oe=P.milliseconds,he=P.zone,Ne=new Date,q=S||(R||C?1:Ne.getDate()),ne=R||Ne.getFullYear(),Q=0;R&&!C||(Q=C>0?C-1:Ne.getMonth());var re=D||0,ve=V||0,Ce=te||0,ce=oe||0;return he?new Date(Date.UTC(ne,Q,q,re,ve,Ce,ce+60*he.offset*1e3)):L?new Date(Date.UTC(ne,Q,q,re,ve,Ce,ce)):new Date(ne,Q,q,re,ve,Ce,ce)}catch{return new Date("")}}(O,z,N),this.init(),H&&H!==!0&&(this.$L=this.locale(H).$L),J&&O!=this.format(z)&&(this.$d=new Date("")),f={}}else if(z instanceof Array)for(var I=z.length,M=1;M<=I;M+=1){U[1]=z[M-1];var E=y.apply(this,U);if(E.isValid()){this.$d=E.$d,this.$L=E.$L,this.init();break}M===I&&(this.$d=new Date(""))}else k.call(this,F)}}})},{}],393:[function(e,n,i){(function(s,o){typeof i=="object"&&typeof n<"u"?n.exports=o():(s=typeof globalThis<"u"?globalThis:s||self).dayjs_plugin_utc=o()})(void 0,function(){var s="minute",o=/[+-]\d\d(?::?\d\d)?/g,h=/([+-]|\d\d)/g;return function(c,a,f){var l=a.prototype;f.utc=function(g){var w={date:g,utc:!0,args:arguments};return new a(w)},l.utc=function(g){var w=f(this.toDate(),{locale:this.$L,utc:!0});return g?w.add(this.utcOffset(),s):w},l.local=function(){return f(this.toDate(),{locale:this.$L,utc:!1})};var u=l.parse;l.parse=function(g){g.utc&&(this.$u=!0),this.$utils().u(g.$offset)||(this.$offset=g.$offset),u.call(this,g)};var p=l.init;l.init=function(){if(this.$u){var g=this.$d;this.$y=g.getUTCFullYear(),this.$M=g.getUTCMonth(),this.$D=g.getUTCDate(),this.$W=g.getUTCDay(),this.$H=g.getUTCHours(),this.$m=g.getUTCMinutes(),this.$s=g.getUTCSeconds(),this.$ms=g.getUTCMilliseconds()}else p.call(this)};var m=l.utcOffset;l.utcOffset=function(g,w){var y=this.$utils().u;if(y(g))return this.$u?0:y(this.$offset)?m.call(this):this.$offset;if(typeof g=="string"&&(g=function(O){O===void 0&&(O="");var N=O.match(o);if(!N)return null;var U=(""+N[0]).match(h)||["-",0,0],z=U[0],W=60*+U[1]+ +U[2];return W===0?0:z==="+"?W:-W}(g),g===null))return this;var _=Math.abs(g)<=16?60*g:g,k=this;if(w)return k.$offset=_,k.$u=g===0,k;if(g!==0){var F=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(k=this.local().add(_+F,s)).$offset=_,k.$x.$localOffset=F}else k=this.utc();return k};var d=l.format;l.format=function(g){var w=g||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return d.call(this,w)},l.valueOf=function(){var g=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*g},l.isUTC=function(){return!!this.$u},l.toISOString=function(){return this.toDate().toISOString()},l.toString=function(){return this.toDate().toUTCString()};var v=l.toDate;l.toDate=function(g){return g==="s"&&this.$offset?f(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():v.call(this)};var x=l.diff;l.diff=function(g,w,y){if(g&&this.$u===g.$u)return x.call(this,g,w,y);var _=this.local(),k=f(g).local();return x.call(_,k,w,y)}}})},{}],394:[function(e,n,i){i.utils=e("./des/utils"),i.Cipher=e("./des/cipher"),i.DES=e("./des/des"),i.CBC=e("./des/cbc"),i.EDE=e("./des/ede")},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(e,n,i){var s=e("minimalistic-assert"),o=e("inherits"),h={};function c(f){s.equal(f.length,8,"Invalid IV length"),this.iv=new Array(8);for(var l=0;l0;l--)a+=this._buffer(c,a),f+=this._flushBuffer(u,f);return a+=this._buffer(c,a),u},o.prototype.final=function(c){var a;c&&(a=this.update(c));var f;return this.type==="encrypt"?f=this._finalEncrypt():f=this._finalDecrypt(),a?a.concat(f):f},o.prototype._pad=function(c,a){if(a===0)return!1;for(;a>>1];d=h.r28shl(d,g),v=h.r28shl(v,g),h.pc2(d,v,p.keys,x)}},f.prototype._update=function(p,m,d,v){var x=this._desState,g=h.readUInt32BE(p,m),w=h.readUInt32BE(p,m+4);h.ip(g,w,x.tmp,0),g=x.tmp[0],w=x.tmp[1],this.type==="encrypt"?this._encrypt(x,g,w,x.tmp,0):this._decrypt(x,g,w,x.tmp,0),g=x.tmp[0],w=x.tmp[1],h.writeUInt32BE(d,g,v),h.writeUInt32BE(d,w,v+4)},f.prototype._pad=function(p,m){if(this.padding===!1)return!1;for(var d=p.length-m,v=m;v>>0,g=N}h.rip(w,g,v,x)},f.prototype._decrypt=function(p,m,d,v,x){for(var g=d,w=m,y=p.keys.length-2;y>=0;y-=2){var _=p.keys[y],k=p.keys[y+1];h.expand(g,p.tmp,0),_^=p.tmp[0],k^=p.tmp[1];var F=h.substitute(_,k),O=h.permute(F),N=g;g=(w^O)>>>0,w=N}h.rip(g,w,v,x)}},{"./cipher":396,"./utils":399,inherits:440,"minimalistic-assert":453}],398:[function(e,n,i){var s=e("minimalistic-assert"),o=e("inherits"),h=e("./cipher"),c=e("./des");function a(l,u){s.equal(u.length,24,"Invalid key length");var p=u.slice(0,8),m=u.slice(8,16),d=u.slice(16,24);l==="encrypt"?this.ciphers=[c.create({type:"encrypt",key:p}),c.create({type:"decrypt",key:m}),c.create({type:"encrypt",key:d})]:this.ciphers=[c.create({type:"decrypt",key:d}),c.create({type:"encrypt",key:m}),c.create({type:"decrypt",key:p})]}function f(l){h.call(this,l);var u=new a(this.type,this.options.key);this._edeState=u}o(f,h),n.exports=f,f.create=function(u){return new f(u)},f.prototype._update=function(u,p,m,d){var v=this._edeState;v.ciphers[0]._update(u,p,m,d),v.ciphers[1]._update(m,d,m,d),v.ciphers[2]._update(m,d,m,d)},f.prototype._pad=c.prototype._pad,f.prototype._unpad=c.prototype._unpad},{"./cipher":396,"./des":397,inherits:440,"minimalistic-assert":453}],399:[function(e,n,i){i.readUInt32BE=function(a,f){var l=a[0+f]<<24|a[1+f]<<16|a[2+f]<<8|a[3+f];return l>>>0},i.writeUInt32BE=function(a,f,l){a[0+l]=f>>>24,a[1+l]=f>>>16&255,a[2+l]=f>>>8&255,a[3+l]=f&255},i.ip=function(a,f,l,u){for(var p=0,m=0,d=6;d>=0;d-=2){for(var v=0;v<=24;v+=8)p<<=1,p|=f>>>v+d&1;for(var v=0;v<=24;v+=8)p<<=1,p|=a>>>v+d&1}for(var d=6;d>=0;d-=2){for(var v=1;v<=25;v+=8)m<<=1,m|=f>>>v+d&1;for(var v=1;v<=25;v+=8)m<<=1,m|=a>>>v+d&1}l[u+0]=p>>>0,l[u+1]=m>>>0},i.rip=function(a,f,l,u){for(var p=0,m=0,d=0;d<4;d++)for(var v=24;v>=0;v-=8)p<<=1,p|=f>>>v+d&1,p<<=1,p|=a>>>v+d&1;for(var d=4;d<8;d++)for(var v=24;v>=0;v-=8)m<<=1,m|=f>>>v+d&1,m<<=1,m|=a>>>v+d&1;l[u+0]=p>>>0,l[u+1]=m>>>0},i.pc1=function(a,f,l,u){for(var p=0,m=0,d=7;d>=5;d--){for(var v=0;v<=24;v+=8)p<<=1,p|=f>>v+d&1;for(var v=0;v<=24;v+=8)p<<=1,p|=a>>v+d&1}for(var v=0;v<=24;v+=8)p<<=1,p|=f>>v+d&1;for(var d=1;d<=3;d++){for(var v=0;v<=24;v+=8)m<<=1,m|=f>>v+d&1;for(var v=0;v<=24;v+=8)m<<=1,m|=a>>v+d&1}for(var v=0;v<=24;v+=8)m<<=1,m|=a>>v+d&1;l[u+0]=p>>>0,l[u+1]=m>>>0},i.r28shl=function(a,f){return a<>>28-f};var s=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];i.pc2=function(a,f,l,u){for(var p=0,m=0,d=s.length>>>1,v=0;v>>s[v]&1;for(var v=d;v>>s[v]&1;l[u+0]=p>>>0,l[u+1]=m>>>0},i.expand=function(a,f,l){var u=0,p=0;u=(a&1)<<5|a>>>27;for(var m=23;m>=15;m-=4)u<<=6,u|=a>>>m&63;for(var m=11;m>=3;m-=4)p|=a>>>m&63,p<<=6;p|=(a&31)<<1|a>>>31,f[l+0]=u>>>0,f[l+1]=p>>>0};var o=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];i.substitute=function(a,f){for(var l=0,u=0;u<4;u++){var p=a>>>18-u*6&63,m=o[u*64+p];l<<=4,l|=m}for(var u=0;u<4;u++){var p=f>>>18-u*6&63,m=o[4*64+u*64+p];l<<=4,l|=m}return l>>>0};var h=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];i.permute=function(a){for(var f=0,l=0;l>>h[l]&1;return f>>>0},i.padSplit=function(a,f,l){for(var u=a.toString(2);u.lengthk;)O.ishrn(1);if(O.isEven()&&O.iadd(f),O.testn(1)||O.iadd(l),F.cmp(l)){if(!F.cmp(u))for(;O.mod(p).cmp(m);)O.iadd(v)}else for(;O.mod(h).cmp(d);)O.iadd(v);if(N=O.shrn(1),w(N)&&w(O)&&y(N)&&y(O)&&a.test(N)&&a.test(O))return O}}},{"bn.js":404,"miller-rabin":451,randombytes:475}],403:[function(e,n,i){n.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],404:[function(e,n,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],405:[function(e,n,i){var s=i;s.version=e("../package.json").version,s.utils=e("./elliptic/utils"),s.rand=e("brorand"),s.curve=e("./elliptic/curve"),s.curves=e("./elliptic/curves"),s.ec=e("./elliptic/ec"),s.eddsa=e("./elliptic/eddsa")},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,brorand:187}],406:[function(e,n,i){var s=e("bn.js"),o=e("../utils"),h=o.getNAF,c=o.getJSF,a=o.assert;function f(u,p){this.type=u,this.p=new s(p.p,16),this.red=p.prime?s.red(p.prime):s.mont(this.p),this.zero=new s(0).toRed(this.red),this.one=new s(1).toRed(this.red),this.two=new s(2).toRed(this.red),this.n=p.n&&new s(p.n,16),this.g=p.g&&this.pointFromJSON(p.g,p.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var m=this.n&&this.p.div(this.n);!m||m.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}n.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(p,m){a(p.precomputed);var d=p._getDoubles(),v=h(m,1,this._bitLength),x=(1<=w;_--)y=(y<<1)+v[_];g.push(y)}for(var k=this.jpoint(null,null,null),F=this.jpoint(null,null,null),O=x;O>0;O--){for(w=0;w=0;y--){for(var _=0;y>=0&&g[y]===0;y--)_++;if(y>=0&&_++,w=w.dblp(_),y<0)break;var k=g[y];a(k!==0),p.type==="affine"?k>0?w=w.mixedAdd(x[k-1>>1]):w=w.mixedAdd(x[-k-1>>1].neg()):k>0?w=w.add(x[k-1>>1]):w=w.add(x[-k-1>>1].neg())}return p.type==="affine"?w.toP():w},f.prototype._wnafMulAdd=function(p,m,d,v,x){var g=this._wnafT1,w=this._wnafT2,y=this._wnafT3,_=0,k,F,O;for(k=0;k=1;k-=2){var U=k-1,z=k;if(g[U]!==1||g[z]!==1){y[U]=h(d[U],g[U],this._bitLength),y[z]=h(d[z],g[z],this._bitLength),_=Math.max(y[U].length,_),_=Math.max(y[z].length,_);continue}var W=[m[U],null,null,m[z]];m[U].y.cmp(m[z].y)===0?(W[1]=m[U].add(m[z]),W[2]=m[U].toJ().mixedAdd(m[z].neg())):m[U].y.cmp(m[z].y.redNeg())===0?(W[1]=m[U].toJ().mixedAdd(m[z]),W[2]=m[U].add(m[z].neg())):(W[1]=m[U].toJ().mixedAdd(m[z]),W[2]=m[U].toJ().mixedAdd(m[z].neg()));var X=[-3,-1,-5,-7,0,7,5,1,3],J=c(d[U],d[z]);for(_=Math.max(J[0].length,_),y[U]=new Array(_),y[z]=new Array(_),F=0;F<_;F++){var H=J[0][F]|0,I=J[1][F]|0;y[U][F]=X[(H+1)*3+(I+1)],y[z][F]=0,w[U]=W}}var M=this.jpoint(null,null,null),E=this._wnafT4;for(k=_;k>=0;k--){for(var A=0;k>=0;){var B=!0;for(F=0;F=0&&A++,M=M.dblp(A),k<0)break;for(F=0;F0?O=w[F][L-1>>1]:L<0&&(O=w[F][-L-1>>1].neg()),O.type==="affine"?M=M.mixedAdd(O):M=M.add(O))}}for(k=0;k=Math.ceil((p.bitLength()+1)/m.step):!1},l.prototype._getDoubles=function(p,m){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var d=[this],v=this,x=0;x":""},l.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},l.prototype._extDbl=function(){var p=this.x.redSqr(),m=this.y.redSqr(),d=this.z.redSqr();d=d.redIAdd(d);var v=this.curve._mulA(p),x=this.x.redAdd(this.y).redSqr().redISub(p).redISub(m),g=v.redAdd(m),w=g.redSub(d),y=v.redSub(m),_=x.redMul(w),k=g.redMul(y),F=x.redMul(y),O=w.redMul(g);return this.curve.point(_,k,O,F)},l.prototype._projDbl=function(){var p=this.x.redAdd(this.y).redSqr(),m=this.x.redSqr(),d=this.y.redSqr(),v,x,g,w,y,_;if(this.curve.twisted){w=this.curve._mulA(m);var k=w.redAdd(d);this.zOne?(v=p.redSub(m).redSub(d).redMul(k.redSub(this.curve.two)),x=k.redMul(w.redSub(d)),g=k.redSqr().redSub(k).redSub(k)):(y=this.z.redSqr(),_=k.redSub(y).redISub(y),v=p.redSub(m).redISub(d).redMul(_),x=k.redMul(w.redSub(d)),g=k.redMul(_))}else w=m.redAdd(d),y=this.curve._mulC(this.z).redSqr(),_=w.redSub(y).redSub(y),v=this.curve._mulC(p.redISub(w)).redMul(_),x=this.curve._mulC(w).redMul(m.redISub(d)),g=w.redMul(_);return this.curve.point(v,x,g)},l.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},l.prototype._extAdd=function(p){var m=this.y.redSub(this.x).redMul(p.y.redSub(p.x)),d=this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)),v=this.t.redMul(this.curve.dd).redMul(p.t),x=this.z.redMul(p.z.redAdd(p.z)),g=d.redSub(m),w=x.redSub(v),y=x.redAdd(v),_=d.redAdd(m),k=g.redMul(w),F=y.redMul(_),O=g.redMul(_),N=w.redMul(y);return this.curve.point(k,F,N,O)},l.prototype._projAdd=function(p){var m=this.z.redMul(p.z),d=m.redSqr(),v=this.x.redMul(p.x),x=this.y.redMul(p.y),g=this.curve.d.redMul(v).redMul(x),w=d.redSub(g),y=d.redAdd(g),_=this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(v).redISub(x),k=m.redMul(w).redMul(_),F,O;return this.curve.twisted?(F=m.redMul(y).redMul(x.redSub(this.curve._mulA(v))),O=w.redMul(y)):(F=m.redMul(y).redMul(x.redSub(v)),O=this.curve._mulC(w).redMul(y)),this.curve.point(k,F,O)},l.prototype.add=function(p){return this.isInfinity()?p:p.isInfinity()?this:this.curve.extended?this._extAdd(p):this._projAdd(p)},l.prototype.mul=function(p){return this._hasDoubles(p)?this.curve._fixedNafMul(this,p):this.curve._wnafMul(this,p)},l.prototype.mulAdd=function(p,m,d){return this.curve._wnafMulAdd(1,[this,m],[p,d],2,!1)},l.prototype.jmulAdd=function(p,m,d){return this.curve._wnafMulAdd(1,[this,m],[p,d],2,!0)},l.prototype.normalize=function(){if(this.zOne)return this;var p=this.z.redInvm();return this.x=this.x.redMul(p),this.y=this.y.redMul(p),this.t&&(this.t=this.t.redMul(p)),this.z=this.curve.one,this.zOne=!0,this},l.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()},l.prototype.getY=function(){return this.normalize(),this.y.fromRed()},l.prototype.eq=function(p){return this===p||this.getX().cmp(p.getX())===0&&this.getY().cmp(p.getY())===0},l.prototype.eqXToP=function(p){var m=p.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(m)===0)return!0;for(var d=p.clone(),v=this.curve.redN.redMul(this.z);;){if(d.iadd(this.curve.n),d.cmp(this.curve.p)>=0)return!1;if(m.redIAdd(v),this.x.cmp(m)===0)return!0}},l.prototype.toP=l.prototype.normalize,l.prototype.mixedAdd=l.prototype.add},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],408:[function(e,n,i){var s=i;s.base=e("./base"),s.short=e("./short"),s.mont=e("./mont"),s.edwards=e("./edwards")},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(e,n,i){var s=e("bn.js"),o=e("inherits"),h=e("./base"),c=e("../utils");function a(l){h.call(this,"mont",l),this.a=new s(l.a,16).toRed(this.red),this.b=new s(l.b,16).toRed(this.red),this.i4=new s(4).toRed(this.red).redInvm(),this.two=new s(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}o(a,h),n.exports=a,a.prototype.validate=function(u){var p=u.normalize().x,m=p.redSqr(),d=m.redMul(p).redAdd(m.redMul(this.a)).redAdd(p),v=d.redSqrt();return v.redSqr().cmp(d)===0};function f(l,u,p){h.BasePoint.call(this,l,"projective"),u===null&&p===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new s(u,16),this.z=new s(p,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(f,h.BasePoint),a.prototype.decodePoint=function(u,p){return this.point(c.toArray(u,p),1)},a.prototype.point=function(u,p){return new f(this,u,p)},a.prototype.pointFromJSON=function(u){return f.fromJSON(this,u)},f.prototype.precompute=function(){},f.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},f.fromJSON=function(u,p){return new f(u,p[0],p[1]||u.one)},f.prototype.inspect=function(){return this.isInfinity()?"":""},f.prototype.isInfinity=function(){return this.z.cmpn(0)===0},f.prototype.dbl=function(){var u=this.x.redAdd(this.z),p=u.redSqr(),m=this.x.redSub(this.z),d=m.redSqr(),v=p.redSub(d),x=p.redMul(d),g=v.redMul(d.redAdd(this.curve.a24.redMul(v)));return this.curve.point(x,g)},f.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.diffAdd=function(u,p){var m=this.x.redAdd(this.z),d=this.x.redSub(this.z),v=u.x.redAdd(u.z),x=u.x.redSub(u.z),g=x.redMul(m),w=v.redMul(d),y=p.z.redMul(g.redAdd(w).redSqr()),_=p.x.redMul(g.redISub(w).redSqr());return this.curve.point(y,_)},f.prototype.mul=function(u){for(var p=u.clone(),m=this,d=this.curve.point(null,null),v=this,x=[];p.cmpn(0)!==0;p.iushrn(1))x.push(p.andln(1));for(var g=x.length-1;g>=0;g--)x[g]===0?(m=m.diffAdd(d,v),d=d.dbl()):(d=m.diffAdd(d,v),m=m.dbl());return d},f.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.eq=function(u){return this.getX().cmp(u.getX())===0},f.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],410:[function(e,n,i){var s=e("../utils"),o=e("bn.js"),h=e("inherits"),c=e("./base"),a=s.assert;function f(p){c.call(this,"short",p),this.a=new o(p.a,16).toRed(this.red),this.b=new o(p.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(p),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}h(f,c),n.exports=f,f.prototype._getEndomorphism=function(m){if(!(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)){var d,v;if(m.beta)d=new o(m.beta,16).toRed(this.red);else{var x=this._getEndoRoots(this.p);d=x[0].cmp(x[1])<0?x[0]:x[1],d=d.toRed(this.red)}if(m.lambda)v=new o(m.lambda,16);else{var g=this._getEndoRoots(this.n);this.g.mul(g[0]).x.cmp(this.g.x.redMul(d))===0?v=g[0]:(v=g[1],a(this.g.mul(v).x.cmp(this.g.x.redMul(d))===0))}var w;return m.basis?w=m.basis.map(function(y){return{a:new o(y.a,16),b:new o(y.b,16)}}):w=this._getEndoBasis(v),{beta:d,lambda:v,basis:w}}},f.prototype._getEndoRoots=function(m){var d=m===this.p?this.red:o.mont(m),v=new o(2).toRed(d).redInvm(),x=v.redNeg(),g=new o(3).toRed(d).redNeg().redSqrt().redMul(v),w=x.redAdd(g).fromRed(),y=x.redSub(g).fromRed();return[w,y]},f.prototype._getEndoBasis=function(m){for(var d=this.n.ushrn(Math.floor(this.n.bitLength()/2)),v=m,x=this.n.clone(),g=new o(1),w=new o(0),y=new o(0),_=new o(1),k,F,O,N,U,z,W,X=0,J,H;v.cmpn(0)!==0;){var I=x.div(v);J=x.sub(I.mul(v)),H=y.sub(I.mul(g));var M=_.sub(I.mul(w));if(!O&&J.cmp(d)<0)k=W.neg(),F=g,O=J.neg(),N=H;else if(O&&++X===2)break;W=J,x=v,v=J,y=g,g=H,_=w,w=M}U=J.neg(),z=H;var E=O.sqr().add(N.sqr()),A=U.sqr().add(z.sqr());return A.cmp(E)>=0&&(U=k,z=F),O.negative&&(O=O.neg(),N=N.neg()),U.negative&&(U=U.neg(),z=z.neg()),[{a:O,b:N},{a:U,b:z}]},f.prototype._endoSplit=function(m){var d=this.endo.basis,v=d[0],x=d[1],g=x.b.mul(m).divRound(this.n),w=v.b.neg().mul(m).divRound(this.n),y=g.mul(v.a),_=w.mul(x.a),k=g.mul(v.b),F=w.mul(x.b),O=m.sub(y).sub(_),N=k.add(F).neg();return{k1:O,k2:N}},f.prototype.pointFromX=function(m,d){m=new o(m,16),m.red||(m=m.toRed(this.red));var v=m.redSqr().redMul(m).redIAdd(m.redMul(this.a)).redIAdd(this.b),x=v.redSqrt();if(x.redSqr().redSub(v).cmp(this.zero)!==0)throw new Error("invalid point");var g=x.fromRed().isOdd();return(d&&!g||!d&&g)&&(x=x.redNeg()),this.point(m,x)},f.prototype.validate=function(m){if(m.inf)return!0;var d=m.x,v=m.y,x=this.a.redMul(d),g=d.redSqr().redMul(d).redIAdd(x).redIAdd(this.b);return v.redSqr().redISub(g).cmpn(0)===0},f.prototype._endoWnafMulAdd=function(m,d,v){for(var x=this._endoWnafT1,g=this._endoWnafT2,w=0;w":""},l.prototype.isInfinity=function(){return this.inf},l.prototype.add=function(m){if(this.inf)return m;if(m.inf)return this;if(this.eq(m))return this.dbl();if(this.neg().eq(m))return this.curve.point(null,null);if(this.x.cmp(m.x)===0)return this.curve.point(null,null);var d=this.y.redSub(m.y);d.cmpn(0)!==0&&(d=d.redMul(this.x.redSub(m.x).redInvm()));var v=d.redSqr().redISub(this.x).redISub(m.x),x=d.redMul(this.x.redSub(v)).redISub(this.y);return this.curve.point(v,x)},l.prototype.dbl=function(){if(this.inf)return this;var m=this.y.redAdd(this.y);if(m.cmpn(0)===0)return this.curve.point(null,null);var d=this.curve.a,v=this.x.redSqr(),x=m.redInvm(),g=v.redAdd(v).redIAdd(v).redIAdd(d).redMul(x),w=g.redSqr().redISub(this.x.redAdd(this.x)),y=g.redMul(this.x.redSub(w)).redISub(this.y);return this.curve.point(w,y)},l.prototype.getX=function(){return this.x.fromRed()},l.prototype.getY=function(){return this.y.fromRed()},l.prototype.mul=function(m){return m=new o(m,16),this.isInfinity()?this:this._hasDoubles(m)?this.curve._fixedNafMul(this,m):this.curve.endo?this.curve._endoWnafMulAdd([this],[m]):this.curve._wnafMul(this,m)},l.prototype.mulAdd=function(m,d,v){var x=[this,d],g=[m,v];return this.curve.endo?this.curve._endoWnafMulAdd(x,g):this.curve._wnafMulAdd(1,x,g,2)},l.prototype.jmulAdd=function(m,d,v){var x=[this,d],g=[m,v];return this.curve.endo?this.curve._endoWnafMulAdd(x,g,!0):this.curve._wnafMulAdd(1,x,g,2,!0)},l.prototype.eq=function(m){return this===m||this.inf===m.inf&&(this.inf||this.x.cmp(m.x)===0&&this.y.cmp(m.y)===0)},l.prototype.neg=function(m){if(this.inf)return this;var d=this.curve.point(this.x,this.y.redNeg());if(m&&this.precomputed){var v=this.precomputed,x=function(g){return g.neg()};d.precomputed={naf:v.naf&&{wnd:v.naf.wnd,points:v.naf.points.map(x)},doubles:v.doubles&&{step:v.doubles.step,points:v.doubles.points.map(x)}}}return d},l.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var m=this.curve.jpoint(this.x,this.y,this.curve.one);return m};function u(p,m,d,v){c.BasePoint.call(this,p,"jacobian"),m===null&&d===null&&v===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new o(0)):(this.x=new o(m,16),this.y=new o(d,16),this.z=new o(v,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}h(u,c.BasePoint),f.prototype.jpoint=function(m,d,v){return new u(this,m,d,v)},u.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var m=this.z.redInvm(),d=m.redSqr(),v=this.x.redMul(d),x=this.y.redMul(d).redMul(m);return this.curve.point(v,x)},u.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},u.prototype.add=function(m){if(this.isInfinity())return m;if(m.isInfinity())return this;var d=m.z.redSqr(),v=this.z.redSqr(),x=this.x.redMul(d),g=m.x.redMul(v),w=this.y.redMul(d.redMul(m.z)),y=m.y.redMul(v.redMul(this.z)),_=x.redSub(g),k=w.redSub(y);if(_.cmpn(0)===0)return k.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var F=_.redSqr(),O=F.redMul(_),N=x.redMul(F),U=k.redSqr().redIAdd(O).redISub(N).redISub(N),z=k.redMul(N.redISub(U)).redISub(w.redMul(O)),W=this.z.redMul(m.z).redMul(_);return this.curve.jpoint(U,z,W)},u.prototype.mixedAdd=function(m){if(this.isInfinity())return m.toJ();if(m.isInfinity())return this;var d=this.z.redSqr(),v=this.x,x=m.x.redMul(d),g=this.y,w=m.y.redMul(d).redMul(this.z),y=v.redSub(x),_=g.redSub(w);if(y.cmpn(0)===0)return _.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var k=y.redSqr(),F=k.redMul(y),O=v.redMul(k),N=_.redSqr().redIAdd(F).redISub(O).redISub(O),U=_.redMul(O.redISub(N)).redISub(g.redMul(F)),z=this.z.redMul(y);return this.curve.jpoint(N,U,z)},u.prototype.dblp=function(m){if(m===0)return this;if(this.isInfinity())return this;if(!m)return this.dbl();var d;if(this.curve.zeroA||this.curve.threeA){var v=this;for(d=0;d=0)return!1;if(v.redIAdd(g),this.x.cmp(v)===0)return!0}},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return this.z.cmpn(0)===0}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],411:[function(e,n,i){var s=i,o=e("hash.js"),h=e("./curve"),c=e("./utils"),a=c.assert;function f(p){p.type==="short"?this.curve=new h.short(p):p.type==="edwards"?this.curve=new h.edwards(p):this.curve=new h.mont(p),this.g=this.curve.g,this.n=this.curve.n,this.hash=p.hash,a(this.g.validate(),"Invalid curve"),a(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}s.PresetCurve=f;function l(p,m){Object.defineProperty(s,p,{configurable:!0,enumerable:!0,get:function(){var d=new f(m);return Object.defineProperty(s,p,{configurable:!0,enumerable:!0,value:d}),d}})}l("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),l("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),l("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),l("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),l("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),l("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),l("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var u;try{u=e("./precomputed/secp256k1")}catch{u=void 0}l("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",u]})},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(e,n,i){var s=e("bn.js"),o=e("hmac-drbg"),h=e("../utils"),c=e("../curves"),a=e("brorand"),f=h.assert,l=e("./key"),u=e("./signature");function p(m){if(!(this instanceof p))return new p(m);typeof m=="string"&&(f(Object.prototype.hasOwnProperty.call(c,m),"Unknown curve "+m),m=c[m]),m instanceof c.PresetCurve&&(m={curve:m}),this.curve=m.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=m.curve.g,this.g.precompute(m.curve.n.bitLength()+1),this.hash=m.hash||m.curve.hash}n.exports=p,p.prototype.keyPair=function(d){return new l(this,d)},p.prototype.keyFromPrivate=function(d,v){return l.fromPrivate(this,d,v)},p.prototype.keyFromPublic=function(d,v){return l.fromPublic(this,d,v)},p.prototype.genKeyPair=function(d){d||(d={});for(var v=new o({hash:this.hash,pers:d.pers,persEnc:d.persEnc||"utf8",entropy:d.entropy||a(this.hash.hmacStrength),entropyEnc:d.entropy&&d.entropyEnc||"utf8",nonce:this.n.toArray()}),x=this.n.byteLength(),g=this.n.sub(new s(2));;){var w=new s(v.generate(x));if(!(w.cmp(g)>0))return w.iaddn(1),this.keyFromPrivate(w)}},p.prototype._truncateToN=function(d,v){var x=d.byteLength()*8-this.n.bitLength();return x>0&&(d=d.ushrn(x)),!v&&d.cmp(this.n)>=0?d.sub(this.n):d},p.prototype.sign=function(d,v,x,g){typeof x=="object"&&(g=x,x=null),g||(g={}),v=this.keyFromPrivate(v,x),d=this._truncateToN(new s(d,16));for(var w=this.n.byteLength(),y=v.getPrivate().toArray("be",w),_=d.toArray("be",w),k=new o({hash:this.hash,entropy:y,nonce:_,pers:g.pers,persEnc:g.persEnc||"utf8"}),F=this.n.sub(new s(1)),O=0;;O++){var N=g.k?g.k(O):new s(k.generate(this.n.byteLength()));if(N=this._truncateToN(N,!0),!(N.cmpn(1)<=0||N.cmp(F)>=0)){var U=this.g.mul(N);if(!U.isInfinity()){var z=U.getX(),W=z.umod(this.n);if(W.cmpn(0)!==0){var X=N.invm(this.n).mul(W.mul(v.getPrivate()).iadd(d));if(X=X.umod(this.n),X.cmpn(0)!==0){var J=(U.getY().isOdd()?1:0)|(z.cmp(W)!==0?2:0);return g.canonical&&X.cmp(this.nh)>0&&(X=this.n.sub(X),J^=1),new u({r:W,s:X,recoveryParam:J})}}}}}},p.prototype.verify=function(d,v,x,g){d=this._truncateToN(new s(d,16)),x=this.keyFromPublic(x,g),v=new u(v,"hex");var w=v.r,y=v.s;if(w.cmpn(1)<0||w.cmp(this.n)>=0||y.cmpn(1)<0||y.cmp(this.n)>=0)return!1;var _=y.invm(this.n),k=_.mul(d).umod(this.n),F=_.mul(w).umod(this.n),O;return this.curve._maxwellTrick?(O=this.g.jmulAdd(k,x.getPublic(),F),O.isInfinity()?!1:O.eqXToP(w)):(O=this.g.mulAdd(k,x.getPublic(),F),O.isInfinity()?!1:O.getX().umod(this.n).cmp(w)===0)},p.prototype.recoverPubKey=function(m,d,v,x){f((3&v)===v,"The recovery param is more than two bits"),d=new u(d,x);var g=this.n,w=new s(m),y=d.r,_=d.s,k=v&1,F=v>>1;if(y.cmp(this.curve.p.umod(this.curve.n))>=0&&F)throw new Error("Unable to find sencond key candinate");F?y=this.curve.pointFromX(y.add(this.curve.n),k):y=this.curve.pointFromX(y,k);var O=d.r.invm(g),N=g.sub(w).mul(O).umod(g),U=_.mul(O).umod(g);return this.g.mulAdd(N,y,U)},p.prototype.getKeyRecoveryParam=function(m,d,v,x){if(d=new u(d,x),d.recoveryParam!==null)return d.recoveryParam;for(var g=0;g<4;g++){var w;try{w=this.recoverPubKey(m,d,g)}catch{continue}if(w.eq(v))return g}throw new Error("Unable to find valid recovery factor")}},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,brorand:187,"hmac-drbg":438}],413:[function(e,n,i){var s=e("bn.js"),o=e("../utils"),h=o.assert;function c(a,f){this.ec=a,this.priv=null,this.pub=null,f.priv&&this._importPrivate(f.priv,f.privEnc),f.pub&&this._importPublic(f.pub,f.pubEnc)}n.exports=c,c.fromPublic=function(f,l,u){return l instanceof c?l:new c(f,{pub:l,pubEnc:u})},c.fromPrivate=function(f,l,u){return l instanceof c?l:new c(f,{priv:l,privEnc:u})},c.prototype.validate=function(){var f=this.getPublic();return f.isInfinity()?{result:!1,reason:"Invalid public key"}:f.validate()?f.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},c.prototype.getPublic=function(f,l){return typeof f=="string"&&(l=f,f=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),l?this.pub.encode(l,f):this.pub},c.prototype.getPrivate=function(f){return f==="hex"?this.priv.toString(16,2):this.priv},c.prototype._importPrivate=function(f,l){this.priv=new s(f,l||16),this.priv=this.priv.umod(this.ec.curve.n)},c.prototype._importPublic=function(f,l){if(f.x||f.y){this.ec.curve.type==="mont"?h(f.x,"Need x coordinate"):(this.ec.curve.type==="short"||this.ec.curve.type==="edwards")&&h(f.x&&f.y,"Need both x and y coordinate"),this.pub=this.ec.curve.point(f.x,f.y);return}this.pub=this.ec.curve.decodePoint(f,l)},c.prototype.derive=function(f){return f.validate()||h(f.validate(),"public point not validated"),f.mul(this.priv).getX()},c.prototype.sign=function(f,l,u){return this.ec.sign(f,this,l,u)},c.prototype.verify=function(f,l){return this.ec.verify(f,l,this)},c.prototype.inspect=function(){return""}},{"../utils":419,"bn.js":420}],414:[function(e,n,i){var s=e("bn.js"),o=e("../utils"),h=o.assert;function c(p,m){if(p instanceof c)return p;this._importDER(p,m)||(h(p.r&&p.s,"Signature without r or s"),this.r=new s(p.r,16),this.s=new s(p.s,16),p.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=p.recoveryParam)}n.exports=c;function a(){this.place=0}function f(p,m){var d=p[m.place++];if(!(d&128))return d;var v=d&15;if(v===0||v>4)return!1;for(var x=0,g=0,w=m.place;g>>=0;return x<=127?!1:(m.place=w,x)}function l(p){for(var m=0,d=p.length-1;!p[m]&&!(p[m+1]&128)&&m>>3);for(p.push(d|128);--d;)p.push(m>>>(d<<3)&255);p.push(m)}c.prototype.toDER=function(m){var d=this.r.toArray(),v=this.s.toArray();for(d[0]&128&&(d=[0].concat(d)),v[0]&128&&(v=[0].concat(v)),d=l(d),v=l(v);!v[0]&&!(v[1]&128);)v=v.slice(1);var x=[2];u(x,d.length),x=x.concat(d),x.push(2),u(x,v.length);var g=x.concat(v),w=[48];return u(w,g.length),w=w.concat(g),o.encode(w,m)}},{"../utils":419,"bn.js":420}],415:[function(e,n,i){var s=e("hash.js"),o=e("../curves"),h=e("../utils"),c=h.assert,a=h.parseBytes,f=e("./key"),l=e("./signature");function u(p){if(c(p==="ed25519","only tested with ed25519 so far"),!(this instanceof u))return new u(p);p=o[p].curve,this.curve=p,this.g=p.g,this.g.precompute(p.n.bitLength()+1),this.pointClass=p.point().constructor,this.encodingLength=Math.ceil(p.n.bitLength()/8),this.hash=s.sha512}n.exports=u,u.prototype.sign=function(m,d){m=a(m);var v=this.keyFromSecret(d),x=this.hashInt(v.messagePrefix(),m),g=this.g.mul(x),w=this.encodePoint(g),y=this.hashInt(w,v.pubBytes(),m).mul(v.priv()),_=x.add(y).umod(this.curve.n);return this.makeSignature({R:g,S:_,Rencoded:w})},u.prototype.verify=function(m,d,v){m=a(m),d=this.makeSignature(d);var x=this.keyFromPublic(v),g=this.hashInt(d.Rencoded(),x.pubBytes(),m),w=this.g.mul(d.S()),y=d.R().add(x.pub().mul(g));return y.eq(w)},u.prototype.hashInt=function(){for(var m=this.hash(),d=0;d(g>>1)-1?_=(g>>1)-k:_=k,w.isubn(_)):_=0,x[y]=_,w.iushrn(1)}return x}s.getNAF=a;function f(m,d){var v=[[],[]];m=m.clone(),d=d.clone();for(var x=0,g=0,w;m.cmpn(-x)>0||d.cmpn(-g)>0;){var y=m.andln(3)+x&3,_=d.andln(3)+g&3;y===3&&(y=-1),_===3&&(_=-1);var k;y&1?(w=m.andln(7)+x&7,(w===3||w===5)&&_===2?k=-y:k=y):k=0,v[0].push(k);var F;_&1?(w=d.andln(7)+g&7,(w===3||w===5)&&y===2?F=-_:F=_):F=0,v[1].push(F),2*x===k+1&&(x=1-x),2*g===F+1&&(g=1-g),m.iushrn(1),d.iushrn(1)}return v}s.getJSF=f;function l(m,d,v){var x="_"+d;m.prototype[d]=function(){return this[x]!==void 0?this[x]:this[x]=v.call(this)}}s.cachedProperty=l;function u(m){return typeof m=="string"?s.toArray(m,"hex"):m}s.parseBytes=u;function p(m){return new o(m,"hex","le")}s.intFromLE=p},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(e,n,i){arguments[4][184][0].apply(i,arguments)},{buffer:188,dup:184}],421:[function(e,n,i){n.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],422:[function(e,n,i){var s=Object.create||U,o=Object.keys||z,h=Function.prototype.bind||W;function c(){(!this._events||!Object.prototype.hasOwnProperty.call(this,"_events"))&&(this._events=s(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}n.exports=c,c.EventEmitter=c,c.prototype._events=void 0,c.prototype._maxListeners=void 0;var a=10,f;try{var l={};Object.defineProperty&&Object.defineProperty(l,"x",{value:0}),f=l.x===0}catch{f=!1}f?Object.defineProperty(c,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(X){if(typeof X!="number"||X<0||X!==X)throw new TypeError('"defaultMaxListeners" must be a positive number');a=X}}):c.defaultMaxListeners=a,c.prototype.setMaxListeners=function(J){if(typeof J!="number"||J<0||isNaN(J))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=J,this};function u(X){return X._maxListeners===void 0?c.defaultMaxListeners:X._maxListeners}c.prototype.getMaxListeners=function(){return u(this)};function p(X,J,H){if(J)X.call(H);else for(var I=X.length,M=O(X,I),E=0;E1&&(H=arguments[1]),H instanceof Error)throw H;var P=new Error('Unhandled "error" event. ('+H+")");throw P.context=H,P}if(I=B[J],!I)return!1;var R=typeof I=="function";switch(M=arguments.length,M){case 1:p(I,R,this);break;case 2:m(I,R,this,arguments[1]);break;case 3:d(I,R,this,arguments[1],arguments[2]);break;case 4:v(I,R,this,arguments[1],arguments[2],arguments[3]);break;default:for(E=new Array(M-1),A=1;A0&&A.length>M)){A.warned=!0;var B=new Error("Possible EventEmitter memory leak detected. "+A.length+' "'+String(J)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');B.name="MaxListenersExceededWarning",B.emitter=X,B.type=J,B.count=A.length,typeof console=="object"&&console.warn&&console.warn("%s: %s",B.name,B.message)}return X}c.prototype.addListener=function(J,H){return g(this,J,H,!1)},c.prototype.on=c.prototype.addListener,c.prototype.prependListener=function(J,H){return g(this,J,H,!0)};function w(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var X=new Array(arguments.length),J=0;J=0;A--)if(I[A]===H||I[A].listener===H){B=I[A].listener,E=A;break}if(E<0)return this;E===0?I.shift():F(I,E),I.length===1&&(M[J]=I[0]),M.removeListener&&this.emit("removeListener",J,B||H)}return this},c.prototype.removeAllListeners=function(J){var H,I,M;if(I=this._events,!I)return this;if(!I.removeListener)return arguments.length===0?(this._events=s(null),this._eventsCount=0):I[J]&&(--this._eventsCount===0?this._events=s(null):delete I[J]),this;if(arguments.length===0){var E=o(I),A;for(M=0;M=0;M--)this.removeListener(J,H[M]);return this};function _(X,J,H){var I=X._events;if(!I)return[];var M=I[J];return M?typeof M=="function"?H?[M.listener||M]:[M]:H?N(M):O(M,M.length):[]}c.prototype.listeners=function(J){return _(this,J,!0)},c.prototype.rawListeners=function(J){return _(this,J,!1)},c.listenerCount=function(X,J){return typeof X.listenerCount=="function"?X.listenerCount(J):k.call(X,J)},c.prototype.listenerCount=k;function k(X){var J=this._events;if(J){var H=J[X];if(typeof H=="function")return 1;if(H)return H.length}return 0}c.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function F(X,J){for(var H=J,I=H+1,M=X.length;I0||l>0;){var v=new o;v.update(d),v.update(c),a&&v.update(a),d=v.digest();var x=0;if(u>0){var g=p.length-u;x=Math.min(u,d.length),d.copy(p,g,0,x),u-=x}if(x0){var w=m.length-l,y=Math.min(l,d.length-x);d.copy(m,w,x,x+y),l-=y}}return d.fill(0),{key:p,iv:m}}n.exports=h},{"md5.js":450,"safe-buffer":494}],424:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.CsvParserStream=i.ParserOptions=i.parseFile=i.parseStream=i.parseString=i.parse=i.FormatterOptions=i.CsvFormatterStream=i.writeToPath=i.writeToString=i.writeToBuffer=i.writeToStream=i.write=i.format=void 0;var s=e("@fast-csv/format");Object.defineProperty(i,"format",{enumerable:!0,get:function(){return s.format}}),Object.defineProperty(i,"write",{enumerable:!0,get:function(){return s.write}}),Object.defineProperty(i,"writeToStream",{enumerable:!0,get:function(){return s.writeToStream}}),Object.defineProperty(i,"writeToBuffer",{enumerable:!0,get:function(){return s.writeToBuffer}}),Object.defineProperty(i,"writeToString",{enumerable:!0,get:function(){return s.writeToString}}),Object.defineProperty(i,"writeToPath",{enumerable:!0,get:function(){return s.writeToPath}}),Object.defineProperty(i,"CsvFormatterStream",{enumerable:!0,get:function(){return s.CsvFormatterStream}}),Object.defineProperty(i,"FormatterOptions",{enumerable:!0,get:function(){return s.FormatterOptions}});var o=e("@fast-csv/parse");Object.defineProperty(i,"parse",{enumerable:!0,get:function(){return o.parse}}),Object.defineProperty(i,"parseString",{enumerable:!0,get:function(){return o.parseString}}),Object.defineProperty(i,"parseStream",{enumerable:!0,get:function(){return o.parseStream}}),Object.defineProperty(i,"parseFile",{enumerable:!0,get:function(){return o.parseFile}}),Object.defineProperty(i,"ParserOptions",{enumerable:!0,get:function(){return o.ParserOptions}}),Object.defineProperty(i,"CsvParserStream",{enumerable:!0,get:function(){return o.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(e,n,i){var s=e("safe-buffer").Buffer,o=e("readable-stream").Transform,h=e("inherits");function c(f,l){if(!s.isBuffer(f)&&typeof f!="string")throw new TypeError(l+" must be a string or a buffer")}function a(f){o.call(this),this._block=s.allocUnsafe(f),this._blockSize=f,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}h(a,o),a.prototype._transform=function(f,l,u){var p=null;try{this.update(f,l)}catch(m){p=m}u(p)},a.prototype._flush=function(f){var l=null;try{this.push(this.digest())}catch(u){l=u}f(l)},a.prototype.update=function(f,l){if(c(f,"Data"),this._finalized)throw new Error("Digest already called");s.isBuffer(f)||(f=s.from(f,l));for(var u=this._block,p=0;this._blockOffset+f.length-p>=this._blockSize;){for(var m=this._blockOffset;m0;++d)this._length[d]+=v,v=this._length[d]/4294967296|0,v>0&&(this._length[d]-=4294967296*v);return this},a.prototype._update=function(){throw new Error("_update is not implemented")},a.prototype.digest=function(f){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var l=this._digest();f!==void 0&&(l=l.toString(f)),this._block.fill(0),this._blockOffset=0;for(var u=0;u<4;++u)this._length[u]=0;return l},a.prototype._digest=function(){throw new Error("_digest is not implemented")},n.exports=a},{inherits:440,"readable-stream":491,"safe-buffer":494}],426:[function(e,n,i){var s=i;s.utils=e("./hash/utils"),s.common=e("./hash/common"),s.sha=e("./hash/sha"),s.ripemd=e("./hash/ripemd"),s.hmac=e("./hash/hmac"),s.sha1=s.sha.sha1,s.sha256=s.sha.sha256,s.sha224=s.sha.sha224,s.sha384=s.sha.sha384,s.sha512=s.sha.sha512,s.ripemd160=s.ripemd.ripemd160},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(e,n,i){var s=e("./utils"),o=e("minimalistic-assert");function h(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}i.BlockHash=h,h.prototype.update=function(a,f){if(a=s.toArray(a,f),this.pending?this.pending=this.pending.concat(a):this.pending=a,this.pendingTotal+=a.length,this.pending.length>=this._delta8){a=this.pending;var l=a.length%this._delta8;this.pending=a.slice(a.length-l,a.length),this.pending.length===0&&(this.pending=null),a=s.join32(a,0,a.length-l,this.endian);for(var u=0;u>>24&255,u[p++]=a>>>16&255,u[p++]=a>>>8&255,u[p++]=a&255}else for(u[p++]=a&255,u[p++]=a>>>8&255,u[p++]=a>>>16&255,u[p++]=a>>>24&255,u[p++]=0,u[p++]=0,u[p++]=0,u[p++]=0,m=8;mthis.blockSize&&(a=new this.Hash().update(a).digest()),o(a.length<=this.blockSize);for(var f=a.length;f>>3}i.g0_256=p;function m(d){return o(d,17)^o(d,19)^d>>>10}i.g1_256=m},{"../utils":437}],437:[function(e,n,i){var s=e("minimalistic-assert"),o=e("inherits");i.inherits=o;function h(M,E){return(M.charCodeAt(E)&64512)!==55296||E<0||E+1>=M.length?!1:(M.charCodeAt(E+1)&64512)===56320}function c(M,E){if(Array.isArray(M))return M.slice();if(!M)return[];var A=[];if(typeof M=="string")if(E){if(E==="hex")for(M=M.replace(/[^a-z0-9]+/ig,""),M.length%2!==0&&(M="0"+M),L=0;L>6|192,A[B++]=P&63|128):h(M,L)?(P=65536+((P&1023)<<10)+(M.charCodeAt(++L)&1023),A[B++]=P>>18|240,A[B++]=P>>12&63|128,A[B++]=P>>6&63|128,A[B++]=P&63|128):(A[B++]=P>>12|224,A[B++]=P>>6&63|128,A[B++]=P&63|128)}else for(L=0;L>>24|M>>>8&65280|M<<8&16711680|(M&255)<<24;return E>>>0}i.htonl=f;function l(M,E){for(var A="",B=0;B>>0}return P}i.join32=m;function d(M,E){for(var A=new Array(M.length*4),B=0,L=0;B>>24,A[L+1]=P>>>16&255,A[L+2]=P>>>8&255,A[L+3]=P&255):(A[L+3]=P>>>24,A[L+2]=P>>>16&255,A[L+1]=P>>>8&255,A[L]=P&255)}return A}i.split32=d;function v(M,E){return M>>>E|M<<32-E}i.rotr32=v;function x(M,E){return M<>>32-E}i.rotl32=x;function g(M,E){return M+E>>>0}i.sum32=g;function w(M,E,A){return M+E+A>>>0}i.sum32_3=w;function y(M,E,A,B){return M+E+A+B>>>0}i.sum32_4=y;function _(M,E,A,B,L){return M+E+A+B+L>>>0}i.sum32_5=_;function k(M,E,A,B){var L=M[E],P=M[E+1],R=B+P>>>0,C=(R>>0,M[E+1]=R}i.sum64=k;function F(M,E,A,B){var L=E+B>>>0,P=(L>>0}i.sum64_hi=F;function O(M,E,A,B){var L=E+B;return L>>>0}i.sum64_lo=O;function N(M,E,A,B,L,P,R,C){var S=0,D=E;D=D+B>>>0,S+=D>>0,S+=D>>0,S+=D>>0}i.sum64_4_hi=N;function U(M,E,A,B,L,P,R,C){var S=E+B+P+C;return S>>>0}i.sum64_4_lo=U;function z(M,E,A,B,L,P,R,C,S,D){var V=0,te=E;te=te+B>>>0,V+=te>>0,V+=te>>0,V+=te>>0,V+=te>>0}i.sum64_5_hi=z;function W(M,E,A,B,L,P,R,C,S,D){var V=E+B+P+C+D;return V>>>0}i.sum64_5_lo=W;function X(M,E,A){var B=E<<32-A|M>>>A;return B>>>0}i.rotr64_hi=X;function J(M,E,A){var B=M<<32-A|E>>>A;return B>>>0}i.rotr64_lo=J;function H(M,E,A){return M>>>A}i.shr64_hi=H;function I(M,E,A){var B=M<<32-A|E>>>A;return B>>>0}i.shr64_lo=I},{inherits:440,"minimalistic-assert":453}],438:[function(e,n,i){var s=e("hash.js"),o=e("minimalistic-crypto-utils"),h=e("minimalistic-assert");function c(a){if(!(this instanceof c))return new c(a);this.hash=a.hash,this.predResist=!!a.predResist,this.outLen=this.hash.outSize,this.minEntropy=a.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var f=o.toArray(a.entropy,a.entropyEnc||"hex"),l=o.toArray(a.nonce,a.nonceEnc||"hex"),u=o.toArray(a.pers,a.persEnc||"hex");h(f.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(f,l,u)}n.exports=c,c.prototype._init=function(f,l,u){var p=f.concat(l).concat(u);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var m=0;m=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(f.concat(u||[])),this._reseed=1},c.prototype.generate=function(f,l,u,p){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof l!="string"&&(p=u,u=l,l=null),u&&(u=o.toArray(u,p||"hex"),this._update(u));for(var m=[];m.length */i.read=function(s,o,h,c,a){var f,l,u=a*8-c-1,p=(1<>1,d=-7,v=h?a-1:0,x=h?-1:1,g=s[o+v];for(v+=x,f=g&(1<<-d)-1,g>>=-d,d+=u;d>0;f=f*256+s[o+v],v+=x,d-=8);for(l=f&(1<<-d)-1,f>>=-d,d+=c;d>0;l=l*256+s[o+v],v+=x,d-=8);if(f===0)f=1-m;else{if(f===p)return l?NaN:(g?-1:1)*(1/0);l=l+Math.pow(2,c),f=f-m}return(g?-1:1)*l*Math.pow(2,f-c)},i.write=function(s,o,h,c,a,f){var l,u,p,m=f*8-a-1,d=(1<>1,x=a===23?Math.pow(2,-24)-Math.pow(2,-77):0,g=c?0:f-1,w=c?1:-1,y=o<0||o===0&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(u=isNaN(o)?1:0,l=d):(l=Math.floor(Math.log(o)/Math.LN2),o*(p=Math.pow(2,-l))<1&&(l--,p*=2),l+v>=1?o+=x/p:o+=x*Math.pow(2,1-v),o*p>=2&&(l++,p/=2),l+v>=d?(u=0,l=d):l+v>=1?(u=(o*p-1)*Math.pow(2,a),l=l+v):(u=o*Math.pow(2,v-1)*Math.pow(2,a),l=0));a>=8;s[h+g]=u&255,g+=w,u/=256,a-=8);for(l=l<0;s[h+g]=l&255,g+=w,l/=256,m-=8);s[h+g-w]|=y*128}},{}],440:[function(e,n,i){typeof Object.create=="function"?n.exports=function(o,h){h&&(o.super_=h,o.prototype=Object.create(h.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}))}:n.exports=function(o,h){if(h){o.super_=h;var c=function(){};c.prototype=h.prototype,o.prototype=new c,o.prototype.constructor=o}}},{}],441:[function(e,n,i){(function(s,o,h,c,a,f,l,u){(function(){/*! + + JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + + (c) 2009-2016 Stuart Knightley + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + + JSZip uses the library pako released under the MIT license : + https://github.com/nodeca/pako/blob/main/LICENSE + */(function(p){typeof i=="object"&&typeof n<"u"?n.exports=p():(typeof window<"u"?window:typeof o<"u"?o:typeof self<"u"?self:this).JSZip=p()})(function(){return function p(m,d,v){function x(y,_){if(!d[y]){if(!m[y]){var k=typeof e=="function"&&e;if(!_&&k)return k(y,!0);if(g)return g(y,!0);var F=new Error("Cannot find module '"+y+"'");throw F.code="MODULE_NOT_FOUND",F}var O=d[y]={exports:{}};m[y][0].call(O.exports,function(N){var U=m[y][1][N];return x(U||N)},O,O.exports,p,m,d,v)}return d[y].exports}for(var g=typeof e=="function"&&e,w=0;w>2,O=(3&y)<<4|_>>4,N=1>6:64,U=2>4,_=(15&F)<<4|(O=g.indexOf(w.charAt(U++)))>>2,k=(3&O)<<6|(N=g.indexOf(w.charAt(U++))),X[z++]=y,O!==64&&(X[z++]=_),N!==64&&(X[z++]=k);return X}},{"./support":30,"./utils":32}],2:[function(p,m,d){var v=p("./external"),x=p("./stream/DataWorker"),g=p("./stream/Crc32Probe"),w=p("./stream/DataLengthProbe");function y(_,k,F,O,N){this.compressedSize=_,this.uncompressedSize=k,this.crc32=F,this.compression=O,this.compressedContent=N}y.prototype={getContentWorker:function(){var _=new x(v.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new w("data_length")),k=this;return _.on("end",function(){if(this.streamInfo.data_length!==k.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),_},getCompressedWorker:function(){return new x(v.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},y.createWorkerFrom=function(_,k,F){return _.pipe(new g).pipe(new w("uncompressedSize")).pipe(k.compressWorker(F)).pipe(new w("compressedSize")).withStreamInfo("compression",k)},m.exports=y},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(p,m,d){var v=p("./stream/GenericWorker");d.STORE={magic:"\0\0",compressWorker:function(){return new v("STORE compression")},uncompressWorker:function(){return new v("STORE decompression")}},d.DEFLATE=p("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(p,m,d){var v=p("./utils"),x=function(){for(var g,w=[],y=0;y<256;y++){g=y;for(var _=0;_<8;_++)g=1&g?3988292384^g>>>1:g>>>1;w[y]=g}return w}();m.exports=function(g,w){return g!==void 0&&g.length?v.getTypeOf(g)!=="string"?function(y,_,k,F){var O=x,N=F+k;y^=-1;for(var U=F;U>>8^O[255&(y^_[U])];return-1^y}(0|w,g,g.length,0):function(y,_,k,F){var O=x,N=F+k;y^=-1;for(var U=F;U>>8^O[255&(y^_.charCodeAt(U))];return-1^y}(0|w,g,g.length,0):0}},{"./utils":32}],5:[function(p,m,d){d.base64=!1,d.binary=!1,d.dir=!1,d.createFolders=!0,d.date=null,d.compression=null,d.compressionOptions=null,d.comment=null,d.unixPermissions=null,d.dosPermissions=null},{}],6:[function(p,m,d){var v=null;v=typeof Promise<"u"?Promise:p("lie"),m.exports={Promise:v}},{lie:37}],7:[function(p,m,d){var v=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",x=p("pako"),g=p("./utils"),w=p("./stream/GenericWorker"),y=v?"uint8array":"array";function _(k,F){w.call(this,"FlateWorker/"+k),this._pako=null,this._pakoAction=k,this._pakoOptions=F,this.meta={}}d.magic="\b\0",g.inherits(_,w),_.prototype.processChunk=function(k){this.meta=k.meta,this._pako===null&&this._createPako(),this._pako.push(g.transformTo(y,k.data),!1)},_.prototype.flush=function(){w.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},_.prototype.cleanUp=function(){w.prototype.cleanUp.call(this),this._pako=null},_.prototype._createPako=function(){this._pako=new x[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var k=this;this._pako.onData=function(F){k.push({data:F,meta:k.meta})}},d.compressWorker=function(k){return new _("Deflate",k)},d.uncompressWorker=function(){return new _("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(p,m,d){function v(O,N){var U,z="";for(U=0;U>>=8;return z}function x(O,N,U,z,W,X){var J,H,I=O.file,M=O.compression,E=X!==y.utf8encode,A=g.transformTo("string",X(I.name)),B=g.transformTo("string",y.utf8encode(I.name)),L=I.comment,P=g.transformTo("string",X(L)),R=g.transformTo("string",y.utf8encode(L)),C=B.length!==I.name.length,S=R.length!==L.length,D="",V="",te="",oe=I.dir,he=I.date,Ne={crc32:0,compressedSize:0,uncompressedSize:0};N&&!U||(Ne.crc32=O.crc32,Ne.compressedSize=O.compressedSize,Ne.uncompressedSize=O.uncompressedSize);var q=0;N&&(q|=8),E||!C&&!S||(q|=2048);var ne=0,Q=0;oe&&(ne|=16),W==="UNIX"?(Q=798,ne|=function(ve,Ce){var ce=ve;return ve||(ce=Ce?16893:33204),(65535&ce)<<16}(I.unixPermissions,oe)):(Q=20,ne|=function(ve){return 63&(ve||0)}(I.dosPermissions)),J=he.getUTCHours(),J<<=6,J|=he.getUTCMinutes(),J<<=5,J|=he.getUTCSeconds()/2,H=he.getUTCFullYear()-1980,H<<=4,H|=he.getUTCMonth()+1,H<<=5,H|=he.getUTCDate(),C&&(V=v(1,1)+v(_(A),4)+B,D+="up"+v(V.length,2)+V),S&&(te=v(1,1)+v(_(P),4)+R,D+="uc"+v(te.length,2)+te);var re="";return re+=` +\0`,re+=v(q,2),re+=M.magic,re+=v(J,2),re+=v(H,2),re+=v(Ne.crc32,4),re+=v(Ne.compressedSize,4),re+=v(Ne.uncompressedSize,4),re+=v(A.length,2),re+=v(D.length,2),{fileRecord:k.LOCAL_FILE_HEADER+re+A+D,dirRecord:k.CENTRAL_FILE_HEADER+v(Q,2)+re+v(P.length,2)+"\0\0\0\0"+v(ne,4)+v(z,4)+A+D+P}}var g=p("../utils"),w=p("../stream/GenericWorker"),y=p("../utf8"),_=p("../crc32"),k=p("../signature");function F(O,N,U,z){w.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=N,this.zipPlatform=U,this.encodeFileName=z,this.streamFiles=O,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}g.inherits(F,w),F.prototype.push=function(O){var N=O.meta.percent||0,U=this.entriesCount,z=this._sources.length;this.accumulate?this.contentBuffer.push(O):(this.bytesWritten+=O.data.length,w.prototype.push.call(this,{data:O.data,meta:{currentFile:this.currentFile,percent:U?(N+100*(U-z-1))/U:100}}))},F.prototype.openedSource=function(O){this.currentSourceOffset=this.bytesWritten,this.currentFile=O.file.name;var N=this.streamFiles&&!O.file.dir;if(N){var U=x(O,N,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:U.fileRecord,meta:{percent:0}})}else this.accumulate=!0},F.prototype.closedSource=function(O){this.accumulate=!1;var N=this.streamFiles&&!O.file.dir,U=x(O,N,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(U.dirRecord),N)this.push({data:function(z){return k.DATA_DESCRIPTOR+v(z.crc32,4)+v(z.compressedSize,4)+v(z.uncompressedSize,4)}(O),meta:{percent:100}});else for(this.push({data:U.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},F.prototype.flush=function(){for(var O=this.bytesWritten,N=0;N=this.index;w--)y=(y<<8)+this.byteAt(w);return this.index+=g,y},readString:function(g){return v.transformTo("string",this.readData(g))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var g=this.readInt(4);return new Date(Date.UTC(1980+(g>>25&127),(g>>21&15)-1,g>>16&31,g>>11&31,g>>5&63,(31&g)<<1))}},m.exports=x},{"../utils":32}],19:[function(p,m,d){var v=p("./Uint8ArrayReader");function x(g){v.call(this,g)}p("../utils").inherits(x,v),x.prototype.readData=function(g){this.checkOffset(g);var w=this.data.slice(this.zero+this.index,this.zero+this.index+g);return this.index+=g,w},m.exports=x},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(p,m,d){var v=p("./DataReader");function x(g){v.call(this,g)}p("../utils").inherits(x,v),x.prototype.byteAt=function(g){return this.data.charCodeAt(this.zero+g)},x.prototype.lastIndexOfSignature=function(g){return this.data.lastIndexOf(g)-this.zero},x.prototype.readAndCheckSignature=function(g){return g===this.readData(4)},x.prototype.readData=function(g){this.checkOffset(g);var w=this.data.slice(this.zero+this.index,this.zero+this.index+g);return this.index+=g,w},m.exports=x},{"../utils":32,"./DataReader":18}],21:[function(p,m,d){var v=p("./ArrayReader");function x(g){v.call(this,g)}p("../utils").inherits(x,v),x.prototype.readData=function(g){if(this.checkOffset(g),g===0)return new Uint8Array(0);var w=this.data.subarray(this.zero+this.index,this.zero+this.index+g);return this.index+=g,w},m.exports=x},{"../utils":32,"./ArrayReader":17}],22:[function(p,m,d){var v=p("../utils"),x=p("../support"),g=p("./ArrayReader"),w=p("./StringReader"),y=p("./NodeBufferReader"),_=p("./Uint8ArrayReader");m.exports=function(k){var F=v.getTypeOf(k);return v.checkSupport(F),F!=="string"||x.uint8array?F==="nodebuffer"?new y(k):x.uint8array?new _(v.transformTo("uint8array",k)):new g(v.transformTo("array",k)):new w(k)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(p,m,d){d.LOCAL_FILE_HEADER="PK",d.CENTRAL_FILE_HEADER="PK",d.CENTRAL_DIRECTORY_END="PK",d.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",d.ZIP64_CENTRAL_DIRECTORY_END="PK",d.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(p,m,d){var v=p("./GenericWorker"),x=p("../utils");function g(w){v.call(this,"ConvertWorker to "+w),this.destType=w}x.inherits(g,v),g.prototype.processChunk=function(w){this.push({data:x.transformTo(this.destType,w.data),meta:w.meta})},m.exports=g},{"../utils":32,"./GenericWorker":28}],25:[function(p,m,d){var v=p("./GenericWorker"),x=p("../crc32");function g(){v.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}p("../utils").inherits(g,v),g.prototype.processChunk=function(w){this.streamInfo.crc32=x(w.data,this.streamInfo.crc32||0),this.push(w)},m.exports=g},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(p,m,d){var v=p("../utils"),x=p("./GenericWorker");function g(w){x.call(this,"DataLengthProbe for "+w),this.propName=w,this.withStreamInfo(w,0)}v.inherits(g,x),g.prototype.processChunk=function(w){if(w){var y=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=y+w.data.length}x.prototype.processChunk.call(this,w)},m.exports=g},{"../utils":32,"./GenericWorker":28}],27:[function(p,m,d){var v=p("../utils"),x=p("./GenericWorker");function g(w){x.call(this,"DataWorker");var y=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,w.then(function(_){y.dataIsReady=!0,y.data=_,y.max=_&&_.length||0,y.type=v.getTypeOf(_),y.isPaused||y._tickAndRepeat()},function(_){y.error(_)})}v.inherits(g,x),g.prototype.cleanUp=function(){x.prototype.cleanUp.call(this),this.data=null},g.prototype.resume=function(){return!!x.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,v.delay(this._tickAndRepeat,[],this)),!0)},g.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(v.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},g.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var w=null,y=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":w=this.data.substring(this.index,y);break;case"uint8array":w=this.data.subarray(this.index,y);break;case"array":case"nodebuffer":w=this.data.slice(this.index,y)}return this.index=y,this.push({data:w,meta:{percent:this.max?this.index/this.max*100:0}})},m.exports=g},{"../utils":32,"./GenericWorker":28}],28:[function(p,m,d){function v(x){this.name=x||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}v.prototype={push:function(x){this.emit("data",x)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(x){this.emit("error",x)}return!0},error:function(x){return!this.isFinished&&(this.isPaused?this.generatedError=x:(this.isFinished=!0,this.emit("error",x),this.previous&&this.previous.error(x),this.cleanUp()),!0)},on:function(x,g){return this._listeners[x].push(g),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(x,g){if(this._listeners[x])for(var w=0;w "+x:x}},m.exports=v},{}],29:[function(p,m,d){var v=p("../utils"),x=p("./ConvertWorker"),g=p("./GenericWorker"),w=p("../base64"),y=p("../support"),_=p("../external"),k=null;if(y.nodestream)try{k=p("../nodejs/NodejsStreamOutputAdapter")}catch{}function F(N,U){return new _.Promise(function(z,W){var X=[],J=N._internalType,H=N._outputType,I=N._mimeType;N.on("data",function(M,E){X.push(M),U&&U(E)}).on("error",function(M){X=[],W(M)}).on("end",function(){try{var M=function(E,A,B){switch(E){case"blob":return v.newBlob(v.transformTo("arraybuffer",A),B);case"base64":return w.encode(A);default:return v.transformTo(E,A)}}(H,function(E,A){var B,L=0,P=null,R=0;for(B=0;B"u")d.blob=!1;else{var v=new ArrayBuffer(0);try{d.blob=new Blob([v],{type:"application/zip"}).size===0}catch{try{var x=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);x.append(v),d.blob=x.getBlob("application/zip").size===0}catch{d.blob=!1}}}try{d.nodestream=!!p("readable-stream").Readable}catch{d.nodestream=!1}},{"readable-stream":16}],31:[function(p,m,d){for(var v=p("./utils"),x=p("./support"),g=p("./nodejsUtils"),w=p("./stream/GenericWorker"),y=new Array(256),_=0;_<256;_++)y[_]=252<=_?6:248<=_?5:240<=_?4:224<=_?3:192<=_?2:1;y[254]=y[254]=1;function k(){w.call(this,"utf-8 decode"),this.leftOver=null}function F(){w.call(this,"utf-8 encode")}d.utf8encode=function(O){return x.nodebuffer?g.newBufferFrom(O,"utf-8"):function(N){var U,z,W,X,J,H=N.length,I=0;for(X=0;X>>6:(z<65536?U[J++]=224|z>>>12:(U[J++]=240|z>>>18,U[J++]=128|z>>>12&63),U[J++]=128|z>>>6&63),U[J++]=128|63&z);return U}(O)},d.utf8decode=function(O){return x.nodebuffer?v.transformTo("nodebuffer",O).toString("utf-8"):function(N){var U,z,W,X,J=N.length,H=new Array(2*J);for(U=z=0;U>10&1023,H[z++]=56320|1023&W)}return H.length!==z&&(H.subarray?H=H.subarray(0,z):H.length=z),v.applyFromCharCode(H)}(O=v.transformTo(x.uint8array?"uint8array":"array",O))},v.inherits(k,w),k.prototype.processChunk=function(O){var N=v.transformTo(x.uint8array?"uint8array":"array",O.data);if(this.leftOver&&this.leftOver.length){if(x.uint8array){var U=N;(N=new Uint8Array(U.length+this.leftOver.length)).set(this.leftOver,0),N.set(U,this.leftOver.length)}else N=this.leftOver.concat(N);this.leftOver=null}var z=function(X,J){var H;for((J=J||X.length)>X.length&&(J=X.length),H=J-1;0<=H&&(192&X[H])==128;)H--;return H<0||H===0?J:H+y[X[H]]>J?H:J}(N),W=N;z!==N.length&&(x.uint8array?(W=N.subarray(0,z),this.leftOver=N.subarray(z,N.length)):(W=N.slice(0,z),this.leftOver=N.slice(z,N.length))),this.push({data:d.utf8decode(W),meta:O.meta})},k.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:d.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},d.Utf8DecodeWorker=k,v.inherits(F,w),F.prototype.processChunk=function(O){this.push({data:d.utf8encode(O.data),meta:O.meta})},d.Utf8EncodeWorker=F},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(p,m,d){var v=p("./support"),x=p("./base64"),g=p("./nodejsUtils"),w=p("./external");function y(U){return U}function _(U,z){for(var W=0;W>8;this.dir=!!(16&this.externalFileAttributes),O==0&&(this.dosPermissions=63&this.externalFileAttributes),O==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var O=v(this.extraFields[1].value);this.uncompressedSize===x.MAX_VALUE_32BITS&&(this.uncompressedSize=O.readInt(8)),this.compressedSize===x.MAX_VALUE_32BITS&&(this.compressedSize=O.readInt(8)),this.localHeaderOffset===x.MAX_VALUE_32BITS&&(this.localHeaderOffset=O.readInt(8)),this.diskNumberStart===x.MAX_VALUE_32BITS&&(this.diskNumberStart=O.readInt(4))}},readExtraFields:function(O){var N,U,z,W=O.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});O.index+4>>6:(O<65536?F[z++]=224|O>>>12:(F[z++]=240|O>>>18,F[z++]=128|O>>>12&63),F[z++]=128|O>>>6&63),F[z++]=128|63&O);return F},d.buf2binstring=function(k){return _(k,k.length)},d.binstring2buf=function(k){for(var F=new v.Buf8(k.length),O=0,N=F.length;O>10&1023,X[N++]=56320|1023&U)}return _(X,N)},d.utf8border=function(k,F){var O;for((F=F||k.length)>k.length&&(F=k.length),O=F-1;0<=O&&(192&k[O])==128;)O--;return O<0||O===0?F:O+w[k[O]]>F?O:F}},{"./common":41}],43:[function(p,m,d){m.exports=function(v,x,g,w){for(var y=65535&v|0,_=v>>>16&65535|0,k=0;g!==0;){for(g-=k=2e3>>1:x>>>1;g[w]=x}return g}();m.exports=function(x,g,w,y){var _=v,k=y+w;x^=-1;for(var F=y;F>>8^_[255&(x^g[F])];return-1^x}},{}],46:[function(p,m,d){var v,x=p("../utils/common"),g=p("./trees"),w=p("./adler32"),y=p("./crc32"),_=p("./messages"),k=0,F=4,O=0,N=-2,U=-1,z=4,W=2,X=8,J=9,H=286,I=30,M=19,E=2*H+1,A=15,B=3,L=258,P=L+B+1,R=42,C=113,S=1,D=2,V=3,te=4;function oe(K,Te){return K.msg=_[Te],Te}function he(K){return(K<<1)-(4K.avail_out&&(Oe=K.avail_out),Oe!==0&&(x.arraySet(K.output,Te.pending_buf,Te.pending_out,Oe,K.next_out),K.next_out+=Oe,Te.pending_out+=Oe,K.total_out+=Oe,K.avail_out-=Oe,Te.pending-=Oe,Te.pending===0&&(Te.pending_out=0))}function ne(K,Te){g._tr_flush_block(K,0<=K.block_start?K.block_start:-1,K.strstart-K.block_start,Te),K.block_start=K.strstart,q(K.strm)}function Q(K,Te){K.pending_buf[K.pending++]=Te}function re(K,Te){K.pending_buf[K.pending++]=Te>>>8&255,K.pending_buf[K.pending++]=255&Te}function ve(K,Te){var Oe,ie,fe=K.max_chain_length,we=K.strstart,Fe=K.prev_length,Ue=K.nice_match,Pe=K.strstart>K.w_size-P?K.strstart-(K.w_size-P):0,$e=K.window,rt=K.w_mask,Ze=K.prev,Se=K.strstart+L,je=$e[we+Fe-1],Ke=$e[we+Fe];K.prev_length>=K.good_match&&(fe>>=2),Ue>K.lookahead&&(Ue=K.lookahead);do if($e[(Oe=Te)+Fe]===Ke&&$e[Oe+Fe-1]===je&&$e[Oe]===$e[we]&&$e[++Oe]===$e[we+1]){we+=2,Oe++;do;while($e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&$e[++we]===$e[++Oe]&&wePe&&--fe!=0);return Fe<=K.lookahead?Fe:K.lookahead}function Ce(K){var Te,Oe,ie,fe,we,Fe,Ue,Pe,$e,rt,Ze=K.w_size;do{if(fe=K.window_size-K.lookahead-K.strstart,K.strstart>=Ze+(Ze-P)){for(x.arraySet(K.window,K.window,Ze,Ze,0),K.match_start-=Ze,K.strstart-=Ze,K.block_start-=Ze,Te=Oe=K.hash_size;ie=K.head[--Te],K.head[Te]=Ze<=ie?ie-Ze:0,--Oe;);for(Te=Oe=Ze;ie=K.prev[--Te],K.prev[Te]=Ze<=ie?ie-Ze:0,--Oe;);fe+=Ze}if(K.strm.avail_in===0)break;if(Fe=K.strm,Ue=K.window,Pe=K.strstart+K.lookahead,$e=fe,rt=void 0,rt=Fe.avail_in,$e=B)for(we=K.strstart-K.insert,K.ins_h=K.window[we],K.ins_h=(K.ins_h<=B&&(K.ins_h=(K.ins_h<=B)if(ie=g._tr_tally(K,K.strstart-K.match_start,K.match_length-B),K.lookahead-=K.match_length,K.match_length<=K.max_lazy_match&&K.lookahead>=B){for(K.match_length--;K.strstart++,K.ins_h=(K.ins_h<=B&&(K.ins_h=(K.ins_h<=B&&K.match_length<=K.prev_length){for(fe=K.strstart+K.lookahead-B,ie=g._tr_tally(K,K.strstart-1-K.prev_match,K.prev_length-B),K.lookahead-=K.prev_length-1,K.prev_length-=2;++K.strstart<=fe&&(K.ins_h=(K.ins_h<K.pending_buf_size-5&&(Oe=K.pending_buf_size-5);;){if(K.lookahead<=1){if(Ce(K),K.lookahead===0&&Te===k)return S;if(K.lookahead===0)break}K.strstart+=K.lookahead,K.lookahead=0;var ie=K.block_start+Oe;if((K.strstart===0||K.strstart>=ie)&&(K.lookahead=K.strstart-ie,K.strstart=ie,ne(K,!1),K.strm.avail_out===0)||K.strstart-K.block_start>=K.w_size-P&&(ne(K,!1),K.strm.avail_out===0))return S}return K.insert=0,Te===F?(ne(K,!0),K.strm.avail_out===0?V:te):(K.strstart>K.block_start&&(ne(K,!1),K.strm.avail_out),S)}),new ee(4,4,8,4,ce),new ee(4,5,16,8,ce),new ee(4,6,32,32,ce),new ee(4,4,16,16,se),new ee(8,16,32,32,se),new ee(8,16,128,128,se),new ee(8,32,128,256,se),new ee(32,128,258,1024,se),new ee(32,258,258,4096,se)],d.deflateInit=function(K,Te){return Ae(K,Te,X,15,8,0)},d.deflateInit2=Ae,d.deflateReset=de,d.deflateResetKeep=Z,d.deflateSetHeader=function(K,Te){return K&&K.state?K.state.wrap!==2?N:(K.state.gzhead=Te,O):N},d.deflate=function(K,Te){var Oe,ie,fe,we;if(!K||!K.state||5>8&255),Q(ie,ie.gzhead.time>>16&255),Q(ie,ie.gzhead.time>>24&255),Q(ie,ie.level===9?2:2<=ie.strategy||ie.level<2?4:0),Q(ie,255&ie.gzhead.os),ie.gzhead.extra&&ie.gzhead.extra.length&&(Q(ie,255&ie.gzhead.extra.length),Q(ie,ie.gzhead.extra.length>>8&255)),ie.gzhead.hcrc&&(K.adler=y(K.adler,ie.pending_buf,ie.pending,0)),ie.gzindex=0,ie.status=69):(Q(ie,0),Q(ie,0),Q(ie,0),Q(ie,0),Q(ie,0),Q(ie,ie.level===9?2:2<=ie.strategy||ie.level<2?4:0),Q(ie,3),ie.status=C);else{var Fe=X+(ie.w_bits-8<<4)<<8;Fe|=(2<=ie.strategy||ie.level<2?0:ie.level<6?1:ie.level===6?2:3)<<6,ie.strstart!==0&&(Fe|=32),Fe+=31-Fe%31,ie.status=C,re(ie,Fe),ie.strstart!==0&&(re(ie,K.adler>>>16),re(ie,65535&K.adler)),K.adler=1}if(ie.status===69)if(ie.gzhead.extra){for(fe=ie.pending;ie.gzindex<(65535&ie.gzhead.extra.length)&&(ie.pending!==ie.pending_buf_size||(ie.gzhead.hcrc&&ie.pending>fe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),q(K),fe=ie.pending,ie.pending!==ie.pending_buf_size));)Q(ie,255&ie.gzhead.extra[ie.gzindex]),ie.gzindex++;ie.gzhead.hcrc&&ie.pending>fe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),ie.gzindex===ie.gzhead.extra.length&&(ie.gzindex=0,ie.status=73)}else ie.status=73;if(ie.status===73)if(ie.gzhead.name){fe=ie.pending;do{if(ie.pending===ie.pending_buf_size&&(ie.gzhead.hcrc&&ie.pending>fe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),q(K),fe=ie.pending,ie.pending===ie.pending_buf_size)){we=1;break}we=ie.gzindexfe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),we===0&&(ie.gzindex=0,ie.status=91)}else ie.status=91;if(ie.status===91)if(ie.gzhead.comment){fe=ie.pending;do{if(ie.pending===ie.pending_buf_size&&(ie.gzhead.hcrc&&ie.pending>fe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),q(K),fe=ie.pending,ie.pending===ie.pending_buf_size)){we=1;break}we=ie.gzindexfe&&(K.adler=y(K.adler,ie.pending_buf,ie.pending-fe,fe)),we===0&&(ie.status=103)}else ie.status=103;if(ie.status===103&&(ie.gzhead.hcrc?(ie.pending+2>ie.pending_buf_size&&q(K),ie.pending+2<=ie.pending_buf_size&&(Q(ie,255&K.adler),Q(ie,K.adler>>8&255),K.adler=0,ie.status=C)):ie.status=C),ie.pending!==0){if(q(K),K.avail_out===0)return ie.last_flush=-1,O}else if(K.avail_in===0&&he(Te)<=he(Oe)&&Te!==F)return oe(K,-5);if(ie.status===666&&K.avail_in!==0)return oe(K,-5);if(K.avail_in!==0||ie.lookahead!==0||Te!==k&&ie.status!==666){var Ue=ie.strategy===2?function(Pe,$e){for(var rt;;){if(Pe.lookahead===0&&(Ce(Pe),Pe.lookahead===0)){if($e===k)return S;break}if(Pe.match_length=0,rt=g._tr_tally(Pe,0,Pe.window[Pe.strstart]),Pe.lookahead--,Pe.strstart++,rt&&(ne(Pe,!1),Pe.strm.avail_out===0))return S}return Pe.insert=0,$e===F?(ne(Pe,!0),Pe.strm.avail_out===0?V:te):Pe.last_lit&&(ne(Pe,!1),Pe.strm.avail_out===0)?S:D}(ie,Te):ie.strategy===3?function(Pe,$e){for(var rt,Ze,Se,je,Ke=Pe.window;;){if(Pe.lookahead<=L){if(Ce(Pe),Pe.lookahead<=L&&$e===k)return S;if(Pe.lookahead===0)break}if(Pe.match_length=0,Pe.lookahead>=B&&0Pe.lookahead&&(Pe.match_length=Pe.lookahead)}if(Pe.match_length>=B?(rt=g._tr_tally(Pe,1,Pe.match_length-B),Pe.lookahead-=Pe.match_length,Pe.strstart+=Pe.match_length,Pe.match_length=0):(rt=g._tr_tally(Pe,0,Pe.window[Pe.strstart]),Pe.lookahead--,Pe.strstart++),rt&&(ne(Pe,!1),Pe.strm.avail_out===0))return S}return Pe.insert=0,$e===F?(ne(Pe,!0),Pe.strm.avail_out===0?V:te):Pe.last_lit&&(ne(Pe,!1),Pe.strm.avail_out===0)?S:D}(ie,Te):v[ie.level].func(ie,Te);if(Ue!==V&&Ue!==te||(ie.status=666),Ue===S||Ue===V)return K.avail_out===0&&(ie.last_flush=-1),O;if(Ue===D&&(Te===1?g._tr_align(ie):Te!==5&&(g._tr_stored_block(ie,0,0,!1),Te===3&&(Ne(ie.head),ie.lookahead===0&&(ie.strstart=0,ie.block_start=0,ie.insert=0))),q(K),K.avail_out===0))return ie.last_flush=-1,O}return Te!==F?O:ie.wrap<=0?1:(ie.wrap===2?(Q(ie,255&K.adler),Q(ie,K.adler>>8&255),Q(ie,K.adler>>16&255),Q(ie,K.adler>>24&255),Q(ie,255&K.total_in),Q(ie,K.total_in>>8&255),Q(ie,K.total_in>>16&255),Q(ie,K.total_in>>24&255)):(re(ie,K.adler>>>16),re(ie,65535&K.adler)),q(K),0=Oe.w_size&&(we===0&&(Ne(Oe.head),Oe.strstart=0,Oe.block_start=0,Oe.insert=0),$e=new x.Buf8(Oe.w_size),x.arraySet($e,Te,rt-Oe.w_size,Oe.w_size,0),Te=$e,rt=Oe.w_size),Fe=K.avail_in,Ue=K.next_in,Pe=K.input,K.avail_in=rt,K.next_in=0,K.input=Te,Ce(Oe);Oe.lookahead>=B;){for(ie=Oe.strstart,fe=Oe.lookahead-(B-1);Oe.ins_h=(Oe.ins_h<>>=B=A>>>24,J-=B,(B=A>>>16&255)===0)D[_++]=65535&A;else{if(!(16&B)){if(!(64&B)){A=H[(65535&A)+(X&(1<>>=B,J-=B),J<15&&(X+=S[w++]<>>=B=A>>>24,J-=B,!(16&(B=A>>>16&255))){if(!(64&B)){A=I[(65535&A)+(X&(1<>>=B,J-=B,(B=_-k)>3,X&=(1<<(J-=L<<3))-1,v.next_in=w,v.next_out=_,v.avail_in=w>>24&255)+(R>>>8&65280)+((65280&R)<<8)+((255&R)<<24)}function X(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new v.Buf16(320),this.work=new v.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function J(R){var C;return R&&R.state?(C=R.state,R.total_in=R.total_out=C.total=0,R.msg="",C.wrap&&(R.adler=1&C.wrap),C.mode=N,C.last=0,C.havedict=0,C.dmax=32768,C.head=null,C.hold=0,C.bits=0,C.lencode=C.lendyn=new v.Buf32(U),C.distcode=C.distdyn=new v.Buf32(z),C.sane=1,C.back=-1,F):O}function H(R){var C;return R&&R.state?((C=R.state).wsize=0,C.whave=0,C.wnext=0,J(R)):O}function I(R,C){var S,D;return R&&R.state?(D=R.state,C<0?(S=0,C=-C):(S=1+(C>>4),C<48&&(C&=15)),C&&(C<8||15=te.wsize?(v.arraySet(te.window,C,S-te.wsize,te.wsize,0),te.wnext=0,te.whave=te.wsize):(D<(V=te.wsize-te.wnext)&&(V=D),v.arraySet(te.window,C,S-D,V,te.wnext),(D-=V)?(v.arraySet(te.window,C,S-D,D,0),te.wnext=D,te.whave=te.wsize):(te.wnext+=V,te.wnext===te.wsize&&(te.wnext=0),te.whave>>8&255,S.check=g(S.check,we,2,0),ne=q=0,S.mode=2;break}if(S.flags=0,S.head&&(S.head.done=!1),!(1&S.wrap)||(((255&q)<<8)+(q>>8))%31){R.msg="incorrect header check",S.mode=30;break}if((15&q)!=8){R.msg="unknown compression method",S.mode=30;break}if(ne-=4,K=8+(15&(q>>>=4)),S.wbits===0)S.wbits=K;else if(K>S.wbits){R.msg="invalid window size",S.mode=30;break}S.dmax=1<>8&1),512&S.flags&&(we[0]=255&q,we[1]=q>>>8&255,S.check=g(S.check,we,2,0)),ne=q=0,S.mode=3;case 3:for(;ne<32;){if(he===0)break e;he--,q+=D[te++]<>>8&255,we[2]=q>>>16&255,we[3]=q>>>24&255,S.check=g(S.check,we,4,0)),ne=q=0,S.mode=4;case 4:for(;ne<16;){if(he===0)break e;he--,q+=D[te++]<>8),512&S.flags&&(we[0]=255&q,we[1]=q>>>8&255,S.check=g(S.check,we,2,0)),ne=q=0,S.mode=5;case 5:if(1024&S.flags){for(;ne<16;){if(he===0)break e;he--,q+=D[te++]<>>8&255,S.check=g(S.check,we,2,0)),ne=q=0}else S.head&&(S.head.extra=null);S.mode=6;case 6:if(1024&S.flags&&(he<(ve=S.length)&&(ve=he),ve&&(S.head&&(K=S.head.extra_len-S.length,S.head.extra||(S.head.extra=new Array(S.head.extra_len)),v.arraySet(S.head.extra,D,te,ve,K)),512&S.flags&&(S.check=g(S.check,D,ve,te)),he-=ve,te+=ve,S.length-=ve),S.length))break e;S.length=0,S.mode=7;case 7:if(2048&S.flags){if(he===0)break e;for(ve=0;K=D[te+ve++],S.head&&K&&S.length<65536&&(S.head.name+=String.fromCharCode(K)),K&&ve>9&1,S.head.done=!0),R.adler=S.check=0,S.mode=12;break;case 10:for(;ne<32;){if(he===0)break e;he--,q+=D[te++]<>>=7&ne,ne-=7&ne,S.mode=27;break}for(;ne<3;){if(he===0)break e;he--,q+=D[te++]<>>=1)){case 0:S.mode=14;break;case 1:if(L(S),S.mode=20,C!==6)break;q>>>=2,ne-=2;break e;case 2:S.mode=17;break;case 3:R.msg="invalid block type",S.mode=30}q>>>=2,ne-=2;break;case 14:for(q>>>=7&ne,ne-=7≠ne<32;){if(he===0)break e;he--,q+=D[te++]<>>16^65535)){R.msg="invalid stored block lengths",S.mode=30;break}if(S.length=65535&q,ne=q=0,S.mode=15,C===6)break e;case 15:S.mode=16;case 16:if(ve=S.length){if(he>>=5,ne-=5,S.ndist=1+(31&q),q>>>=5,ne-=5,S.ncode=4+(15&q),q>>>=4,ne-=4,286>>=3,ne-=3}for(;S.have<19;)S.lens[Fe[S.have++]]=0;if(S.lencode=S.lendyn,S.lenbits=7,Oe={bits:S.lenbits},Te=y(0,S.lens,0,19,S.lencode,0,S.work,Oe),S.lenbits=Oe.bits,Te){R.msg="invalid code lengths set",S.mode=30;break}S.have=0,S.mode=19;case 19:for(;S.have>>16&255,G=65535&fe,!((se=fe>>>24)<=ne);){if(he===0)break e;he--,q+=D[te++]<>>=se,ne-=se,S.lens[S.have++]=G;else{if(G===16){for(ie=se+2;ne>>=se,ne-=se,S.have===0){R.msg="invalid bit length repeat",S.mode=30;break}K=S.lens[S.have-1],ve=3+(3&q),q>>>=2,ne-=2}else if(G===17){for(ie=se+3;ne>>=se)),q>>>=3,ne-=3}else{for(ie=se+7;ne>>=se)),q>>>=7,ne-=7}if(S.have+ve>S.nlen+S.ndist){R.msg="invalid bit length repeat",S.mode=30;break}for(;ve--;)S.lens[S.have++]=K}}if(S.mode===30)break;if(S.lens[256]===0){R.msg="invalid code -- missing end-of-block",S.mode=30;break}if(S.lenbits=9,Oe={bits:S.lenbits},Te=y(_,S.lens,0,S.nlen,S.lencode,0,S.work,Oe),S.lenbits=Oe.bits,Te){R.msg="invalid literal/lengths set",S.mode=30;break}if(S.distbits=6,S.distcode=S.distdyn,Oe={bits:S.distbits},Te=y(k,S.lens,S.nlen,S.ndist,S.distcode,0,S.work,Oe),S.distbits=Oe.bits,Te){R.msg="invalid distances set",S.mode=30;break}if(S.mode=20,C===6)break e;case 20:S.mode=21;case 21:if(6<=he&&258<=Ne){R.next_out=oe,R.avail_out=Ne,R.next_in=te,R.avail_in=he,S.hold=q,S.bits=ne,w(R,re),oe=R.next_out,V=R.output,Ne=R.avail_out,te=R.next_in,D=R.input,he=R.avail_in,q=S.hold,ne=S.bits,S.mode===12&&(S.back=-1);break}for(S.back=0;ee=(fe=S.lencode[q&(1<>>16&255,G=65535&fe,!((se=fe>>>24)<=ne);){if(he===0)break e;he--,q+=D[te++]<>Z)])>>>16&255,G=65535&fe,!(Z+(se=fe>>>24)<=ne);){if(he===0)break e;he--,q+=D[te++]<>>=Z,ne-=Z,S.back+=Z}if(q>>>=se,ne-=se,S.back+=se,S.length=G,ee===0){S.mode=26;break}if(32&ee){S.back=-1,S.mode=12;break}if(64&ee){R.msg="invalid literal/length code",S.mode=30;break}S.extra=15&ee,S.mode=22;case 22:if(S.extra){for(ie=S.extra;ne>>=S.extra,ne-=S.extra,S.back+=S.extra}S.was=S.length,S.mode=23;case 23:for(;ee=(fe=S.distcode[q&(1<>>16&255,G=65535&fe,!((se=fe>>>24)<=ne);){if(he===0)break e;he--,q+=D[te++]<>Z)])>>>16&255,G=65535&fe,!(Z+(se=fe>>>24)<=ne);){if(he===0)break e;he--,q+=D[te++]<>>=Z,ne-=Z,S.back+=Z}if(q>>>=se,ne-=se,S.back+=se,64&ee){R.msg="invalid distance code",S.mode=30;break}S.offset=G,S.extra=15&ee,S.mode=24;case 24:if(S.extra){for(ie=S.extra;ne>>=S.extra,ne-=S.extra,S.back+=S.extra}if(S.offset>S.dmax){R.msg="invalid distance too far back",S.mode=30;break}S.mode=25;case 25:if(Ne===0)break e;if(ve=re-Ne,S.offset>ve){if((ve=S.offset-ve)>S.whave&&S.sane){R.msg="invalid distance too far back",S.mode=30;break}Ce=ve>S.wnext?(ve-=S.wnext,S.wsize-ve):S.wnext-ve,ve>S.length&&(ve=S.length),ce=S.window}else ce=V,Ce=oe-S.offset,ve=S.length;for(NeE?(B=Ce[ce+z[C]],ne[Q+z[C]]):(B=96,0),X=1<>oe)+(J-=X)]=A<<24|B<<16|L|0,J!==0;);for(X=1<>=1;if(X!==0?(q&=X-1,q+=X):q=0,C++,--re[R]==0){if(R===D)break;R=k[F+z[C]]}if(V>>7)]}function Q(fe,we){fe.pending_buf[fe.pending++]=255&we,fe.pending_buf[fe.pending++]=we>>>8&255}function re(fe,we,Fe){fe.bi_valid>W-Fe?(fe.bi_buf|=we<>W-fe.bi_valid,fe.bi_valid+=Fe-W):(fe.bi_buf|=we<>>=1,Fe<<=1,0<--we;);return Fe>>>1}function ce(fe,we,Fe){var Ue,Pe,$e=new Array(z+1),rt=0;for(Ue=1;Ue<=z;Ue++)$e[Ue]=rt=rt+Fe[Ue-1]<<1;for(Pe=0;Pe<=we;Pe++){var Ze=fe[2*Pe+1];Ze!==0&&(fe[2*Pe]=Ce($e[Ze]++,Ze))}}function se(fe){var we;for(we=0;we>1;1<=Fe;Fe--)Z(fe,$e,Fe);for(Pe=Se;Fe=fe.heap[1],fe.heap[1]=fe.heap[fe.heap_len--],Z(fe,$e,1),Ue=fe.heap[1],fe.heap[--fe.heap_max]=Fe,fe.heap[--fe.heap_max]=Ue,$e[2*Pe]=$e[2*Fe]+$e[2*Ue],fe.depth[Pe]=(fe.depth[Fe]>=fe.depth[Ue]?fe.depth[Fe]:fe.depth[Ue])+1,$e[2*Fe+1]=$e[2*Ue+1]=Pe,fe.heap[1]=Pe++,Z(fe,$e,1),2<=fe.heap_len;);fe.heap[--fe.heap_max]=fe.heap[1],function(Ke,st){var St,At,bt,wt,Dt,gt,xt=st.dyn_tree,Bt=st.max_code,kt=st.stat_desc.static_tree,er=st.stat_desc.has_stree,zt=st.stat_desc.extra_bits,Ct=st.stat_desc.extra_base,Kt=st.stat_desc.max_length,ir=0;for(wt=0;wt<=z;wt++)Ke.bl_count[wt]=0;for(xt[2*Ke.heap[Ke.heap_max]+1]=0,St=Ke.heap_max+1;St>=7;Pe>>=1)if(1&je&&Ze.dyn_ltree[2*Se]!==0)return x;if(Ze.dyn_ltree[18]!==0||Ze.dyn_ltree[20]!==0||Ze.dyn_ltree[26]!==0)return g;for(Se=32;Se>>3,($e=fe.static_len+3+7>>>3)<=Pe&&(Pe=$e)):Pe=$e=Fe+5,Fe+4<=Pe&&we!==-1?ie(fe,we,Fe,Ue):fe.strategy===4||$e===Pe?(re(fe,2+(Ue?1:0),3),de(fe,P,R)):(re(fe,4+(Ue?1:0),3),function(Ze,Se,je,Ke){var st;for(re(Ze,Se-257,5),re(Ze,je-1,5),re(Ze,Ke-4,4),st=0;st>>8&255,fe.pending_buf[fe.d_buf+2*fe.last_lit+1]=255&we,fe.pending_buf[fe.l_buf+fe.last_lit]=255&Fe,fe.last_lit++,we===0?fe.dyn_ltree[2*Fe]++:(fe.matches++,we--,fe.dyn_ltree[2*(S[Fe]+k+1)]++,fe.dyn_dtree[2*ne(we)]++),fe.last_lit===fe.lit_bufsize-1},d._tr_align=function(fe){re(fe,2,3),ve(fe,J,P),function(we){we.bi_valid===16?(Q(we,we.bi_buf),we.bi_buf=0,we.bi_valid=0):8<=we.bi_valid&&(we.pending_buf[we.pending++]=255&we.bi_buf,we.bi_buf>>=8,we.bi_valid-=8)}(fe)}},{"../utils/common":41}],53:[function(p,m,d){m.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(p,m,d){(function(v){(function(x,g){if(!x.setImmediate){var w,y,_,k,F=1,O={},N=!1,U=x.document,z=Object.getPrototypeOf&&Object.getPrototypeOf(x);z=z&&z.setTimeout?z:x,w={}.toString.call(x.process)==="[object process]"?function(H){s.nextTick(function(){X(H)})}:function(){if(x.postMessage&&!x.importScripts){var H=!0,I=x.onmessage;return x.onmessage=function(){H=!1},x.postMessage("","*"),x.onmessage=I,H}}()?(k="setImmediate$"+Math.random()+"$",x.addEventListener?x.addEventListener("message",J,!1):x.attachEvent("onmessage",J),function(H){x.postMessage(k+H,"*")}):x.MessageChannel?((_=new MessageChannel).port1.onmessage=function(H){X(H.data)},function(H){_.port2.postMessage(H)}):U&&"onreadystatechange"in U.createElement("script")?(y=U.documentElement,function(H){var I=U.createElement("script");I.onreadystatechange=function(){X(H),I.onreadystatechange=null,y.removeChild(I),I=null},y.appendChild(I)}):function(H){setTimeout(X,0,H)},z.setImmediate=function(H){typeof H!="function"&&(H=new Function(""+H));for(var I=new Array(arguments.length-1),M=0;M"u"?v===void 0?this:v:self)}).call(this,typeof o<"u"?o:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}).call(this)}).call(this,e("_process"),typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],e("timers").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(e,n,i){(function(s){(function(){var o=1/0,h="[object Symbol]",c=/[\\^$.*+?()[\]{}|]/g,a=RegExp(c.source),f=typeof s=="object"&&s&&s.Object===Object&&s,l=typeof self=="object"&&self&&self.Object===Object&&self,u=f||l||Function("return this")(),p=Object.prototype,m=p.toString,d=u.Symbol,v=d?d.prototype:void 0,x=v?v.toString:void 0;function g(F){if(typeof F=="string")return F;if(y(F))return x?x.call(F):"";var O=F+"";return O=="0"&&1/F==-o?"-0":O}function w(F){return!!F&&typeof F=="object"}function y(F){return typeof F=="symbol"||w(F)&&m.call(F)==h}function _(F){return F==null?"":g(F)}function k(F){return F=_(F),F&&a.test(F)?F.replace(c,"\\$&"):F}n.exports=k}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],443:[function(e,n,i){(function(s){(function(){var o=200,h="Expected a function",c="__lodash_hash_undefined__",a=1,f=2,l=1/0,u=9007199254740991,p="[object Arguments]",m="[object Array]",d="[object Boolean]",v="[object Date]",x="[object Error]",g="[object Function]",w="[object GeneratorFunction]",y="[object Map]",_="[object Number]",k="[object Object]",F="[object Promise]",O="[object RegExp]",N="[object Set]",U="[object String]",z="[object Symbol]",W="[object WeakMap]",X="[object ArrayBuffer]",J="[object DataView]",H="[object Float32Array]",I="[object Float64Array]",M="[object Int8Array]",E="[object Int16Array]",A="[object Int32Array]",B="[object Uint8Array]",L="[object Uint8ClampedArray]",P="[object Uint16Array]",R="[object Uint32Array]",C=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,S=/^\w*$/,D=/^\./,V=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,te=/[\\^$.*+?()[\]{}|]/g,oe=/\\(\\)?/g,he=/^\[object .+?Constructor\]$/,Ne=/^(?:0|[1-9]\d*)$/,q={};q[H]=q[I]=q[M]=q[E]=q[A]=q[B]=q[L]=q[P]=q[R]=!0,q[p]=q[m]=q[X]=q[d]=q[J]=q[v]=q[x]=q[g]=q[y]=q[_]=q[k]=q[O]=q[N]=q[U]=q[W]=!1;var ne=typeof s=="object"&&s&&s.Object===Object&&s,Q=typeof self=="object"&&self&&self.Object===Object&&self,re=ne||Q||Function("return this")(),ve=typeof i=="object"&&i&&!i.nodeType&&i,Ce=ve&&typeof n=="object"&&n&&!n.nodeType&&n,ce=Ce&&Ce.exports===ve,se=ce&&ne.process,ee=function(){try{return se&&se.binding("util")}catch{}}(),G=ee&&ee.isTypedArray;function Z(ue,Ie,Ye,ht){for(var Mt=-1,_t=ue?ue.length:0;++Mt<_t;){var Yt=ue[Mt];Ie(ht,Yt,Ye(Yt),ue)}return ht}function de(ue,Ie){for(var Ye=-1,ht=ue?ue.length:0;++Ye-1}function Qe(ue,Ie){var Ye=this.__data__,ht=Yn(Ye,ue);return ht<0?Ye.push([ue,Ie]):Ye[ht][1]=Ie,this}He.prototype.clear=tt,He.prototype.delete=me,He.prototype.get=Me,He.prototype.has=Re,He.prototype.set=Qe;function lt(ue){var Ie=-1,Ye=ue?ue.length:0;for(this.clear();++IeAr))return!1;var en=_t.get(ue);if(en&&_t.get(Ie))return en==Ie;var mn=-1,ln=!0,Nr=Mt&a?new br:void 0;for(_t.set(ue,Ie),_t.set(Ie,ue);++mn-1&&ue%1==0&&ue-1&&ue%1==0&&ue<=u}function Lr(ue){var Ie=typeof ue;return!!ue&&(Ie=="object"||Ie=="function")}function qr(ue){return!!ue&&typeof ue=="object"}function fn(ue){return typeof ue=="symbol"||qr(ue)&&Ke.call(ue)==z}var fi=G?Te(G):ma;function Or(ue){return ue==null?"":$o(ue)}function Wi(ue,Ie,Ye){var ht=ue==null?void 0:Ws(ue,Ie);return ht===void 0?Ye:ht}function _n(ue,Ie){return ue!=null&&io(ue,Ie,Ja)}function $i(ue){return Ir(ue)?Ya(ue):Hi(ue)}function ys(ue){return ue}function is(ue){return mr(ue)?Ae(ze(ue)):ai(ue)}n.exports=yt}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],444:[function(e,n,i){var s="[object Boolean]",o=Object.prototype,h=o.toString;function c(f){return f===!0||f===!1||a(f)&&h.call(f)==s}function a(f){return!!f&&typeof f=="object"}n.exports=c},{}],445:[function(e,n,i){(function(s){(function(){var o=200,h="__lodash_hash_undefined__",c=1,a=2,f=9007199254740991,l="[object Arguments]",u="[object Array]",p="[object AsyncFunction]",m="[object Boolean]",d="[object Date]",v="[object Error]",x="[object Function]",g="[object GeneratorFunction]",w="[object Map]",y="[object Number]",_="[object Null]",k="[object Object]",F="[object Promise]",O="[object Proxy]",N="[object RegExp]",U="[object Set]",z="[object String]",W="[object Symbol]",X="[object Undefined]",J="[object WeakMap]",H="[object ArrayBuffer]",I="[object DataView]",M="[object Float32Array]",E="[object Float64Array]",A="[object Int8Array]",B="[object Int16Array]",L="[object Int32Array]",P="[object Uint8Array]",R="[object Uint8ClampedArray]",C="[object Uint16Array]",S="[object Uint32Array]",D=/[\\^$.*+?()[\]{}|]/g,V=/^\[object .+?Constructor\]$/,te=/^(?:0|[1-9]\d*)$/,oe={};oe[M]=oe[E]=oe[A]=oe[B]=oe[L]=oe[P]=oe[R]=oe[C]=oe[S]=!0,oe[l]=oe[u]=oe[H]=oe[m]=oe[I]=oe[d]=oe[v]=oe[x]=oe[w]=oe[y]=oe[k]=oe[N]=oe[U]=oe[z]=oe[J]=!1;var he=typeof s=="object"&&s&&s.Object===Object&&s,Ne=typeof self=="object"&&self&&self.Object===Object&&self,q=he||Ne||Function("return this")(),ne=typeof i=="object"&&i&&!i.nodeType&&i,Q=ne&&typeof n=="object"&&n&&!n.nodeType&&n,re=Q&&Q.exports===ne,ve=re&&he.process,Ce=function(){try{return ve&&ve.binding&&ve.binding("util")}catch{}}(),ce=Ce&&Ce.isTypedArray;function se(ke,ze){for(var at=-1,yt=ke==null?0:ke.length,$t=0,jt=[];++at-1}function Qe(ke,ze){var at=this.__data__,yt=Yn(at,ke);return yt<0?(++this.size,at.push([ke,ze])):at[yt][1]=ze,this}He.prototype.clear=tt,He.prototype.delete=me,He.prototype.get=Me,He.prototype.has=Re,He.prototype.set=Qe;function lt(ke){var ze=-1,at=ke==null?0:ke.length;for(this.clear();++zeyr))return!1;var or=jt.get(ke);if(or&&jt.get(ze))return or==ze;var on=-1,pn=!0,Lr=at&a?new br:void 0;for(jt.set(ke,ze),jt.set(ze,ke);++on-1&&ke%1==0&&ke-1&&ke%1==0&&ke<=f}function mr(ke){var ze=typeof ke;return ke!=null&&(ze=="object"||ze=="function")}function pr(ke){return ke!=null&&typeof ke=="object"}var so=ce?de(ce):Ja;function Ko(ke){return Go(ke)?Ya(ke):ws(ke)}function ao(){return[]}function oo(){return!1}n.exports=Ei}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],446:[function(e,n,i){(function(s){(function(){var o="[object AsyncFunction]",h="[object Function]",c="[object GeneratorFunction]",a="[object Null]",f="[object Proxy]",l="[object Undefined]",u=typeof s=="object"&&s&&s.Object===Object&&s,p=typeof self=="object"&&self&&self.Object===Object&&self,m=u||p||Function("return this")(),d=Object.prototype,v=d.hasOwnProperty,x=d.toString,g=m.Symbol,w=g?g.toStringTag:void 0;function y(N){return N==null?N===void 0?l:a:w&&w in Object(N)?_(N):k(N)}function _(N){var U=v.call(N,w),z=N[w];try{N[w]=void 0;var W=!0}catch{}var X=x.call(N);return W&&(U?N[w]=z:delete N[w]),X}function k(N){return x.call(N)}function F(N){if(!O(N))return!1;var U=y(N);return U==h||U==c||U==o||U==f}function O(N){var U=typeof N;return N!=null&&(U=="object"||U=="function")}n.exports=F}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],447:[function(e,n,i){function s(o){return o==null}n.exports=s},{}],448:[function(e,n,i){function s(o){return o===void 0}n.exports=s},{}],449:[function(e,n,i){(function(s){(function(){var o=200,h="__lodash_hash_undefined__",c=1/0,a="[object Function]",f="[object GeneratorFunction]",l=/[\\^$.*+?()[\]{}|]/g,u=/^\[object .+?Constructor\]$/,p=typeof s=="object"&&s&&s.Object===Object&&s,m=typeof self=="object"&&self&&self.Object===Object&&self,d=p||m||Function("return this")();function v(Se,je){var Ke=Se?Se.length:0;return!!Ke&&w(Se,je,0)>-1}function x(Se,je,Ke){for(var st=-1,St=Se?Se.length:0;++st-1}function ne(Se,je){var Ke=this.__data__,st=de(Ke,Se);return st<0?Ke.push([Se,je]):Ke[st][1]=je,this}te.prototype.clear=oe,te.prototype.delete=he,te.prototype.get=Ne,te.prototype.has=q,te.prototype.set=ne;function Q(Se){var je=-1,Ke=Se?Se.length:0;for(this.clear();++je=o){var gt=je?null:Te(Se);if(gt)return O(gt);bt=!1,St=_,Dt=new ee}else Dt=je?[]:wt;e:for(;++st56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var d=h.allocUnsafe(16);return d.writeInt32LE(this._a,0),d.writeInt32LE(this._b,4),d.writeInt32LE(this._c,8),d.writeInt32LE(this._d,12),d};function f(d,v){return d<>>32-v}function l(d,v,x,g,w,y,_){return f(d+(v&x|~v&g)+w+y|0,_)+v|0}function u(d,v,x,g,w,y,_){return f(d+(v&g|x&~g)+w+y|0,_)+v|0}function p(d,v,x,g,w,y,_){return f(d+(v^x^g)+w+y|0,_)+v|0}function m(d,v,x,g,w,y,_){return f(d+(x^(v|~g))+w+y|0,_)+v|0}n.exports=a},{"hash-base":425,inherits:440,"safe-buffer":494}],451:[function(e,n,i){var s=e("bn.js"),o=e("brorand");function h(c){this.rand=c||new o.Rand}n.exports=h,h.create=function(a){return new h(a)},h.prototype._randbelow=function(a){var f=a.bitLength(),l=Math.ceil(f/8);do var u=new s(this.rand.generate(l));while(u.cmp(a)>=0);return u},h.prototype._randrange=function(a,f){var l=f.sub(a);return a.add(this._randbelow(l))},h.prototype.test=function(a,f,l){var u=a.bitLength(),p=s.mont(a),m=new s(1).toRed(p);f||(f=Math.max(1,u/48|0));for(var d=a.subn(1),v=0;!d.testn(v);v++);for(var x=a.shrn(v),g=d.toRed(p),w=!0;f>0;f--){var y=this._randrange(new s(2),d);l&&l(y);var _=y.toRed(p).redPow(x);if(!(_.cmp(m)===0||_.cmp(g)===0)){for(var k=1;k0;f--){var g=this._randrange(new s(2),m),w=a.gcd(g);if(w.cmpn(1)!==0)return w;var y=g.toRed(u).redPow(v);if(!(y.cmp(p)===0||y.cmp(x)===0)){for(var _=1;_>8,d=p&255;m?l.push(m,d):l.push(d)}return l}s.toArray=o;function h(a){return a.length===1?"0"+a:a}s.zero2=h;function c(a){for(var f="",l=0;l=6?"utf-8":"binary"}else h="utf-8";n.exports=h}).call(this)}).call(this,e("_process"),typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467}],463:[function(e,n,i){var s=Math.pow(2,30)-1;n.exports=function(o,h){if(typeof o!="number")throw new TypeError("Iterations not a number");if(o<0)throw new TypeError("Bad iterations");if(typeof h!="number")throw new TypeError("Key length not a number");if(h<0||h>s||h!==h)throw new TypeError("Bad key length")}},{}],464:[function(e,n,i){var s=e("create-hash/md5"),o=e("ripemd160"),h=e("sha.js"),c=e("safe-buffer").Buffer,a=e("./precondition"),f=e("./default-encoding"),l=e("./to-buffer"),u=c.alloc(128),p={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function m(x,g,w){var y=d(x),_=x==="sha512"||x==="sha384"?128:64;g.length>_?g=y(g):g.length<_&&(g=c.concat([g,u],_));for(var k=c.allocUnsafe(_+p[x]),F=c.allocUnsafe(_+p[x]),O=0;O<_;O++)k[O]=g[O]^54,F[O]=g[O]^92;var N=c.allocUnsafe(_+w+4);k.copy(N,0,0,_),this.ipad1=N,this.ipad2=k,this.opad=F,this.alg=x,this.blocksize=_,this.hash=y,this.size=p[x]}m.prototype.run=function(x,g){x.copy(g,this.blocksize);var w=this.hash(g);return w.copy(this.opad,this.blocksize),this.hash(this.opad)};function d(x){function g(y){return h(x).update(y).digest()}function w(y){return new o().update(y).digest()}return x==="rmd160"||x==="ripemd160"?w:x==="md5"?s:g}function v(x,g,w,y,_){a(w,y),x=l(x,f,"Password"),g=l(g,f,"Salt"),_=_||"sha1";var k=new m(_,x,g.length),F=c.allocUnsafe(y),O=c.allocUnsafe(g.length+4);g.copy(O,0,0,g.length);for(var N=0,U=p[_],z=Math.ceil(y/U),W=1;W<=z;W++){O.writeUInt32BE(W,g.length);for(var X=k.run(O,k.ipad1),J=X,H=1;H"u"||!s.version||s.version.indexOf("v0.")===0||s.version.indexOf("v1.")===0&&s.version.indexOf("v1.8.")!==0?n.exports={nextTick:o}:n.exports=s;function o(h,c,a,f){if(typeof h!="function")throw new TypeError('"callback" argument must be a function');var l=arguments.length,u,p;switch(l){case 0:case 1:return s.nextTick(h);case 2:return s.nextTick(function(){h.call(null,c)});case 3:return s.nextTick(function(){h.call(null,c,a)});case 4:return s.nextTick(function(){h.call(null,c,a,f)});default:for(u=new Array(l-1),p=0;p1)for(var k=1;kk||new c(g).cmp(_.modulus)>=0)throw new Error("decryption error");var F;w?F=l(new c(g),_):F=a(g,_);var O=u.alloc(k-F.length);if(F=u.concat([O,F],k),y===4)return p(_,F);if(y===1)return m(_,F,w);if(y===3)return F;throw new Error("unknown padding")};function p(v,x){var g=v.modulus.byteLength(),w=f("sha1").update(u.alloc(0)).digest(),y=w.length;if(x[0]!==0)throw new Error("decryption error");var _=x.slice(1,y+1),k=x.slice(y+1),F=h(_,o(k,y)),O=h(k,o(F,g-y-1));if(d(w,O.slice(0,y)))throw new Error("decryption error");for(var N=y;O[N]===0;)N++;if(O[N++]!==1)throw new Error("decryption error");return O.slice(N)}function m(v,x,g){for(var w=x.slice(0,2),y=2,_=0;x[y++]!==0;)if(y>=x.length){_++;break}var k=x.slice(2,y-1);if((w.toString("hex")!=="0002"&&!g||w.toString("hex")!=="0001"&&g)&&_++,k.length<8&&_++,_)throw new Error("decryption error");return x.slice(y)}function d(v,x){v=u.from(v),x=u.from(x);var g=0,w=v.length;v.length!==x.length&&(g++,w=Math.min(v.length,x.length));for(var y=-1;++y=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return y?u(F,k):l(F,k)};function m(x,g){var w=x.modulus.byteLength(),y=g.length,_=h("sha1").update(p.alloc(0)).digest(),k=_.length,F=2*k;if(y>w-F-2)throw new Error("message too long");var O=p.alloc(w-y-F-2),N=w-k-1,U=o(k),z=a(p.concat([_,O,p.alloc(1,1),g],N),c(U,N)),W=a(U,c(z,k));return new f(p.concat([p.alloc(1),W,z],w))}function d(x,g,w){var y=g.length,_=x.modulus.byteLength();if(y>_-11)throw new Error("message too long");var k;return w?k=p.alloc(_-y-3,255):k=v(_-y-3),new f(p.concat([p.from([0,w?1:2]),k,p.alloc(1),g],_))}function v(x){for(var g=p.allocUnsafe(x),w=0,y=o(x*2),_=0,k;wc)throw new RangeError("requested too many random bytes");var d=f.allocUnsafe(p);if(p>0)if(p>h)for(var v=0;vp||w<0)throw new TypeError("offset must be a uint32");if(w>l||w>y)throw new RangeError("offset out of range")}function d(w,y,_){if(typeof w!="number"||w!==w)throw new TypeError("size must be a number");if(w>p||w<0)throw new TypeError("size must be a uint32");if(w+y>_||w>l)throw new RangeError("buffer too small")}u&&u.getRandomValues||!s.browser?(i.randomFill=v,i.randomFillSync=g):(i.randomFill=h,i.randomFillSync=h);function v(w,y,_,k){if(!f.isBuffer(w)&&!(w instanceof o.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof y=="function")k=y,y=0,_=w.length;else if(typeof _=="function")k=_,_=w.length-y;else if(typeof k!="function")throw new TypeError('"cb" argument must be a function');return m(y,w.length),d(_,y,w.length),x(w,y,_,k)}function x(w,y,_,k){if(s.browser){var F=w.buffer,O=new Uint8Array(F,y,_);if(u.getRandomValues(O),k){s.nextTick(function(){k(null,w)});return}return w}if(k){a(_,function(U,z){if(U)return k(U);z.copy(w,y),k(null,w)});return}var N=a(_);return N.copy(w,y),w}function g(w,y,_){if(typeof y>"u"&&(y=0),!f.isBuffer(w)&&!(w instanceof o.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return m(y,w.length),_===void 0&&(_=w.length-y),d(_,y,w.length),x(w,y,_)}}).call(this)}).call(this,e("_process"),typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(e,n,i){function s(u,p){u.prototype=Object.create(p.prototype),u.prototype.constructor=u,u.__proto__=p}var o={};function h(u,p,m){m||(m=Error);function d(x,g,w){return typeof p=="string"?p:p(x,g,w)}var v=function(x){s(g,x);function g(w,y,_){return x.call(this,d(w,y,_))||this}return g}(m);v.prototype.name=m.name,v.prototype.code=u,o[u]=v}function c(u,p){if(Array.isArray(u)){var m=u.length;return u=u.map(function(d){return String(d)}),m>2?"one of ".concat(p," ").concat(u.slice(0,m-1).join(", "),", or ")+u[m-1]:m===2?"one of ".concat(p," ").concat(u[0]," or ").concat(u[1]):"of ".concat(p," ").concat(u[0])}else return"of ".concat(p," ").concat(String(u))}function a(u,p,m){return u.substr(!m||m<0?0:+m,p.length)===p}function f(u,p,m){return(m===void 0||m>u.length)&&(m=u.length),u.substring(m-p.length,m)===p}function l(u,p,m){return typeof m!="number"&&(m=0),m+p.length>u.length?!1:u.indexOf(p,m)!==-1}h("ERR_INVALID_OPT_VALUE",function(u,p){return'The value "'+p+'" is invalid for option "'+u+'"'},TypeError),h("ERR_INVALID_ARG_TYPE",function(u,p,m){var d;typeof p=="string"&&a(p,"not ")?(d="must not be",p=p.replace(/^not /,"")):d="must be";var v;if(f(u," argument"))v="The ".concat(u," ").concat(d," ").concat(c(p,"type"));else{var x=l(u,".")?"property":"argument";v='The "'.concat(u,'" ').concat(x," ").concat(d," ").concat(c(p,"type"))}return v+=". Received type ".concat(typeof m),v},TypeError),h("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),h("ERR_METHOD_NOT_IMPLEMENTED",function(u){return"The "+u+" method is not implemented"}),h("ERR_STREAM_PREMATURE_CLOSE","Premature close"),h("ERR_STREAM_DESTROYED",function(u){return"Cannot call "+u+" after a stream was destroyed"}),h("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),h("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),h("ERR_STREAM_WRITE_AFTER_END","write after end"),h("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),h("ERR_UNKNOWN_ENCODING",function(u){return"Unknown encoding: "+u},TypeError),h("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),n.exports.codes=o},{}],478:[function(e,n,i){(function(s){(function(){var o=Object.keys||function(d){var v=[];for(var x in d)v.push(x);return v};n.exports=u;var h=e("./_stream_readable"),c=e("./_stream_writable");e("inherits")(u,h);for(var a=o(c.prototype),f=0;f0)if(typeof se!="string"&&!de.objectMode&&Object.getPrototypeOf(se)!==f.prototype&&(se=u(se)),G)de.endEmitted?W(ce,new O):E(ce,de,se,!0);else if(de.ended)W(ce,new k);else{if(de.destroyed)return!1;de.reading=!1,de.decoder&&!ee?(se=de.decoder.write(se),de.objectMode||se.length!==0?E(ce,de,se,!1):D(ce,de)):E(ce,de,se,!1)}else G||(de.reading=!1,D(ce,de))}return!de.ended&&(de.length=B?ce=B:(ce--,ce|=ce>>>1,ce|=ce>>>2,ce|=ce>>>4,ce|=ce>>>8,ce|=ce>>>16,ce++),ce}function P(ce,se){return ce<=0||se.length===0&&se.ended?0:se.objectMode?1:ce!==ce?se.flowing&&se.length?se.buffer.head.data.length:se.length:(ce>se.highWaterMark&&(se.highWaterMark=L(ce)),ce<=se.length?ce:se.ended?se.length:(se.needReadable=!0,0))}I.prototype.read=function(ce){d("read",ce),ce=parseInt(ce,10);var se=this._readableState,ee=ce;if(ce!==0&&(se.emittedReadable=!1),ce===0&&se.needReadable&&((se.highWaterMark!==0?se.length>=se.highWaterMark:se.length>0)||se.ended))return d("read: emitReadable",se.length,se.ended),se.length===0&&se.ended?re(this):C(this),null;if(ce=P(ce,se),ce===0&&se.ended)return se.length===0&&re(this),null;var G=se.needReadable;d("need readable",G),(se.length===0||se.length-ce0?Z=Q(ce,se):Z=null,Z===null?(se.needReadable=se.length<=se.highWaterMark,ce=0):(se.length-=ce,se.awaitDrain=0),se.length===0&&(se.ended||(se.needReadable=!0),ee!==ce&&se.ended&&re(this)),Z!==null&&this.emit("data",Z),Z};function R(ce,se){if(d("onEofChunk"),!se.ended){if(se.decoder){var ee=se.decoder.end();ee&&ee.length&&(se.buffer.push(ee),se.length+=se.objectMode?1:ee.length)}se.ended=!0,se.sync?C(ce):(se.needReadable=!1,se.emittedReadable||(se.emittedReadable=!0,S(ce)))}}function C(ce){var se=ce._readableState;d("emitReadable",se.needReadable,se.emittedReadable),se.needReadable=!1,se.emittedReadable||(d("emitReadable",se.flowing),se.emittedReadable=!0,s.nextTick(S,ce))}function S(ce){var se=ce._readableState;d("emitReadable_",se.destroyed,se.length,se.ended),!se.destroyed&&(se.length||se.ended)&&(ce.emit("readable"),se.emittedReadable=!1),se.needReadable=!se.flowing&&!se.ended&&se.length<=se.highWaterMark,ne(ce)}function D(ce,se){se.readingMore||(se.readingMore=!0,s.nextTick(V,ce,se))}function V(ce,se){for(;!se.reading&&!se.ended&&(se.length1&&Ce(G.pipes,ce)!==-1)&&!Oe&&(d("false write response, pause",G.awaitDrain),G.awaitDrain++),ee.pause())}function we($e){d("onerror",$e),Pe(),ce.removeListener("error",we),c(ce,"error")===0&&W(ce,$e)}J(ce,"error",we);function Fe(){ce.removeListener("finish",Ue),Pe()}ce.once("close",Fe);function Ue(){d("onfinish"),ce.removeListener("close",Fe),Pe()}ce.once("finish",Ue);function Pe(){d("unpipe"),ee.unpipe(ce)}return ce.emit("pipe",ee),G.flowing||(d("pipe resume"),ee.resume()),ce};function te(ce){return function(){var ee=ce._readableState;d("pipeOnDrain",ee.awaitDrain),ee.awaitDrain&&ee.awaitDrain--,ee.awaitDrain===0&&c(ce,"data")&&(ee.flowing=!0,ne(ce))}}I.prototype.unpipe=function(ce){var se=this._readableState,ee={hasUnpiped:!1};if(se.pipesCount===0)return this;if(se.pipesCount===1)return ce&&ce!==se.pipes?this:(ce||(ce=se.pipes),se.pipes=null,se.pipesCount=0,se.flowing=!1,ce&&ce.emit("unpipe",this,ee),this);if(!ce){var G=se.pipes,Z=se.pipesCount;se.pipes=null,se.pipesCount=0,se.flowing=!1;for(var de=0;de0,G.flowing!==!1&&this.resume()):ce==="readable"&&!G.endEmitted&&!G.readableListening&&(G.readableListening=G.needReadable=!0,G.flowing=!1,G.emittedReadable=!1,d("on readable",G.length,G.reading),G.length?C(this):G.reading||s.nextTick(he,this)),ee},I.prototype.addListener=I.prototype.on,I.prototype.removeListener=function(ce,se){var ee=a.prototype.removeListener.call(this,ce,se);return ce==="readable"&&s.nextTick(oe,this),ee},I.prototype.removeAllListeners=function(ce){var se=a.prototype.removeAllListeners.apply(this,arguments);return(ce==="readable"||ce===void 0)&&s.nextTick(oe,this),se};function oe(ce){var se=ce._readableState;se.readableListening=ce.listenerCount("readable")>0,se.resumeScheduled&&!se.paused?se.flowing=!0:ce.listenerCount("data")>0&&ce.resume()}function he(ce){d("readable nexttick read 0"),ce.read(0)}I.prototype.resume=function(){var ce=this._readableState;return ce.flowing||(d("resume"),ce.flowing=!ce.readableListening,Ne(this,ce)),ce.paused=!1,this};function Ne(ce,se){se.resumeScheduled||(se.resumeScheduled=!0,s.nextTick(q,ce,se))}function q(ce,se){d("resume",se.reading),se.reading||ce.read(0),se.resumeScheduled=!1,ce.emit("resume"),ne(ce),se.flowing&&!se.reading&&ce.read(0)}I.prototype.pause=function(){return d("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(d("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function ne(ce){var se=ce._readableState;for(d("flow",se.flowing);se.flowing&&ce.read()!==null;);}I.prototype.wrap=function(ce){var se=this,ee=this._readableState,G=!1;ce.on("end",function(){if(d("wrapped end"),ee.decoder&&!ee.ended){var Ae=ee.decoder.end();Ae&&Ae.length&&se.push(Ae)}se.push(null)}),ce.on("data",function(Ae){if(d("wrapped data"),ee.decoder&&(Ae=ee.decoder.write(Ae)),!(ee.objectMode&&Ae==null)&&!(!ee.objectMode&&(!Ae||!Ae.length))){var K=se.push(Ae);K||(G=!0,ce.pause())}});for(var Z in ce)this[Z]===void 0&&typeof ce[Z]=="function"&&(this[Z]=function(K){return function(){return ce[K].apply(ce,arguments)}}(Z));for(var de=0;de=se.length?(se.decoder?ee=se.buffer.join(""):se.buffer.length===1?ee=se.buffer.first():ee=se.buffer.concat(se.length),se.buffer.clear()):ee=se.buffer.consume(ce,se.decoder),ee}function re(ce){var se=ce._readableState;d("endReadable",se.endEmitted),se.endEmitted||(se.ended=!0,s.nextTick(ve,se,ce))}function ve(ce,se){if(d("endReadableNT",ce.endEmitted,ce.length),!ce.endEmitted&&ce.length===0&&(ce.endEmitted=!0,se.readable=!1,se.emit("end"),ce.autoDestroy)){var ee=se._writableState;(!ee||ee.autoDestroy&&ee.finished)&&se.destroy()}}typeof Symbol=="function"&&(I.from=function(ce,se){return z===void 0&&(z=e("./internal/streams/from")),z(I,ce,se)});function Ce(ce,se){for(var ee=0,G=ce.length;ee-1))throw new U(Q);return this._writableState.defaultEncoding=Q,this},Object.defineProperty(H.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E(ne,Q,re){return!ne.objectMode&&ne.decodeStrings!==!1&&typeof Q=="string"&&(Q=l.from(Q,re)),Q}Object.defineProperty(H.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function A(ne,Q,re,ve,Ce,ce){if(!re){var se=E(Q,ve,Ce);ve!==se&&(re=!0,Ce="buffer",ve=se)}var ee=Q.objectMode?1:ve.length;Q.length+=ee;var G=Q.length0?this.tail.next=k:this.head=k,this.tail=k,++this.length}},{key:"unshift",value:function(_){var k={data:_,next:this.head};this.length===0&&(this.tail=k),this.head=k,++this.length}},{key:"shift",value:function(){if(this.length!==0){var _=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,_}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(_){if(this.length===0)return"";for(var k=this.head,F=""+k.data;k=k.next;)F+=_+k.data;return F}},{key:"concat",value:function(_){if(this.length===0)return m.alloc(0);for(var k=m.allocUnsafe(_>>>0),F=this.head,O=0;F;)g(F.data,k,O),O+=F.data.length,F=F.next;return k}},{key:"consume",value:function(_,k){var F;return _N.length?N.length:_;if(U===N.length?O+=N:O+=N.slice(0,_),_-=U,_===0){U===N.length?(++F,k.next?this.head=k.next:this.head=this.tail=null):(this.head=k,k.data=N.slice(U));break}++F}return this.length-=F,O}},{key:"_getBuffer",value:function(_){var k=m.allocUnsafe(_),F=this.head,O=1;for(F.data.copy(k),_-=F.data.length;F=F.next;){var N=F.data,U=_>N.length?N.length:_;if(N.copy(k,k.length-_,0,U),_-=U,_===0){U===N.length?(++O,F.next?this.head=F.next:this.head=this.tail=null):(this.head=F,F.data=N.slice(U));break}++O}return this.length-=O,k}},{key:x,value:function(_,k){return v(this,o(o({},k),{},{depth:0,customInspect:!1}))}}]),w}()},{buffer:220,util:188}],485:[function(e,n,i){(function(s){(function(){function o(u,p){var m=this,d=this._readableState&&this._readableState.destroyed,v=this._writableState&&this._writableState.destroyed;return d||v?(p?p(u):u&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,s.nextTick(f,this,u)):s.nextTick(f,this,u)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(u||null,function(x){!p&&x?m._writableState?m._writableState.errorEmitted?s.nextTick(c,m):(m._writableState.errorEmitted=!0,s.nextTick(h,m,x)):s.nextTick(h,m,x):p?(s.nextTick(c,m),p(x)):s.nextTick(c,m)}),this)}function h(u,p){f(u,p),c(u)}function c(u){u._writableState&&!u._writableState.emitClose||u._readableState&&!u._readableState.emitClose||u.emit("close")}function a(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function f(u,p){u.emit("error",p)}function l(u,p){var m=u._readableState,d=u._writableState;m&&m.autoDestroy||d&&d.autoDestroy?u.destroy(p):u.emit("error",p)}n.exports={destroy:o,undestroy:a,errorOrDestroy:l}}).call(this)}).call(this,e("_process"))},{_process:467}],486:[function(e,n,i){var s=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function o(f){var l=!1;return function(){if(!l){l=!0;for(var u=arguments.length,p=new Array(u),m=0;m0;return u(F,N,U,function(z){_||(_=z),z&&k.forEach(p),!N&&(k.forEach(p),y(_))})});return g.reduce(m)}n.exports=v},{"../../../errors":477,"./end-of-stream":486}],489:[function(e,n,i){var s=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;function o(c,a,f){return c.highWaterMark!=null?c.highWaterMark:a?c[f]:null}function h(c,a,f,l){var u=o(a,l,f);if(u!=null){if(!(isFinite(u)&&Math.floor(u)===u)||u<0){var p=l?f:"highWaterMark";throw new s(p,u)}return Math.floor(u)}return c.objectMode?16:16*1024}n.exports={getHighWaterMark:h}},{"../../../errors":477}],490:[function(e,n,i){n.exports=e("events").EventEmitter},{events:422}],491:[function(e,n,i){i=n.exports=e("./lib/_stream_readable.js"),i.Stream=i,i.Readable=i,i.Writable=e("./lib/_stream_writable.js"),i.Duplex=e("./lib/_stream_duplex.js"),i.Transform=e("./lib/_stream_transform.js"),i.PassThrough=e("./lib/_stream_passthrough.js"),i.finished=e("./lib/internal/streams/end-of-stream.js"),i.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(e,n,i){var s=function(o){var h=Object.prototype,c=h.hasOwnProperty,a=Object.defineProperty||function(R,C,S){R[C]=S.value},f,l=typeof Symbol=="function"?Symbol:{},u=l.iterator||"@@iterator",p=l.asyncIterator||"@@asyncIterator",m=l.toStringTag||"@@toStringTag";function d(R,C,S){return Object.defineProperty(R,C,{value:S,enumerable:!0,configurable:!0,writable:!0}),R[C]}try{d({},"")}catch{d=function(C,S,D){return C[S]=D}}function v(R,C,S,D){var V=C&&C.prototype instanceof F?C:F,te=Object.create(V.prototype),oe=new B(D||[]);return a(te,"_invoke",{value:I(R,S,oe)}),te}o.wrap=v;function x(R,C,S){try{return{type:"normal",arg:R.call(C,S)}}catch(D){return{type:"throw",arg:D}}}var g="suspendedStart",w="suspendedYield",y="executing",_="completed",k={};function F(){}function O(){}function N(){}var U={};d(U,u,function(){return this});var z=Object.getPrototypeOf,W=z&&z(z(L([])));W&&W!==h&&c.call(W,u)&&(U=W);var X=N.prototype=F.prototype=Object.create(U);O.prototype=N,a(X,"constructor",{value:N,configurable:!0}),a(N,"constructor",{value:O,configurable:!0}),O.displayName=d(N,m,"GeneratorFunction");function J(R){["next","throw","return"].forEach(function(C){d(R,C,function(S){return this._invoke(C,S)})})}o.isGeneratorFunction=function(R){var C=typeof R=="function"&&R.constructor;return C?C===O||(C.displayName||C.name)==="GeneratorFunction":!1},o.mark=function(R){return Object.setPrototypeOf?Object.setPrototypeOf(R,N):(R.__proto__=N,d(R,m,"GeneratorFunction")),R.prototype=Object.create(X),R},o.awrap=function(R){return{__await:R}};function H(R,C){function S(te,oe,he,Ne){var q=x(R[te],R,oe);if(q.type==="throw")Ne(q.arg);else{var ne=q.arg,Q=ne.value;return Q&&typeof Q=="object"&&c.call(Q,"__await")?C.resolve(Q.__await).then(function(re){S("next",re,he,Ne)},function(re){S("throw",re,he,Ne)}):C.resolve(Q).then(function(re){ne.value=re,he(ne)},function(re){return S("throw",re,he,Ne)})}}var D;function V(te,oe){function he(){return new C(function(Ne,q){S(te,oe,Ne,q)})}return D=D?D.then(he,he):he()}a(this,"_invoke",{value:V})}J(H.prototype),d(H.prototype,p,function(){return this}),o.AsyncIterator=H,o.async=function(R,C,S,D,V){V===void 0&&(V=Promise);var te=new H(v(R,C,S,D),V);return o.isGeneratorFunction(C)?te:te.next().then(function(oe){return oe.done?oe.value:te.next()})};function I(R,C,S){var D=g;return function(te,oe){if(D===y)throw new Error("Generator is already running");if(D===_){if(te==="throw")throw oe;return P()}for(S.method=te,S.arg=oe;;){var he=S.delegate;if(he){var Ne=M(he,S);if(Ne){if(Ne===k)continue;return Ne}}if(S.method==="next")S.sent=S._sent=S.arg;else if(S.method==="throw"){if(D===g)throw D=_,S.arg;S.dispatchException(S.arg)}else S.method==="return"&&S.abrupt("return",S.arg);D=y;var q=x(R,C,S);if(q.type==="normal"){if(D=S.done?_:w,q.arg===k)continue;return{value:q.arg,done:S.done}}else q.type==="throw"&&(D=_,S.method="throw",S.arg=q.arg)}}}function M(R,C){var S=C.method,D=R.iterator[S];if(D===f)return C.delegate=null,S==="throw"&&R.iterator.return&&(C.method="return",C.arg=f,M(R,C),C.method==="throw")||S!=="return"&&(C.method="throw",C.arg=new TypeError("The iterator does not provide a '"+S+"' method")),k;var V=x(D,R.iterator,C.arg);if(V.type==="throw")return C.method="throw",C.arg=V.arg,C.delegate=null,k;var te=V.arg;if(!te)return C.method="throw",C.arg=new TypeError("iterator result is not an object"),C.delegate=null,k;if(te.done)C[R.resultName]=te.value,C.next=R.nextLoc,C.method!=="return"&&(C.method="next",C.arg=f);else return te;return C.delegate=null,k}J(X),d(X,m,"Generator"),d(X,u,function(){return this}),d(X,"toString",function(){return"[object Generator]"});function E(R){var C={tryLoc:R[0]};1 in R&&(C.catchLoc=R[1]),2 in R&&(C.finallyLoc=R[2],C.afterLoc=R[3]),this.tryEntries.push(C)}function A(R){var C=R.completion||{};C.type="normal",delete C.arg,R.completion=C}function B(R){this.tryEntries=[{tryLoc:"root"}],R.forEach(E,this),this.reset(!0)}o.keys=function(R){var C=Object(R),S=[];for(var D in C)S.push(D);return S.reverse(),function V(){for(;S.length;){var te=S.pop();if(te in C)return V.value=te,V.done=!1,V}return V.done=!0,V}};function L(R){if(R){var C=R[u];if(C)return C.call(R);if(typeof R.next=="function")return R;if(!isNaN(R.length)){var S=-1,D=function V(){for(;++S=0;--D){var V=this.tryEntries[D],te=V.completion;if(V.tryLoc==="root")return S("end");if(V.tryLoc<=this.prev){var oe=c.call(V,"catchLoc"),he=c.call(V,"finallyLoc");if(oe&&he){if(this.prev=0;--S){var D=this.tryEntries[S];if(D.tryLoc<=this.prev&&c.call(D,"finallyLoc")&&this.prev=0;--C){var S=this.tryEntries[C];if(S.finallyLoc===R)return this.complete(S.completion,S.afterLoc),A(S),k}},catch:function(R){for(var C=this.tryEntries.length-1;C>=0;--C){var S=this.tryEntries[C];if(S.tryLoc===R){var D=S.completion;if(D.type==="throw"){var V=D.arg;A(S)}return V}}throw new Error("illegal catch attempt")},delegateYield:function(R,C,S){return this.delegate={iterator:L(R),resultName:C,nextLoc:S},this.method==="next"&&(this.arg=f),k}},o}(typeof n=="object"?n.exports:{});try{regeneratorRuntime=s}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=s:Function("r","regeneratorRuntime = r")(s)}},{}],493:[function(e,n,i){var s=e("buffer").Buffer,o=e("inherits"),h=e("hash-base"),c=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],f=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],l=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],u=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],p=[0,1518500249,1859775393,2400959708,2840853838],m=[1352829926,1548603684,1836072691,2053994217,0];function d(){h.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}o(d,h),d.prototype._update=function(){for(var k=c,F=0;F<16;++F)k[F]=this._block.readInt32LE(F*4);for(var O=this._a|0,N=this._b|0,U=this._c|0,z=this._d|0,W=this._e|0,X=this._a|0,J=this._b|0,H=this._c|0,I=this._d|0,M=this._e|0,E=0;E<80;E+=1){var A,B;E<16?(A=x(O,N,U,z,W,k[a[E]],p[0],l[E]),B=_(X,J,H,I,M,k[f[E]],m[0],u[E])):E<32?(A=g(O,N,U,z,W,k[a[E]],p[1],l[E]),B=y(X,J,H,I,M,k[f[E]],m[1],u[E])):E<48?(A=w(O,N,U,z,W,k[a[E]],p[2],l[E]),B=w(X,J,H,I,M,k[f[E]],m[2],u[E])):E<64?(A=y(O,N,U,z,W,k[a[E]],p[3],l[E]),B=g(X,J,H,I,M,k[f[E]],m[3],u[E])):(A=_(O,N,U,z,W,k[a[E]],p[4],l[E]),B=x(X,J,H,I,M,k[f[E]],m[4],u[E])),O=W,W=z,z=v(U,10),U=N,N=A,X=M,M=I,I=v(H,10),H=J,J=B}var L=this._b+U+I|0;this._b=this._c+z+M|0,this._c=this._d+W+X|0,this._d=this._e+O+J|0,this._e=this._a+N+H|0,this._a=L},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var k=s.alloc?s.alloc(20):new s(20);return k.writeInt32LE(this._a,0),k.writeInt32LE(this._b,4),k.writeInt32LE(this._c,8),k.writeInt32LE(this._d,12),k.writeInt32LE(this._e,16),k};function v(k,F){return k<>>32-F}function x(k,F,O,N,U,z,W,X){return v(k+(F^O^N)+z+W|0,X)+U|0}function g(k,F,O,N,U,z,W,X){return v(k+(F&O|~F&N)+z+W|0,X)+U|0}function w(k,F,O,N,U,z,W,X){return v(k+((F|~O)^N)+z+W|0,X)+U|0}function y(k,F,O,N,U,z,W,X){return v(k+(F&N|O&~N)+z+W|0,X)+U|0}function _(k,F,O,N,U,z,W,X){return v(k+(F^(O|~N))+z+W|0,X)+U|0}n.exports=d},{buffer:220,"hash-base":425,inherits:440}],494:[function(e,n,i){/*! safe-buffer. MIT License. Feross Aboukhadijeh */var s=e("buffer"),o=s.Buffer;function h(a,f){for(var l in a)f[l]=a[l]}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?n.exports=s:(h(s,i),i.Buffer=c);function c(a,f,l){return o(a,f,l)}c.prototype=Object.create(o.prototype),h(o,c),c.from=function(a,f,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return o(a,f,l)},c.alloc=function(a,f,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=o(a);return f!==void 0?typeof l=="string"?u.fill(f,l):u.fill(f):u.fill(0),u},c.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return o(a)},c.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return s.SlowBuffer(a)}},{buffer:220}],495:[function(e,n,i){(function(s){(function(){var o=e("buffer"),h=o.Buffer,c={},a;for(a in o)o.hasOwnProperty(a)&&(a==="SlowBuffer"||a==="Buffer"||(c[a]=o[a]));var f=c.Buffer={};for(a in h)h.hasOwnProperty(a)&&(a==="allocUnsafe"||a==="allocUnsafeSlow"||(f[a]=h[a]));if(c.Buffer.prototype=h.prototype,(!f.from||f.from===Uint8Array.from)&&(f.from=function(l,u,p){if(typeof l=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof l);if(l&&typeof l.length>"u")throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l);return h(l,u,p)}),f.alloc||(f.alloc=function(l,u,p){if(typeof l!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof l);if(l<0||l>=2*(1<<30))throw new RangeError('The value "'+l+'" is invalid for option "size"');var m=h(l);return!u||u.length===0?m.fill(0):typeof p=="string"?m.fill(u,p):m.fill(u),m}),!c.kStringMaxLength)try{c.kStringMaxLength=s.binding("buffer").kStringMaxLength}catch{}c.constants||(c.constants={MAX_LENGTH:c.kMaxLength},c.kStringMaxLength&&(c.constants.MAX_STRING_LENGTH=c.kStringMaxLength)),n.exports=c}).call(this)}).call(this,e("_process"))},{_process:467,buffer:220}],496:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0});const s=e("xmlchars/xml/1.0/ed5"),o=e("xmlchars/xml/1.1/ed2"),h=e("xmlchars/xmlns/1.0/ed3");var c=s.isS,a=s.isChar,f=s.isNameStartChar,l=s.isNameChar,u=s.S_LIST,p=s.NAME_RE,m=o.isChar,d=h.isNCNameStartChar,v=h.isNCNameChar,x=h.NC_NAME_RE;const g="http://www.w3.org/XML/1998/namespace",w="http://www.w3.org/2000/xmlns/",y={__proto__:null,xml:g,xmlns:w},_={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},k=-1,F=-2,O=0,N=1,U=2,z=3,W=4,X=5,J=6,H=7,I=8,M=9,E=10,A=11,B=12,L=13,P=14,R=15,C=16,S=17,D=18,V=19,te=20,oe=21,he=22,Ne=23,q=24,ne=25,Q=26,re=27,ve=28,Ce=29,ce=30,se=31,ee=32,G=33,Z=34,de=35,Ae=36,K=37,Te=38,Oe=39,ie=40,fe=41,we=42,Fe=43,Ue=44,Pe=9,$e=10,rt=13,Ze=32,Se=33,je=34,Ke=38,st=39,St=45,At=47,bt=59,wt=60,Dt=61,gt=62,xt=63,Bt=91,kt=93,er=133,zt=8232,Ct=tt=>tt===je||tt===st,Kt=[je,st],ir=[...Kt,Bt,gt],Nt=[...Kt,wt,kt],le=[Dt,xt,...u],Ee=[...u,gt,Ke,wt];function pe(tt,me,Me){switch(me){case"xml":Me!==g&&tt.fail(`xml prefix must be bound to ${g}.`);break;case"xmlns":Me!==w&&tt.fail(`xmlns prefix must be bound to ${w}.`);break}switch(Me){case w:tt.fail(me===""?`the default namespace may not be set to ${Me}.`:`may not assign a prefix (even "xmlns") to the URI ${w}.`);break;case g:switch(me){case"xml":break;case"":tt.fail(`the default namespace may not be set to ${Me}.`);break;default:tt.fail("may not assign the xml namespace to another prefix.")}break}}function xe(tt,me){for(const Me of Object.keys(me))pe(tt,Me,me[Me])}const ye=tt=>x.test(tt),_e=tt=>p.test(tt),We=0,Je=1,Le=2;i.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const Ve={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class He{constructor(me){this.opt=me??{},this.fragmentOpt=!!this.opt.fragment;const Me=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,Me){this.nameStartCheck=d,this.nameCheck=v,this.isName=ye,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},y);const Re=this.opt.additionalNamespaces;Re!=null&&(xe(this,Re),Object.assign(this.ns,Re))}else this.nameStartCheck=f,this.nameCheck=l,this.isName=_e,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var me;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=We,this.attribList=[];const{fragmentOpt:Me}=this;this.state=Me?L:O,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=Me,this.xmlDeclPossible=!Me,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:Re}=this.opt;if(Re===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");Re="1.0"}this.setXMLVersion(Re),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(_),(me=this.readyHandler)===null||me===void 0||me.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(me,Me){this[Ve[me]]=Me}off(me){this[Ve[me]]=void 0}makeError(me){var Me;let Re=(Me=this.fileName)!==null&&Me!==void 0?Me:"";return this.trackPosition&&(Re.length>0&&(Re+=":"),Re+=`${this.line}:${this.column}`),Re.length>0&&(Re+=": "),new Error(Re+me)}fail(me){const Me=this.makeError(me),Re=this.errorHandler;if(Re===void 0)throw Me;return Re(Me),this}write(me){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let Me=!1;me===null?(Me=!0,me=""):typeof me=="object"&&(me=me.toString()),this.carriedFromPrevious!==void 0&&(me=`${this.carriedFromPrevious}${me}`,this.carriedFromPrevious=void 0);let Re=me.length;const Qe=me.charCodeAt(Re-1);!Me&&(Qe===rt||Qe>=55296&&Qe<=56319)&&(this.carriedFromPrevious=me[Re-1],Re--,me=me.slice(0,Re));const{stateTable:lt}=this;for(this.chunk=me,this.i=0;this.i=me.length)return k;const Re=me.charCodeAt(Me);if(this.column++,Re<55296){if(Re>=Ze||Re===Pe)return Re;switch(Re){case $e:return this.line++,this.column=0,this.positionAtNewLine=this.position,$e;case rt:return me.charCodeAt(Me+1)===$e&&(this.i=Me+2),this.line++,this.column=0,this.positionAtNewLine=this.position,F;default:return this.fail("disallowed character."),Re}}if(Re>56319)return Re>=57344&&Re<=65533||this.fail("disallowed character."),Re;const Qe=65536+(Re-55296)*1024+(me.charCodeAt(Me+1)-56320);return this.i=Me+2,Qe>1114111&&this.fail("disallowed character."),Qe}getCode11(){const{chunk:me,i:Me}=this;if(this.prevI=Me,this.i=Me+1,Me>=me.length)return k;const Re=me.charCodeAt(Me);if(this.column++,Re<55296){if(Re>31&&Re<127||Re>159&&Re!==zt||Re===Pe)return Re;switch(Re){case $e:return this.line++,this.column=0,this.positionAtNewLine=this.position,$e;case rt:{const lt=me.charCodeAt(Me+1);(lt===$e||lt===er)&&(this.i=Me+2)}case er:case zt:return this.line++,this.column=0,this.positionAtNewLine=this.position,F;default:return this.fail("disallowed character."),Re}}if(Re>56319)return Re>=57344&&Re<=65533||this.fail("disallowed character."),Re;const Qe=65536+(Re-55296)*1024+(me.charCodeAt(Me+1)-56320);return this.i=Me+2,Qe>1114111&&this.fail("disallowed character."),Qe}getCodeNorm(){const me=this.getCode();return me===F?$e:me}unget(){this.i=this.prevI,this.column--}captureTo(me){let{i:Me}=this;const{chunk:Re}=this;for(;;){const Qe=this.getCode(),lt=Qe===F,Et=lt?$e:Qe;if(Et===k||me.includes(Et))return this.text+=Re.slice(Me,this.prevI),Et;lt&&(this.text+=`${Re.slice(Me,this.prevI)} +`,Me=this.i)}}captureToChar(me){let{i:Me}=this;const{chunk:Re}=this;for(;;){let Qe=this.getCode();switch(Qe){case F:this.text+=`${Re.slice(Me,this.prevI)} +`,Me=this.i,Qe=$e;break;case k:return this.text+=Re.slice(Me),!1}if(Qe===me)return this.text+=Re.slice(Me,this.prevI),!0}}captureNameChars(){const{chunk:me,i:Me}=this;for(;;){const Re=this.getCode();if(Re===k)return this.name+=me.slice(Me),k;if(!l(Re))return this.name+=me.slice(Me,this.prevI),Re===F?$e:Re}}skipSpaces(){for(;;){const me=this.getCodeNorm();if(me===k||!c(me))return me}}setXMLVersion(me){this.currentXMLVersion=me,me==="1.0"?(this.isChar=a,this.getCode=this.getCode10):(this.isChar=m,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=N}sBeginWhitespace(){const me=this.i,Me=this.skipSpaces();switch(this.prevI!==me&&(this.xmlDeclPossible=!1),Me){case wt:if(this.state=R,this.text.length!==0)throw new Error("no-empty text at start");break;case k:break;default:this.unget(),this.state=L,this.xmlDeclPossible=!1}}sDoctype(){var me;const Me=this.captureTo(ir);switch(Me){case gt:{(me=this.doctypeHandler)===null||me===void 0||me.call(this,this.text),this.text="",this.state=L,this.doctype=!0;break}case k:break;default:this.text+=String.fromCodePoint(Me),Me===Bt?this.state=W:Ct(Me)&&(this.state=z,this.q=Me)}}sDoctypeQuote(){const me=this.q;this.captureToChar(me)&&(this.text+=String.fromCodePoint(me),this.q=null,this.state=U)}sDTD(){const me=this.captureTo(Nt);me!==k&&(this.text+=String.fromCodePoint(me),me===kt?this.state=U:me===wt?this.state=J:Ct(me)&&(this.state=X,this.q=me))}sDTDQuoted(){const me=this.q;this.captureToChar(me)&&(this.text+=String.fromCodePoint(me),this.state=W,this.q=null)}sDTDOpenWaka(){const me=this.getCodeNorm();switch(this.text+=String.fromCodePoint(me),me){case Se:this.state=H,this.openWakaBang="";break;case xt:this.state=A;break;default:this.state=W}}sDTDOpenWakaBang(){const me=String.fromCodePoint(this.getCodeNorm()),Me=this.openWakaBang+=me;this.text+=me,Me!=="-"&&(this.state=Me==="--"?I:W,this.openWakaBang="")}sDTDComment(){this.captureToChar(St)&&(this.text+="-",this.state=M)}sDTDCommentEnding(){const me=this.getCodeNorm();this.text+=String.fromCodePoint(me),this.state=me===St?E:I}sDTDCommentEnded(){const me=this.getCodeNorm();this.text+=String.fromCodePoint(me),me===gt?this.state=W:(this.fail("malformed comment."),this.state=I)}sDTDPI(){this.captureToChar(xt)&&(this.text+="?",this.state=B)}sDTDPIEnding(){const me=this.getCodeNorm();this.text+=String.fromCodePoint(me),me===gt&&(this.state=W)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:me}=this;const{chunk:Me}=this;e:for(;;)switch(this.getCode()){case F:this.entity+=`${Me.slice(me,this.prevI)} +`,me=this.i;break;case bt:{const{entityReturnState:Re}=this,Qe=this.entity+Me.slice(me,this.prevI);this.state=Re;let lt;Qe===""?(this.fail("empty entity name."),lt="&;"):(lt=this.parseEntity(Qe),this.entity=""),(Re!==L||this.textHandler!==void 0)&&(this.text+=lt);break e}case k:this.entity+=Me.slice(me);break e}}sOpenWaka(){const me=this.getCode();if(f(me))this.state=Z,this.unget(),this.xmlDeclPossible=!1;else switch(me){case At:this.state=Fe,this.xmlDeclPossible=!1;break;case Se:this.state=C,this.openWakaBang="",this.xmlDeclPossible=!1;break;case xt:this.state=Ne;break;default:this.fail("disallowed character in tag name"),this.state=L,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=te,this.openWakaBang="";break;case"--":this.state=S,this.openWakaBang="";break;case"DOCTYPE":this.state=U,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(St)&&(this.state=D)}sCommentEnding(){var me;const Me=this.getCodeNorm();Me===St?(this.state=V,(me=this.commentHandler)===null||me===void 0||me.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(Me)}`,this.state=S)}sCommentEnded(){const me=this.getCodeNorm();me!==gt?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(me)}`,this.state=S):this.state=L}sCData(){this.captureToChar(kt)&&(this.state=oe)}sCDataEnding(){const me=this.getCodeNorm();me===kt?this.state=he:(this.text+=`]${String.fromCodePoint(me)}`,this.state=te)}sCDataEnding2(){var me;const Me=this.getCodeNorm();switch(Me){case gt:{(me=this.cdataHandler)===null||me===void 0||me.call(this,this.text),this.text="",this.state=L;break}case kt:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(Me)}`,this.state=te}}sPIFirstChar(){const me=this.getCodeNorm();this.nameStartCheck(me)?(this.piTarget+=String.fromCodePoint(me),this.state=q):me===xt||c(me)?(this.fail("processing instruction without a target."),this.state=me===xt?Q:ne):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(me),this.state=q)}sPIRest(){const{chunk:me,i:Me}=this;for(;;){const Re=this.getCodeNorm();if(Re===k){this.piTarget+=me.slice(Me);return}if(!this.nameCheck(Re)){this.piTarget+=me.slice(Me,this.prevI);const Qe=Re===xt;Qe||c(Re)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=Qe?G:re):this.state=Qe?Q:ne:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(Re));break}}}sPIBody(){if(this.text.length===0){const me=this.getCodeNorm();me===xt?this.state=Q:c(me)||(this.text=String.fromCodePoint(me))}else this.captureToChar(xt)&&(this.state=Q)}sPIEnding(){var me;const Me=this.getCodeNorm();if(Me===gt){const{piTarget:Re}=this;Re.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(me=this.piHandler)===null||me===void 0||me.call(this,{target:Re,body:this.text}),this.piTarget=this.text="",this.state=L}else Me===xt?this.text+="?":(this.text+=`?${String.fromCodePoint(Me)}`,this.state=ne);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const me=this.skipSpaces();if(me===xt){this.state=G;return}me!==k&&(this.state=ve,this.name=String.fromCodePoint(me))}sXMLDeclName(){const me=this.captureTo(le);if(me===xt){this.state=G,this.name+=this.text,this.text="",this.fail("XML declaration is incomplete.");return}if(c(me)||me===Dt){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=me===Dt?ce:Ce}}sXMLDeclEq(){const me=this.getCodeNorm();if(me===xt){this.state=G,this.fail("XML declaration is incomplete.");return}c(me)||(me!==Dt&&this.fail("value required."),this.state=ce)}sXMLDeclValueStart(){const me=this.getCodeNorm();if(me===xt){this.state=G,this.fail("XML declaration is incomplete.");return}c(me)||(Ct(me)?this.q=me:(this.fail("value must be quoted."),this.q=Ze),this.state=se)}sXMLDeclValue(){const me=this.captureTo([this.q,xt]);if(me===xt){this.state=G,this.text="",this.fail("XML declaration is incomplete.");return}if(me===k)return;const Me=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const Re=Me;this.xmlDecl.version=Re,/^1\.[0-9]+$/.test(Re)?this.opt.forceXMLVersion||this.setXMLVersion(Re):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(Me)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=Me;break;case"standalone":Me!=="yes"&&Me!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=Me;break}this.name="",this.state=ee}sXMLDeclSeparator(){const me=this.getCodeNorm();if(me===xt){this.state=G;return}c(me)||(this.fail("whitespace required."),this.unget()),this.state=re}sXMLDeclEnding(){var me;this.getCodeNorm()===gt?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(me=this.xmldeclHandler)===null||me===void 0||me.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=L):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var me;const Me=this.captureNameChars();if(Me===k)return;const Re=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=Re.ns=Object.create(null)),(me=this.openTagStartHandler)===null||me===void 0||me.call(this,Re),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),Me){case gt:this.openTag();break;case At:this.state=de;break;default:c(Me)||this.fail("disallowed character in tag name."),this.state=Ae}}sOpenTagSlash(){this.getCode()===gt?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=Ae)}sAttrib(){const me=this.skipSpaces();me!==k&&(f(me)?(this.unget(),this.state=K):me===gt?this.openTag():me===At?this.state=de:this.fail("disallowed character in attribute name."))}sAttribName(){const me=this.captureNameChars();me===Dt?this.state=Oe:c(me)?this.state=Te:me===gt?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):me!==k&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const me=this.skipSpaces();switch(me){case k:return;case Dt:this.state=Oe;break;default:this.fail("attribute without value."),this.text="",this.name="",me===gt?this.openTag():f(me)?(this.unget(),this.state=K):(this.fail("disallowed character in attribute name."),this.state=Ae)}}sAttribValue(){const me=this.getCodeNorm();Ct(me)?(this.q=me,this.state=ie):c(me)||(this.fail("unquoted attribute value."),this.state=we,this.unget())}sAttribValueQuoted(){const{q:me,chunk:Me}=this;let{i:Re}=this;for(;;)switch(this.getCode()){case me:this.pushAttrib(this.name,this.text+Me.slice(Re,this.prevI)),this.name=this.text="",this.q=null,this.state=fe;return;case Ke:this.text+=Me.slice(Re,this.prevI),this.state=P,this.entityReturnState=ie;return;case $e:case F:case Pe:this.text+=`${Me.slice(Re,this.prevI)} `,Re=this.i;break;case wt:this.text+=Me.slice(Re,this.prevI),this.fail("disallowed character.");return;case k:this.text+=Me.slice(Re);return}}sAttribValueClosed(){const me=this.getCodeNorm();c(me)?this.state=Ae:me===gt?this.openTag():me===At?this.state=de:f(me)?(this.fail("no whitespace between attributes."),this.unget(),this.state=K):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const me=this.captureTo(Ee);switch(me){case Ke:this.state=P,this.entityReturnState=we;break;case wt:this.fail("disallowed character.");break;case k:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",me===gt?this.openTag():this.state=Ae}}sCloseTag(){const me=this.captureNameChars();me===gt?this.closeTag():c(me)?this.state=Ue:me!==k&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case gt:this.closeTag();break;case k:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:me,forbiddenState:Me}=this;const{chunk:Re,textHandler:Qe}=this;e:for(;;)switch(this.getCode()){case wt:{if(this.state=R,Qe!==void 0){const{text:lt}=this,Et=Re.slice(me,this.prevI);lt.length!==0?(Qe(lt+Et),this.text=""):Et.length!==0&&Qe(Et)}Me=We;break e}case Ke:this.state=P,this.entityReturnState=L,Qe!==void 0&&(this.text+=Re.slice(me,this.prevI)),Me=We;break e;case kt:switch(Me){case We:Me=Je;break;case Je:Me=Le;break;case Le:break;default:throw new Error("impossible state")}break;case gt:Me===Le&&this.fail('the string "]]>" is disallowed in char data.'),Me=We;break;case F:Qe!==void 0&&(this.text+=`${Re.slice(me,this.prevI)} +`),me=this.i,Me=We;break;case k:Qe!==void 0&&(this.text+=Re.slice(me));break e;default:Me=We}this.forbiddenState=Me}handleTextOutsideRoot(){let{i:me}=this;const{chunk:Me,textHandler:Re}=this;let Qe=!1;e:for(;;){const lt=this.getCode();switch(lt){case wt:{if(this.state=R,Re!==void 0){const{text:Et}=this,Ot=Me.slice(me,this.prevI);Et.length!==0?(Re(Et+Ot),this.text=""):Ot.length!==0&&Re(Ot)}break e}case Ke:this.state=P,this.entityReturnState=L,Re!==void 0&&(this.text+=Me.slice(me,this.prevI)),Qe=!0;break e;case F:Re!==void 0&&(this.text+=`${Me.slice(me,this.prevI)} +`),me=this.i;break;case k:Re!==void 0&&(this.text+=Me.slice(me));break e;default:c(lt)||(Qe=!0)}}Qe&&(!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(me,Me){var Re;const{prefix:Qe,local:lt}=this.qname(me),Et={name:me,prefix:Qe,local:lt,value:Me};if(this.attribList.push(Et),(Re=this.attributeHandler)===null||Re===void 0||Re.call(this,Et),Qe==="xmlns"){const Ot=Me.trim();this.currentXMLVersion==="1.0"&&Ot===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[lt]=Ot,pe(this,lt,Ot)}else if(me==="xmlns"){const Ot=Me.trim();this.topNS[""]=Ot,pe(this,"",Ot)}}pushAttribPlain(me,Me){var Re;const Qe={name:me,value:Me};this.attribList.push(Qe),(Re=this.attributeHandler)===null||Re===void 0||Re.call(this,Qe)}end(){var me,Me;this.sawRoot||this.fail("document must contain a root element.");const{tags:Re}=this;for(;Re.length>0;){const lt=Re.pop();this.fail(`unclosed tag: ${lt.name}`)}this.state!==O&&this.state!==L&&this.fail("unexpected end.");const{text:Qe}=this;return Qe.length!==0&&((me=this.textHandler)===null||me===void 0||me.call(this,Qe),this.text=""),this._closed=!0,(Me=this.endHandler)===null||Me===void 0||Me.call(this),this._init(),this}resolve(me){var Me,Re;let Qe=this.topNS[me];if(Qe!==void 0)return Qe;const{tags:lt}=this;for(let Et=lt.length-1;Et>=0;Et--)if(Qe=lt[Et].ns[me],Qe!==void 0)return Qe;return Qe=this.ns[me],Qe!==void 0?Qe:(Re=(Me=this.opt).resolvePrefix)===null||Re===void 0?void 0:Re.call(Me,me)}qname(me){const Me=me.indexOf(":");if(Me===-1)return{prefix:"",local:me};const Re=me.slice(Me+1),Qe=me.slice(0,Me);return(Qe===""||Re===""||Re.includes(":"))&&this.fail(`malformed name: ${me}.`),{prefix:Qe,local:Re}}processAttribsNS(){var me;const{attribList:Me}=this,Re=this.tag;{const{prefix:Et,local:Ot}=this.qname(Re.name);Re.prefix=Et,Re.local=Ot;const sr=Re.uri=(me=this.resolve(Et))!==null&&me!==void 0?me:"";Et!==""&&(Et==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),sr===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(Et)}.`),Re.uri=Et))}if(Me.length===0)return;const{attributes:Qe}=Re,lt=new Set;for(const Et of Me){const{name:Ot,prefix:sr,local:Wr}=Et;let Rr,br;sr===""?(Rr=Ot==="xmlns"?w:"",br=Ot):(Rr=this.resolve(sr),Rr===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(sr)}.`),Rr=sr),br=`{${Rr}}${Wr}`),lt.has(br)&&this.fail(`duplicate attribute: ${br}.`),lt.add(br),Et.uri=Rr,Qe[Ot]=Et}this.attribList=[]}processAttribsPlain(){const{attribList:me}=this,Me=this.tag.attributes;for(const{name:Re,value:Qe}of me)Me[Re]!==void 0&&this.fail(`duplicate attribute: ${Re}.`),Me[Re]=Qe;this.attribList=[]}openTag(){var me;this.processAttribs();const{tags:Me}=this,Re=this.tag;Re.isSelfClosing=!1,(me=this.openTagHandler)===null||me===void 0||me.call(this,Re),Me.push(Re),this.state=L,this.name=""}openSelfClosingTag(){var me,Me,Re;this.processAttribs();const{tags:Qe}=this,lt=this.tag;lt.isSelfClosing=!0,(me=this.openTagHandler)===null||me===void 0||me.call(this,lt),(Me=this.closeTagHandler)===null||Me===void 0||Me.call(this,lt),(this.tag=(Re=Qe[Qe.length-1])!==null&&Re!==void 0?Re:null)===null&&(this.closedRoot=!0),this.state=L,this.name=""}closeTag(){const{tags:me,name:Me}=this;if(this.state=L,this.name="",Me===""){this.fail("weird empty close tag."),this.text+="";return}const Re=this.closeTagHandler;let Qe=me.length;for(;Qe-- >0;){const lt=this.tag=me.pop();if(this.topNS=lt.ns,Re==null||Re(lt),lt.name===Me)break;this.fail("unexpected close tag.")}Qe===0?this.closedRoot=!0:Qe<0&&(this.fail(`unmatched closing tag: ${Me}.`),this.text+=``)}parseEntity(me){if(me[0]!=="#"){const Re=this.ENTITIES[me];return Re!==void 0?Re:(this.fail(this.isName(me)?"undefined entity.":"disallowed character in entity name."),`&${me};`)}let Me=NaN;return me[1]==="x"&&/^#x[0-9a-f]+$/i.test(me)?Me=parseInt(me.slice(2),16):/^#[0-9]+$/.test(me)&&(Me=parseInt(me.slice(1),10)),this.isChar(Me)?String.fromCodePoint(Me):(this.fail("malformed character entity."),`&${me};`)}}i.SaxesParser=He},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(e,n,i){var s=e("safe-buffer").Buffer;function o(h,c){this._block=s.alloc(h),this._finalSize=c,this._blockSize=h,this._len=0}o.prototype.update=function(h,c){typeof h=="string"&&(c=c||"utf8",h=s.from(h,c));for(var a=this._block,f=this._blockSize,l=h.length,u=this._len,p=0;p=this._finalSize&&(this._update(this._block),this._block.fill(0));var a=this._len*8;if(a<=4294967295)this._block.writeUInt32BE(a,this._blockSize-4);else{var f=(a&4294967295)>>>0,l=(a-f)/4294967296;this._block.writeUInt32BE(l,this._blockSize-8),this._block.writeUInt32BE(f,this._blockSize-4)}this._update(this._block);var u=this._hash();return h?u.toString(h):u},o.prototype._update=function(){throw new Error("_update must be implemented by subclass")},n.exports=o},{"safe-buffer":494}],498:[function(e,n,i){var s=n.exports=function(h){h=h.toLowerCase();var c=s[h];if(!c)throw new Error(h+" is not supported (we accept pull requests)");return new c};s.sha=e("./sha"),s.sha1=e("./sha1"),s.sha224=e("./sha224"),s.sha256=e("./sha256"),s.sha384=e("./sha384"),s.sha512=e("./sha512")},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(e,n,i){var s=e("inherits"),o=e("./hash"),h=e("safe-buffer").Buffer,c=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function f(){this.init(),this._w=a,o.call(this,64,56)}s(f,o),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function l(m){return m<<5|m>>>27}function u(m){return m<<30|m>>>2}function p(m,d,v,x){return m===0?d&v|~d&x:m===2?d&v|d&x|v&x:d^v^x}f.prototype._update=function(m){for(var d=this._w,v=this._a|0,x=this._b|0,g=this._c|0,w=this._d|0,y=this._e|0,_=0;_<16;++_)d[_]=m.readInt32BE(_*4);for(;_<80;++_)d[_]=d[_-3]^d[_-8]^d[_-14]^d[_-16];for(var k=0;k<80;++k){var F=~~(k/20),O=l(v)+p(F,x,g,w)+y+d[k]+c[F]|0;y=w,w=g,g=u(x),x=v,v=O}this._a=v+this._a|0,this._b=x+this._b|0,this._c=g+this._c|0,this._d=w+this._d|0,this._e=y+this._e|0},f.prototype._hash=function(){var m=h.allocUnsafe(20);return m.writeInt32BE(this._a|0,0),m.writeInt32BE(this._b|0,4),m.writeInt32BE(this._c|0,8),m.writeInt32BE(this._d|0,12),m.writeInt32BE(this._e|0,16),m},n.exports=f},{"./hash":497,inherits:440,"safe-buffer":494}],500:[function(e,n,i){var s=e("inherits"),o=e("./hash"),h=e("safe-buffer").Buffer,c=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function f(){this.init(),this._w=a,o.call(this,64,56)}s(f,o),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function l(d){return d<<1|d>>>31}function u(d){return d<<5|d>>>27}function p(d){return d<<30|d>>>2}function m(d,v,x,g){return d===0?v&x|~v&g:d===2?v&x|v&g|x&g:v^x^g}f.prototype._update=function(d){for(var v=this._w,x=this._a|0,g=this._b|0,w=this._c|0,y=this._d|0,_=this._e|0,k=0;k<16;++k)v[k]=d.readInt32BE(k*4);for(;k<80;++k)v[k]=l(v[k-3]^v[k-8]^v[k-14]^v[k-16]);for(var F=0;F<80;++F){var O=~~(F/20),N=u(x)+m(O,g,w,y)+_+v[F]+c[O]|0;_=y,y=w,w=p(g),g=x,x=N}this._a=x+this._a|0,this._b=g+this._b|0,this._c=w+this._c|0,this._d=y+this._d|0,this._e=_+this._e|0},f.prototype._hash=function(){var d=h.allocUnsafe(20);return d.writeInt32BE(this._a|0,0),d.writeInt32BE(this._b|0,4),d.writeInt32BE(this._c|0,8),d.writeInt32BE(this._d|0,12),d.writeInt32BE(this._e|0,16),d},n.exports=f},{"./hash":497,inherits:440,"safe-buffer":494}],501:[function(e,n,i){var s=e("inherits"),o=e("./sha256"),h=e("./hash"),c=e("safe-buffer").Buffer,a=new Array(64);function f(){this.init(),this._w=a,h.call(this,64,56)}s(f,o),f.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},f.prototype._hash=function(){var l=c.allocUnsafe(28);return l.writeInt32BE(this._a,0),l.writeInt32BE(this._b,4),l.writeInt32BE(this._c,8),l.writeInt32BE(this._d,12),l.writeInt32BE(this._e,16),l.writeInt32BE(this._f,20),l.writeInt32BE(this._g,24),l},n.exports=f},{"./hash":497,"./sha256":502,inherits:440,"safe-buffer":494}],502:[function(e,n,i){var s=e("inherits"),o=e("./hash"),h=e("safe-buffer").Buffer,c=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function f(){this.init(),this._w=a,o.call(this,64,56)}s(f,o),f.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function l(x,g,w){return w^x&(g^w)}function u(x,g,w){return x&g|w&(x|g)}function p(x){return(x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10)}function m(x){return(x>>>6|x<<26)^(x>>>11|x<<21)^(x>>>25|x<<7)}function d(x){return(x>>>7|x<<25)^(x>>>18|x<<14)^x>>>3}function v(x){return(x>>>17|x<<15)^(x>>>19|x<<13)^x>>>10}f.prototype._update=function(x){for(var g=this._w,w=this._a|0,y=this._b|0,_=this._c|0,k=this._d|0,F=this._e|0,O=this._f|0,N=this._g|0,U=this._h|0,z=0;z<16;++z)g[z]=x.readInt32BE(z*4);for(;z<64;++z)g[z]=v(g[z-2])+g[z-7]+d(g[z-15])+g[z-16]|0;for(var W=0;W<64;++W){var X=U+m(F)+l(F,O,N)+c[W]+g[W]|0,J=p(w)+u(w,y,_)|0;U=N,N=O,O=F,F=k+X|0,k=_,_=y,y=w,w=X+J|0}this._a=w+this._a|0,this._b=y+this._b|0,this._c=_+this._c|0,this._d=k+this._d|0,this._e=F+this._e|0,this._f=O+this._f|0,this._g=N+this._g|0,this._h=U+this._h|0},f.prototype._hash=function(){var x=h.allocUnsafe(32);return x.writeInt32BE(this._a,0),x.writeInt32BE(this._b,4),x.writeInt32BE(this._c,8),x.writeInt32BE(this._d,12),x.writeInt32BE(this._e,16),x.writeInt32BE(this._f,20),x.writeInt32BE(this._g,24),x.writeInt32BE(this._h,28),x},n.exports=f},{"./hash":497,inherits:440,"safe-buffer":494}],503:[function(e,n,i){var s=e("inherits"),o=e("./sha512"),h=e("./hash"),c=e("safe-buffer").Buffer,a=new Array(160);function f(){this.init(),this._w=a,h.call(this,128,112)}s(f,o),f.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},f.prototype._hash=function(){var l=c.allocUnsafe(48);function u(p,m,d){l.writeInt32BE(p,d),l.writeInt32BE(m,d+4)}return u(this._ah,this._al,0),u(this._bh,this._bl,8),u(this._ch,this._cl,16),u(this._dh,this._dl,24),u(this._eh,this._el,32),u(this._fh,this._fl,40),l},n.exports=f},{"./hash":497,"./sha512":504,inherits:440,"safe-buffer":494}],504:[function(e,n,i){var s=e("inherits"),o=e("./hash"),h=e("safe-buffer").Buffer,c=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function f(){this.init(),this._w=a,o.call(this,128,112)}s(f,o),f.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function l(y,_,k){return k^y&(_^k)}function u(y,_,k){return y&_|k&(y|_)}function p(y,_){return(y>>>28|_<<4)^(_>>>2|y<<30)^(_>>>7|y<<25)}function m(y,_){return(y>>>14|_<<18)^(y>>>18|_<<14)^(_>>>9|y<<23)}function d(y,_){return(y>>>1|_<<31)^(y>>>8|_<<24)^y>>>7}function v(y,_){return(y>>>1|_<<31)^(y>>>8|_<<24)^(y>>>7|_<<25)}function x(y,_){return(y>>>19|_<<13)^(_>>>29|y<<3)^y>>>6}function g(y,_){return(y>>>19|_<<13)^(_>>>29|y<<3)^(y>>>6|_<<26)}function w(y,_){return y>>>0<_>>>0?1:0}f.prototype._update=function(y){for(var _=this._w,k=this._ah|0,F=this._bh|0,O=this._ch|0,N=this._dh|0,U=this._eh|0,z=this._fh|0,W=this._gh|0,X=this._hh|0,J=this._al|0,H=this._bl|0,I=this._cl|0,M=this._dl|0,E=this._el|0,A=this._fl|0,B=this._gl|0,L=this._hl|0,P=0;P<32;P+=2)_[P]=y.readInt32BE(P*4),_[P+1]=y.readInt32BE(P*4+4);for(;P<160;P+=2){var R=_[P-30],C=_[P-15*2+1],S=d(R,C),D=v(C,R);R=_[P-2*2],C=_[P-2*2+1];var V=x(R,C),te=g(C,R),oe=_[P-7*2],he=_[P-7*2+1],Ne=_[P-16*2],q=_[P-16*2+1],ne=D+he|0,Q=S+oe+w(ne,D)|0;ne=ne+te|0,Q=Q+V+w(ne,te)|0,ne=ne+q|0,Q=Q+Ne+w(ne,q)|0,_[P]=Q,_[P+1]=ne}for(var re=0;re<160;re+=2){Q=_[re],ne=_[re+1];var ve=u(k,F,O),Ce=u(J,H,I),ce=p(k,J),se=p(J,k),ee=m(U,E),G=m(E,U),Z=c[re],de=c[re+1],Ae=l(U,z,W),K=l(E,A,B),Te=L+G|0,Oe=X+ee+w(Te,L)|0;Te=Te+K|0,Oe=Oe+Ae+w(Te,K)|0,Te=Te+de|0,Oe=Oe+Z+w(Te,de)|0,Te=Te+ne|0,Oe=Oe+Q+w(Te,ne)|0;var ie=se+Ce|0,fe=ce+ve+w(ie,se)|0;X=W,L=B,W=z,B=A,z=U,A=E,E=M+Te|0,U=N+Oe+w(E,M)|0,N=O,M=I,O=F,I=H,F=k,H=J,J=Te+ie|0,k=Oe+fe+w(J,Te)|0}this._al=this._al+J|0,this._bl=this._bl+H|0,this._cl=this._cl+I|0,this._dl=this._dl+M|0,this._el=this._el+E|0,this._fl=this._fl+A|0,this._gl=this._gl+B|0,this._hl=this._hl+L|0,this._ah=this._ah+k+w(this._al,J)|0,this._bh=this._bh+F+w(this._bl,H)|0,this._ch=this._ch+O+w(this._cl,I)|0,this._dh=this._dh+N+w(this._dl,M)|0,this._eh=this._eh+U+w(this._el,E)|0,this._fh=this._fh+z+w(this._fl,A)|0,this._gh=this._gh+W+w(this._gl,B)|0,this._hh=this._hh+X+w(this._hl,L)|0},f.prototype._hash=function(){var y=h.allocUnsafe(64);function _(k,F,O){y.writeInt32BE(k,O),y.writeInt32BE(F,O+4)}return _(this._ah,this._al,0),_(this._bh,this._bl,8),_(this._ch,this._cl,16),_(this._dh,this._dl,24),_(this._eh,this._el,32),_(this._fh,this._fl,40),_(this._gh,this._gl,48),_(this._hh,this._hl,56),y},n.exports=f},{"./hash":497,inherits:440,"safe-buffer":494}],505:[function(e,n,i){n.exports=h;var s=e("events").EventEmitter,o=e("inherits");o(h,s),h.Readable=e("readable-stream/readable.js"),h.Writable=e("readable-stream/writable.js"),h.Duplex=e("readable-stream/duplex.js"),h.Transform=e("readable-stream/transform.js"),h.PassThrough=e("readable-stream/passthrough.js"),h.Stream=h;function h(){s.call(this)}h.prototype.pipe=function(c,a){var f=this;function l(g){c.writable&&c.write(g)===!1&&f.pause&&f.pause()}f.on("data",l);function u(){f.readable&&f.resume&&f.resume()}c.on("drain",u),!c._isStdio&&(!a||a.end!==!1)&&(f.on("end",m),f.on("close",d));var p=!1;function m(){p||(p=!0,c.end())}function d(){p||(p=!0,typeof c.destroy=="function"&&c.destroy())}function v(g){if(x(),s.listenerCount(this,"error")===0)throw g}f.on("error",v),c.on("error",v);function x(){f.removeListener("data",l),c.removeListener("drain",u),f.removeListener("end",m),f.removeListener("close",d),f.removeListener("error",v),c.removeListener("error",v),f.removeListener("end",x),f.removeListener("close",x),c.removeListener("close",x)}return f.on("end",x),f.on("close",x),c.on("close",x),c.emit("pipe",f),c}},{events:422,inherits:440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(e,n,i){var s={}.toString;n.exports=Array.isArray||function(o){return s.call(o)=="[object Array]"}},{}],507:[function(e,n,i){n.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(e,n,i){var s=e("process-nextick-args"),o=Object.keys||function(v){var x=[];for(var g in v)x.push(g);return x};n.exports=p;var h=Object.create(e("core-util-is"));h.inherits=e("inherits");var c=e("./_stream_readable"),a=e("./_stream_writable");h.inherits(p,c);for(var f=o(a.prototype),l=0;l0?(typeof re!="string"&&!se.objectMode&&Object.getPrototypeOf(re)!==u.prototype&&(re=m(re)),Ce?se.endEmitted?Q.emit("error",new Error("stream.unshift() after end event")):z(Q,se,re,!0):se.ended?Q.emit("error",new Error("stream.push() after EOF")):(se.reading=!1,se.decoder&&!ve?(re=se.decoder.write(re),se.objectMode||re.length!==0?z(Q,se,re,!1):B(Q,se)):z(Q,se,re,!1))):Ce||(se.reading=!1)}return X(se)}function z(Q,re,ve,Ce){re.flowing&&re.length===0&&!re.sync?(Q.emit("data",ve),Q.read(0)):(re.length+=re.objectMode?1:ve.length,Ce?re.buffer.unshift(ve):re.buffer.push(ve),re.needReadable&&E(Q)),B(Q,re)}function W(Q,re){var ve;return!d(re)&&typeof re!="string"&&re!==void 0&&!Q.objectMode&&(ve=new TypeError("Invalid non-string/buffer chunk")),ve}function X(Q){return!Q.ended&&(Q.needReadable||Q.length=J?Q=J:(Q--,Q|=Q>>>1,Q|=Q>>>2,Q|=Q>>>4,Q|=Q>>>8,Q|=Q>>>16,Q++),Q}function I(Q,re){return Q<=0||re.length===0&&re.ended?0:re.objectMode?1:Q!==Q?re.flowing&&re.length?re.buffer.head.data.length:re.length:(Q>re.highWaterMark&&(re.highWaterMark=H(Q)),Q<=re.length?Q:re.ended?re.length:(re.needReadable=!0,0))}N.prototype.read=function(Q){g("read",Q),Q=parseInt(Q,10);var re=this._readableState,ve=Q;if(Q!==0&&(re.emittedReadable=!1),Q===0&&re.needReadable&&(re.length>=re.highWaterMark||re.ended))return g("read: emitReadable",re.length,re.ended),re.length===0&&re.ended?Ne(this):E(this),null;if(Q=I(Q,re),Q===0&&re.ended)return re.length===0&&Ne(this),null;var Ce=re.needReadable;g("need readable",Ce),(re.length===0||re.length-Q0?ce=V(Q,re):ce=null,ce===null?(re.needReadable=!0,Q=0):re.length-=Q,re.length===0&&(re.ended||(re.needReadable=!0),ve!==Q&&re.ended&&Ne(this)),ce!==null&&this.emit("data",ce),ce};function M(Q,re){if(!re.ended){if(re.decoder){var ve=re.decoder.end();ve&&ve.length&&(re.buffer.push(ve),re.length+=re.objectMode?1:ve.length)}re.ended=!0,E(Q)}}function E(Q){var re=Q._readableState;re.needReadable=!1,re.emittedReadable||(g("emitReadable",re.flowing),re.emittedReadable=!0,re.sync?h.nextTick(A,Q):A(Q))}function A(Q){g("emit readable"),Q.emit("readable"),D(Q)}function B(Q,re){re.readingMore||(re.readingMore=!0,h.nextTick(L,Q,re))}function L(Q,re){for(var ve=re.length;!re.reading&&!re.flowing&&!re.ended&&re.length1&&ne(Ce.pipes,Q)!==-1)&&!de&&(g("false write response, pause",Ce.awaitDrain),Ce.awaitDrain++,K=!0),ve.pause())}function Oe(Fe){g("onerror",Fe),we(),Q.removeListener("error",Oe),f(Q,"error")===0&&Q.emit("error",Fe)}F(Q,"error",Oe);function ie(){Q.removeListener("finish",fe),we()}Q.once("close",ie);function fe(){g("onfinish"),Q.removeListener("close",ie),we()}Q.once("finish",fe);function we(){g("unpipe"),ve.unpipe(Q)}return Q.emit("pipe",ve),Ce.flowing||(g("pipe resume"),ve.resume()),Q};function P(Q){return function(){var re=Q._readableState;g("pipeOnDrain",re.awaitDrain),re.awaitDrain&&re.awaitDrain--,re.awaitDrain===0&&f(Q,"data")&&(re.flowing=!0,D(Q))}}N.prototype.unpipe=function(Q){var re=this._readableState,ve={hasUnpiped:!1};if(re.pipesCount===0)return this;if(re.pipesCount===1)return Q&&Q!==re.pipes?this:(Q||(Q=re.pipes),re.pipes=null,re.pipesCount=0,re.flowing=!1,Q&&Q.emit("unpipe",this,ve),this);if(!Q){var Ce=re.pipes,ce=re.pipesCount;re.pipes=null,re.pipesCount=0,re.flowing=!1;for(var se=0;se=re.length?(re.decoder?ve=re.buffer.join(""):re.buffer.length===1?ve=re.buffer.head.data:ve=re.buffer.concat(re.length),re.buffer.clear()):ve=te(Q,re.buffer,re.decoder),ve}function te(Q,re,ve){var Ce;return Qse.length?se.length:Q;if(ee===se.length?ce+=se:ce+=se.slice(0,Q),Q-=ee,Q===0){ee===se.length?(++Ce,ve.next?re.head=ve.next:re.head=re.tail=null):(re.head=ve,ve.data=se.slice(ee));break}++Ce}return re.length-=Ce,ce}function he(Q,re){var ve=u.allocUnsafe(Q),Ce=re.head,ce=1;for(Ce.data.copy(ve),Q-=Ce.data.length;Ce=Ce.next;){var se=Ce.data,ee=Q>se.length?se.length:Q;if(se.copy(ve,ve.length-Q,0,ee),Q-=ee,Q===0){ee===se.length?(++ce,Ce.next?re.head=Ce.next:re.head=re.tail=null):(re.head=Ce,Ce.data=se.slice(ee));break}++ce}return re.length-=ce,ve}function Ne(Q){var re=Q._readableState;if(re.length>0)throw new Error('"endReadable()" called on non-empty stream');re.endEmitted||(re.ended=!0,h.nextTick(q,re,Q))}function q(Q,re){!Q.endEmitted&&Q.length===0&&(Q.endEmitted=!0,re.readable=!1,re.emit("end"))}function ne(Q,re){for(var ve=0,Ce=Q.length;ve-1?h:c.nextTick,l;F.WritableState=_;var u=Object.create(e("core-util-is"));u.inherits=e("inherits");var p={deprecate:e("util-deprecate")},m=e("./internal/streams/stream"),d=e("safe-buffer").Buffer,v=(typeof o<"u"?o:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function x(S){return d.from(S)}function g(S){return d.isBuffer(S)||S instanceof v}var w=e("./internal/streams/destroy");u.inherits(F,m);function y(){}function _(S,D){l=l||e("./_stream_duplex"),S=S||{};var V=D instanceof l;this.objectMode=!!S.objectMode,V&&(this.objectMode=this.objectMode||!!S.writableObjectMode);var te=S.highWaterMark,oe=S.writableHighWaterMark,he=this.objectMode?16:16*1024;te||te===0?this.highWaterMark=te:V&&(oe||oe===0)?this.highWaterMark=oe:this.highWaterMark=he,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Ne=S.decodeStrings===!1;this.decodeStrings=!Ne,this.defaultEncoding=S.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(q){H(D,q)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}_.prototype.getBuffer=function(){for(var D=this.bufferedRequest,V=[];D;)V.push(D),D=D.next;return V},function(){try{Object.defineProperty(_.prototype,"buffer",{get:p.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var k;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(k=Function.prototype[Symbol.hasInstance],Object.defineProperty(F,Symbol.hasInstance,{value:function(S){return k.call(this,S)?!0:this!==F?!1:S&&S._writableState instanceof _}})):k=function(S){return S instanceof this};function F(S){if(l=l||e("./_stream_duplex"),!k.call(F,this)&&!(this instanceof l))return new F(S);this._writableState=new _(S,this),this.writable=!0,S&&(typeof S.write=="function"&&(this._write=S.write),typeof S.writev=="function"&&(this._writev=S.writev),typeof S.destroy=="function"&&(this._destroy=S.destroy),typeof S.final=="function"&&(this._final=S.final)),m.call(this)}F.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function O(S,D){var V=new Error("write after end");S.emit("error",V),c.nextTick(D,V)}function N(S,D,V,te){var oe=!0,he=!1;return V===null?he=new TypeError("May not write null values to stream"):typeof V!="string"&&V!==void 0&&!D.objectMode&&(he=new TypeError("Invalid non-string/buffer chunk")),he&&(S.emit("error",he),c.nextTick(te,he),oe=!1),oe}F.prototype.write=function(S,D,V){var te=this._writableState,oe=!1,he=!te.objectMode&&g(S);return he&&!d.isBuffer(S)&&(S=x(S)),typeof D=="function"&&(V=D,D=null),he?D="buffer":D||(D=te.defaultEncoding),typeof V!="function"&&(V=y),te.ended?O(this,V):(he||N(this,te,S,V))&&(te.pendingcb++,oe=z(this,te,he,S,D,V)),oe},F.prototype.cork=function(){var S=this._writableState;S.corked++},F.prototype.uncork=function(){var S=this._writableState;S.corked&&(S.corked--,!S.writing&&!S.corked&&!S.bufferProcessing&&S.bufferedRequest&&E(this,S))},F.prototype.setDefaultEncoding=function(D){if(typeof D=="string"&&(D=D.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((D+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+D);return this._writableState.defaultEncoding=D,this};function U(S,D,V){return!S.objectMode&&S.decodeStrings!==!1&&typeof D=="string"&&(D=d.from(D,V)),D}Object.defineProperty(F.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function z(S,D,V,te,oe,he){if(!V){var Ne=U(D,te,oe);te!==Ne&&(V=!0,oe="buffer",te=Ne)}var q=D.objectMode?1:te.length;D.length+=q;var ne=D.length0?this.tail.next=u:this.head=u,this.tail=u,++this.length},a.prototype.unshift=function(l){var u={data:l,next:this.head};this.length===0&&(this.tail=u),this.head=u,++this.length},a.prototype.shift=function(){if(this.length!==0){var l=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,l}},a.prototype.clear=function(){this.head=this.tail=null,this.length=0},a.prototype.join=function(l){if(this.length===0)return"";for(var u=this.head,p=""+u.data;u=u.next;)p+=l+u.data;return p},a.prototype.concat=function(l){if(this.length===0)return o.alloc(0);for(var u=o.allocUnsafe(l>>>0),p=this.head,m=0;p;)c(p.data,u,m),m+=p.data.length,p=p.next;return u},a}(),h&&h.inspect&&h.inspect.custom&&(n.exports.prototype[h.inspect.custom]=function(){var a=h.inspect({length:this.length});return this.constructor.name+" "+a})},{"safe-buffer":520,util:188}],514:[function(e,n,i){var s=e("process-nextick-args");function o(a,f){var l=this,u=this._readableState&&this._readableState.destroyed,p=this._writableState&&this._writableState.destroyed;return u||p?(f?f(a):a&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,s.nextTick(c,this,a)):s.nextTick(c,this,a)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(a||null,function(m){!f&&m?l._writableState?l._writableState.errorEmitted||(l._writableState.errorEmitted=!0,s.nextTick(c,l,m)):s.nextTick(c,l,m):f&&f(m)}),this)}function h(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function c(a,f){a.emit("error",f)}n.exports={destroy:o,undestroy:h}},{"process-nextick-args":466}],515:[function(e,n,i){arguments[4][490][0].apply(i,arguments)},{dup:490,events:422}],516:[function(e,n,i){n.exports=e("./readable").PassThrough},{"./readable":517}],517:[function(e,n,i){i=n.exports=e("./lib/_stream_readable.js"),i.Stream=i,i.Readable=i,i.Writable=e("./lib/_stream_writable.js"),i.Duplex=e("./lib/_stream_duplex.js"),i.Transform=e("./lib/_stream_transform.js"),i.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(e,n,i){n.exports=e("./readable").Transform},{"./readable":517}],519:[function(e,n,i){n.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(e,n,i){arguments[4][217][0].apply(i,arguments)},{buffer:220,dup:217}],521:[function(e,n,i){arguments[4][218][0].apply(i,arguments)},{dup:218,"safe-buffer":520}],522:[function(e,n,i){arguments[4][218][0].apply(i,arguments)},{dup:218,"safe-buffer":494}],523:[function(e,n,i){(function(s,o){(function(){var h=e("process/browser.js").nextTick,c=Function.prototype.apply,a=Array.prototype.slice,f={},l=0;i.setTimeout=function(){return new u(c.call(setTimeout,window,arguments),clearTimeout)},i.setInterval=function(){return new u(c.call(setInterval,window,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(p){p.close()};function u(p,m){this._id=p,this._clearFn=m}u.prototype.unref=u.prototype.ref=function(){},u.prototype.close=function(){this._clearFn.call(window,this._id)},i.enroll=function(p,m){clearTimeout(p._idleTimeoutId),p._idleTimeout=m},i.unenroll=function(p){clearTimeout(p._idleTimeoutId),p._idleTimeout=-1},i._unrefActive=i.active=function(p){clearTimeout(p._idleTimeoutId);var m=p._idleTimeout;m>=0&&(p._idleTimeoutId=setTimeout(function(){p._onTimeout&&p._onTimeout()},m))},i.setImmediate=typeof s=="function"?s:function(p){var m=l++,d=arguments.length<2?!1:a.call(arguments,1);return f[m]=!0,h(function(){f[m]&&(d?p.apply(null,d):p.call(null),i.clearImmediate(m))}),m},i.clearImmediate=typeof o=="function"?o:function(p){delete f[p]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":467,timers:523}],524:[function(e,n,i){(function(s){(function(){n.exports=o;function o(c,a){if(h("noDeprecation"))return c;var f=!1;function l(){if(!f){if(h("throwDeprecation"))throw new Error(a);h("traceDeprecation")?console.trace(a):console.warn(a),f=!0}return c.apply(this,arguments)}return l}function h(c){try{if(!s.localStorage)return!1}catch{return!1}var a=s.localStorage[c];return a==null?!1:String(a).toLowerCase()==="true"}}).call(this)}).call(this,typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],525:[function(e,n,i){typeof Object.create=="function"?n.exports=function(o,h){o.super_=h,o.prototype=Object.create(h.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}})}:n.exports=function(o,h){o.super_=h;var c=function(){};c.prototype=h.prototype,o.prototype=new c,o.prototype.constructor=o}},{}],526:[function(e,n,i){n.exports=function(o){return o&&typeof o=="object"&&typeof o.copy=="function"&&typeof o.fill=="function"&&typeof o.readUInt8=="function"}},{}],527:[function(e,n,i){(function(s,o){(function(){var h=/%[sdj%]/g;i.format=function(R){if(!N(R)){for(var C=[],S=0;S=V)return he;switch(he){case"%s":return String(D[S++]);case"%d":return Number(D[S++]);case"%j":try{return JSON.stringify(D[S++])}catch{return"[Circular]"}default:return he}}),oe=D[S];S=3&&(S.depth=arguments[2]),arguments.length>=4&&(S.colors=arguments[3]),_(C)?S.showHidden=C:C&&i._extend(S,C),z(S.showHidden)&&(S.showHidden=!1),z(S.depth)&&(S.depth=2),z(S.colors)&&(S.colors=!1),z(S.customInspect)&&(S.customInspect=!0),S.colors&&(S.stylize=l),m(S,R,S.depth)}i.inspect=f,f.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},f.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function l(R,C){var S=f.styles[C];return S?"\x1B["+f.colors[S][0]+"m"+R+"\x1B["+f.colors[S][1]+"m":R}function u(R,C){return R}function p(R){var C={};return R.forEach(function(S,D){C[S]=!0}),C}function m(R,C,S){if(R.customInspect&&C&&I(C.inspect)&&C.inspect!==i.inspect&&!(C.constructor&&C.constructor.prototype===C)){var D=C.inspect(S,R);return N(D)||(D=m(R,D,S)),D}var V=d(R,C);if(V)return V;var te=Object.keys(C),oe=p(te);if(R.showHidden&&(te=Object.getOwnPropertyNames(C)),H(C)&&(te.indexOf("message")>=0||te.indexOf("description")>=0))return v(C);if(te.length===0){if(I(C)){var he=C.name?": "+C.name:"";return R.stylize("[Function"+he+"]","special")}if(W(C))return R.stylize(RegExp.prototype.toString.call(C),"regexp");if(J(C))return R.stylize(Date.prototype.toString.call(C),"date");if(H(C))return v(C)}var Ne="",q=!1,ne=["{","}"];if(y(C)&&(q=!0,ne=["[","]"]),I(C)){var Q=C.name?": "+C.name:"";Ne=" [Function"+Q+"]"}if(W(C)&&(Ne=" "+RegExp.prototype.toString.call(C)),J(C)&&(Ne=" "+Date.prototype.toUTCString.call(C)),H(C)&&(Ne=" "+v(C)),te.length===0&&(!q||C.length==0))return ne[0]+Ne+ne[1];if(S<0)return W(C)?R.stylize(RegExp.prototype.toString.call(C),"regexp"):R.stylize("[Object]","special");R.seen.push(C);var re;return q?re=x(R,C,S,oe,te):re=te.map(function(ve){return g(R,C,S,oe,ve,q)}),R.seen.pop(),w(re,Ne,ne)}function d(R,C){if(z(C))return R.stylize("undefined","undefined");if(N(C)){var S="'"+JSON.stringify(C).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R.stylize(S,"string")}if(O(C))return R.stylize(""+C,"number");if(_(C))return R.stylize(""+C,"boolean");if(k(C))return R.stylize("null","null")}function v(R){return"["+Error.prototype.toString.call(R)+"]"}function x(R,C,S,D,V){for(var te=[],oe=0,he=C.length;oe-1&&(te?he=he.split(` +`).map(function(q){return" "+q}).join(` +`).substr(2):he=` +`+he.split(` +`).map(function(q){return" "+q}).join(` +`))):he=R.stylize("[Circular]","special")),z(oe)){if(te&&V.match(/^\d+$/))return he;oe=JSON.stringify(""+V),oe.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(oe=oe.substr(1,oe.length-2),oe=R.stylize(oe,"name")):(oe=oe.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),oe=R.stylize(oe,"string"))}return oe+": "+he}function w(R,C,S){var D=R.reduce(function(V,te){return te.indexOf(` +`)>=0,V+te.replace(/\u001b\[\d\d?m/g,"").length+1},0);return D>60?S[0]+(C===""?"":C+` + `)+" "+R.join(`, + `)+" "+S[1]:S[0]+C+" "+R.join(", ")+" "+S[1]}function y(R){return Array.isArray(R)}i.isArray=y;function _(R){return typeof R=="boolean"}i.isBoolean=_;function k(R){return R===null}i.isNull=k;function F(R){return R==null}i.isNullOrUndefined=F;function O(R){return typeof R=="number"}i.isNumber=O;function N(R){return typeof R=="string"}i.isString=N;function U(R){return typeof R=="symbol"}i.isSymbol=U;function z(R){return R===void 0}i.isUndefined=z;function W(R){return X(R)&&E(R)==="[object RegExp]"}i.isRegExp=W;function X(R){return typeof R=="object"&&R!==null}i.isObject=X;function J(R){return X(R)&&E(R)==="[object Date]"}i.isDate=J;function H(R){return X(R)&&(E(R)==="[object Error]"||R instanceof Error)}i.isError=H;function I(R){return typeof R=="function"}i.isFunction=I;function M(R){return R===null||typeof R=="boolean"||typeof R=="number"||typeof R=="string"||typeof R=="symbol"||typeof R>"u"}i.isPrimitive=M,i.isBuffer=e("./support/isBuffer");function E(R){return Object.prototype.toString.call(R)}function A(R){return R<10?"0"+R.toString(10):R.toString(10)}var B=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(){var R=new Date,C=[A(R.getHours()),A(R.getMinutes()),A(R.getSeconds())].join(":");return[R.getDate(),B[R.getMonth()],C].join(" ")}i.log=function(){console.log("%s - %s",L(),i.format.apply(i,arguments))},i.inherits=e("inherits"),i._extend=function(R,C){if(!C||!X(C))return R;for(var S=Object.keys(C),D=S.length;D--;)R[S[D]]=C[S[D]];return R};function P(R,C){return Object.prototype.hasOwnProperty.call(R,C)}}).call(this)}).call(this,e("_process"),typeof Qt<"u"?Qt:typeof self<"u"?self:typeof window<"u"?window:{})},{"./support/isBuffer":526,_process:467,inherits:525}],528:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"v1",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(i,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(i,"v4",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(i,"v5",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(i,"NIL",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(i,"version",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(i,"validate",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(i,"stringify",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(i,"parse",{enumerable:!0,get:function(){return p.default}});var s=m(e("./v1.js")),o=m(e("./v3.js")),h=m(e("./v4.js")),c=m(e("./v5.js")),a=m(e("./nil.js")),f=m(e("./version.js")),l=m(e("./validate.js")),u=m(e("./stringify.js")),p=m(e("./parse.js"));function m(d){return d&&d.__esModule?d:{default:d}}},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;function s(g){if(typeof g=="string"){const w=unescape(encodeURIComponent(g));g=new Uint8Array(w.length);for(let y=0;y>5]>>>k%32&255,O=parseInt(_.charAt(F>>>4&15)+_.charAt(F&15),16);w.push(O)}return w}function h(g){return(g+64>>>9<<4)+14+1}function c(g,w){g[w>>5]|=128<>5]|=(g[_/8]&255)<<_%32;return y}function f(g,w){const y=(g&65535)+(w&65535);return(g>>16)+(w>>16)+(y>>16)<<16|y&65535}function l(g,w){return g<>>32-w}function u(g,w,y,_,k,F){return f(l(f(f(w,g),f(_,F)),k),y)}function p(g,w,y,_,k,F,O){return u(w&y|~w&_,g,w,k,F,O)}function m(g,w,y,_,k,F,O){return u(w&_|y&~_,g,w,k,F,O)}function d(g,w,y,_,k,F,O){return u(w^y^_,g,w,k,F,O)}function v(g,w,y,_,k,F,O){return u(y^(w|~_),g,w,k,F,O)}var x=s;i.default=x},{}],530:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s="00000000-0000-0000-0000-000000000000";i.default=s},{}],531:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=o(e("./validate.js"));function o(a){return a&&a.__esModule?a:{default:a}}function h(a){if(!(0,s.default)(a))throw TypeError("Invalid UUID");let f;const l=new Uint8Array(16);return l[0]=(f=parseInt(a.slice(0,8),16))>>>24,l[1]=f>>>16&255,l[2]=f>>>8&255,l[3]=f&255,l[4]=(f=parseInt(a.slice(9,13),16))>>>8,l[5]=f&255,l[6]=(f=parseInt(a.slice(14,18),16))>>>8,l[7]=f&255,l[8]=(f=parseInt(a.slice(19,23),16))>>>8,l[9]=f&255,l[10]=(f=parseInt(a.slice(24,36),16))/1099511627776&255,l[11]=f/4294967296&255,l[12]=f>>>24&255,l[13]=f>>>16&255,l[14]=f>>>8&255,l[15]=f&255,l}var c=h;i.default=c},{"./validate.js":541}],532:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;i.default=s},{}],533:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=h;let s;const o=new Uint8Array(16);function h(){if(!s&&(s=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!s))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return s(o)}},{}],534:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;function s(a,f,l,u){switch(a){case 0:return f&l^~f&u;case 1:return f^l^u;case 2:return f&l^f&u^l&u;case 3:return f^l^u}}function o(a,f){return a<>>32-f}function h(a){const f=[1518500249,1859775393,2400959708,3395469782],l=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof a=="string"){const d=unescape(encodeURIComponent(a));a=[];for(let v=0;v>>0;_=y,y=w,w=o(g,30)>>>0,g=x,x=O}l[0]=l[0]+x>>>0,l[1]=l[1]+g>>>0,l[2]=l[2]+w>>>0,l[3]=l[3]+y>>>0,l[4]=l[4]+_>>>0}return[l[0]>>24&255,l[0]>>16&255,l[0]>>8&255,l[0]&255,l[1]>>24&255,l[1]>>16&255,l[1]>>8&255,l[1]&255,l[2]>>24&255,l[2]>>16&255,l[2]>>8&255,l[2]&255,l[3]>>24&255,l[3]>>16&255,l[3]>>8&255,l[3]&255,l[4]>>24&255,l[4]>>16&255,l[4]>>8&255,l[4]&255]}var c=h;i.default=c},{}],535:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=o(e("./validate.js"));function o(f){return f&&f.__esModule?f:{default:f}}const h=[];for(let f=0;f<256;++f)h.push((f+256).toString(16).substr(1));function c(f){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const u=(h[f[l+0]]+h[f[l+1]]+h[f[l+2]]+h[f[l+3]]+"-"+h[f[l+4]]+h[f[l+5]]+"-"+h[f[l+6]]+h[f[l+7]]+"-"+h[f[l+8]]+h[f[l+9]]+"-"+h[f[l+10]]+h[f[l+11]]+h[f[l+12]]+h[f[l+13]]+h[f[l+14]]+h[f[l+15]]).toLowerCase();if(!(0,s.default)(u))throw TypeError("Stringified UUID is invalid");return u}var a=c;i.default=a},{"./validate.js":541}],536:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=h(e("./rng.js")),o=h(e("./stringify.js"));function h(m){return m&&m.__esModule?m:{default:m}}let c,a,f=0,l=0;function u(m,d,v){let x=d&&v||0;const g=d||new Array(16);m=m||{};let w=m.node||c,y=m.clockseq!==void 0?m.clockseq:a;if(w==null||y==null){const U=m.random||(m.rng||s.default)();w==null&&(w=c=[U[0]|1,U[1],U[2],U[3],U[4],U[5]]),y==null&&(y=a=(U[6]<<8|U[7])&16383)}let _=m.msecs!==void 0?m.msecs:Date.now(),k=m.nsecs!==void 0?m.nsecs:l+1;const F=_-f+(k-l)/1e4;if(F<0&&m.clockseq===void 0&&(y=y+1&16383),(F<0||_>f)&&m.nsecs===void 0&&(k=0),k>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");f=_,l=k,a=y,_+=122192928e5;const O=((_&268435455)*1e4+k)%4294967296;g[x++]=O>>>24&255,g[x++]=O>>>16&255,g[x++]=O>>>8&255,g[x++]=O&255;const N=_/4294967296*1e4&268435455;g[x++]=N>>>8&255,g[x++]=N&255,g[x++]=N>>>24&15|16,g[x++]=N>>>16&255,g[x++]=y>>>8|128,g[x++]=y&255;for(let U=0;U<6;++U)g[x+U]=w[U];return d||(0,o.default)(g)}var p=u;i.default=p},{"./rng.js":533,"./stringify.js":535}],537:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var s=h(e("./v35.js")),o=h(e("./md5.js"));function h(f){return f&&f.__esModule?f:{default:f}}var a=(0,s.default)("v3",48,o.default);i.default=a},{"./md5.js":529,"./v35.js":538}],538:[function(e,n,i){Object.defineProperty(i,"__esModule",{value:!0}),i.default=l,i.URL=i.DNS=void 0;var s=h(e("./stringify.js")),o=h(e("./parse.js"));function h(u){return u&&u.__esModule?u:{default:u}}function c(u){u=unescape(encodeURIComponent(u));const p=[];for(let m=0;m=c&&p<=55295||p===o||p===h||p===s||p>=57344&&p<=65533||p>=65536&&p<=1114111}i.isChar=a;function f(p){return p===c||p===o||p===h||p===s}i.isS=f;function l(p){return p>=65&&p<=90||p>=97&&p<=122||p===58||p===95||p===8204||p===8205||p>=192&&p<=214||p>=216&&p<=246||p>=248&&p<=767||p>=880&&p<=893||p>=895&&p<=8191||p>=8304&&p<=8591||p>=11264&&p<=12271||p>=12289&&p<=55295||p>=63744&&p<=64975||p>=65008&&p<=65533||p>=65536&&p<=983039}i.isNameStartChar=l;function u(p){return l(p)||p>=48&&p<=57||p===45||p===46||p===183||p>=768&&p<=879||p>=8255&&p<=8256}i.isNameChar=u},{}],544:[function(e,n,i){/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(i,"__esModule",{value:!0}),i.CHAR="-퟿-�𐀀-􏿿",i.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",i.S=` \r +`,i.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",i.NAME_CHAR="-"+i.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",i.CHAR_RE=new RegExp("^["+i.CHAR+"]$","u"),i.RESTRICTED_CHAR_RE=new RegExp("^["+i.RESTRICTED_CHAR+"]$","u"),i.S_RE=new RegExp("^["+i.S+"]+$","u"),i.NAME_START_CHAR_RE=new RegExp("^["+i.NAME_START_CHAR+"]$","u"),i.NAME_CHAR_RE=new RegExp("^["+i.NAME_CHAR+"]$","u"),i.NAME_RE=new RegExp("^["+i.NAME_START_CHAR+"]["+i.NAME_CHAR+"]*$","u"),i.NMTOKEN_RE=new RegExp("^["+i.NAME_CHAR+"]+$","u");var s=9,o=10,h=13,c=32;i.S_LIST=[c,o,h,s];function a(d){return d>=1&&d<=55295||d>=57344&&d<=65533||d>=65536&&d<=1114111}i.isChar=a;function f(d){return d>=1&&d<=8||d===11||d===12||d>=14&&d<=31||d>=127&&d<=132||d>=134&&d<=159}i.isRestrictedChar=f;function l(d){return d===9||d===10||d===13||d>31&&d<127||d===133||d>159&&d<=55295||d>=57344&&d<=65533||d>=65536&&d<=1114111}i.isCharAndNotRestricted=l;function u(d){return d===c||d===o||d===h||d===s}i.isS=u;function p(d){return d>=65&&d<=90||d>=97&&d<=122||d===58||d===95||d===8204||d===8205||d>=192&&d<=214||d>=216&&d<=246||d>=248&&d<=767||d>=880&&d<=893||d>=895&&d<=8191||d>=8304&&d<=8591||d>=11264&&d<=12271||d>=12289&&d<=55295||d>=63744&&d<=64975||d>=65008&&d<=65533||d>=65536&&d<=983039}i.isNameStartChar=p;function m(d){return p(d)||d>=48&&d<=57||d===45||d===46||d===183||d>=768&&d<=879||d>=8255&&d<=8256}i.isNameChar=m},{}],545:[function(e,n,i){/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(i,"__esModule",{value:!0}),i.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",i.NC_NAME_CHAR="-"+i.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",i.NC_NAME_START_CHAR_RE=new RegExp("^["+i.NC_NAME_START_CHAR+"]$","u"),i.NC_NAME_CHAR_RE=new RegExp("^["+i.NC_NAME_CHAR+"]$","u"),i.NC_NAME_RE=new RegExp("^["+i.NC_NAME_START_CHAR+"]["+i.NC_NAME_CHAR+"]*$","u");function s(h){return h>=65&&h<=90||h===95||h>=97&&h<=122||h>=192&&h<=214||h>=216&&h<=246||h>=248&&h<=767||h>=880&&h<=893||h>=895&&h<=8191||h>=8204&&h<=8205||h>=8304&&h<=8591||h>=11264&&h<=12271||h>=12289&&h<=55295||h>=63744&&h<=64975||h>=65008&&h<=65533||h>=65536&&h<=983039}i.isNCNameStartChar=s;function o(h){return s(h)||h===45||h===46||h>=48&&h<=57||h===183||h>=768&&h<=879||h>=8255&&h<=8256}i.isNCNameChar=o},{}]},{},[15])(15)})})(wm);var M6=wm.exports;function uc(t){"@babel/helpers - typeof";return uc=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},uc(t)}var I6=/^\s+/,O6=/\s+$/;function Rt(t,r){if(t=t||"",r=r||{},t instanceof Rt)return t;if(!(this instanceof Rt))return new Rt(t,r);var e=D6(t);this._originalInput=t,this._r=e.r,this._g=e.g,this._b=e.b,this._a=e.a,this._roundA=Math.round(100*this._a)/100,this._format=r.format||e.format,this._gradientType=r.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=e.ok}Rt.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var r=this.toRgb();return(r.r*299+r.g*587+r.b*114)/1e3},getLuminance:function(){var r=this.toRgb(),e,n,i,s,o,h;return e=r.r/255,n=r.g/255,i=r.b/255,e<=.03928?s=e/12.92:s=Math.pow((e+.055)/1.055,2.4),n<=.03928?o=n/12.92:o=Math.pow((n+.055)/1.055,2.4),i<=.03928?h=i/12.92:h=Math.pow((i+.055)/1.055,2.4),.2126*s+.7152*o+.0722*h},setAlpha:function(r){return this._a=ym(r),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var r=Hp(this._r,this._g,this._b);return{h:r.h*360,s:r.s,v:r.v,a:this._a}},toHsvString:function(){var r=Hp(this._r,this._g,this._b),e=Math.round(r.h*360),n=Math.round(r.s*100),i=Math.round(r.v*100);return this._a==1?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var r=jp(this._r,this._g,this._b);return{h:r.h*360,s:r.s,l:r.l,a:this._a}},toHslString:function(){var r=jp(this._r,this._g,this._b),e=Math.round(r.h*360),n=Math.round(r.s*100),i=Math.round(r.l*100);return this._a==1?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(r){return Wp(this._r,this._g,this._b,r)},toHexString:function(r){return"#"+this.toHex(r)},toHex8:function(r){return L6(this._r,this._g,this._b,this._a,r)},toHex8String:function(r){return"#"+this.toHex8(r)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(Ur(this._r,255)*100)+"%",g:Math.round(Ur(this._g,255)*100)+"%",b:Math.round(Ur(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(Ur(this._r,255)*100)+"%, "+Math.round(Ur(this._g,255)*100)+"%, "+Math.round(Ur(this._b,255)*100)+"%)":"rgba("+Math.round(Ur(this._r,255)*100)+"%, "+Math.round(Ur(this._g,255)*100)+"%, "+Math.round(Ur(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Z6[Wp(this._r,this._g,this._b,!0)]||!1},toFilter:function(r){var e="#"+$p(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(r){var s=Rt(r);n="#"+$p(s._r,s._g,s._b,s._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(r){var e=!!r;r=r||this._format;var n=!1,i=this._a<1&&this._a>=0,s=!e&&i&&(r==="hex"||r==="hex6"||r==="hex3"||r==="hex4"||r==="hex8"||r==="name");return s?r==="name"&&this._a===0?this.toName():this.toRgbString():(r==="rgb"&&(n=this.toRgbString()),r==="prgb"&&(n=this.toPercentageRgbString()),(r==="hex"||r==="hex6")&&(n=this.toHexString()),r==="hex3"&&(n=this.toHexString(!0)),r==="hex4"&&(n=this.toHex8String(!0)),r==="hex8"&&(n=this.toHex8String()),r==="name"&&(n=this.toName()),r==="hsl"&&(n=this.toHslString()),r==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return Rt(this.toString())},_applyModification:function(r,e){var n=r.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(W6,arguments)},brighten:function(){return this._applyModification($6,arguments)},darken:function(){return this._applyModification(z6,arguments)},desaturate:function(){return this._applyModification(U6,arguments)},saturate:function(){return this._applyModification(j6,arguments)},greyscale:function(){return this._applyModification(H6,arguments)},spin:function(){return this._applyModification(X6,arguments)},_applyCombination:function(r,e){return r.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(K6,arguments)},complement:function(){return this._applyCombination(V6,arguments)},monochromatic:function(){return this._applyCombination(Y6,arguments)},splitcomplement:function(){return this._applyCombination(G6,arguments)},triad:function(){return this._applyCombination(zp,[3])},tetrad:function(){return this._applyCombination(zp,[4])}};Rt.fromRatio=function(t,r){if(uc(t)=="object"){var e={};for(var n in t)t.hasOwnProperty(n)&&(n==="a"?e[n]=t[n]:e[n]=vf(t[n]));t=e}return Rt(t,r)};function D6(t){var r={r:0,g:0,b:0},e=1,n=null,i=null,s=null,o=!1,h=!1;return typeof t=="string"&&(t=e8(t)),uc(t)=="object"&&(Ms(t.r)&&Ms(t.g)&&Ms(t.b)?(r=N6(t.r,t.g,t.b),o=!0,h=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Ms(t.h)&&Ms(t.s)&&Ms(t.v)?(n=vf(t.s),i=vf(t.v),r=B6(t.h,n,i),o=!0,h="hsv"):Ms(t.h)&&Ms(t.s)&&Ms(t.l)&&(n=vf(t.s),s=vf(t.l),r=P6(t.h,n,s),o=!0,h="hsl"),t.hasOwnProperty("a")&&(e=t.a)),e=ym(e),{ok:o,format:t.format||h,r:Math.min(255,Math.max(r.r,0)),g:Math.min(255,Math.max(r.g,0)),b:Math.min(255,Math.max(r.b,0)),a:e}}function N6(t,r,e){return{r:Ur(t,255)*255,g:Ur(r,255)*255,b:Ur(e,255)*255}}function jp(t,r,e){t=Ur(t,255),r=Ur(r,255),e=Ur(e,255);var n=Math.max(t,r,e),i=Math.min(t,r,e),s,o,h=(n+i)/2;if(n==i)s=o=0;else{var c=n-i;switch(o=h>.5?c/(2-n-i):c/(n+i),n){case t:s=(r-e)/c+(r1&&(l-=1),l<1/6?a+(f-a)*6*l:l<1/2?f:l<2/3?a+(f-a)*(2/3-l)*6:a}if(r===0)n=i=s=e;else{var h=e<.5?e*(1+r):e+r-e*r,c=2*e-h;n=o(c,h,t+1/3),i=o(c,h,t),s=o(c,h,t-1/3)}return{r:n*255,g:i*255,b:s*255}}function Hp(t,r,e){t=Ur(t,255),r=Ur(r,255),e=Ur(e,255);var n=Math.max(t,r,e),i=Math.min(t,r,e),s,o,h=n,c=n-i;if(o=n===0?0:c/n,n==i)s=0;else{switch(n){case t:s=(r-e)/c+(r>1)+720)%360;--r;)n.h=(n.h+i)%360,s.push(Rt(n));return s}function Y6(t,r){r=r||6;for(var e=Rt(t).toHsv(),n=e.h,i=e.s,s=e.v,o=[],h=1/r;r--;)o.push(Rt({h:n,s:i,v:s})),s=(s+h)%1;return o}Rt.mix=function(t,r,e){e=e===0?0:e||50;var n=Rt(t).toRgb(),i=Rt(r).toRgb(),s=e/100,o={r:(i.r-n.r)*s+n.r,g:(i.g-n.g)*s+n.g,b:(i.b-n.b)*s+n.b,a:(i.a-n.a)*s+n.a};return Rt(o)};Rt.readability=function(t,r){var e=Rt(t),n=Rt(r);return(Math.max(e.getLuminance(),n.getLuminance())+.05)/(Math.min(e.getLuminance(),n.getLuminance())+.05)};Rt.isReadable=function(t,r,e){var n=Rt.readability(t,r),i,s;switch(s=!1,i=t8(e),i.level+i.size){case"AAsmall":case"AAAlarge":s=n>=4.5;break;case"AAlarge":s=n>=3;break;case"AAAsmall":s=n>=7;break}return s};Rt.mostReadable=function(t,r,e){var n=null,i=0,s,o,h,c;e=e||{},o=e.includeFallbackColors,h=e.level,c=e.size;for(var a=0;ai&&(i=s,n=Rt(r[a]));return Rt.isReadable(t,n,{level:h,size:c})||!o?n:(e.includeFallbackColors=!1,Rt.mostReadable(t,["#fff","#000"],e))};var du=Rt.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Z6=Rt.hexNames=J6(du);function J6(t){var r={};for(var e in t)t.hasOwnProperty(e)&&(r[t[e]]=e);return r}function ym(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function Ur(t,r){Q6(t)&&(t="100%");var e=q6(t);return t=Math.min(r,Math.max(0,parseFloat(t))),e&&(t=parseInt(t*r,10)/100),Math.abs(t-r)<1e-6?1:t%r/parseFloat(r)}function Cc(t){return Math.min(1,Math.max(0,t))}function mi(t){return parseInt(t,16)}function Q6(t){return typeof t=="string"&&t.indexOf(".")!=-1&&parseFloat(t)===1}function q6(t){return typeof t=="string"&&t.indexOf("%")!=-1}function qi(t){return t.length==1?"0"+t:""+t}function vf(t){return t<=1&&(t=t*100+"%"),t}function _m(t){return Math.round(parseFloat(t)*255).toString(16)}function Xp(t){return mi(t)/255}var Qi=function(){var t="[-\\+]?\\d+%?",r="[-\\+]?\\d*\\.\\d+%?",e="(?:"+r+")|(?:"+t+")",n="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",i="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function Ms(t){return!!Qi.CSS_UNIT.exec(t)}function e8(t){t=t.replace(I6,"").replace(O6,"").toLowerCase();var r=!1;if(du[t])t=du[t],r=!0;else if(t=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var e;return(e=Qi.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=Qi.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=Qi.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=Qi.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=Qi.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=Qi.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=Qi.hex8.exec(t))?{r:mi(e[1]),g:mi(e[2]),b:mi(e[3]),a:Xp(e[4]),format:r?"name":"hex8"}:(e=Qi.hex6.exec(t))?{r:mi(e[1]),g:mi(e[2]),b:mi(e[3]),format:r?"name":"hex"}:(e=Qi.hex4.exec(t))?{r:mi(e[1]+""+e[1]),g:mi(e[2]+""+e[2]),b:mi(e[3]+""+e[3]),a:Xp(e[4]+""+e[4]),format:r?"name":"hex8"}:(e=Qi.hex3.exec(t))?{r:mi(e[1]+""+e[1]),g:mi(e[2]+""+e[2]),b:mi(e[3]+""+e[3]),format:r?"name":"hex"}:!1}function t8(t){var r,e;return t=t||{level:"AA",size:"small"},r=(t.level||"AA").toUpperCase(),e=(t.size||"small").toLowerCase(),r!=="AA"&&r!=="AAA"&&(r="AA"),e!=="small"&&e!=="large"&&(e="small"),{level:r,size:e}}var dc={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */dc.exports;(function(t,r){(function(){var e,n="4.17.21",i=200,s="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",o="Expected a function",h="Invalid `variable` option passed into `_.template`",c="__lodash_hash_undefined__",a=500,f="__lodash_placeholder__",l=1,u=2,p=4,m=1,d=2,v=1,x=2,g=4,w=8,y=16,_=32,k=64,F=128,O=256,N=512,U=30,z="...",W=800,X=16,J=1,H=2,I=3,M=1/0,E=9007199254740991,A=17976931348623157e292,B=0/0,L=4294967295,P=L-1,R=L>>>1,C=[["ary",F],["bind",v],["bindKey",x],["curry",w],["curryRight",y],["flip",N],["partial",_],["partialRight",k],["rearg",O]],S="[object Arguments]",D="[object Array]",V="[object AsyncFunction]",te="[object Boolean]",oe="[object Date]",he="[object DOMException]",Ne="[object Error]",q="[object Function]",ne="[object GeneratorFunction]",Q="[object Map]",re="[object Number]",ve="[object Null]",Ce="[object Object]",ce="[object Promise]",se="[object Proxy]",ee="[object RegExp]",G="[object Set]",Z="[object String]",de="[object Symbol]",Ae="[object Undefined]",K="[object WeakMap]",Te="[object WeakSet]",Oe="[object ArrayBuffer]",ie="[object DataView]",fe="[object Float32Array]",we="[object Float64Array]",Fe="[object Int8Array]",Ue="[object Int16Array]",Pe="[object Int32Array]",$e="[object Uint8Array]",rt="[object Uint8ClampedArray]",Ze="[object Uint16Array]",Se="[object Uint32Array]",je=/\b__p \+= '';/g,Ke=/\b(__p \+=) '' \+/g,st=/(__e\(.*?\)|\b__t\)) \+\n'';/g,St=/&(?:amp|lt|gt|quot|#39);/g,At=/[&<>"']/g,bt=RegExp(St.source),wt=RegExp(At.source),Dt=/<%-([\s\S]+?)%>/g,gt=/<%([\s\S]+?)%>/g,xt=/<%=([\s\S]+?)%>/g,Bt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kt=/^\w*$/,er=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,zt=/[\\^$.*+?()[\]{}|]/g,Ct=RegExp(zt.source),Kt=/^\s+/,ir=/\s/,Nt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,le=/\{\n\/\* \[wrapped with (.+)\] \*/,Ee=/,? & /,pe=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,xe=/[()=,{}\[\]\/\s]/,ye=/\\(\\)?/g,_e=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,We=/\w*$/,Je=/^[-+]0x[0-9a-f]+$/i,Le=/^0b[01]+$/i,Ve=/^\[object .+?Constructor\]$/,He=/^0o[0-7]+$/i,tt=/^(?:0|[1-9]\d*)$/,me=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Me=/($^)/,Re=/['\n\r\u2028\u2029\\]/g,Qe="\\ud800-\\udfff",lt="\\u0300-\\u036f",Et="\\ufe20-\\ufe2f",Ot="\\u20d0-\\u20ff",sr=lt+Et+Ot,Wr="\\u2700-\\u27bf",Rr="a-z\\xdf-\\xf6\\xf8-\\xff",br="\\xac\\xb1\\xd7\\xf7",Vr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",yn="\\u2000-\\u206f",ar=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Vn="A-Z\\xc0-\\xd6\\xd8-\\xde",Gn="\\ufe0e\\ufe0f",Kn=br+Vr+yn+ar,ji="['’]",xs="["+Qe+"]",Ya="["+Kn+"]",Yn="["+sr+"]",Za="\\d+",bs="["+Wr+"]",da="["+Rr+"]",pa="[^"+Qe+Kn+Za+Wr+Rr+Vn+"]",Ws="\\ud83c[\\udffb-\\udfff]",Wo="(?:"+Yn+"|"+Ws+")",Ja="[^"+Qe+"]",ws="(?:\\ud83c[\\udde6-\\uddff]){2}",$s="[\\ud800-\\udbff][\\udc00-\\udfff]",ns="["+Vn+"]",Qa="\\u200d",ma="(?:"+da+"|"+pa+")",zs="(?:"+ns+"|"+pa+")",Hi="(?:"+ji+"(?:d|ll|m|re|s|t|ve))?",qa="(?:"+ji+"(?:D|LL|M|RE|S|T|VE))?",eo=Wo+"?",ai="["+Gn+"]?",$o="(?:"+Qa+"(?:"+[Ja,ws,$s].join("|")+")"+ai+eo+")*",to="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",zo="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",ro=ai+eo+$o,Xo="(?:"+[bs,ws,$s].join("|")+")"+ro,yi="(?:"+[Ja+Yn+"?",Yn,ws,$s,xs].join("|")+")",no=RegExp(ji,"g"),Vo=RegExp(Yn,"g"),oi=RegExp(Ws+"(?="+Ws+")|"+yi+ro,"g"),Go=RegExp([ns+"?"+da+"+"+Hi+"(?="+[Ya,ns,"$"].join("|")+")",zs+"+"+qa+"(?="+[Ya,ns+ma,"$"].join("|")+")",ns+"?"+ma+"+"+Hi,ns+"+"+qa,zo,to,Za,Xo].join("|"),"g"),_i=RegExp("["+Qa+Qe+sr+Gn+"]"),Ei=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,io=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ga=-1,mr={};mr[fe]=mr[we]=mr[Fe]=mr[Ue]=mr[Pe]=mr[$e]=mr[rt]=mr[Ze]=mr[Se]=!0,mr[S]=mr[D]=mr[Oe]=mr[te]=mr[ie]=mr[oe]=mr[Ne]=mr[q]=mr[Q]=mr[re]=mr[Ce]=mr[ee]=mr[G]=mr[Z]=mr[K]=!1;var pr={};pr[S]=pr[D]=pr[Oe]=pr[ie]=pr[te]=pr[oe]=pr[fe]=pr[we]=pr[Fe]=pr[Ue]=pr[Pe]=pr[Q]=pr[re]=pr[Ce]=pr[ee]=pr[G]=pr[Z]=pr[de]=pr[$e]=pr[rt]=pr[Ze]=pr[Se]=!0,pr[Ne]=pr[q]=pr[K]=!1;var so={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ko={"&":"&","<":"<",">":">",'"':""","'":"'"},ao={"&":"&","<":"<",">":">",""":'"',"'":"'"},oo={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ke=parseFloat,ze=parseInt,at=typeof Qt=="object"&&Qt&&Qt.Object===Object&&Qt,yt=typeof self=="object"&&self&&self.Object===Object&&self,$t=at||yt||Function("return this")(),jt=r&&!r.nodeType&&r,gr=jt&&!0&&t&&!t.nodeType&&t,yr=gr&&gr.exports===jt,Ir=yr&&at.process,or=function(){try{var Xe=gr&&gr.require&&gr.require("util").types;return Xe||Ir&&Ir.binding&&Ir.binding("util")}catch{}}(),on=or&&or.isArrayBuffer,pn=or&&or.isDate,Lr=or&&or.isMap,qr=or&&or.isRegExp,fn=or&&or.isSet,fi=or&&or.isTypedArray;function Or(Xe,it,et){switch(et.length){case 0:return Xe.call(it);case 1:return Xe.call(it,et[0]);case 2:return Xe.call(it,et[0],et[1]);case 3:return Xe.call(it,et[0],et[1],et[2])}return Xe.apply(it,et)}function Wi(Xe,it,et,Tt){for(var Xt=-1,wr=Xe==null?0:Xe.length;++Xt-1}function Ie(Xe,it,et){for(var Tt=-1,Xt=Xe==null?0:Xe.length;++Tt-1;);return et}function y0(Xe,it){for(var et=Xe.length;et--&&Nr(it,Xe[et],0)>-1;);return et}function Dv(Xe,it){for(var et=Xe.length,Tt=0;et--;)Xe[et]===it&&++Tt;return Tt}var Nv=Xi(so),Pv=Xi(Ko);function Bv(Xe){return"\\"+oo[Xe]}function Lv(Xe,it){return Xe==null?e:Xe[it]}function lo(Xe){return _i.test(Xe)}function Uv(Xe){return Ei.test(Xe)}function jv(Xe){for(var it,et=[];!(it=Xe.next()).done;)et.push(it.value);return et}function Uc(Xe){var it=-1,et=Array(Xe.size);return Xe.forEach(function(Tt,Xt){et[++it]=[Xt,Tt]}),et}function _0(Xe,it){return function(et){return Xe(it(et))}}function Vs(Xe,it){for(var et=-1,Tt=Xe.length,Xt=0,wr=[];++et-1}function Cx(b,T){var j=this.__data__,Y=ml(j,b);return Y<0?(++this.size,j.push([b,T])):j[Y][1]=T,this}_s.prototype.clear=Ex,_s.prototype.delete=Tx,_s.prototype.get=Sx,_s.prototype.has=kx,_s.prototype.set=Cx;function Es(b){var T=-1,j=b==null?0:b.length;for(this.clear();++T=T?b:T)),b}function ki(b,T,j,Y,ae,be){var De,Be=T&l,Ge=T&u,ot=T&p;if(j&&(De=ae?j(b,Y,ae,be):j(b)),De!==e)return De;if(!Hr(b))return b;var ft=Gt(b);if(ft){if(De=M2(b),!Be)return Jn(b,De)}else{var ut=Fn(b),vt=ut==q||ut==ne;if(Qs(b))return id(b,Be);if(ut==Ce||ut==S||vt&&!ae){if(De=Ge||vt?{}:Ed(b),!Be)return Ge?w2(b,$x(De,b)):b2(b,D0(De,b))}else{if(!pr[ut])return ae?b:{};De=I2(b,ut,Be)}}be||(be=new Gi);var Ft=be.get(b);if(Ft)return Ft;be.set(b,De),Qd(b)?b.forEach(function(Ut){De.add(ki(Ut,T,j,Ut,b,be))}):Zd(b)&&b.forEach(function(Ut,lr){De.set(lr,ki(Ut,T,j,lr,b,be))});var Lt=ot?Ge?hh:ch:Ge?qn:gn,tr=ft?e:Lt(b);return _n(tr||b,function(Ut,lr){tr&&(lr=Ut,Ut=b[lr]),rf(De,lr,ki(Ut,T,j,lr,b,be))}),De}function zx(b){var T=gn(b);return function(j){return N0(j,b,T)}}function N0(b,T,j){var Y=j.length;if(b==null)return!Y;for(b=Mr(b);Y--;){var ae=j[Y],be=T[ae],De=b[ae];if(De===e&&!(ae in b)||!be(De))return!1}return!0}function P0(b,T,j){if(typeof b!="function")throw new Ti(o);return cf(function(){b.apply(e,j)},T)}function nf(b,T,j,Y){var ae=-1,be=ue,De=!0,Be=b.length,Ge=[],ot=T.length;if(!Be)return Ge;j&&(T=Ye(T,ci(j))),Y?(be=Ie,De=!1):T.length>=i&&(be=Zo,De=!1,T=new ba(T));e:for(;++aeae?0:ae+j),Y=Y===e||Y>ae?ae:Jt(Y),Y<0&&(Y+=ae),Y=j>Y?0:ep(Y);j0&&j(Be)?T>1?En(Be,T-1,j,Y,ae):ht(ae,Be):Y||(ae[ae.length]=Be)}return ae}var Vc=cd(),U0=cd(!0);function ss(b,T){return b&&Vc(b,T,gn)}function Gc(b,T){return b&&U0(b,T,gn)}function vl(b,T){return is(T,function(j){return As(b[j])})}function ya(b,T){T=Zs(T,b);for(var j=0,Y=T.length;b!=null&&jT}function Gx(b,T){return b!=null&&Tr.call(b,T)}function Kx(b,T){return b!=null&&T in Mr(b)}function Yx(b,T,j){return b>=An(T,j)&&b=120&&ft.length>=120)?new ba(De&&ft):e}ft=b[0];var ut=-1,vt=Be[0];e:for(;++ut-1;)Be!==b&&fl.call(Be,Ge,1),fl.call(b,Ge,1);return b}function Z0(b,T){for(var j=b?T.length:0,Y=j-1;j--;){var ae=T[j];if(j==Y||ae!==be){var be=ae;Cs(ae)?fl.call(b,ae,1):nh(b,ae)}}return b}function eh(b,T){return b+hl(R0()*(T-b+1))}function f2(b,T,j,Y){for(var ae=-1,be=hn(cl((T-b)/(j||1)),0),De=et(be);be--;)De[Y?be:++ae]=b,b+=j;return De}function th(b,T){var j="";if(!b||T<1||T>E)return j;do T%2&&(j+=b),T=hl(T/2),T&&(b+=b);while(T);return j}function rr(b,T){return xh(kd(b,T,ei),b+"")}function l2(b){return O0(yo(b))}function c2(b,T){var j=yo(b);return Al(j,wa(T,0,j.length))}function of(b,T,j,Y){if(!Hr(b))return b;T=Zs(T,b);for(var ae=-1,be=T.length,De=be-1,Be=b;Be!=null&&++aeae?0:ae+T),j=j>ae?ae:j,j<0&&(j+=ae),ae=T>j?0:j-T>>>0,T>>>=0;for(var be=et(ae);++Y>>1,De=b[be];De!==null&&!ui(De)&&(j?De<=T:De=i){var ot=T?null:T2(b);if(ot)return el(ot);De=!1,ae=Zo,Ge=new ba}else Ge=T?[]:Be;e:for(;++Y=Y?b:Ci(b,T,j)}var nd=tx||function(b){return $t.clearTimeout(b)};function id(b,T){if(T)return b.slice();var j=b.length,Y=S0?S0(j):new b.constructor(j);return b.copy(Y),Y}function oh(b){var T=new b.constructor(b.byteLength);return new al(T).set(new al(b)),T}function m2(b,T){var j=T?oh(b.buffer):b.buffer;return new b.constructor(j,b.byteOffset,b.byteLength)}function g2(b){var T=new b.constructor(b.source,We.exec(b));return T.lastIndex=b.lastIndex,T}function v2(b){return tf?Mr(tf.call(b)):{}}function sd(b,T){var j=T?oh(b.buffer):b.buffer;return new b.constructor(j,b.byteOffset,b.length)}function ad(b,T){if(b!==T){var j=b!==e,Y=b===null,ae=b===b,be=ui(b),De=T!==e,Be=T===null,Ge=T===T,ot=ui(T);if(!Be&&!ot&&!be&&b>T||be&&De&&Ge&&!Be&&!ot||Y&&De&&Ge||!j&&Ge||!ae)return 1;if(!Y&&!be&&!ot&&b=Be)return Ge;var ot=j[Y];return Ge*(ot=="desc"?-1:1)}}return b.index-T.index}function od(b,T,j,Y){for(var ae=-1,be=b.length,De=j.length,Be=-1,Ge=T.length,ot=hn(be-De,0),ft=et(Ge+ot),ut=!Y;++Be1?j[ae-1]:e,De=ae>2?j[2]:e;for(be=b.length>3&&typeof be=="function"?(ae--,be):e,De&&Hn(j[0],j[1],De)&&(be=ae<3?e:be,ae=1),T=Mr(T);++Y-1?ae[be?T[De]:De]:e}}function dd(b){return ks(function(T){var j=T.length,Y=j,ae=Si.prototype.thru;for(b&&T.reverse();Y--;){var be=T[Y];if(typeof be!="function")throw new Ti(o);if(ae&&!De&&kl(be)=="wrapper")var De=new Si([],!0)}for(Y=De?Y:j;++Y1&&dr.reverse(),ft&&GeBe))return!1;var ot=be.get(b),ft=be.get(T);if(ot&&ft)return ot==T&&ft==b;var ut=-1,vt=!0,Ft=j&d?new ba:e;for(be.set(b,T),be.set(T,b);++ut1?"& ":"")+T[Y],T=T.join(j>2?", ":" "),b.replace(Nt,`{ +/* [wrapped with `+T+`] */ +`)}function D2(b){return Gt(b)||Ta(b)||!!(A0&&b&&b[A0])}function Cs(b,T){var j=typeof b;return T=T??E,!!T&&(j=="number"||j!="symbol"&&tt.test(b))&&b>-1&&b%1==0&&b0){if(++T>=W)return arguments[0]}else T=0;return b.apply(e,arguments)}}function Al(b,T){var j=-1,Y=b.length,ae=Y-1;for(T=T===e?Y:T;++j1?b[T-1]:e;return j=typeof j=="function"?(b.pop(),j):e,Ld(b,j)});function Ud(b){var T=ge(b);return T.__chain__=!0,T}function Xb(b,T){return T(b),b}function Fl(b,T){return T(b)}var Vb=ks(function(b){var T=b.length,j=T?b[0]:0,Y=this.__wrapped__,ae=function(be){return Xc(be,b)};return T>1||this.__actions__.length||!(Y instanceof hr)||!Cs(j)?this.thru(ae):(Y=Y.slice(j,+j+(T?1:0)),Y.__actions__.push({func:Fl,args:[ae],thisArg:e}),new Si(Y,this.__chain__).thru(function(be){return T&&!be.length&&be.push(e),be}))});function Gb(){return Ud(this)}function Kb(){return new Si(this.value(),this.__chain__)}function Yb(){this.__values__===e&&(this.__values__=qd(this.value()));var b=this.__index__>=this.__values__.length,T=b?e:this.__values__[this.__index__++];return{done:b,value:T}}function Zb(){return this}function Jb(b){for(var T,j=this;j instanceof pl;){var Y=Id(j);Y.__index__=0,Y.__values__=e,T?ae.__wrapped__=Y:T=Y;var ae=Y;j=j.__wrapped__}return ae.__wrapped__=b,T}function Qb(){var b=this.__wrapped__;if(b instanceof hr){var T=b;return this.__actions__.length&&(T=new hr(this)),T=T.reverse(),T.__actions__.push({func:Fl,args:[bh],thisArg:e}),new Si(T,this.__chain__)}return this.thru(bh)}function qb(){return td(this.__wrapped__,this.__actions__)}var ew=yl(function(b,T,j){Tr.call(b,j)?++b[j]:Ts(b,j,1)});function tw(b,T,j){var Y=Gt(b)?ys:Xx;return j&&Hn(b,T,j)&&(T=e),Y(b,Pt(T,3))}function rw(b,T){var j=Gt(b)?is:L0;return j(b,Pt(T,3))}var nw=ud(Od),iw=ud(Dd);function sw(b,T){return En(Rl(b,T),1)}function aw(b,T){return En(Rl(b,T),M)}function ow(b,T,j){return j=j===e?1:Jt(j),En(Rl(b,T),j)}function jd(b,T){var j=Gt(b)?_n:Ks;return j(b,Pt(T,3))}function Hd(b,T){var j=Gt(b)?$i:B0;return j(b,Pt(T,3))}var fw=yl(function(b,T,j){Tr.call(b,j)?b[j].push(T):Ts(b,j,[T])});function lw(b,T,j,Y){b=Qn(b)?b:yo(b),j=j&&!Y?Jt(j):0;var ae=b.length;return j<0&&(j=hn(ae+j,0)),Nl(b)?j<=ae&&b.indexOf(T,j)>-1:!!ae&&Nr(b,T,j)>-1}var cw=rr(function(b,T,j){var Y=-1,ae=typeof T=="function",be=Qn(b)?et(b.length):[];return Ks(b,function(De){be[++Y]=ae?Or(T,De,j):sf(De,T,j)}),be}),hw=yl(function(b,T,j){Ts(b,j,T)});function Rl(b,T){var j=Gt(b)?Ye:z0;return j(b,Pt(T,3))}function uw(b,T,j,Y){return b==null?[]:(Gt(T)||(T=T==null?[]:[T]),j=Y?e:j,Gt(j)||(j=j==null?[]:[j]),K0(b,T,j))}var dw=yl(function(b,T,j){b[j?0:1].push(T)},function(){return[[],[]]});function pw(b,T,j){var Y=Gt(b)?Mt:Yo,ae=arguments.length<3;return Y(b,Pt(T,4),j,ae,Ks)}function mw(b,T,j){var Y=Gt(b)?_t:Yo,ae=arguments.length<3;return Y(b,Pt(T,4),j,ae,B0)}function gw(b,T){var j=Gt(b)?is:L0;return j(b,Ol(Pt(T,3)))}function vw(b){var T=Gt(b)?O0:l2;return T(b)}function xw(b,T,j){(j?Hn(b,T,j):T===e)?T=1:T=Jt(T);var Y=Gt(b)?jx:c2;return Y(b,T)}function bw(b){var T=Gt(b)?Hx:u2;return T(b)}function ww(b){if(b==null)return 0;if(Qn(b))return Nl(b)?co(b):b.length;var T=Fn(b);return T==Q||T==G?b.size:Jc(b).length}function yw(b,T,j){var Y=Gt(b)?Yt:d2;return j&&Hn(b,T,j)&&(T=e),Y(b,Pt(T,3))}var _w=rr(function(b,T){if(b==null)return[];var j=T.length;return j>1&&Hn(b,T[0],T[1])?T=[]:j>2&&Hn(T[0],T[1],T[2])&&(T=[T[0]]),K0(b,En(T,1),[])}),Ml=rx||function(){return $t.Date.now()};function Ew(b,T){if(typeof T!="function")throw new Ti(o);return b=Jt(b),function(){if(--b<1)return T.apply(this,arguments)}}function Wd(b,T,j){return T=j?e:T,T=b&&T==null?b.length:T,Ss(b,F,e,e,e,e,T)}function $d(b,T){var j;if(typeof T!="function")throw new Ti(o);return b=Jt(b),function(){return--b>0&&(j=T.apply(this,arguments)),b<=1&&(T=e),j}}var yh=rr(function(b,T,j){var Y=v;if(j.length){var ae=Vs(j,bo(yh));Y|=_}return Ss(b,Y,T,j,ae)}),zd=rr(function(b,T,j){var Y=v|x;if(j.length){var ae=Vs(j,bo(zd));Y|=_}return Ss(T,Y,b,j,ae)});function Xd(b,T,j){T=j?e:T;var Y=Ss(b,w,e,e,e,e,e,T);return Y.placeholder=Xd.placeholder,Y}function Vd(b,T,j){T=j?e:T;var Y=Ss(b,y,e,e,e,e,e,T);return Y.placeholder=Vd.placeholder,Y}function Gd(b,T,j){var Y,ae,be,De,Be,Ge,ot=0,ft=!1,ut=!1,vt=!0;if(typeof b!="function")throw new Ti(o);T=Fi(T)||0,Hr(j)&&(ft=!!j.leading,ut="maxWait"in j,be=ut?hn(Fi(j.maxWait)||0,T):be,vt="trailing"in j?!!j.trailing:vt);function Ft(Kr){var Yi=Y,Rs=ae;return Y=ae=e,ot=Kr,De=b.apply(Rs,Yi),De}function Lt(Kr){return ot=Kr,Be=cf(lr,T),ft?Ft(Kr):De}function tr(Kr){var Yi=Kr-Ge,Rs=Kr-ot,up=T-Yi;return ut?An(up,be-Rs):up}function Ut(Kr){var Yi=Kr-Ge,Rs=Kr-ot;return Ge===e||Yi>=T||Yi<0||ut&&Rs>=be}function lr(){var Kr=Ml();if(Ut(Kr))return dr(Kr);Be=cf(lr,tr(Kr))}function dr(Kr){return Be=e,vt&&Y?Ft(Kr):(Y=ae=e,De)}function di(){Be!==e&&nd(Be),ot=0,Y=Ge=ae=Be=e}function Wn(){return Be===e?De:dr(Ml())}function pi(){var Kr=Ml(),Yi=Ut(Kr);if(Y=arguments,ae=this,Ge=Kr,Yi){if(Be===e)return Lt(Ge);if(ut)return nd(Be),Be=cf(lr,T),Ft(Ge)}return Be===e&&(Be=cf(lr,T)),De}return pi.cancel=di,pi.flush=Wn,pi}var Tw=rr(function(b,T){return P0(b,1,T)}),Sw=rr(function(b,T,j){return P0(b,Fi(T)||0,j)});function kw(b){return Ss(b,N)}function Il(b,T){if(typeof b!="function"||T!=null&&typeof T!="function")throw new Ti(o);var j=function(){var Y=arguments,ae=T?T.apply(this,Y):Y[0],be=j.cache;if(be.has(ae))return be.get(ae);var De=b.apply(this,Y);return j.cache=be.set(ae,De)||be,De};return j.cache=new(Il.Cache||Es),j}Il.Cache=Es;function Ol(b){if(typeof b!="function")throw new Ti(o);return function(){var T=arguments;switch(T.length){case 0:return!b.call(this);case 1:return!b.call(this,T[0]);case 2:return!b.call(this,T[0],T[1]);case 3:return!b.call(this,T[0],T[1],T[2])}return!b.apply(this,T)}}function Cw(b){return $d(2,b)}var Aw=p2(function(b,T){T=T.length==1&&Gt(T[0])?Ye(T[0],ci(Pt())):Ye(En(T,1),ci(Pt()));var j=T.length;return rr(function(Y){for(var ae=-1,be=An(Y.length,j);++ae=T}),Ta=H0(function(){return arguments}())?H0:function(b){return $r(b)&&Tr.call(b,"callee")&&!C0.call(b,"callee")},Gt=et.isArray,$w=on?ci(on):Jx;function Qn(b){return b!=null&&Dl(b.length)&&!As(b)}function Gr(b){return $r(b)&&Qn(b)}function zw(b){return b===!0||b===!1||$r(b)&&jn(b)==te}var Qs=ix||Oh,Xw=pn?ci(pn):Qx;function Vw(b){return $r(b)&&b.nodeType===1&&!hf(b)}function Gw(b){if(b==null)return!0;if(Qn(b)&&(Gt(b)||typeof b=="string"||typeof b.splice=="function"||Qs(b)||wo(b)||Ta(b)))return!b.length;var T=Fn(b);if(T==Q||T==G)return!b.size;if(lf(b))return!Jc(b).length;for(var j in b)if(Tr.call(b,j))return!1;return!0}function Kw(b,T){return af(b,T)}function Yw(b,T,j){j=typeof j=="function"?j:e;var Y=j?j(b,T):e;return Y===e?af(b,T,e,j):!!Y}function Eh(b){if(!$r(b))return!1;var T=jn(b);return T==Ne||T==he||typeof b.message=="string"&&typeof b.name=="string"&&!hf(b)}function Zw(b){return typeof b=="number"&&F0(b)}function As(b){if(!Hr(b))return!1;var T=jn(b);return T==q||T==ne||T==V||T==se}function Yd(b){return typeof b=="number"&&b==Jt(b)}function Dl(b){return typeof b=="number"&&b>-1&&b%1==0&&b<=E}function Hr(b){var T=typeof b;return b!=null&&(T=="object"||T=="function")}function $r(b){return b!=null&&typeof b=="object"}var Zd=Lr?ci(Lr):e2;function Jw(b,T){return b===T||Zc(b,T,dh(T))}function Qw(b,T,j){return j=typeof j=="function"?j:e,Zc(b,T,dh(T),j)}function qw(b){return Jd(b)&&b!=+b}function ey(b){if(B2(b))throw new Xt(s);return W0(b)}function ty(b){return b===null}function ry(b){return b==null}function Jd(b){return typeof b=="number"||$r(b)&&jn(b)==re}function hf(b){if(!$r(b)||jn(b)!=Ce)return!1;var T=ol(b);if(T===null)return!0;var j=Tr.call(T,"constructor")&&T.constructor;return typeof j=="function"&&j instanceof j&&nl.call(j)==Qv}var Th=qr?ci(qr):t2;function ny(b){return Yd(b)&&b>=-E&&b<=E}var Qd=fn?ci(fn):r2;function Nl(b){return typeof b=="string"||!Gt(b)&&$r(b)&&jn(b)==Z}function ui(b){return typeof b=="symbol"||$r(b)&&jn(b)==de}var wo=fi?ci(fi):n2;function iy(b){return b===e}function sy(b){return $r(b)&&Fn(b)==K}function ay(b){return $r(b)&&jn(b)==Te}var oy=Sl(Qc),fy=Sl(function(b,T){return b<=T});function qd(b){if(!b)return[];if(Qn(b))return Nl(b)?Vi(b):Jn(b);if(Jo&&b[Jo])return jv(b[Jo]());var T=Fn(b),j=T==Q?Uc:T==G?el:yo;return j(b)}function Fs(b){if(!b)return b===0?b:0;if(b=Fi(b),b===M||b===-M){var T=b<0?-1:1;return T*A}return b===b?b:0}function Jt(b){var T=Fs(b),j=T%1;return T===T?j?T-j:T:0}function ep(b){return b?wa(Jt(b),0,L):0}function Fi(b){if(typeof b=="number")return b;if(ui(b))return B;if(Hr(b)){var T=typeof b.valueOf=="function"?b.valueOf():b;b=Hr(T)?T+"":T}if(typeof b!="string")return b===0?b:+b;b=b0(b);var j=Le.test(b);return j||He.test(b)?ze(b.slice(2),j?2:8):Je.test(b)?B:+b}function tp(b){return as(b,qn(b))}function ly(b){return b?wa(Jt(b),-E,E):b===0?b:0}function _r(b){return b==null?"":hi(b)}var cy=vo(function(b,T){if(lf(T)||Qn(T)){as(T,gn(T),b);return}for(var j in T)Tr.call(T,j)&&rf(b,j,T[j])}),rp=vo(function(b,T){as(T,qn(T),b)}),Pl=vo(function(b,T,j,Y){as(T,qn(T),b,Y)}),hy=vo(function(b,T,j,Y){as(T,gn(T),b,Y)}),uy=ks(Xc);function dy(b,T){var j=go(b);return T==null?j:D0(j,T)}var py=rr(function(b,T){b=Mr(b);var j=-1,Y=T.length,ae=Y>2?T[2]:e;for(ae&&Hn(T[0],T[1],ae)&&(Y=1);++j1),be}),as(b,hh(b),j),Y&&(j=ki(j,l|u|p,S2));for(var ae=T.length;ae--;)nh(j,T[ae]);return j});function Iy(b,T){return ip(b,Ol(Pt(T)))}var Oy=ks(function(b,T){return b==null?{}:a2(b,T)});function ip(b,T){if(b==null)return{};var j=Ye(hh(b),function(Y){return[Y]});return T=Pt(T),Y0(b,j,function(Y,ae){return T(Y,ae[0])})}function Dy(b,T,j){T=Zs(T,b);var Y=-1,ae=T.length;for(ae||(ae=1,b=e);++YT){var Y=b;b=T,T=Y}if(j||b%1||T%1){var ae=R0();return An(b+ae*(T-b+ke("1e-"+((ae+"").length-1))),T)}return eh(b,T)}var Xy=xo(function(b,T,j){return T=T.toLowerCase(),b+(j?op(T):T)});function op(b){return Ch(_r(b).toLowerCase())}function fp(b){return b=_r(b),b&&b.replace(me,Nv).replace(Vo,"")}function Vy(b,T,j){b=_r(b),T=hi(T);var Y=b.length;j=j===e?Y:wa(Jt(j),0,Y);var ae=j;return j-=T.length,j>=0&&b.slice(j,ae)==T}function Gy(b){return b=_r(b),b&&wt.test(b)?b.replace(At,Pv):b}function Ky(b){return b=_r(b),b&&Ct.test(b)?b.replace(zt,"\\$&"):b}var Yy=xo(function(b,T,j){return b+(j?"-":"")+T.toLowerCase()}),Zy=xo(function(b,T,j){return b+(j?" ":"")+T.toLowerCase()}),Jy=hd("toLowerCase");function Qy(b,T,j){b=_r(b),T=Jt(T);var Y=T?co(b):0;if(!T||Y>=T)return b;var ae=(T-Y)/2;return Tl(hl(ae),j)+b+Tl(cl(ae),j)}function qy(b,T,j){b=_r(b),T=Jt(T);var Y=T?co(b):0;return T&&Y>>0,j?(b=_r(b),b&&(typeof T=="string"||T!=null&&!Th(T))&&(T=hi(T),!T&&lo(b))?Js(Vi(b),0,j):b.split(T,j)):[]}var a_=xo(function(b,T,j){return b+(j?" ":"")+Ch(T)});function o_(b,T,j){return b=_r(b),j=j==null?0:wa(Jt(j),0,b.length),T=hi(T),b.slice(j,j+T.length)==T}function f_(b,T,j){var Y=ge.templateSettings;j&&Hn(b,T,j)&&(T=e),b=_r(b),T=Pl({},T,Y,xd);var ae=Pl({},T.imports,Y.imports,xd),be=gn(ae),De=Lc(ae,be),Be,Ge,ot=0,ft=T.interpolate||Me,ut="__p += '",vt=jc((T.escape||Me).source+"|"+ft.source+"|"+(ft===xt?_e:Me).source+"|"+(T.evaluate||Me).source+"|$","g"),Ft="//# sourceURL="+(Tr.call(T,"sourceURL")?(T.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ga+"]")+` +`;b.replace(vt,function(Ut,lr,dr,di,Wn,pi){return dr||(dr=di),ut+=b.slice(ot,pi).replace(Re,Bv),lr&&(Be=!0,ut+=`' + +__e(`+lr+`) + +'`),Wn&&(Ge=!0,ut+=`'; +`+Wn+`; +__p += '`),dr&&(ut+=`' + +((__t = (`+dr+`)) == null ? '' : __t) + +'`),ot=pi+Ut.length,Ut}),ut+=`'; +`;var Lt=Tr.call(T,"variable")&&T.variable;if(!Lt)ut=`with (obj) { +`+ut+` +} +`;else if(xe.test(Lt))throw new Xt(h);ut=(Ge?ut.replace(je,""):ut).replace(Ke,"$1").replace(st,"$1;"),ut="function("+(Lt||"obj")+`) { +`+(Lt?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(Be?", __e = _.escape":"")+(Ge?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+ut+`return __p +}`;var tr=cp(function(){return wr(be,Ft+"return "+ut).apply(e,De)});if(tr.source=ut,Eh(tr))throw tr;return tr}function l_(b){return _r(b).toLowerCase()}function c_(b){return _r(b).toUpperCase()}function h_(b,T,j){if(b=_r(b),b&&(j||T===e))return b0(b);if(!b||!(T=hi(T)))return b;var Y=Vi(b),ae=Vi(T),be=w0(Y,ae),De=y0(Y,ae)+1;return Js(Y,be,De).join("")}function u_(b,T,j){if(b=_r(b),b&&(j||T===e))return b.slice(0,E0(b)+1);if(!b||!(T=hi(T)))return b;var Y=Vi(b),ae=y0(Y,Vi(T))+1;return Js(Y,0,ae).join("")}function d_(b,T,j){if(b=_r(b),b&&(j||T===e))return b.replace(Kt,"");if(!b||!(T=hi(T)))return b;var Y=Vi(b),ae=w0(Y,Vi(T));return Js(Y,ae).join("")}function p_(b,T){var j=U,Y=z;if(Hr(T)){var ae="separator"in T?T.separator:ae;j="length"in T?Jt(T.length):j,Y="omission"in T?hi(T.omission):Y}b=_r(b);var be=b.length;if(lo(b)){var De=Vi(b);be=De.length}if(j>=be)return b;var Be=j-co(Y);if(Be<1)return Y;var Ge=De?Js(De,0,Be).join(""):b.slice(0,Be);if(ae===e)return Ge+Y;if(De&&(Be+=Ge.length-Be),Th(ae)){if(b.slice(Be).search(ae)){var ot,ft=Ge;for(ae.global||(ae=jc(ae.source,_r(We.exec(ae))+"g")),ae.lastIndex=0;ot=ae.exec(ft);)var ut=ot.index;Ge=Ge.slice(0,ut===e?Be:ut)}}else if(b.indexOf(hi(ae),Be)!=Be){var vt=Ge.lastIndexOf(ae);vt>-1&&(Ge=Ge.slice(0,vt))}return Ge+Y}function m_(b){return b=_r(b),b&&bt.test(b)?b.replace(St,zv):b}var g_=xo(function(b,T,j){return b+(j?" ":"")+T.toUpperCase()}),Ch=hd("toUpperCase");function lp(b,T,j){return b=_r(b),T=j?e:T,T===e?Uv(b)?Gv(b):en(b):b.match(T)||[]}var cp=rr(function(b,T){try{return Or(b,e,T)}catch(j){return Eh(j)?j:new Xt(j)}}),v_=ks(function(b,T){return _n(T,function(j){j=os(j),Ts(b,j,yh(b[j],b))}),b});function x_(b){var T=b==null?0:b.length,j=Pt();return b=T?Ye(b,function(Y){if(typeof Y[1]!="function")throw new Ti(o);return[j(Y[0]),Y[1]]}):[],rr(function(Y){for(var ae=-1;++aeE)return[];var j=L,Y=An(b,L);T=Pt(T),b-=L;for(var ae=Bc(Y,T);++j0||T<0)?new hr(j):(b<0?j=j.takeRight(-b):b&&(j=j.drop(b)),T!==e&&(T=Jt(T),j=T<0?j.dropRight(-T):j.take(T-b)),j)},hr.prototype.takeRightWhile=function(b){return this.reverse().takeWhile(b).reverse()},hr.prototype.toArray=function(){return this.take(L)},ss(hr.prototype,function(b,T){var j=/^(?:filter|find|map|reject)|While$/.test(T),Y=/^(?:head|last)$/.test(T),ae=ge[Y?"take"+(T=="last"?"Right":""):T],be=Y||/^find/.test(T);ae&&(ge.prototype[T]=function(){var De=this.__wrapped__,Be=Y?[1]:arguments,Ge=De instanceof hr,ot=Be[0],ft=Ge||Gt(De),ut=function(lr){var dr=ae.apply(ge,ht([lr],Be));return Y&&vt?dr[0]:dr};ft&&j&&typeof ot=="function"&&ot.length!=1&&(Ge=ft=!1);var vt=this.__chain__,Ft=!!this.__actions__.length,Lt=be&&!vt,tr=Ge&&!Ft;if(!be&&ft){De=tr?De:new hr(this);var Ut=b.apply(De,Be);return Ut.__actions__.push({func:Fl,args:[ut],thisArg:e}),new Si(Ut,vt)}return Lt&&tr?b.apply(this,Be):(Ut=this.thru(ut),Lt?Y?Ut.value()[0]:Ut.value():Ut)})}),_n(["pop","push","shift","sort","splice","unshift"],function(b){var T=tl[b],j=/^(?:push|sort|unshift)$/.test(b)?"tap":"thru",Y=/^(?:pop|shift)$/.test(b);ge.prototype[b]=function(){var ae=arguments;if(Y&&!this.__chain__){var be=this.value();return T.apply(Gt(be)?be:[],ae)}return this[j](function(De){return T.apply(Gt(De)?De:[],ae)})}}),ss(hr.prototype,function(b,T){var j=ge[T];if(j){var Y=j.name+"";Tr.call(mo,Y)||(mo[Y]=[]),mo[Y].push({name:T,func:j})}}),mo[_l(e,x).name]=[{name:"wrapper",func:e}],hr.prototype.clone=mx,hr.prototype.reverse=gx,hr.prototype.value=vx,ge.prototype.at=Vb,ge.prototype.chain=Gb,ge.prototype.commit=Kb,ge.prototype.next=Yb,ge.prototype.plant=Jb,ge.prototype.reverse=Qb,ge.prototype.toJSON=ge.prototype.valueOf=ge.prototype.value=qb,ge.prototype.first=ge.prototype.head,Jo&&(ge.prototype[Jo]=Zb),ge},ho=Kv();gr?((gr.exports=ho)._=ho,jt._=ho):$t._=ho}).call(Qt)})(dc,dc.exports);var Pu=dc.exports;function Em(t){t=t.replace("#","");for(var r=t.match(/../g),e=0;e<3;e++)r[e]=parseInt(r[e],16);return r}function Tm(t,r,e){for(var n=[t.toString(16),r.toString(16),e.toString(16)],i=0;i<3;i++)n[i].length==1&&(n[i]="0"+n[i]);return"#"+n.join("")}function r8(t,r){for(var e=Em(t),n=0;n<3;n++)e[n]=Math.floor(e[n]*(1-r));return Tm(e[0],e[1],e[2])}function n8(t,r){for(var e=Em(t),n=0;n<3;n++)e[n]=Math.floor((255-e[n])*r+e[n]);return Tm(e[0],e[1],e[2])}/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */var pc={};pc.version="0.18.5";var Sm=1252,i8=[874,932,936,949,950,1250,1251,1252,1253,1254,1255,1256,1257,1258,1e4],Bu={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969},Lu=function(t){i8.indexOf(t)!=-1&&(Sm=Bu[0]=t)};function s8(){Lu(1252)}var es=function(t){Lu(t)};function Uu(){es(1200),s8()}function Vp(t){for(var r=[],e=0,n=t.length;e>1;++e)r[e]=String.fromCharCode(t.charCodeAt(2*e)+(t.charCodeAt(2*e+1)<<8));return r.join("")}function km(t){for(var r=[],e=0;e>1;++e)r[e]=String.fromCharCode(t.charCodeAt(2*e+1)+(t.charCodeAt(2*e)<<8));return r.join("")}var xf=function(t){var r=t.charCodeAt(0),e=t.charCodeAt(1);return r==255&&e==254?a8(t.slice(2)):r==254&&e==255?km(t.slice(2)):r==65279?t.slice(1):t},zl=function(r){return String.fromCharCode(r)},Gp=function(r){return String.fromCharCode(r)},ra,na="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Ff(t){for(var r="",e=0,n=0,i=0,s=0,o=0,h=0,c=0,a=0;a>2,n=t.charCodeAt(a++),o=(e&3)<<4|n>>4,i=t.charCodeAt(a++),h=(n&15)<<2|i>>6,c=i&63,isNaN(n)?h=c=64:isNaN(i)&&(c=64),r+=na.charAt(s)+na.charAt(o)+na.charAt(h)+na.charAt(c);return r}function wi(t){var r="",e=0,n=0,i=0,s=0,o=0,h=0,c=0;t=t.replace(/[^\w\+\/\=]/g,"");for(var a=0;a>4,r+=String.fromCharCode(e),h=na.indexOf(t.charAt(a++)),n=(o&15)<<4|h>>2,h!==64&&(r+=String.fromCharCode(n)),c=na.indexOf(t.charAt(a++)),i=(h&3)<<6|c,c!==64&&(r+=String.fromCharCode(i));return r}var nr=function(){return typeof Buffer<"u"&&typeof process<"u"&&typeof process.versions<"u"&&!!process.versions.node}(),Us=function(){if(typeof Buffer<"u"){var t=!Buffer.from;if(!t)try{Buffer.from("foo","utf8")}catch{t=!0}return t?function(r,e){return e?new Buffer(r,e):new Buffer(r)}:Buffer.from.bind(Buffer)}return function(){}}();function aa(t){return nr?Buffer.alloc?Buffer.alloc(t):new Buffer(t):typeof Uint8Array<"u"?new Uint8Array(t):new Array(t)}function Kp(t){return nr?Buffer.allocUnsafe?Buffer.allocUnsafe(t):new Buffer(t):typeof Uint8Array<"u"?new Uint8Array(t):new Array(t)}var xi=function(r){return nr?Us(r,"binary"):r.split("").map(function(e){return e.charCodeAt(0)&255})};function Ac(t){if(typeof ArrayBuffer>"u")return xi(t);for(var r=new ArrayBuffer(t.length),e=new Uint8Array(r),n=0;n!=t.length;++n)e[n]=t.charCodeAt(n)&255;return r}function ha(t){if(Array.isArray(t))return t.map(function(n){return String.fromCharCode(n)}).join("");for(var r=[],e=0;e"u")throw new Error("Unsupported");return new Uint8Array(t)}function ju(t){if(typeof ArrayBuffer>"u")throw new Error("Unsupported");if(t instanceof ArrayBuffer)return ju(new Uint8Array(t));for(var r=new Array(t.length),e=0;e>6&31,i[e++]=128|o&63;else if(o>=55296&&o<57344){o=(o&1023)+64;var h=t.charCodeAt(++s)&1023;i[e++]=240|o>>8&7,i[e++]=128|o>>2&63,i[e++]=128|h>>6&15|(o&3)<<4,i[e++]=128|h&63}else i[e++]=224|o>>12&15,i[e++]=128|o>>6&63,i[e++]=128|o&63;e>n&&(r.push(i.slice(0,e)),e=0,i=aa(65535),n=65530)}return r.push(i.slice(0,e)),xn(r)}var Xn=/\u0000/g,bf=/[\u0001-\u0006]/g;function Io(t){for(var r="",e=t.length-1;e>=0;)r+=t.charAt(e--);return r}function ts(t,r){var e=""+t;return e.length>=r?e:zr("0",r-e.length)+e}function Hu(t,r){var e=""+t;return e.length>=r?e:zr(" ",r-e.length)+e}function mc(t,r){var e=""+t;return e.length>=r?e:e+zr(" ",r-e.length)}function l8(t,r){var e=""+Math.round(t);return e.length>=r?e:zr("0",r-e.length)+e}function c8(t,r){var e=""+t;return e.length>=r?e:zr("0",r-e.length)+e}var Yp=Math.pow(2,32);function ko(t,r){if(t>Yp||t<-Yp)return l8(t,r);var e=Math.round(t);return c8(e,r)}function gc(t,r){return r=r||0,t.length>=7+r&&(t.charCodeAt(r)|32)===103&&(t.charCodeAt(r+1)|32)===101&&(t.charCodeAt(r+2)|32)===110&&(t.charCodeAt(r+3)|32)===101&&(t.charCodeAt(r+4)|32)===114&&(t.charCodeAt(r+5)|32)===97&&(t.charCodeAt(r+6)|32)===108}var Zp=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],Uh=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function h8(t){return t||(t={}),t[0]="General",t[1]="0",t[2]="0.00",t[3]="#,##0",t[4]="#,##0.00",t[9]="0%",t[10]="0.00%",t[11]="0.00E+00",t[12]="# ?/?",t[13]="# ??/??",t[14]="m/d/yy",t[15]="d-mmm-yy",t[16]="d-mmm",t[17]="mmm-yy",t[18]="h:mm AM/PM",t[19]="h:mm:ss AM/PM",t[20]="h:mm",t[21]="h:mm:ss",t[22]="m/d/yy h:mm",t[37]="#,##0 ;(#,##0)",t[38]="#,##0 ;[Red](#,##0)",t[39]="#,##0.00;(#,##0.00)",t[40]="#,##0.00;[Red](#,##0.00)",t[45]="mm:ss",t[46]="[h]:mm:ss",t[47]="mmss.0",t[48]="##0.0E+0",t[49]="@",t[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',t}var Ht={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},Jp={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},u8={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function vc(t,r,e){for(var n=t<0?-1:1,i=t*n,s=0,o=1,h=0,c=1,a=0,f=0,l=Math.floor(i);ar&&(a>r?(f=c,h=s):(f=a,h=o)),!e)return[0,n*h,f];var u=Math.floor(n*h/f);return[u,n*h-u*f,f]}function Aa(t,r,e){if(t>2958465||t<0)return null;var n=t|0,i=Math.floor(86400*(t-n)),s=0,o=[],h={D:n,T:i,u:86400*(t-n)-i,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(h.u)<1e-6&&(h.u=0),r&&r.date1904&&(n+=1462),h.u>.9999&&(h.u=0,++i==86400&&(h.T=i=0,++n,++h.D)),n===60)o=e?[1317,10,29]:[1900,2,29],s=3;else if(n===0)o=e?[1317,8,29]:[1900,1,0],s=6;else{n>60&&--n;var c=new Date(1900,0,1);c.setDate(c.getDate()+n-1),o=[c.getFullYear(),c.getMonth()+1,c.getDate()],s=c.getDay(),n<60&&(s=(s+6)%7),e&&(s=x8(c,o))}return h.y=o[0],h.m=o[1],h.d=o[2],h.S=i%60,i=Math.floor(i/60),h.M=i%60,i=Math.floor(i/60),h.H=i,h.q=s,h}var Cm=new Date(1899,11,31,0,0,0),d8=Cm.getTime(),p8=new Date(1900,2,1,0,0,0);function Am(t,r){var e=t.getTime();return r?e-=1461*24*60*60*1e3:t>=p8&&(e+=24*60*60*1e3),(e-(d8+(t.getTimezoneOffset()-Cm.getTimezoneOffset())*6e4))/(24*60*60*1e3)}function Wu(t){return t.indexOf(".")==-1?t:t.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function m8(t){return t.indexOf("E")==-1?t:t.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}function g8(t){var r=t<0?12:11,e=Wu(t.toFixed(12));return e.length<=r||(e=t.toPrecision(10),e.length<=r)?e:t.toExponential(5)}function v8(t){var r=Wu(t.toFixed(11));return r.length>(t<0?12:11)||r==="0"||r==="-0"?t.toPrecision(6):r}function Rf(t){var r=Math.floor(Math.log(Math.abs(t))*Math.LOG10E),e;return r>=-4&&r<=-1?e=t.toPrecision(10+r):Math.abs(r)<=9?e=g8(t):r===10?e=t.toFixed(10).substr(0,12):e=v8(t),Wu(m8(e.toUpperCase()))}function Pa(t,r){switch(typeof t){case"string":return t;case"boolean":return t?"TRUE":"FALSE";case"number":return(t|0)===t?t.toString(10):Rf(t);case"undefined":return"";case"object":if(t==null)return"";if(t instanceof Date)return Bi(14,Am(t,r&&r.date1904),r)}throw new Error("unsupported value in General format: "+t)}function x8(t,r){r[0]-=581;var e=t.getDay();return t<60&&(e=(e+6)%7),e}function b8(t,r,e,n){var i="",s=0,o=0,h=e.y,c,a=0;switch(t){case 98:h=e.y+543;case 121:switch(r.length){case 1:case 2:c=h%100,a=2;break;default:c=h%1e4,a=4;break}break;case 109:switch(r.length){case 1:case 2:c=e.m,a=r.length;break;case 3:return Uh[e.m-1][1];case 5:return Uh[e.m-1][0];default:return Uh[e.m-1][2]}break;case 100:switch(r.length){case 1:case 2:c=e.d,a=r.length;break;case 3:return Zp[e.q][0];default:return Zp[e.q][1]}break;case 104:switch(r.length){case 1:case 2:c=1+(e.H+11)%12,a=r.length;break;default:throw"bad hour format: "+r}break;case 72:switch(r.length){case 1:case 2:c=e.H,a=r.length;break;default:throw"bad hour format: "+r}break;case 77:switch(r.length){case 1:case 2:c=e.M,a=r.length;break;default:throw"bad minute format: "+r}break;case 115:if(r!="s"&&r!="ss"&&r!=".0"&&r!=".00"&&r!=".000")throw"bad second format: "+r;return e.u===0&&(r=="s"||r=="ss")?ts(e.S,r.length):(n>=2?o=n===3?1e3:100:o=n===1?10:1,s=Math.round(o*(e.S+e.u)),s>=60*o&&(s=0),r==="s"?s===0?"0":""+s/o:(i=ts(s,2+n),r==="ss"?i.substr(0,2):"."+i.substr(2,r.length-1)));case 90:switch(r){case"[h]":case"[hh]":c=e.D*24+e.H;break;case"[m]":case"[mm]":c=(e.D*24+e.H)*60+e.M;break;case"[s]":case"[ss]":c=((e.D*24+e.H)*60+e.M)*60+Math.round(e.S+e.u);break;default:throw"bad abstime format: "+r}a=r.length===3?1:2;break;case 101:c=h,a=1;break}var f=a>0?ts(c,a):"";return f}function ia(t){var r=3;if(t.length<=r)return t;for(var e=t.length%r,n=t.substr(0,e);e!=t.length;e+=r)n+=(n.length>0?",":"")+t.substr(e,r);return n}var Fm=/%/g;function w8(t,r,e){var n=r.replace(Fm,""),i=r.length-n.length;return Ds(t,n,e*Math.pow(10,2*i))+zr("%",i)}function y8(t,r,e){for(var n=r.length-1;r.charCodeAt(n-1)===44;)--n;return Ds(t,r.substr(0,n),e/Math.pow(10,3*(r.length-n)))}function Rm(t,r){var e,n=t.indexOf("E")-t.indexOf(".")-1;if(t.match(/^#+0.0E\+0$/)){if(r==0)return"0.0E+0";if(r<0)return"-"+Rm(t,-r);var i=t.indexOf(".");i===-1&&(i=t.indexOf("E"));var s=Math.floor(Math.log(r)*Math.LOG10E)%i;if(s<0&&(s+=i),e=(r/Math.pow(10,s)).toPrecision(n+1+(i+s)%i),e.indexOf("e")===-1){var o=Math.floor(Math.log(r)*Math.LOG10E);for(e.indexOf(".")===-1?e=e.charAt(0)+"."+e.substr(1)+"E+"+(o-e.length+s):e+="E+"+(o-s);e.substr(0,2)==="0.";)e=e.charAt(0)+e.substr(2,i)+"."+e.substr(2+i),e=e.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");e=e.replace(/\+-/,"-")}e=e.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function(h,c,a,f){return c+a+f.substr(0,(i+s)%i)+"."+f.substr(s)+"E"})}else e=r.toExponential(n);return t.match(/E\+00$/)&&e.match(/e[+-]\d$/)&&(e=e.substr(0,e.length-1)+"0"+e.charAt(e.length-1)),t.match(/E\-/)&&e.match(/e\+/)&&(e=e.replace(/e\+/,"e")),e.replace("e","E")}var Mm=/# (\?+)( ?)\/( ?)(\d+)/;function _8(t,r,e){var n=parseInt(t[4],10),i=Math.round(r*n),s=Math.floor(i/n),o=i-s*n,h=n;return e+(s===0?"":""+s)+" "+(o===0?zr(" ",t[1].length+1+t[4].length):Hu(o,t[1].length)+t[2]+"/"+t[3]+ts(h,t[4].length))}function E8(t,r,e){return e+(r===0?"":""+r)+zr(" ",t[1].length+2+t[4].length)}var Im=/^#*0*\.([0#]+)/,Om=/\).*[0#]/,Dm=/\(###\) ###\\?-####/;function $n(t){for(var r="",e,n=0;n!=t.length;++n)switch(e=t.charCodeAt(n)){case 35:break;case 63:r+=" ";break;case 48:r+="0";break;default:r+=String.fromCharCode(e)}return r}function Qp(t,r){var e=Math.pow(10,r);return""+Math.round(t*e)/e}function qp(t,r){var e=t-Math.floor(t),n=Math.pow(10,r);return r<(""+Math.round(e*n)).length?0:Math.round(e*n)}function T8(t,r){return r<(""+Math.round((t-Math.floor(t))*Math.pow(10,r))).length?1:0}function S8(t){return t<2147483647&&t>-2147483648?""+(t>=0?t|0:t-1|0):""+Math.floor(t)}function Mi(t,r,e){if(t.charCodeAt(0)===40&&!r.match(Om)){var n=r.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return e>=0?Mi("n",n,e):"("+Mi("n",n,-e)+")"}if(r.charCodeAt(r.length-1)===44)return y8(t,r,e);if(r.indexOf("%")!==-1)return w8(t,r,e);if(r.indexOf("E")!==-1)return Rm(r,e);if(r.charCodeAt(0)===36)return"$"+Mi(t,r.substr(r.charAt(1)==" "?2:1),e);var i,s,o,h,c=Math.abs(e),a=e<0?"-":"";if(r.match(/^00+$/))return a+ko(c,r.length);if(r.match(/^[#?]+$/))return i=ko(e,0),i==="0"&&(i=""),i.length>r.length?i:$n(r.substr(0,r.length-i.length))+i;if(s=r.match(Mm))return _8(s,c,a);if(r.match(/^#+0+$/))return a+ko(c,r.length-r.indexOf("0"));if(s=r.match(Im))return i=Qp(e,s[1].length).replace(/^([^\.]+)$/,"$1."+$n(s[1])).replace(/\.$/,"."+$n(s[1])).replace(/\.(\d*)$/,function(m,d){return"."+d+zr("0",$n(s[1]).length-d.length)}),r.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(r=r.replace(/^#+([0.])/,"$1"),s=r.match(/^(0*)\.(#*)$/))return a+Qp(c,s[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,s[1].length?"0.":".");if(s=r.match(/^#{1,3},##0(\.?)$/))return a+ia(ko(c,0));if(s=r.match(/^#,##0\.([#0]*0)$/))return e<0?"-"+Mi(t,r,-e):ia(""+(Math.floor(e)+T8(e,s[1].length)))+"."+ts(qp(e,s[1].length),s[1].length);if(s=r.match(/^#,#*,#0/))return Mi(t,r.replace(/^#,#*,/,""),e);if(s=r.match(/^([0#]+)(\\?-([0#]+))+$/))return i=Io(Mi(t,r.replace(/[\\-]/g,""),e)),o=0,Io(Io(r.replace(/\\/g,"")).replace(/[0#]/g,function(m){return o=0?cs("n",n,e):"("+cs("n",n,-e)+")"}if(r.charCodeAt(r.length-1)===44)return k8(t,r,e);if(r.indexOf("%")!==-1)return C8(t,r,e);if(r.indexOf("E")!==-1)return Nm(r,e);if(r.charCodeAt(0)===36)return"$"+cs(t,r.substr(r.charAt(1)==" "?2:1),e);var i,s,o,h,c=Math.abs(e),a=e<0?"-":"";if(r.match(/^00+$/))return a+ts(c,r.length);if(r.match(/^[#?]+$/))return i=""+e,e===0&&(i=""),i.length>r.length?i:$n(r.substr(0,r.length-i.length))+i;if(s=r.match(Mm))return E8(s,c,a);if(r.match(/^#+0+$/))return a+ts(c,r.length-r.indexOf("0"));if(s=r.match(Im))return i=(""+e).replace(/^([^\.]+)$/,"$1."+$n(s[1])).replace(/\.$/,"."+$n(s[1])),i=i.replace(/\.(\d*)$/,function(m,d){return"."+d+zr("0",$n(s[1]).length-d.length)}),r.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(r=r.replace(/^#+([0.])/,"$1"),s=r.match(/^(0*)\.(#*)$/))return a+(""+c).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,s[1].length?"0.":".");if(s=r.match(/^#{1,3},##0(\.?)$/))return a+ia(""+c);if(s=r.match(/^#,##0\.([#0]*0)$/))return e<0?"-"+cs(t,r,-e):ia(""+e)+"."+zr("0",s[1].length);if(s=r.match(/^#,#*,#0/))return cs(t,r.replace(/^#,#*,/,""),e);if(s=r.match(/^([0#]+)(\\?-([0#]+))+$/))return i=Io(cs(t,r.replace(/[\\-]/g,""),e)),o=0,Io(Io(r.replace(/\\/g,"")).replace(/[0#]/g,function(m){return o-1||e=="\\"&&t.charAt(r+1)=="-"&&"0#".indexOf(t.charAt(r+2))>-1););break;case"?":for(;t.charAt(++r)===e;);break;case"*":++r,(t.charAt(r)==" "||t.charAt(r)=="*")&&++r;break;case"(":case")":++r;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;r-1;);break;case" ":++r;break;default:++r;break}return!1}function F8(t,r,e,n){for(var i=[],s="",o=0,h="",c="t",a,f,l,u="H";o=12?"P":"A"),d.t="T",u="h",o+=3):t.substr(o,5).toUpperCase()==="AM/PM"?(a!=null&&(d.v=a.H>=12?"PM":"AM"),d.t="T",o+=5,u="h"):t.substr(o,5).toUpperCase()==="上午/下午"?(a!=null&&(d.v=a.H>=12?"下午":"上午"),d.t="T",o+=5,u="h"):(d.t="t",++o),a==null&&d.t==="T")return"";i[i.length]=d,c=h;break;case"[":for(s=h;t.charAt(o++)!=="]"&&o-1&&(s=(s.match(/\$([^-\[\]]*)/)||[])[1]||"$",Uo(t)||(i[i.length]={t:"t",v:s}));break;case".":if(a!=null){for(s=h;++o-1;)s+=h;i[i.length]={t:"n",v:s};break;case"?":for(s=h;t.charAt(++o)===h;)s+=h;i[i.length]={t:h,v:s},c=h;break;case"*":++o,(t.charAt(o)==" "||t.charAt(o)=="*")&&++o;break;case"(":case")":i[i.length]={t:n===1?"t":h,v:h},++o;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(s=h;o-1;)s+=t.charAt(o);i[i.length]={t:"D",v:s};break;case" ":i[i.length]={t:h,v:h},++o;break;case"$":i[i.length]={t:"t",v:"$"},++o;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(h)===-1)throw new Error("unrecognized character "+h+" in "+t);i[i.length]={t:"t",v:h},++o;break}var v=0,x=0,g;for(o=i.length-1,c="t";o>=0;--o)switch(i[o].t){case"h":case"H":i[o].t=u,c="h",v<1&&(v=1);break;case"s":(g=i[o].v.match(/\.0+$/))&&(x=Math.max(x,g[0].length-1)),v<3&&(v=3);case"d":case"y":case"M":case"e":c=i[o].t;break;case"m":c==="s"&&(i[o].t="M",v<2&&(v=2));break;case"X":break;case"Z":v<1&&i[o].v.match(/[Hh]/)&&(v=1),v<2&&i[o].v.match(/[Mm]/)&&(v=2),v<3&&i[o].v.match(/[Ss]/)&&(v=3)}switch(v){case 0:break;case 1:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M),a.M>=60&&(a.M=0,++a.H);break;case 2:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M);break}var w="",y;for(o=0;o0){w.charCodeAt(0)==40?(k=r<0&&w.charCodeAt(0)===45?-r:r,F=Ds("n",w,k)):(k=r<0&&n>1?-r:r,F=Ds("n",w,k),k<0&&i[0]&&i[0].t=="t"&&(F=F.substr(1),i[0].v="-"+i[0].v)),y=F.length-1;var O=i.length;for(o=0;o-1){O=o;break}var N=i.length;if(O===i.length&&F.indexOf("E")===-1){for(o=i.length-1;o>=0;--o)i[o]==null||"n?".indexOf(i[o].t)===-1||(y>=i[o].v.length-1?(y-=i[o].v.length,i[o].v=F.substr(y+1,i[o].v.length)):y<0?i[o].v="":(i[o].v=F.substr(0,y+1),y=-1),i[o].t="t",N=o);y>=0&&N=0;--o)if(!(i[o]==null||"n?".indexOf(i[o].t)===-1)){for(f=i[o].v.indexOf(".")>-1&&o===O?i[o].v.indexOf(".")-1:i[o].v.length-1,_=i[o].v.substr(f+1);f>=0;--f)y>=0&&(i[o].v.charAt(f)==="0"||i[o].v.charAt(f)==="#")&&(_=F.charAt(y--)+_);i[o].v=_,i[o].t="t",N=o}for(y>=0&&N-1&&o===O?i[o].v.indexOf(".")+1:0,_=i[o].v.substr(0,f);f-1&&(k=n>1&&r<0&&o>0&&i[o-1].v==="-"?-r:r,i[o].v=Ds(i[o].t,i[o].v,k),i[o].t="t");var U="";for(o=0;o!==i.length;++o)i[o]!=null&&(U+=i[o].v);return U}var e1=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function t1(t,r){if(r==null)return!1;var e=parseFloat(r[2]);switch(r[1]){case"=":if(t==e)return!0;break;case">":if(t>e)return!0;break;case"<":if(t":if(t!=e)return!0;break;case">=":if(t>=e)return!0;break;case"<=":if(t<=e)return!0;break}return!1}function R8(t,r){var e=A8(t),n=e.length,i=e[n-1].indexOf("@");if(n<4&&i>-1&&--n,e.length>4)throw new Error("cannot find right format for |"+e.join("|")+"|");if(typeof r!="number")return[4,e.length===4||i>-1?e[e.length-1]:"@"];switch(e.length){case 1:e=i>-1?["General","General","General",e[0]]:[e[0],e[0],e[0],"@"];break;case 2:e=i>-1?[e[0],e[0],e[0],e[1]]:[e[0],e[1],e[0],"@"];break;case 3:e=i>-1?[e[0],e[1],e[0],e[2]]:[e[0],e[1],e[2],"@"];break}var s=r>0?e[0]:r<0?e[1]:e[2];if(e[0].indexOf("[")===-1&&e[1].indexOf("[")===-1)return[n,s];if(e[0].match(/\[[=<>]/)!=null||e[1].match(/\[[=<>]/)!=null){var o=e[0].match(e1),h=e[1].match(e1);return t1(r,o)?[n,e[0]]:t1(r,h)?[n,e[1]]:[n,e[o!=null&&h!=null?2:1]]}return[n,s]}function Bi(t,r,e){e==null&&(e={});var n="";switch(typeof t){case"string":t=="m/d/yy"&&e.dateNF?n=e.dateNF:n=t;break;case"number":t==14&&e.dateNF?n=e.dateNF:n=(e.table!=null?e.table:Ht)[t],n==null&&(n=e.table&&e.table[Jp[t]]||Ht[Jp[t]]),n==null&&(n=u8[t]||"General");break}if(gc(n,0))return Pa(r,e);r instanceof Date&&(r=Am(r,e.date1904));var i=R8(n,r);if(gc(i[1]))return Pa(r,e);if(r===!0)r="TRUE";else if(r===!1)r="FALSE";else if(r===""||r==null)return"";return F8(i[1],r,e,i[0])}function Ns(t,r){if(typeof r!="number"){r=+r||-1;for(var e=0;e<392;++e){if(Ht[e]==null){r<0&&(r=e);continue}if(Ht[e]==t){r=e;break}}r<0&&(r=391)}return Ht[r]=t,r}function Fc(t){for(var r=0;r!=392;++r)t[r]!==void 0&&Ns(t[r],r)}function jo(){Ht=h8()}var M8={5:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',23:"General",24:"General",25:"General",26:"General",27:"m/d/yy",28:"m/d/yy",29:"m/d/yy",30:"m/d/yy",31:"m/d/yy",32:"h:mm:ss",33:"h:mm:ss",34:"h:mm:ss",35:"h:mm:ss",36:"m/d/yy",41:'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',50:"m/d/yy",51:"m/d/yy",52:"m/d/yy",53:"m/d/yy",54:"m/d/yy",55:"m/d/yy",56:"m/d/yy",57:"m/d/yy",58:"m/d/yy",59:"0",60:"0.00",61:"#,##0",62:"#,##0.00",63:'"$"#,##0_);\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',67:"0%",68:"0.00%",69:"# ?/?",70:"# ??/??",71:"m/d/yy",72:"m/d/yy",73:"d-mmm-yy",74:"d-mmm",75:"mmm-yy",76:"h:mm",77:"h:mm:ss",78:"m/d/yy h:mm",79:"mm:ss",80:"[h]:mm:ss",81:"mmss.0"},Bm=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;function I8(t){var r=typeof t=="number"?Ht[t]:t;return r=r.replace(Bm,"(\\d+)"),new RegExp("^"+r+"$")}function O8(t,r,e){var n=-1,i=-1,s=-1,o=-1,h=-1,c=-1;(r.match(Bm)||[]).forEach(function(l,u){var p=parseInt(e[u+1],10);switch(l.toLowerCase().charAt(0)){case"y":n=p;break;case"d":s=p;break;case"h":o=p;break;case"s":c=p;break;case"m":o>=0?h=p:i=p;break}}),c>=0&&h==-1&&i>=0&&(h=i,i=-1);var a=(""+(n>=0?n:new Date().getFullYear())).slice(-4)+"-"+("00"+(i>=1?i:1)).slice(-2)+"-"+("00"+(s>=1?s:1)).slice(-2);a.length==7&&(a="0"+a),a.length==8&&(a="20"+a);var f=("00"+(o>=0?o:0)).slice(-2)+":"+("00"+(h>=0?h:0)).slice(-2)+":"+("00"+(c>=0?c:0)).slice(-2);return o==-1&&h==-1&&c==-1?a:n==-1&&i==-1&&s==-1?f:a+"T"+f}var D8=function(){var t={};t.version="1.2.0";function r(){for(var F=0,O=new Array(256),N=0;N!=256;++N)F=N,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,F=F&1?-306674912^F>>>1:F>>>1,O[N]=F;return typeof Int32Array<"u"?new Int32Array(O):O}var e=r();function n(F){var O=0,N=0,U=0,z=typeof Int32Array<"u"?new Int32Array(4096):new Array(4096);for(U=0;U!=256;++U)z[U]=F[U];for(U=0;U!=256;++U)for(N=F[U],O=256+U;O<4096;O+=256)N=z[O]=N>>>8^F[N&255];var W=[];for(U=1;U!=16;++U)W[U-1]=typeof Int32Array<"u"?z.subarray(U*256,U*256+256):z.slice(U*256,U*256+256);return W}var i=n(e),s=i[0],o=i[1],h=i[2],c=i[3],a=i[4],f=i[5],l=i[6],u=i[7],p=i[8],m=i[9],d=i[10],v=i[11],x=i[12],g=i[13],w=i[14];function y(F,O){for(var N=O^-1,U=0,z=F.length;U>>8^e[(N^F.charCodeAt(U++))&255];return~N}function _(F,O){for(var N=O^-1,U=F.length-15,z=0;z>8&255]^x[F[z++]^N>>16&255]^v[F[z++]^N>>>24]^d[F[z++]]^m[F[z++]]^p[F[z++]]^u[F[z++]]^l[F[z++]]^f[F[z++]]^a[F[z++]]^c[F[z++]]^h[F[z++]]^o[F[z++]]^s[F[z++]]^e[F[z++]];for(U+=15;z>>8^e[(N^F[z++])&255];return~N}function k(F,O){for(var N=O^-1,U=0,z=F.length,W=0,X=0;U>>8^e[(N^W)&255]:W<2048?(N=N>>>8^e[(N^(192|W>>6&31))&255],N=N>>>8^e[(N^(128|W&63))&255]):W>=55296&&W<57344?(W=(W&1023)+64,X=F.charCodeAt(U++)&1023,N=N>>>8^e[(N^(240|W>>8&7))&255],N=N>>>8^e[(N^(128|W>>2&63))&255],N=N>>>8^e[(N^(128|X>>6&15|(W&3)<<4))&255],N=N>>>8^e[(N^(128|X&63))&255]):(N=N>>>8^e[(N^(224|W>>12&15))&255],N=N>>>8^e[(N^(128|W>>6&63))&255],N=N>>>8^e[(N^(128|W&63))&255]);return~N}return t.table=e,t.bstr=y,t.buf=_,t.str=k,t}(),It=function(){var r={};r.version="1.2.1";function e(le,Ee){for(var pe=le.split("/"),xe=Ee.split("/"),ye=0,_e=0,We=Math.min(pe.length,xe.length);ye>>1,le.write_shift(2,pe);var xe=Ee.getFullYear()-1980;xe=xe<<4|Ee.getMonth()+1,xe=xe<<5|Ee.getDate(),le.write_shift(2,xe)}function o(le){var Ee=le.read_shift(2)&65535,pe=le.read_shift(2)&65535,xe=new Date,ye=pe&31;pe>>>=5;var _e=pe&15;pe>>>=4,xe.setMilliseconds(0),xe.setFullYear(pe+1980),xe.setMonth(_e-1),xe.setDate(ye);var We=Ee&31;Ee>>>=5;var Je=Ee&63;return Ee>>>=6,xe.setHours(Ee),xe.setMinutes(Je),xe.setSeconds(We<<1),xe}function h(le){Sn(le,0);for(var Ee={},pe=0;le.l<=le.length-4;){var xe=le.read_shift(2),ye=le.read_shift(2),_e=le.l+ye,We={};switch(xe){case 21589:pe=le.read_shift(1),pe&1&&(We.mtime=le.read_shift(4)),ye>5&&(pe&2&&(We.atime=le.read_shift(4)),pe&4&&(We.ctime=le.read_shift(4))),We.mtime&&(We.mt=new Date(We.mtime*1e3));break}le.l=_e,Ee[xe]=We}return Ee}var c;function a(){return c||(c={})}function f(le,Ee){if(le[0]==80&&le[1]==75)return st(le,Ee);if((le[0]|32)==109&&(le[1]|32)==105)return kt(le,Ee);if(le.length<512)throw new Error("CFB file size "+le.length+" < 512");var pe=3,xe=512,ye=0,_e=0,We=0,Je=0,Le=0,Ve=[],He=le.slice(0,512);Sn(He,0);var tt=l(He);switch(pe=tt[0],pe){case 3:xe=512;break;case 4:xe=4096;break;case 0:if(tt[1]==0)return st(le,Ee);default:throw new Error("Major Version: Expected 3 or 4 saw "+pe)}xe!==512&&(He=le.slice(0,xe),Sn(He,28));var me=le.slice(0,xe);u(He,pe);var Me=He.read_shift(4,"i");if(pe===3&&Me!==0)throw new Error("# Directory Sectors: Expected 0 saw "+Me);He.l+=4,We=He.read_shift(4,"i"),He.l+=4,He.chk("00100000","Mini Stream Cutoff Size: "),Je=He.read_shift(4,"i"),ye=He.read_shift(4,"i"),Le=He.read_shift(4,"i"),_e=He.read_shift(4,"i");for(var Re=-1,Qe=0;Qe<109&&(Re=He.read_shift(4,"i"),!(Re<0));++Qe)Ve[Qe]=Re;var lt=p(le,xe);v(Le,_e,lt,xe,Ve);var Et=g(lt,We,Ve,xe);Et[We].name="!Directory",ye>0&&Je!==X&&(Et[Je].name="!MiniFAT"),Et[Ve[0]].name="!FAT",Et.fat_addrs=Ve,Et.ssz=xe;var Ot={},sr=[],Wr=[],Rr=[];w(We,Et,lt,sr,ye,Ot,Wr,Je),m(Wr,Rr,sr),sr.shift();var br={FileIndex:Wr,FullPaths:Rr};return Ee&&Ee.raw&&(br.raw={header:me,sectors:lt}),br}function l(le){if(le[le.l]==80&&le[le.l+1]==75)return[0,0];le.chk(J,"Header Signature: "),le.l+=16;var Ee=le.read_shift(2,"u");return[le.read_shift(2,"u"),Ee]}function u(le,Ee){var pe=9;switch(le.l+=2,pe=le.read_shift(2)){case 9:if(Ee!=3)throw new Error("Sector Shift: Expected 9 saw "+pe);break;case 12:if(Ee!=4)throw new Error("Sector Shift: Expected 12 saw "+pe);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+pe)}le.chk("0600","Mini Sector Shift: "),le.chk("000000000000","Reserved: ")}function p(le,Ee){for(var pe=Math.ceil(le.length/Ee)-1,xe=[],ye=1;ye0&&We>=0;)_e.push(Ee.slice(We*W,We*W+W)),ye-=W,We=Ca(pe,We*4);return _e.length===0?nt(0):xn(_e).slice(0,le.size)}function v(le,Ee,pe,xe,ye){var _e=X;if(le===X){if(Ee!==0)throw new Error("DIFAT chain shorter than expected")}else if(le!==-1){var We=pe[le],Je=(xe>>>2)-1;if(!We)return;for(var Le=0;Le=0;){ye[Le]=!0,_e[_e.length]=Le,We.push(le[Le]);var He=pe[Math.floor(Le*4/xe)];if(Ve=Le*4&Je,xe<4+Ve)throw new Error("FAT boundary crossed: "+Le+" 4 "+xe);if(!le[He])break;Le=Ca(le[He],Ve)}return{nodes:_e,data:d1([We])}}function g(le,Ee,pe,xe){var ye=le.length,_e=[],We=[],Je=[],Le=[],Ve=xe-1,He=0,tt=0,me=0,Me=0;for(He=0;He=ye&&(me-=ye),!We[me]){Le=[];var Re=[];for(tt=me;tt>=0;){Re[tt]=!0,We[tt]=!0,Je[Je.length]=tt,Le.push(le[tt]);var Qe=pe[Math.floor(tt*4/xe)];if(Me=tt*4&Ve,xe<4+Me)throw new Error("FAT boundary crossed: "+tt+" 4 "+xe);if(!le[Qe]||(tt=Ca(le[Qe],Me),Re[tt]))break}_e[me]={nodes:Je,data:d1([Le])}}return _e}function w(le,Ee,pe,xe,ye,_e,We,Je){for(var Le=0,Ve=xe.length?2:0,He=Ee[le].data,tt=0,me=0,Me;tt0&&Le!==X&&(Ee[Le].name="!StreamData")):Qe.size>=4096?(Qe.storage="fat",Ee[Qe.start]===void 0&&(Ee[Qe.start]=x(pe,Qe.start,Ee.fat_addrs,Ee.ssz)),Ee[Qe.start].name=Qe.name,Qe.content=Ee[Qe.start].data.slice(0,Qe.size)):(Qe.storage="minifat",Qe.size<0?Qe.size=0:Le!==X&&Qe.start!==X&&Ee[Le]&&(Qe.content=d(Qe,Ee[Le].data,(Ee[Je]||{}).data))),Qe.content&&Sn(Qe.content,0),_e[Me]=Qe,We.push(Qe)}}function y(le,Ee){return new Date((vi(le,Ee+4)/1e7*Math.pow(2,32)+vi(le,Ee)/1e7-11644473600)*1e3)}function _(le,Ee){return a(),f(c.readFileSync(le),Ee)}function k(le,Ee){var pe=Ee&&Ee.type;switch(pe||nr&&Buffer.isBuffer(le)&&(pe="buffer"),pe||"base64"){case"file":return _(le,Ee);case"base64":return f(xi(wi(le)),Ee);case"binary":return f(xi(le),Ee)}return f(le,Ee)}function F(le,Ee){var pe=Ee||{},xe=pe.root||"Root Entry";if(le.FullPaths||(le.FullPaths=[]),le.FileIndex||(le.FileIndex=[]),le.FullPaths.length!==le.FileIndex.length)throw new Error("inconsistent CFB structure");le.FullPaths.length===0&&(le.FullPaths[0]=xe+"/",le.FileIndex[0]={name:xe,type:5}),pe.CLSID&&(le.FileIndex[0].clsid=pe.CLSID),O(le)}function O(le){var Ee="Sh33tJ5";if(!It.find(le,"/"+Ee)){var pe=nt(4);pe[0]=55,pe[1]=pe[3]=50,pe[2]=54,le.FileIndex.push({name:Ee,type:2,content:pe,size:4,L:69,R:69,C:69}),le.FullPaths.push(le.FullPaths[0]+Ee),N(le)}}function N(le,Ee){F(le);for(var pe=!1,xe=!1,ye=le.FullPaths.length-1;ye>=0;--ye){var _e=le.FileIndex[ye];switch(_e.type){case 0:xe?pe=!0:(le.FileIndex.pop(),le.FullPaths.pop());break;case 1:case 2:case 5:xe=!0,isNaN(_e.R*_e.L*_e.C)&&(pe=!0),_e.R>-1&&_e.L>-1&&_e.R==_e.L&&(pe=!0);break;default:pe=!0;break}}if(!(!pe&&!Ee)){var We=new Date(1987,1,19),Je=0,Le=Object.create?Object.create(null):{},Ve=[];for(ye=0;ye1?1:-1,tt.size=0,tt.type=5;else if(me.slice(-1)=="/"){for(Je=ye+1;Je=Ve.length?-1:Je,Je=ye+1;Je=Ve.length?-1:Je,tt.type=1}else n(le.FullPaths[ye+1]||"")==n(me)&&(tt.R=ye+1),tt.type=2}}}function U(le,Ee){var pe=Ee||{};if(pe.fileType=="mad")return er(le,pe);switch(N(le),pe.fileType){case"zip":return At(le,pe)}var xe=function(Me){for(var Re=0,Qe=0,lt=0;lt0&&(Ot<4096?Re+=Ot+63>>6:Qe+=Ot+511>>9)}}for(var sr=Me.FullPaths.length+3>>2,Wr=Re+7>>3,Rr=Re+127>>7,br=Wr+Qe+sr+Rr,Vr=br+127>>7,yn=Vr<=109?0:Math.ceil((Vr-109)/127);br+Vr+yn+127>>7>Vr;)yn=++Vr<=109?0:Math.ceil((Vr-109)/127);var ar=[1,yn,Vr,Rr,sr,Qe,Re,0];return Me.FileIndex[0].size=Re<<6,ar[7]=(Me.FileIndex[0].start=ar[0]+ar[1]+ar[2]+ar[3]+ar[4]+ar[5])+(ar[6]+7>>3),ar}(le),ye=nt(xe[7]<<9),_e=0,We=0;{for(_e=0;_e<8;++_e)ye.write_shift(1,H[_e]);for(_e=0;_e<8;++_e)ye.write_shift(2,0);for(ye.write_shift(2,62),ye.write_shift(2,3),ye.write_shift(2,65534),ye.write_shift(2,9),ye.write_shift(2,6),_e=0;_e<3;++_e)ye.write_shift(2,0);for(ye.write_shift(4,0),ye.write_shift(4,xe[2]),ye.write_shift(4,xe[0]+xe[1]+xe[2]+xe[3]-1),ye.write_shift(4,0),ye.write_shift(4,4096),ye.write_shift(4,xe[3]?xe[0]+xe[1]+xe[2]-1:X),ye.write_shift(4,xe[3]),ye.write_shift(-4,xe[1]?xe[0]-1:X),ye.write_shift(4,xe[1]),_e=0;_e<109;++_e)ye.write_shift(-4,_e>9)));for(Je(xe[6]+7>>3);ye.l&511;)ye.write_shift(-4,M.ENDOFCHAIN);for(We=_e=0,Le=0;Le=4096)&&(He.start=We,Je(Ve+63>>6)));for(;ye.l&511;)ye.write_shift(-4,M.ENDOFCHAIN);for(_e=0;_e=4096)if(ye.l=He.start+1<<9,nr&&Buffer.isBuffer(He.content))He.content.copy(ye,ye.l,0,He.size),ye.l+=He.size+511&-512;else{for(Le=0;Le0&&He.size<4096)if(nr&&Buffer.isBuffer(He.content))He.content.copy(ye,ye.l,0,He.size),ye.l+=He.size+63&-64;else{for(Le=0;Le>16|Ee>>8|Ee)&255}for(var oe=typeof Uint8Array<"u",he=oe?new Uint8Array(256):[],Ne=0;Ne<256;++Ne)he[Ne]=te(Ne);function q(le,Ee){var pe=he[le&255];return Ee<=8?pe>>>8-Ee:(pe=pe<<8|he[le>>8&255],Ee<=16?pe>>>16-Ee:(pe=pe<<8|he[le>>16&255],pe>>>24-Ee))}function ne(le,Ee){var pe=Ee&7,xe=Ee>>>3;return(le[xe]|(pe<=6?0:le[xe+1]<<8))>>>pe&3}function Q(le,Ee){var pe=Ee&7,xe=Ee>>>3;return(le[xe]|(pe<=5?0:le[xe+1]<<8))>>>pe&7}function re(le,Ee){var pe=Ee&7,xe=Ee>>>3;return(le[xe]|(pe<=4?0:le[xe+1]<<8))>>>pe&15}function ve(le,Ee){var pe=Ee&7,xe=Ee>>>3;return(le[xe]|(pe<=3?0:le[xe+1]<<8))>>>pe&31}function Ce(le,Ee){var pe=Ee&7,xe=Ee>>>3;return(le[xe]|(pe<=1?0:le[xe+1]<<8))>>>pe&127}function ce(le,Ee,pe){var xe=Ee&7,ye=Ee>>>3,_e=(1<>>xe;return pe<8-xe||(We|=le[ye+1]<<8-xe,pe<16-xe)||(We|=le[ye+2]<<16-xe,pe<24-xe)||(We|=le[ye+3]<<24-xe),We&_e}function se(le,Ee,pe){var xe=Ee&7,ye=Ee>>>3;return xe<=5?le[ye]|=(pe&7)<>8-xe),Ee+3}function ee(le,Ee,pe){var xe=Ee&7,ye=Ee>>>3;return pe=(pe&1)<>>3;return pe<<=xe,le[ye]|=pe&255,pe>>>=8,le[ye+1]=pe,Ee+8}function Z(le,Ee,pe){var xe=Ee&7,ye=Ee>>>3;return pe<<=xe,le[ye]|=pe&255,pe>>>=8,le[ye+1]=pe&255,le[ye+2]=pe>>>8,Ee+16}function de(le,Ee){var pe=le.length,xe=2*pe>Ee?2*pe:Ee+5,ye=0;if(pe>=Ee)return le;if(nr){var _e=Kp(xe);if(le.copy)le.copy(_e);else for(;ye>xe-tt,We=(1<=0;--We)Ee[Je|We<0;)Le[Le.l++]=Je[Ve++]}return Le.l}function We(Je,Le){for(var Ve=0,He=0,tt=oe?new Uint16Array(32768):[];He0;)Le[Le.l++]=Je[He++];Ve=Le.l*8;continue}Ve=se(Le,Ve,+(He+me==Je.length)+2);for(var Me=0;me-- >0;){var Re=Je[He];Me=(Me<<5^Re)&32767;var Qe=-1,lt=0;if((Qe=tt[Me])&&(Qe|=He&-32768,Qe>He&&(Qe-=32768),Qe2){Re=ye[lt],Re<=22?Ve=G(Le,Ve,he[Re+1]>>1)-1:(G(Le,Ve,3),Ve+=5,G(Le,Ve,he[Re-23]>>5),Ve+=3);var Et=Re<8?0:Re-4>>2;Et>0&&(Z(Le,Ve,lt-D[Re]),Ve+=Et),Re=Ee[He-Qe],Ve=G(Le,Ve,he[Re]>>3),Ve-=3;var Ot=Re<4?0:Re-2>>1;Ot>0&&(Z(Le,Ve,He-Qe-V[Re]),Ve+=Ot);for(var sr=0;sr>8-Re;for(var Qe=(1<<7-Re)-1;Qe>=0;--Qe)Pe[Me|Qe<>>=3){case 16:for(_e=3+ne(le,Ee),Ee+=2,Me=lt[lt.length-1];_e-- >0;)lt.push(Me);break;case 17:for(_e=3+Q(le,Ee),Ee+=3;_e-- >0;)lt.push(0);break;case 18:for(_e=11+Ce(le,Ee),Ee+=7;_e-- >0;)lt.push(0);break;default:lt.push(Me),Le>>0,Je=0,Le=0;!(xe&1);){if(xe=Q(le,pe),pe+=3,xe>>>1)xe>>1==1?(Je=9,Le=5):(pe=Ze(le,pe),Je=$e,Le=rt);else{pe&7&&(pe+=8-(pe&7));var Ve=le[pe>>>3]|le[(pe>>>3)+1]<<8;if(pe+=32,Ve>0)for(!Ee&&We<_e+Ve&&(ye=de(ye,_e+Ve),We=ye.length);Ve-- >0;)ye[_e++]=le[pe>>>3],pe+=8;continue}for(;;){!Ee&&We<_e+32767&&(ye=de(ye,_e+32767),We=ye.length);var He=ce(le,pe,Je),tt=xe>>>1==1?Te[He]:Fe[He];if(pe+=tt&15,tt>>>=4,!(tt>>>8&255))ye[_e++]=tt;else{if(tt==256)break;tt-=257;var me=tt<8?0:tt-4>>2;me>5&&(me=0);var Me=_e+D[tt];me>0&&(Me+=ce(le,pe,me),pe+=me),He=ce(le,pe,Le),tt=xe>>>1==1?Oe[He]:Ue[He],pe+=tt&15,tt>>>=4;var Re=tt<4?0:tt-2>>1,Qe=V[tt];for(Re>0&&(Qe+=ce(le,pe,Re),pe+=Re),!Ee&&We>>3]:[ye.slice(0,_e),pe+7>>>3]}function je(le,Ee){var pe=le.slice(le.l||0),xe=Se(pe,Ee);return le.l+=xe[1],xe[0]}function Ke(le,Ee){if(le)typeof console<"u"&&console.error(Ee);else throw new Error(Ee)}function st(le,Ee){var pe=le;Sn(pe,0);var xe=[],ye=[],_e={FileIndex:xe,FullPaths:ye};F(_e,{root:Ee.root});for(var We=pe.length-4;(pe[We]!=80||pe[We+1]!=75||pe[We+2]!=5||pe[We+3]!=6)&&We>=0;)--We;pe.l=We+4,pe.l+=4;var Je=pe.read_shift(2);pe.l+=6;var Le=pe.read_shift(4);for(pe.l=Le,We=0;We0&&(pe=pe.slice(0,pe.length-1),pe=pe.slice(0,pe.lastIndexOf("/")+1),_e.slice(0,pe.length)!=pe););var We=(xe[1]||"").match(/boundary="(.*?)"/);if(!We)throw new Error("MAD cannot find boundary");var Je="--"+(We[1]||""),Le=[],Ve=[],He={FileIndex:Le,FullPaths:Ve};F(He);var tt,me=0;for(ye=0;ye=32&&Me<128&&++tt;var Qe=tt>=me*4/5;ye.push(xe),ye.push("Content-Location: "+(pe.root||"file:///C:/SheetJS/")+We),ye.push("Content-Transfer-Encoding: "+(Qe?"quoted-printable":"base64")),ye.push("Content-Type: "+wt(Je,We)),ye.push(""),ye.push(Qe?gt(He):Dt(He))}return ye.push(xe+`--\r +`),ye.join(`\r +`)}function zt(le){var Ee={};return F(Ee,le),Ee}function Ct(le,Ee,pe,xe){var ye=xe&&xe.unsafe;ye||F(le);var _e=!ye&&It.find(le,Ee);if(!_e){var We=le.FullPaths[0];Ee.slice(0,We.length)==We?We=Ee:(We.slice(-1)!="/"&&(We+="/"),We=(We+Ee).replace("//","/")),_e={name:i(Ee),type:2},le.FileIndex.push(_e),le.FullPaths.push(We),ye||It.utils.cfb_gc(le)}return _e.content=pe,_e.size=pe?pe.length:0,xe&&(xe.CLSID&&(_e.clsid=xe.CLSID),xe.mt&&(_e.mt=xe.mt),xe.ct&&(_e.ct=xe.ct)),_e}function Kt(le,Ee){F(le);var pe=It.find(le,Ee);if(pe){for(var xe=0;xe3&&(n=!0),i[s].slice(i[s].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+i[s].slice(i[s].length-1));case"D":e*=24;case"H":e*=60;case"M":if(n)e*=60;else throw new Error("Unsupported ISO Duration Field: M")}r+=e*parseInt(i[s],10)}return r}var i1=new Date("2017-02-19T19:06:09.000Z"),Um=isNaN(i1.getFullYear())?new Date("2/19/17"):i1,j8=Um.getFullYear()==2017;function jr(t,r){var e=new Date(t);if(j8)return r>0?e.setTime(e.getTime()+e.getTimezoneOffset()*60*1e3):r<0&&e.setTime(e.getTime()-e.getTimezoneOffset()*60*1e3),e;if(t instanceof Date)return t;if(Um.getFullYear()==1917&&!isNaN(e.getFullYear())){var n=e.getFullYear();return t.indexOf(""+n)>-1||e.setFullYear(e.getFullYear()+100),e}var i=t.match(/\d+/g)||["2017","2","19","0","0","0"],s=new Date(+i[0],+i[1]-1,+i[2],+i[3]||0,+i[4]||0,+i[5]||0);return t.indexOf("Z")>-1&&(s=new Date(s.getTime()-s.getTimezoneOffset()*60*1e3)),s}function Ba(t,r){if(nr&&Buffer.isBuffer(t)){if(r){if(t[0]==255&&t[1]==254)return ds(t.slice(2).toString("utf16le"));if(t[1]==254&&t[2]==255)return ds(km(t.slice(2).toString("binary")))}return t.toString("binary")}if(typeof TextDecoder<"u")try{if(r){if(t[0]==255&&t[1]==254)return ds(new TextDecoder("utf-16le").decode(t.slice(2)));if(t[0]==254&&t[1]==255)return ds(new TextDecoder("utf-16be").decode(t.slice(2)))}var e={"€":"€","‚":"‚",ƒ:"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰",Š:"Š","‹":"‹",Œ:"Œ",Ž:"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™",š:"š","›":"›",œ:"œ",ž:"ž",Ÿ:"Ÿ"};return Array.isArray(t)&&(t=new Uint8Array(t)),new TextDecoder("latin1").decode(t).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,function(s){return e[s]||s})}catch{}for(var n=[],i=0;i!=t.length;++i)n.push(String.fromCharCode(t[i]));return n.join("")}function Br(t){if(typeof JSON<"u"&&!Array.isArray(t))return JSON.parse(JSON.stringify(t));if(typeof t!="object"||t==null)return t;if(t instanceof Date)return new Date(t.getTime());var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=Br(t[e]));return r}function zr(t,r){for(var e="";e.length3&&H8.indexOf(o)==-1)return e}else if(o.match(/[a-z]/))return e;return n<0||n>8099?e:(i>0||s>1)&&n!=101?r:t.match(/[^-0-9:,\/\\]/)?e:r}var W8=function(){var t="abacaba".split(/(:?b)/i).length==5;return function(e,n,i){if(t||typeof n=="string")return e.split(n);for(var s=e.split(n),o=[s[0]],h=1;h\r +`,z8=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,a1=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/mg,X8=/<[^>]*>/g,Ln=Qr.match(a1)?a1:X8,V8=/<\w*:/,G8=/<(\/?)\w+:/;function Wt(t,r,e){for(var n={},i=0,s=0;i!==t.length&&!((s=t.charCodeAt(i))===32||s===10||s===13);++i);if(r||(n[0]=t.slice(0,i)),i===t.length)return n;var o=t.match(z8),h=0,c="",a=0,f="",l="",u=1;if(o)for(a=0;a!=o.length;++a){for(l=o[a],s=0;s!=l.length&&l.charCodeAt(s)!==61;++s);for(f=l.slice(0,s).trim();l.charCodeAt(s+1)==32;)++s;for(u=(i=l.charCodeAt(s+1))==34||i==39?1:0,c=l.slice(s+1+u,l.length-u),h=0;h!=f.length&&f.charCodeAt(h)!==58;++h);if(h===f.length)f.indexOf("_")>0&&(f=f.slice(0,f.indexOf("_"))),n[f]=c,e||(n[f.toLowerCase()]=c);else{var p=(h===5&&f.slice(0,5)==="xmlns"?"xmlns":"")+f.slice(h+1);if(n[p]&&f.slice(h-3,h)=="ext")continue;n[p]=c,e||(n[p.toLowerCase()]=c)}}return n}function gs(t){return t.replace(G8,"<$1")}var zm={""":'"',"'":"'",">":">","<":"<","&":"&"},Xu=Rc(zm),vr=function(){var t=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/ig,r=/_x([\da-fA-F]{4})_/ig;return function e(n){var i=n+"",s=i.indexOf("-1?16:10))||h}).replace(r,function(h,c){return String.fromCharCode(parseInt(c,16))});var o=i.indexOf("]]>");return e(i.slice(0,s))+i.slice(s+9,o)+e(i.slice(o+3))}}(),Vu=/[&<>'"]/g,K8=/[\u0000-\u0008\u000b-\u001f]/g;function Cr(t){var r=t+"";return r.replace(Vu,function(e){return Xu[e]}).replace(K8,function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"})}function o1(t){return Cr(t).replace(/ /g,"_x0020_")}var Xm=/[\u0000-\u001f]/g;function Gu(t){var r=t+"";return r.replace(Vu,function(e){return Xu[e]}).replace(/\n/g,"
").replace(Xm,function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"})}function Y8(t){var r=t+"";return r.replace(Vu,function(e){return Xu[e]}).replace(Xm,function(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"})}var f1=function(){var t=/&#(\d+);/g;function r(e,n){return String.fromCharCode(parseInt(n,10))}return function(n){return n.replace(t,r)}}();function Z8(t){return t.replace(/(\r\n|[\r\n])/g," ")}function Pr(t){switch(t){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}function jh(t){for(var r="",e=0,n=0,i=0,s=0,o=0,h=0;e191&&n<224){o=(n&31)<<6,o|=i&63,r+=String.fromCharCode(o);continue}if(s=t.charCodeAt(e++),n<240){r+=String.fromCharCode((n&15)<<12|(i&63)<<6|s&63);continue}o=t.charCodeAt(e++),h=((n&7)<<18|(i&63)<<12|(s&63)<<6|o&63)-65536,r+=String.fromCharCode(55296+(h>>>10&1023)),r+=String.fromCharCode(56320+(h&1023))}return r}function l1(t){var r=aa(2*t.length),e,n,i=1,s=0,o=0,h;for(n=0;n>>10&1023),e=56320+(e&1023)),o!==0&&(r[s++]=o&255,r[s++]=o>>>8,o=0),r[s++]=e%256,r[s++]=e>>>8;return r.slice(0,s).toString("ucs2")}function c1(t){return Us(t,"binary").toString("utf8")}var Xl="foo bar baz☃🍣",Fr=nr&&(c1(Xl)==jh(Xl)&&c1||l1(Xl)==jh(Xl)&&l1)||jh,ds=nr?function(t){return Us(t,"utf8").toString("binary")}:function(t){for(var r=[],e=0,n=0,i=0;e>6))),r.push(String.fromCharCode(128+(n&63)));break;case(n>=55296&&n<57344):n-=55296,i=t.charCodeAt(e++)-56320+(n<<10),r.push(String.fromCharCode(240+(i>>18&7))),r.push(String.fromCharCode(144+(i>>12&63))),r.push(String.fromCharCode(128+(i>>6&63))),r.push(String.fromCharCode(128+(i&63)));break;default:r.push(String.fromCharCode(224+(n>>12))),r.push(String.fromCharCode(128+(n>>6&63))),r.push(String.fromCharCode(128+(n&63)))}return r.join("")},If=function(){var t={};return function(e,n){var i=e+"|"+(n||"");return t[i]?t[i]:t[i]=new RegExp("<(?:\\w+:)?"+e+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",n||"")}}(),J8=function(){var t=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map(function(r){return[new RegExp("&"+r[0]+";","ig"),r[1]]});return function(e){for(var n=e.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,` +`).replace(/<[^>]*>/g,""),i=0;i([\\s\\S]*?)","g")}}(),q8=/<\/?(?:vt:)?variant>/g,e5=/<(?:vt:)([^>]*)>([\s\S]*)"+r+""}function Of(t){return Jr(t).map(function(r){return" "+r+'="'+t[r]+'"'}).join("")}function pt(t,r,e){return"<"+t+(e!=null?Of(e):"")+(r!=null?(r.match(Vm)?' xml:space="preserve"':"")+">"+r+""}function pu(t,r){try{return t.toISOString().replace(/\.\d*/,"")}catch(e){if(r)throw e}return""}function t5(t,r){switch(typeof t){case"string":var e=pt("vt:lpwstr",Cr(t));return r&&(e=e.replace(/"/g,"_x0022_")),e;case"number":return pt((t|0)==t?"vt:i4":"vt:r8",Cr(String(t)));case"boolean":return pt("vt:bool",t?"true":"false")}if(t instanceof Date)return pt("vt:filetime",pu(t));throw new Error("Unable to serialize "+t)}function Ku(t){if(nr&&Buffer.isBuffer(t))return t.toString("utf8");if(typeof t=="string")return t;if(typeof Uint8Array<"u"&&t instanceof Uint8Array)return Fr(ha(ju(t)));throw new Error("Bad input format: expected Buffer or string")}var Df=/<(\/?)([^\s?>:\/]+)(?:[\s?:\/][^>]*)?>/mg,un={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},Wa=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],gi={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function r5(t,r){for(var e=1-2*(t[r+7]>>>7),n=((t[r+7]&127)<<4)+(t[r+6]>>>4&15),i=t[r+6]&15,s=5;s>=0;--s)i=i*256+t[r+s];return n==2047?i==0?e*(1/0):NaN:(n==0?n=-1022:(n-=1023,i+=Math.pow(2,52)),e*Math.pow(2,n-52)*i)}function n5(t,r,e){var n=(r<0||1/r==-1/0?1:0)<<7,i=0,s=0,o=n?-r:r;isFinite(o)?o==0?i=s=0:(i=Math.floor(Math.log(o)/Math.LN2),s=o*Math.pow(2,52-i),i<=-1023&&(!isFinite(s)||s>4|n}var u1=function(t){for(var r=[],e=10240,n=0;n0&&Buffer.isBuffer(t[0][0])?Buffer.concat(t[0].map(function(r){return Buffer.isBuffer(r)?r:Us(r)})):u1(t)}:u1,p1=function(t,r,e){for(var n=[],i=r;i0?Vf(t,r+4,r+4+e-1):""},Ym=Km,Zm=function(t,r){var e=vi(t,r);return e>0?Vf(t,r+4,r+4+e-1):""},Jm=Zm,Qm=function(t,r){var e=2*vi(t,r);return e>0?Vf(t,r+4,r+4+e-1):""},qm=Qm,eg=function(r,e){var n=vi(r,e);return n>0?Yu(r,e+4,e+4+n):""},tg=eg,rg=function(t,r){var e=vi(t,r);return e>0?Vf(t,r+4,r+4+e):""},ng=rg,ig=function(t,r){return r5(t,r)},bc=ig,Zu=function(r){return Array.isArray(r)||typeof Uint8Array<"u"&&r instanceof Uint8Array};nr&&(Ym=function(r,e){if(!Buffer.isBuffer(r))return Km(r,e);var n=r.readUInt32LE(e);return n>0?r.toString("utf8",e+4,e+4+n-1):""},Jm=function(r,e){if(!Buffer.isBuffer(r))return Zm(r,e);var n=r.readUInt32LE(e);return n>0?r.toString("utf8",e+4,e+4+n-1):""},qm=function(r,e){if(!Buffer.isBuffer(r))return Qm(r,e);var n=2*r.readUInt32LE(e);return r.toString("utf16le",e+4,e+4+n-1)},tg=function(r,e){if(!Buffer.isBuffer(r))return eg(r,e);var n=r.readUInt32LE(e);return r.toString("utf16le",e+4,e+4+n)},ng=function(r,e){if(!Buffer.isBuffer(r))return rg(r,e);var n=r.readUInt32LE(e);return r.toString("utf8",e+4,e+4+n)},bc=function(r,e){return Buffer.isBuffer(r)?r.readDoubleLE(e):ig(r,e)},Zu=function(r){return Buffer.isBuffer(r)||Array.isArray(r)||typeof Uint8Array<"u"&&r instanceof Uint8Array});var Ro=function(t,r){return t[r]},Os=function(t,r){return t[r+1]*256+t[r]},i5=function(t,r){var e=t[r+1]*256+t[r];return e<32768?e:(65535-e+1)*-1},vi=function(t,r){return t[r+3]*(1<<24)+(t[r+2]<<16)+(t[r+1]<<8)+t[r]},Ca=function(t,r){return t[r+3]<<24|t[r+2]<<16|t[r+1]<<8|t[r]},s5=function(t,r){return t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]};function yf(t,r){var e="",n,i,s=[],o,h,c,a;switch(r){case"dbcs":if(a=this.l,nr&&Buffer.isBuffer(this))e=this.slice(this.l,this.l+2*t).toString("utf16le");else for(c=0;c0?Ca:s5)(this,this.l),this.l+=4,n):(i=vi(this,this.l),this.l+=4,i);case 8:case-8:if(r==="f")return t==8?i=bc(this,this.l):i=bc([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,i;t=8;case 16:e=Gm(this,this.l,t);break}}return this.l+=t,e}var a5=function(t,r,e){t[e]=r&255,t[e+1]=r>>>8&255,t[e+2]=r>>>16&255,t[e+3]=r>>>24&255},o5=function(t,r,e){t[e]=r&255,t[e+1]=r>>8&255,t[e+2]=r>>16&255,t[e+3]=r>>24&255},f5=function(t,r,e){t[e]=r&255,t[e+1]=r>>>8&255};function l5(t,r,e){var n=0,i=0;if(e==="dbcs"){for(i=0;i!=r.length;++i)f5(this,r.charCodeAt(i),this.l+2*i);n=2*r.length}else if(e==="sbcs"){for(r=r.replace(/[^\x00-\x7F]/g,"_"),i=0;i!=r.length;++i)this[this.l+i]=r.charCodeAt(i)&255;n=r.length}else if(e==="hex"){for(;i>8}for(;this.l>>=8,this[this.l+1]=r&255;break;case 3:n=3,this[this.l]=r&255,r>>>=8,this[this.l+1]=r&255,r>>>=8,this[this.l+2]=r&255;break;case 4:n=4,a5(this,r,this.l);break;case 8:if(n=8,e==="f"){n5(this,r,this.l);break}case 16:break;case-4:n=4,o5(this,r,this.l);break}return this.l+=n,this}function sg(t,r){var e=Gm(this,this.l,t.length>>1);if(e!==t)throw new Error(r+"Expected "+t+" saw "+e);this.l+=t.length>>1}function Sn(t,r){t.l=r,t.read_shift=yf,t.chk=sg,t.write_shift=l5}function Bn(t,r){t.l+=r}function nt(t){var r=aa(t);return Sn(r,0),r}function js(t,r,e){if(t){var n,i,s;Sn(t,t.l||0);for(var o=t.length,h=0,c=0;t.ln.l&&(n=n.slice(0,n.l),n.l=n.length),n.length>0&&t.push(n),n=null)},s=function(a){return n&&a=128?1:0)+1,n>=128&&++s,n>=16384&&++s,n>=2097152&&++s;var o=t.next(s);i<=127?o.write_shift(1,i):(o.write_shift(1,(i&127)+128),o.write_shift(1,i>>7));for(var h=0;h!=4;++h)if(n>=128)o.write_shift(1,(n&127)+128),n>>=7;else{o.write_shift(1,n);break}n>0&&Zu(e)&&t.push(e)}}function _f(t,r,e){var n=Br(t);if(r.s?(n.cRel&&(n.c+=r.s.c),n.rRel&&(n.r+=r.s.r)):(n.cRel&&(n.c+=r.c),n.rRel&&(n.r+=r.r)),!e||e.biff<12){for(;n.c>=256;)n.c-=256;for(;n.r>=65536;)n.r-=65536}return n}function v1(t,r,e){var n=Br(t);return n.s=_f(n.s,r.s,e),n.e=_f(n.e,r.s,e),n}function Ef(t,r){if(t.cRel&&t.c<0)for(t=Br(t);t.c<0;)t.c+=r>8?16384:256;if(t.rRel&&t.r<0)for(t=Br(t);t.r<0;)t.r+=r>8?1048576:r>5?65536:16384;var e=Vt(t);return!t.cRel&&t.cRel!=null&&(e=u5(e)),!t.rRel&&t.rRel!=null&&(e=c5(e)),e}function Hh(t,r){return t.s.r==0&&!t.s.rRel&&t.e.r==(r.biff>=12?1048575:r.biff>=8?65536:16384)&&!t.e.rRel?(t.s.cRel?"":"$")+an(t.s.c)+":"+(t.e.cRel?"":"$")+an(t.e.c):t.s.c==0&&!t.s.cRel&&t.e.c==(r.biff>=12?16383:255)&&!t.e.cRel?(t.s.rRel?"":"$")+wn(t.s.r)+":"+(t.e.rRel?"":"$")+wn(t.e.r):Ef(t.s,r.biff)+":"+Ef(t.e,r.biff)}function ag(t){return parseInt(h5(t),10)-1}function wn(t){return""+(t+1)}function c5(t){return t.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function h5(t){return t.replace(/\$(\d+)$/,"$1")}function og(t){for(var r=d5(t),e=0,n=0;n!==r.length;++n)e=26*e+r.charCodeAt(n)-64;return e-1}function an(t){if(t<0)throw new Error("invalid column "+t);var r="";for(++t;t;t=Math.floor((t-1)/26))r=String.fromCharCode((t-1)%26+65)+r;return r}function u5(t){return t.replace(/^([A-Z])/,"$$$1")}function d5(t){return t.replace(/^\$([A-Z])/,"$1")}function dn(t){for(var r=0,e=0,n=0;n=48&&i<=57?r=10*r+(i-48):i>=65&&i<=90&&(e=26*e+(i-64))}return{c:e-1,r:r-1}}function Vt(t){for(var r=t.c+1,e="";r;r=(r-1)/26|0)e=String.fromCharCode((r-1)%26+65)+e;return e+(t.r+1)}function Li(t){var r=t.indexOf(":");return r==-1?{s:dn(t),e:dn(t)}:{s:dn(t.slice(0,r)),e:dn(t.slice(r+1))}}function cr(t,r){return typeof r>"u"||typeof r=="number"?cr(t.s,t.e):(typeof t!="string"&&(t=Vt(t)),typeof r!="string"&&(r=Vt(r)),t==r?t:t+":"+r)}function Er(t){var r={s:{c:0,r:0},e:{c:0,r:0}},e=0,n=0,i=0,s=t.length;for(e=0;n26);++n)e=26*e+i;for(r.s.c=--e,e=0;n9);++n)e=10*e+i;if(r.s.r=--e,n===s||i!=10)return r.e.c=r.s.c,r.e.r=r.s.r,r;for(++n,e=0;n!=s&&!((i=t.charCodeAt(n)-64)<1||i>26);++n)e=26*e+i;for(r.e.c=--e,e=0;n!=s&&!((i=t.charCodeAt(n)-48)<0||i>9);++n)e=10*e+i;return r.e.r=--e,r}function x1(t,r){var e=t.t=="d"&&r instanceof Date;if(t.z!=null)try{return t.w=Bi(t.z,e?Cn(r):r)}catch{}try{return t.w=Bi((t.XF||{}).numFmtId||(e?14:0),e?Cn(r):r)}catch{return""+r}}function oa(t,r,e){return t==null||t.t==null||t.t=="z"?"":t.w!==void 0?t.w:(t.t=="d"&&!t.z&&e&&e.dateNF&&(t.z=e.dateNF),t.t=="e"?Hs[t.v]||t.v:r==null?x1(t,t.v):x1(t,r))}function $a(t,r){var e=r&&r.sheet?r.sheet:"Sheet1",n={};return n[e]=t,{SheetNames:[e],Sheets:n}}function p5(t,r,e){var n=e||{},i=t?Array.isArray(t):n.dense,s=t||(i?[]:{}),o=0,h=0;if(s&&n.origin!=null){if(typeof n.origin=="number")o=n.origin;else{var c=typeof n.origin=="string"?dn(n.origin):n.origin;o=c.r,h=c.c}s["!ref"]||(s["!ref"]="A1:A1")}var a={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(s["!ref"]){var f=Er(s["!ref"]);a.s.c=f.s.c,a.s.r=f.s.r,a.e.c=Math.max(a.e.c,f.e.c),a.e.r=Math.max(a.e.r,f.e.r),o==-1&&(a.e.r=o=f.e.r+1)}for(var l=0;l!=r.length;++l)if(r[l]){if(!Array.isArray(r[l]))throw new Error("aoa_to_sheet expects an array of arrays");for(var u=0;u!=r[l].length;++u)if(!(typeof r[l][u]>"u")){var p={v:r[l][u]},m=o+l,d=h+u;if(a.s.r>m&&(a.s.r=m),a.s.c>d&&(a.s.c=d),a.e.r0&&r.write_shift(0,t,"dbcs"),e?r.slice(0,r.l):r}function g5(t){return{ich:t.read_shift(2),ifnt:t.read_shift(2)}}function v5(t,r){return r||(r=nt(4)),r.write_shift(2,t.ich||0),r.write_shift(2,t.ifnt||0),r}function Ju(t,r){var e=t.l,n=t.read_shift(1),i=Nn(t),s=[],o={t:i,h:i};if(n&1){for(var h=t.read_shift(4),c=0;c!=h;++c)s.push(g5(t));o.r=s}else o.r=[{ich:0,ifnt:0}];return t.l=e+r,o}function x5(t,r){var e=!1;return r==null&&(e=!0,r=nt(15+4*t.t.length)),r.write_shift(1,0),bn(t.t,r),e?r.slice(0,r.l):r}var b5=Ju;function w5(t,r){var e=!1;return r==null&&(e=!0,r=nt(23+4*t.t.length)),r.write_shift(1,1),bn(t.t,r),r.write_shift(4,1),v5({ich:0,ifnt:0},r),e?r.slice(0,r.l):r}function Ui(t){var r=t.read_shift(4),e=t.read_shift(2);return e+=t.read_shift(1)<<16,t.l++,{c:r,iStyleRef:e}}function za(t,r){return r==null&&(r=nt(8)),r.write_shift(-4,t.c),r.write_shift(3,t.iStyleRef||t.s),r.write_shift(1,0),r}function Xa(t){var r=t.read_shift(2);return r+=t.read_shift(1)<<16,t.l++,{c:-1,iStyleRef:r}}function Va(t,r){return r==null&&(r=nt(4)),r.write_shift(3,t.iStyleRef||t.s),r.write_shift(1,0),r}var y5=Nn,fg=bn;function Qu(t){var r=t.read_shift(4);return r===0||r===4294967295?"":t.read_shift(r,"dbcs")}function wc(t,r){var e=!1;return r==null&&(e=!0,r=nt(127)),r.write_shift(4,t.length>0?t.length:4294967295),t.length>0&&r.write_shift(0,t,"dbcs"),e?r.slice(0,r.l):r}var _5=Nn,mu=Qu,qu=wc;function e0(t){var r=t.slice(t.l,t.l+4),e=r[0]&1,n=r[0]&2;t.l+=4;var i=n===0?bc([0,0,0,0,r[0]&252,r[1],r[2],r[3]],0):Ca(r,0)>>2;return e?i/100:i}function lg(t,r){r==null&&(r=nt(4));var e=0,n=0,i=t*100;if(t==(t|0)&&t>=-(1<<29)&&t<1<<29?n=1:i==(i|0)&&i>=-(1<<29)&&i<1<<29&&(n=1,e=1),n)r.write_shift(-4,((e?i:t)<<2)+(e+2));else throw new Error("unsupported RkNumber "+t)}function cg(t){var r={s:{},e:{}};return r.s.r=t.read_shift(4),r.e.r=t.read_shift(4),r.s.c=t.read_shift(4),r.e.c=t.read_shift(4),r}function E5(t,r){return r||(r=nt(16)),r.write_shift(4,t.s.r),r.write_shift(4,t.e.r),r.write_shift(4,t.s.c),r.write_shift(4,t.e.c),r}var Ga=cg,Ho=E5;function Dn(t){if(t.length-t.l<8)throw"XLS Xnum Buffer underflow";return t.read_shift(8,"f")}function La(t,r){return(r||nt(8)).write_shift(8,t,"f")}function T5(t){var r={},e=t.read_shift(1),n=e>>>1,i=t.read_shift(1),s=t.read_shift(2,"i"),o=t.read_shift(1),h=t.read_shift(1),c=t.read_shift(1);switch(t.l++,n){case 0:r.auto=1;break;case 1:r.index=i;var a=Ma[i];a&&(r.rgb=Pf(a));break;case 2:r.rgb=Pf([o,h,c]);break;case 3:r.theme=i;break}return s!=0&&(r.tint=s>0?s/32767:s/32768),r}function yc(t,r){if(r||(r=nt(8)),!t||t.auto)return r.write_shift(4,0),r.write_shift(4,0),r;t.index!=null?(r.write_shift(1,2),r.write_shift(1,t.index)):t.theme!=null?(r.write_shift(1,6),r.write_shift(1,t.theme)):(r.write_shift(1,5),r.write_shift(1,0));var e=t.tint||0;if(e>0?e*=32767:e<0&&(e*=32768),r.write_shift(2,e),!t.rgb||t.theme!=null)r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0);else{var n=t.rgb||"FFFFFF";typeof n=="number"&&(n=("000000"+n.toString(16)).slice(-6)),r.write_shift(1,parseInt(n.slice(0,2),16)),r.write_shift(1,parseInt(n.slice(2,4),16)),r.write_shift(1,parseInt(n.slice(4,6),16)),r.write_shift(1,255)}return r}function S5(t){var r=t.read_shift(1);t.l++;var e={fBold:r&1,fItalic:r&2,fUnderline:r&4,fStrikeout:r&8,fOutline:r&16,fShadow:r&32,fCondense:r&64,fExtend:r&128};return e}function k5(t,r){r||(r=nt(2));var e=(t.italic?2:0)|(t.strike?8:0)|(t.outline?16:0)|(t.shadow?32:0)|(t.condense?64:0)|(t.extend?128:0);return r.write_shift(1,e),r.write_shift(1,0),r}function hg(t,r){var e={2:"BITMAP",3:"METAFILEPICT",8:"DIB",14:"ENHMETAFILE"},n=t.read_shift(4);switch(n){case 0:return"";case 4294967295:case 4294967294:return e[t.read_shift(4)]||""}if(n>400)throw new Error("Unsupported Clipboard: "+n.toString(16));return t.l-=4,t.read_shift(0,r==1?"lpstr":"lpwstr")}function C5(t){return hg(t,1)}function A5(t){return hg(t,2)}var t0=2,ti=3,Vl=11,b1=12,_c=19,Gl=64,F5=65,R5=71,M5=4108,I5=4126,vn=80,ug=81,O5=[vn,ug],gu={1:{n:"CodePage",t:t0},2:{n:"Category",t:vn},3:{n:"PresentationFormat",t:vn},4:{n:"ByteCount",t:ti},5:{n:"LineCount",t:ti},6:{n:"ParagraphCount",t:ti},7:{n:"SlideCount",t:ti},8:{n:"NoteCount",t:ti},9:{n:"HiddenCount",t:ti},10:{n:"MultimediaClipCount",t:ti},11:{n:"ScaleCrop",t:Vl},12:{n:"HeadingPairs",t:M5},13:{n:"TitlesOfParts",t:I5},14:{n:"Manager",t:vn},15:{n:"Company",t:vn},16:{n:"LinksUpToDate",t:Vl},17:{n:"CharacterCount",t:ti},19:{n:"SharedDoc",t:Vl},22:{n:"HyperlinksChanged",t:Vl},23:{n:"AppVersion",t:ti,p:"version"},24:{n:"DigSig",t:F5},26:{n:"ContentType",t:vn},27:{n:"ContentStatus",t:vn},28:{n:"Language",t:vn},29:{n:"Version",t:vn},255:{},2147483648:{n:"Locale",t:_c},2147483651:{n:"Behavior",t:_c},1919054434:{}},vu={1:{n:"CodePage",t:t0},2:{n:"Title",t:vn},3:{n:"Subject",t:vn},4:{n:"Author",t:vn},5:{n:"Keywords",t:vn},6:{n:"Comments",t:vn},7:{n:"Template",t:vn},8:{n:"LastAuthor",t:vn},9:{n:"RevNumber",t:vn},10:{n:"EditTime",t:Gl},11:{n:"LastPrinted",t:Gl},12:{n:"CreatedDate",t:Gl},13:{n:"ModifiedDate",t:Gl},14:{n:"PageCount",t:ti},15:{n:"WordCount",t:ti},16:{n:"CharCount",t:ti},17:{n:"Thumbnail",t:R5},18:{n:"Application",t:vn},19:{n:"DocSecurity",t:ti},255:{},2147483648:{n:"Locale",t:_c},2147483651:{n:"Behavior",t:_c},1919054434:{}},w1={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"},D5=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function N5(t){return t.map(function(r){return[r>>16&255,r>>8&255,r&255]})}var P5=N5([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Ma=Br(P5),Hs={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},dg={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#WTF?":255},xu={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"TODO","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},Kl={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function r0(){return{workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""}}function B5(t){var r=r0();if(!t||!t.match)return r;var e={};if((t.match(Ln)||[]).forEach(function(n){var i=Wt(n);switch(i[0].replace(V8,"<")){case"0?r.calcchains[0]:"",r.sst=r.strs.length>0?r.strs[0]:"",r.style=r.styles.length>0?r.styles[0]:"",r.defaults=e,delete r.calcchains,r}function pg(t,r){var e=B8(xu),n=[],i;n[n.length]=Qr,n[n.length]=pt("Types",null,{xmlns:un.CT,"xmlns:xsd":un.xsd,"xmlns:xsi":un.xsi}),n=n.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map(function(c){return pt("Default",null,{Extension:c[0],ContentType:c[1]})}));var s=function(c){t[c]&&t[c].length>0&&(i=t[c][0],n[n.length]=pt("Override",null,{PartName:(i[0]=="/"?"":"/")+i,ContentType:Kl[c][r.bookType]||Kl[c].xlsx}))},o=function(c){(t[c]||[]).forEach(function(a){n[n.length]=pt("Override",null,{PartName:(a[0]=="/"?"":"/")+a,ContentType:Kl[c][r.bookType]||Kl[c].xlsx})})},h=function(c){(t[c]||[]).forEach(function(a){n[n.length]=pt("Override",null,{PartName:(a[0]=="/"?"":"/")+a,ContentType:e[c][0]})})};return s("workbooks"),o("sheets"),o("charts"),h("themes"),["strs","styles"].forEach(s),["coreprops","extprops","custprops"].forEach(h),h("vba"),h("comments"),h("threadedcomments"),h("drawings"),o("metadata"),h("people"),n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var fr={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Nf(t){var r=t.lastIndexOf("/");return t.slice(0,r+1)+"_rels/"+t.slice(r+1)+".rels"}function Tf(t,r){var e={"!id":{}};if(!t)return e;r.charAt(0)!=="/"&&(r="/"+r);var n={};return(t.match(Ln)||[]).forEach(function(i){var s=Wt(i);if(s[0]==="2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function kr(t,r,e,n,i,s){if(i||(i={}),t["!id"]||(t["!id"]={}),t["!idx"]||(t["!idx"]=1),r<0)for(r=t["!idx"];t["!id"]["rId"+r];++r);if(t["!idx"]=r+1,i.Id="rId"+r,i.Type=n,i.Target=e,s?i.TargetMode=s:[fr.HLINK,fr.XPATH,fr.XMISS].indexOf(i.Type)>-1&&(i.TargetMode="External"),t["!id"][i.Id])throw new Error("Cannot rewrite rId "+r);return t["!id"][i.Id]=i,t[("/"+i.Target).replace("//","/")]=i,r}var L5="application/vnd.oasis.opendocument.spreadsheet";function U5(t,r){for(var e=Ku(t),n,i;n=Df.exec(e);)switch(n[3]){case"manifest":break;case"file-entry":if(i=Wt(n[0],!1),i.path=="/"&&i.type!==L5)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(r&&r.WTF)throw n}}function j5(t){var r=[Qr];r.push(` +`),r.push(` +`);for(var e=0;e +`);return r.push(""),r.join("")}function y1(t,r,e){return[' +`,' +`,` +`].join("")}function H5(t,r){return[' +`,' +`,` +`].join("")}function W5(t){var r=[Qr];r.push(` +`);for(var e=0;e!=t.length;++e)r.push(y1(t[e][0],t[e][1])),r.push(H5("",t[e][0]));return r.push(y1("","Document","pkg")),r.push(""),r.join("")}function mg(){return'SheetJS '+pc.version+""}var Pi=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]],$5=function(){for(var t=new Array(Pi.length),r=0;r]*>([\\s\\S]*?)")}return t}();function gg(t){var r={};t=Fr(t);for(var e=0;e0&&(r[n[1]]=vr(i[1])),n[2]==="date"&&r[n[1]]&&(r[n[1]]=jr(r[n[1]]))}return r}function Wh(t,r,e,n,i){i[t]!=null||r==null||r===""||(i[t]=r,r=Cr(r),n[n.length]=e?pt(t,r,e):kn(t,r))}function vg(t,r){var e=r||{},n=[Qr,pt("cp:coreProperties",null,{"xmlns:cp":un.CORE_PROPS,"xmlns:dc":un.dc,"xmlns:dcterms":un.dcterms,"xmlns:dcmitype":un.dcmitype,"xmlns:xsi":un.xsi})],i={};if(!t&&!e.Props)return n.join("");t&&(t.CreatedDate!=null&&Wh("dcterms:created",typeof t.CreatedDate=="string"?t.CreatedDate:pu(t.CreatedDate,e.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i),t.ModifiedDate!=null&&Wh("dcterms:modified",typeof t.ModifiedDate=="string"?t.ModifiedDate:pu(t.ModifiedDate,e.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i));for(var s=0;s!=Pi.length;++s){var o=Pi[s],h=e.Props&&e.Props[o[1]]!=null?e.Props[o[1]]:t?t[o[1]]:null;h===!0?h="1":h===!1?h="0":typeof h=="number"&&(h=String(h)),h!=null&&Wh(o[0],h,null,n,i)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var Ia=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]],xg=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function bg(t,r,e,n){var i=[];if(typeof t=="string")i=h1(t,n);else for(var s=0;s0)for(var a=0;a!==i.length;a+=2){switch(c=+i[a+1].v,i[a].v){case"Worksheets":case"工作表":case"Листы":case"أوراق العمل":case"ワークシート":case"גליונות עבודה":case"Arbeitsblätter":case"Çalışma Sayfaları":case"Feuilles de calcul":case"Fogli di lavoro":case"Folhas de cálculo":case"Planilhas":case"Regneark":case"Hojas de cálculo":case"Werkbladen":e.Worksheets=c,e.SheetNames=o.slice(h,h+c);break;case"Named Ranges":case"Rangos con nombre":case"名前付き一覧":case"Benannte Bereiche":case"Navngivne områder":e.NamedRanges=c,e.DefinedNames=o.slice(h,h+c);break;case"Charts":case"Diagramme":e.Chartsheets=c,e.ChartNames=o.slice(h,h+c);break}h+=c}}function z5(t,r,e){var n={};return r||(r={}),t=Fr(t),Ia.forEach(function(i){var s=(t.match(If(i[0]))||[])[1];switch(i[2]){case"string":s&&(r[i[1]]=vr(s));break;case"bool":r[i[1]]=s==="true";break;case"raw":var o=t.match(new RegExp("<"+i[0]+"[^>]*>([\\s\\S]*?)"));o&&o.length>0&&(n[i[1]]=o[1]);break}}),n.HeadingPairs&&n.TitlesOfParts&&bg(n.HeadingPairs,n.TitlesOfParts,r,e),r}function wg(t){var r=[],e=pt;return t||(t={}),t.Application="SheetJS",r[r.length]=Qr,r[r.length]=pt("Properties",null,{xmlns:un.EXT_PROPS,"xmlns:vt":un.vt}),Ia.forEach(function(n){if(t[n[1]]!==void 0){var i;switch(n[2]){case"string":i=Cr(String(t[n[1]]));break;case"bool":i=t[n[1]]?"true":"false";break}i!==void 0&&(r[r.length]=e(n[0],i))}}),r[r.length]=e("HeadingPairs",e("vt:vector",e("vt:variant","Worksheets")+e("vt:variant",e("vt:i4",String(t.Worksheets))),{size:2,baseType:"variant"})),r[r.length]=e("TitlesOfParts",e("vt:vector",t.SheetNames.map(function(n){return""+Cr(n)+""}).join(""),{size:t.Worksheets,baseType:"lpstr"})),r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}var X5=/<[^>]+>[^<]*/g;function V5(t,r){var e={},n="",i=t.match(X5);if(i)for(var s=0;s!=i.length;++s){var o=i[s],h=Wt(o);switch(h[0]){case"":n=null;break;default:if(o.indexOf(""),a=c[0].slice(4),f=c[1];switch(a){case"lpstr":case"bstr":case"lpwstr":e[n]=vr(f);break;case"bool":e[n]=Pr(f);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":e[n]=parseInt(f,10);break;case"r4":case"r8":case"decimal":e[n]=parseFloat(f);break;case"filetime":case"date":e[n]=jr(f);break;case"cy":case"error":e[n]=vr(f);break;default:if(a.slice(-1)=="/")break;r.WTF&&typeof console<"u"&&console.warn("Unexpected",o,a,c)}}else if(o.slice(0,2)!=="2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}var bu={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"},$h;function G5(t,r,e){$h||($h=Rc(bu)),r=$h[r]||r,t[r]=e}function K5(t,r){var e=[];return Jr(bu).map(function(n){for(var i=0;i'+i.join("")+""}function n0(t){var r=t.read_shift(4),e=t.read_shift(4);return new Date((e/1e7*Math.pow(2,32)+r/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function Z5(t){var r=typeof t=="string"?new Date(Date.parse(t)):t,e=r.getTime()/1e3+11644473600,n=e%Math.pow(2,32),i=(e-n)/Math.pow(2,32);n*=1e7,i*=1e7;var s=n/Math.pow(2,32)|0;s>0&&(n=n%Math.pow(2,32),i+=s);var o=nt(8);return o.write_shift(4,n),o.write_shift(4,i),o}function _g(t,r,e){var n=t.l,i=t.read_shift(0,"lpstr-cp");if(e)for(;t.l-n&3;)++t.l;return i}function Eg(t,r,e){var n=t.read_shift(0,"lpwstr");return e&&(t.l+=4-(n.length+1&3)&3),n}function Tg(t,r,e){return r===31?Eg(t):_g(t,r,e)}function wu(t,r,e){return Tg(t,r,e===!1?0:4)}function J5(t,r){if(!r)throw new Error("VtUnalignedString must have positive length");return Tg(t,r,0)}function Q5(t){for(var r=t.read_shift(4),e=[],n=0;n!=r;++n){var i=t.l;e[n]=t.read_shift(0,"lpwstr").replace(Xn,""),t.l-i&2&&(t.l+=2)}return e}function q5(t){for(var r=t.read_shift(4),e=[],n=0;n!=r;++n)e[n]=t.read_shift(0,"lpstr-cp").replace(Xn,"");return e}function eE(t){var r=t.l,e=Ec(t,ug);t[t.l]==0&&t[t.l+1]==0&&t.l-r&2&&(t.l+=2);var n=Ec(t,ti);return[e,n]}function tE(t){for(var r=t.read_shift(4),e=[],n=0;n>2+1<<2),n}function Sg(t){var r=t.read_shift(4),e=t.slice(t.l,t.l+r);return t.l+=r,(r&3)>0&&(t.l+=4-(r&3)&3),e}function rE(t){var r={};return r.Size=t.read_shift(4),t.l+=r.Size+3-(r.Size-1)%4,r}function Ec(t,r,e){var n=t.read_shift(2),i,s=e||{};if(t.l+=2,r!==b1&&n!==r&&O5.indexOf(r)===-1&&!((r&65534)==4126&&(n&65534)==4126))throw new Error("Expected type "+r+" saw "+n);switch(r===b1?n:r){case 2:return i=t.read_shift(2,"i"),s.raw||(t.l+=2),i;case 3:return i=t.read_shift(4,"i"),i;case 11:return t.read_shift(4)!==0;case 19:return i=t.read_shift(4),i;case 30:return _g(t,n,4).replace(Xn,"");case 31:return Eg(t);case 64:return n0(t);case 65:return Sg(t);case 71:return rE(t);case 80:return wu(t,n,!s.raw).replace(Xn,"");case 81:return J5(t,n).replace(Xn,"");case 4108:return tE(t);case 4126:case 4127:return n==4127?Q5(t):q5(t);default:throw new Error("TypedPropertyValue unrecognized type "+r+" "+n)}}function E1(t,r){var e=nt(4),n=nt(4);switch(e.write_shift(4,t==80?31:t),t){case 3:n.write_shift(-4,r);break;case 5:n=nt(8),n.write_shift(8,r,"f");break;case 11:n.write_shift(4,r?1:0);break;case 64:n=Z5(r);break;case 31:case 80:for(n=nt(4+2*(r.length+1)+(r.length%2?0:2)),n.write_shift(4,r.length+1),n.write_shift(0,r,"dbcs");n.l!=n.length;)n.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+t+" "+r)}return xn([e,n])}function T1(t,r){var e=t.l,n=t.read_shift(4),i=t.read_shift(4),s=[],o=0,h=0,c=-1,a={};for(o=0;o!=i;++o){var f=t.read_shift(4),l=t.read_shift(4);s[o]=[f,l+e]}s.sort(function(g,w){return g[1]-w[1]});var u={};for(o=0;o!=i;++o){if(t.l!==s[o][1]){var p=!0;if(o>0&&r)switch(r[s[o-1][0]].t){case 2:t.l+2===s[o][1]&&(t.l+=2,p=!1);break;case 80:t.l<=s[o][1]&&(t.l=s[o][1],p=!1);break;case 4108:t.l<=s[o][1]&&(t.l=s[o][1],p=!1);break}if((!r||o==0)&&t.l<=s[o][1]&&(p=!1,t.l=s[o][1]),p)throw new Error("Read Error: Expected address "+s[o][1]+" at "+t.l+" :"+o)}if(r){var m=r[s[o][0]];if(u[m.n]=Ec(t,m.t,{raw:!0}),m.p==="version"&&(u[m.n]=String(u[m.n]>>16)+"."+("0000"+String(u[m.n]&65535)).slice(-4)),m.n=="CodePage")switch(u[m.n]){case 0:u[m.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:es(h=u[m.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+u[m.n])}}else if(s[o][0]===1){if(h=u.CodePage=Ec(t,t0),es(h),c!==-1){var d=t.l;t.l=s[c][1],a=_1(t,h),t.l=d}}else if(s[o][0]===0){if(h===0){c=o,t.l=s[o+1][1];continue}a=_1(t,h)}else{var v=a[s[o][0]],x;switch(t[t.l]){case 65:t.l+=4,x=Sg(t);break;case 30:t.l+=4,x=wu(t,t[t.l-4]).replace(/\u0000+$/,"");break;case 31:t.l+=4,x=wu(t,t[t.l-4]).replace(/\u0000+$/,"");break;case 3:t.l+=4,x=t.read_shift(4,"i");break;case 19:t.l+=4,x=t.read_shift(4);break;case 5:t.l+=4,x=t.read_shift(8,"f");break;case 11:t.l+=4,x=Yr(t,4);break;case 64:t.l+=4,x=jr(n0(t));break;default:throw new Error("unparsed value: "+t[t.l])}u[v]=x}}return t.l=e+n,u}var kg=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function nE(t){switch(typeof t){case"boolean":return 11;case"number":return(t|0)==t?3:5;case"string":return 31;case"object":if(t instanceof Date)return 64;break}return-1}function S1(t,r,e){var n=nt(8),i=[],s=[],o=8,h=0,c=nt(8),a=nt(8);if(c.write_shift(4,2),c.write_shift(4,1200),a.write_shift(4,1),s.push(c),i.push(a),o+=8+c.length,!r){a=nt(8),a.write_shift(4,0),i.unshift(a);var f=[nt(4)];for(f[0].write_shift(4,t.length),h=0;h-1||xg.indexOf(t[h][0])>-1)&&t[h][1]!=null){var u=t[h][1],p=0;if(r){p=+r[t[h][0]];var m=e[p];if(m.p=="version"&&typeof u=="string"){var d=u.split(".");u=(+d[0]<<16)+(+d[1]||0)}c=E1(m.t,u)}else{var v=nE(u);v==-1&&(v=31,u=String(u)),c=E1(v,u)}s.push(c),a=nt(8),a.write_shift(4,r?p:2+h),i.push(a),o+=8+c.length}var x=8*(s.length+1);for(h=0;h=12?2:1),i="sbcs-cont";if(e&&e.biff>=8,!e||e.biff==8){var s=t.read_shift(1);s&&(i="dbcs-cont")}else e.biff==12&&(i="wstr");e.biff>=2&&e.biff<=5&&(i="cpstr");var o=n?t.read_shift(n,i):"";return o}function oE(t){var r=t.read_shift(2),e=t.read_shift(1),n=e&4,i=e&8,s=1+(e&1),o=0,h,c={};i&&(o=t.read_shift(2)),n&&(h=t.read_shift(4));var a=s==2?"dbcs-cont":"sbcs-cont",f=r===0?"":t.read_shift(r,a);return i&&(t.l+=4*o),n&&(t.l+=h),c.t=f,i||(c.raw=""+c.t+"",c.r=c.t),c}function fE(t){var r=t.t||"",e=nt(3+0);e.write_shift(2,r.length),e.write_shift(1,1);var n=nt(2*r.length);n.write_shift(2*r.length,r,"utf16le");var i=[e,n];return xn(i)}function Ua(t,r,e){var n;if(e){if(e.biff>=2&&e.biff<=5)return t.read_shift(r,"cpstr");if(e.biff>=12)return t.read_shift(r,"dbcs-cont")}var i=t.read_shift(1);return i===0?n=t.read_shift(r,"sbcs-cont"):n=t.read_shift(r,"dbcs-cont"),n}function Yf(t,r,e){var n=t.read_shift(e&&e.biff==2?1:2);return n===0?(t.l++,""):Ua(t,n,e)}function Ka(t,r,e){if(e.biff>5)return Yf(t,r,e);var n=t.read_shift(1);return n===0?(t.l++,""):t.read_shift(n,e.biff<=4||!t.lens?"cpstr":"sbcs-cont")}function Fg(t,r,e){return e||(e=nt(3+2*t.length)),e.write_shift(2,t.length),e.write_shift(1,1),e.write_shift(31,t,"utf16le"),e}function lE(t){var r=t.read_shift(1);t.l++;var e=t.read_shift(2);return t.l+=2,[r,e]}function cE(t){var r=t.read_shift(4),e=t.l,n=!1;r>24&&(t.l+=r-24,t.read_shift(16)==="795881f43b1d7f48af2c825dc4852763"&&(n=!0),t.l=e);var i=t.read_shift((n?r-24:r)>>1,"utf16le").replace(Xn,"");return n&&(t.l+=24),i}function hE(t){for(var r=t.read_shift(2),e="";r-- >0;)e+="../";var n=t.read_shift(0,"lpstr-ansi");if(t.l+=2,t.read_shift(2)!=57005)throw new Error("Bad FileMoniker");var i=t.read_shift(4);if(i===0)return e+n.replace(/\\/g,"/");var s=t.read_shift(4);if(t.read_shift(2)!=3)throw new Error("Bad FileMoniker");var o=t.read_shift(s>>1,"utf16le").replace(Xn,"");return e+o}function uE(t,r){var e=t.read_shift(16);switch(e){case"e0c9ea79f9bace118c8200aa004ba90b":return cE(t);case"0303000000000000c000000000000046":return hE(t);default:throw new Error("Unsupported Moniker "+e)}}function Yl(t){var r=t.read_shift(4),e=r>0?t.read_shift(r,"utf16le").replace(Xn,""):"";return e}function A1(t,r){r||(r=nt(6+t.length*2)),r.write_shift(4,1+t.length);for(var e=0;e-1?31:23;switch(n.charAt(0)){case"#":s=28;break;case".":s&=-3;break}r.write_shift(4,2),r.write_shift(4,s);var o=[8,6815827,6619237,4849780,83];for(e=0;e-1?n.slice(0,i):n;for(r.write_shift(4,2*(h.length+1)),e=0;e-1?n.slice(i+1):"",r)}else{for(o="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),e=0;e8?4:2,i=t.read_shift(n),s=t.read_shift(n,"i"),o=t.read_shift(n,"i");return[i,s,o]}function Ig(t){var r=t.read_shift(2),e=e0(t);return[r,e]}function xE(t,r,e){t.l+=4,r-=4;var n=t.l+r,i=Kf(t,r,e),s=t.read_shift(2);if(n-=t.l,s!==n)throw new Error("Malformed AddinUdf: padding = "+n+" != "+s);return t.l+=s,i}function Oc(t){var r=t.read_shift(2),e=t.read_shift(2),n=t.read_shift(2),i=t.read_shift(2);return{s:{c:n,r},e:{c:i,r:e}}}function Og(t,r){return r||(r=nt(8)),r.write_shift(2,t.s.r),r.write_shift(2,t.e.r),r.write_shift(2,t.s.c),r.write_shift(2,t.e.c),r}function Dg(t){var r=t.read_shift(2),e=t.read_shift(2),n=t.read_shift(1),i=t.read_shift(1);return{s:{c:n,r},e:{c:i,r:e}}}var bE=Dg;function Ng(t){t.l+=4;var r=t.read_shift(2),e=t.read_shift(2),n=t.read_shift(2);return t.l+=12,[e,r,n]}function wE(t){var r={};return t.l+=4,t.l+=16,r.fSharedNote=t.read_shift(2),t.l+=4,r}function yE(t){var r={};return t.l+=4,t.cf=t.read_shift(2),r}function Rn(t){t.l+=2,t.l+=t.read_shift(2)}var _E={0:Rn,4:Rn,5:Rn,6:Rn,7:yE,8:Rn,9:Rn,10:Rn,11:Rn,12:Rn,13:wE,14:Rn,15:Rn,16:Rn,17:Rn,18:Rn,19:Rn,20:Rn,21:Ng};function EE(t,r){for(var e=t.l+r,n=[];t.l=2&&(e.dt=t.read_shift(2),t.l-=2),e.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(r>6)throw new Error("Unexpected BIFF Ver "+e.BIFFVer)}return t.read_shift(r),e}function i0(t,r,e){var n=1536,i=16;switch(e.bookType){case"biff8":break;case"biff5":n=1280,i=8;break;case"biff4":n=4,i=6;break;case"biff3":n=3,i=6;break;case"biff2":n=2,i=4;break;case"xla":break;default:throw new Error("unsupported BIFF version")}var s=nt(i);return s.write_shift(2,n),s.write_shift(2,r),i>4&&s.write_shift(2,29282),i>6&&s.write_shift(2,1997),i>8&&(s.write_shift(2,49161),s.write_shift(2,1),s.write_shift(2,1798),s.write_shift(2,0)),s}function TE(t,r){return r===0||t.read_shift(2),1200}function SE(t,r,e){if(e.enc)return t.l+=r,"";var n=t.l,i=Ka(t,0,e);return t.read_shift(r+n-t.l),i}function kE(t,r){var e=!r||r.biff==8,n=nt(e?112:54);for(n.write_shift(r.biff==8?2:1,7),e&&n.write_shift(1,0),n.write_shift(4,859007059),n.write_shift(4,5458548|(e?0:536870912));n.l=8?2:1,n=nt(8+e*t.name.length);n.write_shift(4,t.pos),n.write_shift(1,t.hs||0),n.write_shift(1,t.dt),n.write_shift(1,t.name.length),r.biff>=8&&n.write_shift(1,1),n.write_shift(e*t.name.length,t.name,r.biff<8?"sbcs":"utf16le");var i=n.slice(0,n.l);return i.l=n.l,i}function RE(t,r){for(var e=t.l+r,n=t.read_shift(4),i=t.read_shift(4),s=[],o=0;o!=i&&t.l>15),i&=32767);var s={Unsynced:n&1,DyZero:(n&2)>>1,ExAsc:(n&4)>>2,ExDsc:(n&8)>>3};return[s,i]}function PE(t){var r=t.read_shift(2),e=t.read_shift(2),n=t.read_shift(2),i=t.read_shift(2),s=t.read_shift(2),o=t.read_shift(2),h=t.read_shift(2),c=t.read_shift(2),a=t.read_shift(2);return{Pos:[r,e],Dim:[n,i],Flags:s,CurTab:o,FirstTab:h,Selected:c,TabRatio:a}}function BE(){var t=nt(18);return t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,29280),t.write_shift(2,17600),t.write_shift(2,56),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,1),t.write_shift(2,500),t}function LE(t,r,e){if(e&&e.biff>=2&&e.biff<5)return{};var n=t.read_shift(2);return{RTL:n&64}}function UE(t){var r=nt(18),e=1718;return t&&t.RTL&&(e|=64),r.write_shift(2,e),r.write_shift(4,0),r.write_shift(4,64),r.write_shift(4,0),r.write_shift(4,0),r}function jE(){}function HE(t,r,e){var n={dyHeight:t.read_shift(2),fl:t.read_shift(2)};switch(e&&e.biff||8){case 2:break;case 3:case 4:t.l+=2;break;default:t.l+=10;break}return n.name=Kf(t,0,e),n}function WE(t,r){var e=t.name||"Arial",n=r&&r.biff==5,i=n?15+e.length:16+2*e.length,s=nt(i);return s.write_shift(2,(t.sz||12)*20),s.write_shift(4,0),s.write_shift(2,400),s.write_shift(4,0),s.write_shift(2,0),s.write_shift(1,e.length),n||s.write_shift(1,1),s.write_shift((n?1:2)*e.length,e,n?"sbcs":"utf16le"),s}function $E(t){var r=vs(t);return r.isst=t.read_shift(4),r}function zE(t,r,e,n){var i=nt(10);return ja(t,r,n,i),i.write_shift(4,e),i}function XE(t,r,e){e.biffguess&&e.biff==2&&(e.biff=5);var n=t.l+r,i=vs(t);e.biff==2&&t.l++;var s=Yf(t,n-t.l,e);return i.val=s,i}function VE(t,r,e,n,i){var s=!i||i.biff==8,o=nt(6+2+ +s+(1+s)*e.length);return ja(t,r,n,o),o.write_shift(2,e.length),s&&o.write_shift(1,1),o.write_shift((1+s)*e.length,e,s?"utf16le":"sbcs"),o}function GE(t,r,e){var n=t.read_shift(2),i=Ka(t,0,e);return[n,i]}function KE(t,r,e,n){var i=e&&e.biff==5;n||(n=nt(i?3+r.length:5+2*r.length)),n.write_shift(2,t),n.write_shift(i?1:2,r.length),i||n.write_shift(1,1),n.write_shift((i?1:2)*r.length,r,i?"sbcs":"utf16le");var s=n.length>n.l?n.slice(0,n.l):n;return s.l==null&&(s.l=s.length),s}var YE=Ka;function R1(t,r,e){var n=t.l+r,i=e.biff==8||!e.biff?4:2,s=t.read_shift(i),o=t.read_shift(i),h=t.read_shift(2),c=t.read_shift(2);return t.l=n,{s:{r:s,c:h},e:{r:o,c}}}function ZE(t,r){var e=r.biff==8||!r.biff?4:2,n=nt(2*e+6);return n.write_shift(e,t.s.r),n.write_shift(e,t.e.r+1),n.write_shift(2,t.s.c),n.write_shift(2,t.e.c+1),n.write_shift(2,0),n}function JE(t){var r=t.read_shift(2),e=t.read_shift(2),n=Ig(t);return{r,c:e,ixfe:n[0],rknum:n[1]}}function QE(t,r){for(var e=t.l+r-2,n=t.read_shift(2),i=t.read_shift(2),s=[];t.l>26],n.cellStyles&&(i.alc=s&7,i.fWrap=s>>3&1,i.alcV=s>>4&7,i.fJustLast=s>>7&1,i.trot=s>>8&255,i.cIndent=s>>16&15,i.fShrinkToFit=s>>20&1,i.iReadOrder=s>>22&2,i.fAtrNum=s>>26&1,i.fAtrFnt=s>>27&1,i.fAtrAlc=s>>28&1,i.fAtrBdr=s>>29&1,i.fAtrPat=s>>30&1,i.fAtrProt=s>>31&1,i.dgLeft=o&15,i.dgRight=o>>4&15,i.dgTop=o>>8&15,i.dgBottom=o>>12&15,i.icvLeft=o>>16&127,i.icvRight=o>>23&127,i.grbitDiag=o>>30&3,i.icvTop=h&127,i.icvBottom=h>>7&127,i.icvDiag=h>>14&127,i.dgDiag=h>>21&15,i.icvFore=c&127,i.icvBack=c>>7&127,i.fsxButton=c>>14&1),i}function tT(t,r,e){var n={};return n.ifnt=t.read_shift(2),n.numFmtId=t.read_shift(2),n.flags=t.read_shift(2),n.fStyle=n.flags>>2&1,r-=6,n.data=eT(t,r,n.fStyle,e),n}function M1(t,r,e,n){var i=e&&e.biff==5;n||(n=nt(i?16:20)),n.write_shift(2,0),t.style?(n.write_shift(2,t.numFmtId||0),n.write_shift(2,65524)):(n.write_shift(2,t.numFmtId||0),n.write_shift(2,r<<4));var s=0;return t.numFmtId>0&&i&&(s|=1024),n.write_shift(4,s),n.write_shift(4,0),i||n.write_shift(4,0),n.write_shift(2,0),n}function rT(t){t.l+=4;var r=[t.read_shift(2),t.read_shift(2)];if(r[0]!==0&&r[0]--,r[1]!==0&&r[1]--,r[0]>7||r[1]>7)throw new Error("Bad Gutters: "+r.join("|"));return r}function nT(t){var r=nt(8);return r.write_shift(4,0),r.write_shift(2,t[0]?t[0]+1:0),r.write_shift(2,t[1]?t[1]+1:0),r}function I1(t,r,e){var n=vs(t);(e.biff==2||r==9)&&++t.l;var i=aE(t);return n.val=i,n.t=i===!0||i===!1?"b":"e",n}function iT(t,r,e,n,i,s){var o=nt(8);return ja(t,r,n,o),Ag(e,s,o),o}function sT(t,r,e){e.biffguess&&e.biff==2&&(e.biff=5);var n=vs(t),i=Dn(t);return n.val=i,n}function aT(t,r,e,n){var i=nt(14);return ja(t,r,n,i),La(e,i),i}var O1=gE;function oT(t,r,e){var n=t.l+r,i=t.read_shift(2),s=t.read_shift(2);if(e.sbcch=s,s==1025||s==14849)return[s,i];if(s<1||s>255)throw new Error("Unexpected SupBook type: "+s);for(var o=Ua(t,s),h=[];n>t.l;)h.push(Yf(t));return[s,i,o,h]}function D1(t,r,e){var n=t.read_shift(2),i,s={fBuiltIn:n&1,fWantAdvise:n>>>1&1,fWantPict:n>>>2&1,fOle:n>>>3&1,fOleLink:n>>>4&1,cf:n>>>5&1023,fIcon:n>>>15&1};return e.sbcch===14849&&(i=xE(t,r-2,e)),s.body=i||t.read_shift(r-2),typeof i=="string"&&(s.Name=i),s}var fT=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function N1(t,r,e){var n=t.l+r,i=t.read_shift(2),s=t.read_shift(1),o=t.read_shift(1),h=t.read_shift(e&&e.biff==2?1:2),c=0;(!e||e.biff>=5)&&(e.biff!=5&&(t.l+=2),c=t.read_shift(2),e.biff==5&&(t.l+=2),t.l+=4);var a=Ua(t,o,e);i&32&&(a=fT[a.charCodeAt(0)]);var f=n-t.l;e&&e.biff==2&&--f;var l=n==t.l||h===0||!(f>0)?[]:E7(t,f,e,h);return{chKey:s,Name:a,itab:c,rgce:l}}function Pg(t,r,e){if(e.biff<8)return lT(t,r,e);for(var n=[],i=t.l+r,s=t.read_shift(e.biff>8?4:2);s--!==0;)n.push(vE(t,e.biff>8?12:6,e));if(t.l!=i)throw new Error("Bad ExternSheet: "+t.l+" != "+i);return n}function lT(t,r,e){t[t.l+1]==3&&t[t.l]++;var n=Kf(t,r,e);return n.charCodeAt(0)==3?n.slice(1):n}function cT(t,r,e){if(e.biff<8){t.l+=r;return}var n=t.read_shift(2),i=t.read_shift(2),s=Ua(t,n,e),o=Ua(t,i,e);return[s,o]}function hT(t,r,e){var n=Dg(t);t.l++;var i=t.read_shift(1);return r-=8,[T7(t,r,e),i,n]}function P1(t,r,e){var n=bE(t);switch(e.biff){case 2:t.l++,r-=7;break;case 3:case 4:t.l+=2,r-=8;break;default:t.l+=6,r-=12}return[n,y7(t,r,e)]}function uT(t){var r=t.read_shift(4)!==0,e=t.read_shift(4)!==0,n=t.read_shift(4);return[r,e,n]}function dT(t,r,e){if(!(e.biff<8)){var n=t.read_shift(2),i=t.read_shift(2),s=t.read_shift(2),o=t.read_shift(2),h=Ka(t,0,e);return e.biff<8&&t.read_shift(1),[{r:n,c:i},h,o,s]}}function pT(t,r,e){return dT(t,r,e)}function mT(t,r){for(var e=[],n=t.read_shift(2);n--;)e.push(Oc(t));return e}function gT(t){var r=nt(2+t.length*8);r.write_shift(2,t.length);for(var e=0;e=(f?h:2*h))break}if(i.length!==h&&i.length!==h*2)throw new Error("cchText: "+h+" != "+i.length);return t.l=n+r,{t:i}}catch{return t.l=n+r,{t:i}}}function yT(t,r){var e=Oc(t);t.l+=16;var n=dE(t,r-24);return[e,n]}function _T(t){var r=nt(24),e=dn(t[0]);r.write_shift(2,e.r),r.write_shift(2,e.r),r.write_shift(2,e.c),r.write_shift(2,e.c);for(var n="d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),i=0;i<16;++i)r.write_shift(1,parseInt(n[i],16));return xn([r,pE(t[1])])}function ET(t,r){t.read_shift(2);var e=Oc(t),n=t.read_shift((r-10)/2,"dbcs-cont");return n=n.replace(Xn,""),[e,n]}function TT(t){var r=t[1].Tooltip,e=nt(10+2*(r.length+1));e.write_shift(2,2048);var n=dn(t[0]);e.write_shift(2,n.r),e.write_shift(2,n.r),e.write_shift(2,n.c),e.write_shift(2,n.c);for(var i=0;i0;)e.push(Mg(t));return e}function AT(t){for(var r=t.read_shift(2),e=[];r-- >0;)e.push(Mg(t));return e}function FT(t){t.l+=2;var r={cxfs:0,crc:0};return r.cxfs=t.read_shift(2),r.crc=t.read_shift(4),r}function Bg(t,r,e){if(!e.cellStyles)return Bn(t,r);var n=e&&e.biff>=12?4:2,i=t.read_shift(n),s=t.read_shift(n),o=t.read_shift(n),h=t.read_shift(n),c=t.read_shift(2);n==2&&(t.l+=2);var a={s:i,e:s,w:o,ixfe:h,flags:c};return(e.biff>=5||!e.biff)&&(a.level=c>>8&7),a}function RT(t,r){var e=nt(12);e.write_shift(2,r),e.write_shift(2,r),e.write_shift(2,t.width*256),e.write_shift(2,0);var n=0;return t.hidden&&(n|=1),e.write_shift(1,n),n=t.level||0,e.write_shift(1,n),e.write_shift(2,0),e}function MT(t,r){var e={};return r<32||(t.l+=16,e.header=Dn(t),e.footer=Dn(t),t.l+=2),e}function IT(t,r,e){var n={area:!1};if(e.biff!=5)return t.l+=r,n;var i=t.read_shift(1);return t.l+=3,i&16&&(n.area=!0),n}function OT(t){for(var r=nt(2*t),e=0;e1048576&&(d=1e6),l!=2&&(v=f.read_shift(2));var x=f.read_shift(2),g=c.codepage||1252;l!=2&&(f.l+=16,f.read_shift(1),f[f.l]!==0&&(g=t[f[f.l]]),f.l+=1,f.l+=2),m&&(f.l+=36);for(var w=[],y={},_=Math.min(f.length,l==2?521:v-10-(p?264:0)),k=m?32:11;f.l<_&&f[f.l]!=13;)switch(y={},y.name=ra.utils.decode(g,f.slice(f.l,f.l+k)).replace(/[\u0000\r\n].*$/g,""),f.l+=k,y.type=String.fromCharCode(f.read_shift(1)),l!=2&&!m&&(y.offset=f.read_shift(4)),y.len=f.read_shift(1),l==2&&(y.offset=f.read_shift(2)),y.dec=f.read_shift(1),y.name.length&&w.push(y),l!=2&&(f.l+=m?13:14),y.type){case"B":(!p||y.len!=8)&&c.WTF&&console.log("Skipping "+y.name+":"+y.type);break;case"G":case"P":c.WTF&&console.log("Skipping "+y.name+":"+y.type);break;case"+":case"0":case"@":case"C":case"D":case"F":case"I":case"L":case"M":case"N":case"O":case"T":case"Y":break;default:throw new Error("Unknown Field Type: "+y.type)}if(f[f.l]!==13&&(f.l=v-1),f.read_shift(1)!==13)throw new Error("DBF Terminator not found "+f.l+" "+f[f.l]);f.l=v;var F=0,O=0;for(a[0]=[],O=0;O!=w.length;++O)a[0][O]=w[O].name;for(;d-- >0;){if(f[f.l]===42){f.l+=x;continue}for(++f.l,a[++F]=[],O=0,O=0;O!=w.length;++O){var N=f.slice(f.l,f.l+w[O].len);f.l+=w[O].len,Sn(N,0);var U=ra.utils.decode(g,N);switch(w[O].type){case"C":U.trim().length&&(a[F][O]=U.replace(/\s+$/,""));break;case"D":U.length===8?a[F][O]=new Date(+U.slice(0,4),+U.slice(4,6)-1,+U.slice(6,8)):a[F][O]=U;break;case"F":a[F][O]=parseFloat(U.trim());break;case"+":case"I":a[F][O]=m?N.read_shift(-4,"i")^2147483648:N.read_shift(4,"i");break;case"L":switch(U.trim().toUpperCase()){case"Y":case"T":a[F][O]=!0;break;case"N":case"F":a[F][O]=!1;break;case"":case"?":break;default:throw new Error("DBF Unrecognized L:|"+U+"|")}break;case"M":if(!u)throw new Error("DBF Unexpected MEMO for type "+l.toString(16));a[F][O]="##MEMO##"+(m?parseInt(U.trim(),10):N.read_shift(4));break;case"N":U=U.replace(/\u0000/g,"").trim(),U&&U!="."&&(a[F][O]=+U||0);break;case"@":a[F][O]=new Date(N.read_shift(-8,"f")-621356832e5);break;case"T":a[F][O]=new Date((N.read_shift(4)-2440588)*864e5+N.read_shift(4));break;case"Y":a[F][O]=N.read_shift(4,"i")/1e4+N.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":a[F][O]=-N.read_shift(-8,"f");break;case"B":if(p&&w[O].len==8){a[F][O]=N.read_shift(8,"f");break}case"G":case"P":N.l+=w[O].len;break;case"0":if(w[O].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+w[O].type)}}}if(l!=2&&f.l=0&&es(+a.codepage),a.type=="string")throw new Error("Cannot write DBF to JS string");var f=si(),l=Fv(h,{header:1,raw:!0,cellDates:!0}),u=l[0],p=l.slice(1),m=h["!cols"]||[],d=0,v=0,x=0,g=1;for(d=0;d250&&(N=250),O=((m[d]||{}).DBF||{}).type,O=="C"&&m[d].DBF.len>N&&(N=m[d].DBF.len),F=="B"&&O=="N"&&(F="N",k[d]=m[d].DBF.dec,N=m[d].DBF.len),_[d]=F=="C"||O=="N"?N:s[F]||0,g+=_[d],y[d]=F}var z=f.next(32);for(z.write_shift(4,318902576),z.write_shift(4,p.length),z.write_shift(2,296+32*x),z.write_shift(2,g),d=0;d<4;++d)z.write_shift(4,0);for(z.write_shift(4,0|(+r[Sm]||3)<<8),d=0,v=0;d":190,"?":191,"{":223},r=new RegExp("\x1BN("+Jr(t).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),e=function(u,p){var m=t[p];return typeof m=="number"?Gp(m):m},n=function(u,p,m){var d=p.charCodeAt(0)-32<<4|m.charCodeAt(0)-48;return d==59?u:Gp(d)};t["|"]=254;function i(u,p){switch(p.type){case"base64":return s(wi(u),p);case"binary":return s(u,p);case"buffer":return s(nr&&Buffer.isBuffer(u)?u.toString("binary"):ha(u),p);case"array":return s(Ba(u),p)}throw new Error("Unrecognized type "+p.type)}function s(u,p){var m=u.split(/[\n\r]+/),d=-1,v=-1,x=0,g=0,w=[],y=[],_=null,k={},F=[],O=[],N=[],U=0,z;for(+p.codepage>=0&&es(+p.codepage);x!==m.length;++x){U=0;var W=m[x].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,n).replace(r,e),X=W.replace(/;;/g,"\0").split(";").map(function(S){return S.replace(/\u0000/g,";")}),J=X[0],H;if(W.length>0)switch(J){case"ID":break;case"E":break;case"B":break;case"O":break;case"W":break;case"P":X[1].charAt(0)=="P"&&y.push(W.slice(3).replace(/;;/g,";"));break;case"C":var I=!1,M=!1,E=!1,A=!1,B=-1,L=-1;for(g=1;g-1&&w[B][L];if(!R||!R[1])throw new Error("SYLK shared formula cannot find base");w[d][v][1]=rv(R[1],{r:d-B,c:v-L})}break;case"F":var C=0;for(g=1;g0?(F[d].hpt=U,F[d].hpx=Bo(U)):U===0&&(F[d].hidden=!0);break;default:if(p&&p.WTF)throw new Error("SYLK bad record "+W)}C<1&&(_=null);break;default:if(p&&p.WTF)throw new Error("SYLK bad record "+W)}}return F.length>0&&(k["!rows"]=F),O.length>0&&(k["!cols"]=O),p&&p.sheetRows&&(w=w.slice(0,p.sheetRows)),[w,k]}function o(u,p){var m=i(u,p),d=m[0],v=m[1],x=Gf(d,p);return Jr(v).forEach(function(g){x[g]=v[g]}),x}function h(u,p){return $a(o(u,p),p)}function c(u,p,m,d){var v="C;Y"+(m+1)+";X"+(d+1)+";K";switch(u.t){case"n":v+=u.v||0,u.f&&!u.F&&(v+=";E"+c0(u.f,{r:m,c:d}));break;case"b":v+=u.v?"TRUE":"FALSE";break;case"e":v+=u.w||u.v;break;case"d":v+='"'+(u.w||u.v)+'"';break;case"s":v+='"'+u.v.replace(/"/g,"").replace(/;/g,";;")+'"';break}return v}function a(u,p){p.forEach(function(m,d){var v="F;W"+(d+1)+" "+(d+1)+" ";m.hidden?v+="0":(typeof m.width=="number"&&!m.wpx&&(m.wpx=Bf(m.width)),typeof m.wpx=="number"&&!m.wch&&(m.wch=Lf(m.wpx)),typeof m.wch=="number"&&(v+=Math.round(m.wch))),v.charAt(v.length-1)!=" "&&u.push(v)})}function f(u,p){p.forEach(function(m,d){var v="F;";m.hidden?v+="M0;":m.hpt?v+="M"+20*m.hpt+";":m.hpx&&(v+="M"+20*Uf(m.hpx)+";"),v.length>2&&u.push(v+"R"+(d+1))})}function l(u,p){var m=["ID;PWXL;N;E"],d=[],v=Er(u["!ref"]),x,g=Array.isArray(u),w=`\r +`;m.push("P;PGeneral"),m.push("F;P0;DG0G8;M255"),u["!cols"]&&a(m,u["!cols"]),u["!rows"]&&f(m,u["!rows"]),m.push("B;Y"+(v.e.r-v.s.r+1)+";X"+(v.e.c-v.s.c+1)+";D"+[v.s.c,v.s.r,v.e.c,v.e.r].join(" "));for(var y=v.s.r;y<=v.e.r;++y)for(var _=v.s.c;_<=v.e.c;++_){var k=Vt({r:y,c:_});x=g?(u[y]||[])[_]:u[k],!(!x||x.v==null&&(!x.f||x.F))&&d.push(c(x,u,y,_))}return m.join(w)+w+d.join(w)+w+"E"+w}return{to_workbook:h,to_sheet:o,from_sheet:l}}(),Ug=function(){function t(s,o){switch(o.type){case"base64":return r(wi(s),o);case"binary":return r(s,o);case"buffer":return r(nr&&Buffer.isBuffer(s)?s.toString("binary"):ha(s),o);case"array":return r(Ba(s),o)}throw new Error("Unrecognized type "+o.type)}function r(s,o){for(var h=s.split(` +`),c=-1,a=-1,f=0,l=[];f!==h.length;++f){if(h[f].trim()==="BOT"){l[++c]=[],a=0;continue}if(!(c<0)){var u=h[f].trim().split(","),p=u[0],m=u[1];++f;for(var d=h[f]||"";(d.match(/["]/g)||[]).length&1&&f=0&&m[d].length===0;)--d;for(var v=10,x=0,g=0;g<=d;++g)x=m[g].indexOf(" "),x==-1?x=m[g].length:x++,v=Math.max(v,x);for(g=0;g<=d;++g){p[g]=[];var w=0;for(t(m[g].slice(0,v).trim(),p,g,w,u),w=1;w<=(m[g].length-v)/10+1;++w)t(m[g].slice(v+(w-1)*10,v+w*10).trim(),p,g,w,u)}return u.sheetRows&&(p=p.slice(0,u.sheetRows)),p}var e={44:",",9:" ",59:";",124:"|"},n={44:3,9:2,59:1,124:0};function i(f){for(var l={},u=!1,p=0,m=0;p0&&U(),m["!ref"]=cr(d),m}function o(f,l){return!(l&&l.PRN)||l.FS||f.slice(0,4)=="sep="||f.indexOf(" ")>=0||f.indexOf(",")>=0||f.indexOf(";")>=0?s(f,l):Gf(r(f,l),l)}function h(f,l){var u="",p=l.type=="string"?[0,0,0,0]:x0(f,l);switch(l.type){case"base64":u=wi(f);break;case"binary":u=f;break;case"buffer":l.codepage==65001?u=f.toString("utf8"):l.codepage&&typeof ra<"u"?u=ra.utils.decode(l.codepage,f):u=nr&&Buffer.isBuffer(f)?f.toString("binary"):ha(f);break;case"array":u=Ba(f);break;case"string":u=f;break;default:throw new Error("Unrecognized type "+l.type)}return p[0]==239&&p[1]==187&&p[2]==191?u=Fr(u.slice(3)):l.type!="string"&&l.type!="buffer"&&l.codepage==65001?u=Fr(u):l.type=="binary"&&typeof ra<"u"&&l.codepage&&(u=ra.utils.decode(l.codepage,ra.utils.encode(28591,u))),u.slice(0,19)=="socialcalc:version:"?jg.to_sheet(l.type=="string"?u:Fr(u),l):o(u,l)}function c(f,l){return $a(h(f,l),l)}function a(f){for(var l=[],u=Er(f["!ref"]),p,m=Array.isArray(f),d=u.s.r;d<=u.e.r;++d){for(var v=[],x=u.s.c;x<=u.e.c;++x){var g=Vt({r:d,c:x});if(p=m?(f[d]||[])[x]:f[g],!p||p.v==null){v.push(" ");continue}for(var w=(p.w||(oa(p),p.w)||"").slice(0,10);w.length<10;)w+=" ";v.push(w+(x===0?" ":""))}l.push(v.join(""))}return l.join(` +`)}return{to_workbook:c,to_sheet:h,from_sheet:a}}();function GT(t,r){var e=r||{},n=!!e.WTF;e.WTF=!0;try{var i=Lg.to_workbook(t,e);return e.WTF=n,i}catch(s){if(e.WTF=n,!s.message.match(/SYLK bad record ID/)&&n)throw s;return Po.to_workbook(t,r)}}var Oa=function(){function t(P,R,C){if(P){Sn(P,P.l||0);for(var S=C.Enum||B;P.l=16&&P[14]==5&&P[15]===108)throw new Error("Unsupported Works 3 for Mac file");if(P[2]==2)C.Enum=B,t(P,function(Ce,ce,se){switch(se){case 0:C.vers=Ce,Ce>=4096&&(C.qpro=!0);break;case 6:q=Ce;break;case 204:Ce&&(V=Ce);break;case 222:V=Ce;break;case 15:case 51:C.qpro||(Ce[1].v=Ce[1].v.slice(1));case 13:case 14:case 16:se==14&&(Ce[2]&112)==112&&(Ce[2]&15)>1&&(Ce[2]&15)<15&&(Ce[1].z=C.dateNF||Ht[14],C.cellDates&&(Ce[1].t="d",Ce[1].v=Ic(Ce[1].v))),C.qpro&&Ce[3]>te&&(S["!ref"]=cr(q),oe[D]=S,he.push(D),S=C.dense?[]:{},q={s:{r:0,c:0},e:{r:0,c:0}},te=Ce[3],D=V||"Sheet"+(te+1),V="");var ee=C.dense?(S[Ce[0].r]||[])[Ce[0].c]:S[Vt(Ce[0])];if(ee){ee.t=Ce[1].t,ee.v=Ce[1].v,Ce[1].z!=null&&(ee.z=Ce[1].z),Ce[1].f!=null&&(ee.f=Ce[1].f);break}C.dense?(S[Ce[0].r]||(S[Ce[0].r]=[]),S[Ce[0].r][Ce[0].c]=Ce[1]):S[Vt(Ce[0])]=Ce[1];break}},C);else if(P[2]==26||P[2]==14)C.Enum=L,P[2]==14&&(C.qpro=!0,P.l=0),t(P,function(Ce,ce,se){switch(se){case 204:D=Ce;break;case 22:Ce[1].v=Ce[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(Ce[3]>te&&(S["!ref"]=cr(q),oe[D]=S,he.push(D),S=C.dense?[]:{},q={s:{r:0,c:0},e:{r:0,c:0}},te=Ce[3],D="Sheet"+(te+1)),ne>0&&Ce[0].r>=ne)break;C.dense?(S[Ce[0].r]||(S[Ce[0].r]=[]),S[Ce[0].r][Ce[0].c]=Ce[1]):S[Vt(Ce[0])]=Ce[1],q.e.c=0&&es(+C.codepage),C.type=="string")throw new Error("Cannot write WK1 to JS string");var S=si(),D=Er(P["!ref"]),V=Array.isArray(P),te=[];mt(S,0,s(1030)),mt(S,6,c(D));for(var oe=Math.min(D.e.r,8191),he=D.s.r;he<=oe;++he)for(var Ne=wn(he),q=D.s.c;q<=D.e.c;++q){he===D.s.r&&(te[q]=an(q));var ne=te[q]+Ne,Q=V?(P[he]||[])[q]:P[ne];if(!(!Q||Q.t=="z"))if(Q.t=="n")(Q.v|0)==Q.v&&Q.v>=-32768&&Q.v<=32767?mt(S,13,p(he,q,Q.v)):mt(S,14,d(he,q,Q.v));else{var re=oa(Q);mt(S,15,l(he,q,re.slice(0,239)))}}return mt(S,1),S.end()}function i(P,R){var C=R||{};if(+C.codepage>=0&&es(+C.codepage),C.type=="string")throw new Error("Cannot write WK3 to JS string");var S=si();mt(S,0,o(P));for(var D=0,V=0;D8191&&(C=8191),R.write_shift(2,C),R.write_shift(1,D),R.write_shift(1,S),R.write_shift(2,0),R.write_shift(2,0),R.write_shift(1,1),R.write_shift(1,2),R.write_shift(4,0),R.write_shift(4,0),R}function h(P,R,C){var S={s:{c:0,r:0},e:{c:0,r:0}};return R==8&&C.qpro?(S.s.c=P.read_shift(1),P.l++,S.s.r=P.read_shift(2),S.e.c=P.read_shift(1),P.l++,S.e.r=P.read_shift(2),S):(S.s.c=P.read_shift(2),S.s.r=P.read_shift(2),R==12&&C.qpro&&(P.l+=2),S.e.c=P.read_shift(2),S.e.r=P.read_shift(2),R==12&&C.qpro&&(P.l+=2),S.s.c==65535&&(S.s.c=S.e.c=S.s.r=S.e.r=0),S)}function c(P){var R=nt(8);return R.write_shift(2,P.s.c),R.write_shift(2,P.s.r),R.write_shift(2,P.e.c),R.write_shift(2,P.e.r),R}function a(P,R,C){var S=[{c:0,r:0},{t:"n",v:0},0,0];return C.qpro&&C.vers!=20768?(S[0].c=P.read_shift(1),S[3]=P.read_shift(1),S[0].r=P.read_shift(2),P.l+=2):(S[2]=P.read_shift(1),S[0].c=P.read_shift(2),S[0].r=P.read_shift(2)),S}function f(P,R,C){var S=P.l+R,D=a(P,R,C);if(D[1].t="s",C.vers==20768){P.l++;var V=P.read_shift(1);return D[1].v=P.read_shift(V,"utf8"),D}return C.qpro&&P.l++,D[1].v=P.read_shift(S-P.l,"cstr"),D}function l(P,R,C){var S=nt(7+C.length);S.write_shift(1,255),S.write_shift(2,R),S.write_shift(2,P),S.write_shift(1,39);for(var D=0;D=128?95:V)}return S.write_shift(1,0),S}function u(P,R,C){var S=a(P,R,C);return S[1].v=P.read_shift(2,"i"),S}function p(P,R,C){var S=nt(7);return S.write_shift(1,255),S.write_shift(2,R),S.write_shift(2,P),S.write_shift(2,C,"i"),S}function m(P,R,C){var S=a(P,R,C);return S[1].v=P.read_shift(8,"f"),S}function d(P,R,C){var S=nt(13);return S.write_shift(1,255),S.write_shift(2,R),S.write_shift(2,P),S.write_shift(8,C,"f"),S}function v(P,R,C){var S=P.l+R,D=a(P,R,C);if(D[1].v=P.read_shift(8,"f"),C.qpro)P.l=S;else{var V=P.read_shift(2);y(P.slice(P.l,P.l+V),D),P.l+=V}return D}function x(P,R,C){var S=R&32768;return R&=-32769,R=(S?P:0)+(R>=8192?R-16384:R),(S?"":"$")+(C?an(R):wn(R))}var g={51:["FALSE",0],52:["TRUE",0],70:["LEN",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],111:["T",1]},w=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function y(P,R){Sn(P,0);for(var C=[],S=0,D="",V="",te="",oe="";P.lC.length){console.error("WK1 bad formula parse 0x"+he.toString(16)+":|"+C.join("|")+"|");return}var Q=C.slice(-S);C.length-=S,C.push(g[he][0]+"("+Q.join(",")+")")}else return he<=7?console.error("WK1 invalid opcode "+he.toString(16)):he<=24?console.error("WK1 unsupported op "+he.toString(16)):he<=30?console.error("WK1 invalid opcode "+he.toString(16)):he<=115?console.error("WK1 unsupported function opcode "+he.toString(16)):console.error("WK1 unrecognized opcode "+he.toString(16))}}C.length==1?R[1].f=""+C[0]:console.error("WK1 bad formula parse |"+C.join("|")+"|")}function _(P){var R=[{c:0,r:0},{t:"n",v:0},0];return R[0].r=P.read_shift(2),R[3]=P[P.l++],R[0].c=P[P.l++],R}function k(P,R){var C=_(P);return C[1].t="s",C[1].v=P.read_shift(R-4,"cstr"),C}function F(P,R,C,S){var D=nt(6+S.length);D.write_shift(2,P),D.write_shift(1,C),D.write_shift(1,R),D.write_shift(1,39);for(var V=0;V=128?95:te)}return D.write_shift(1,0),D}function O(P,R){var C=_(P);C[1].v=P.read_shift(2);var S=C[1].v>>1;if(C[1].v&1)switch(S&7){case 0:S=(S>>3)*5e3;break;case 1:S=(S>>3)*500;break;case 2:S=(S>>3)/20;break;case 3:S=(S>>3)/200;break;case 4:S=(S>>3)/2e3;break;case 5:S=(S>>3)/2e4;break;case 6:S=(S>>3)/16;break;case 7:S=(S>>3)/64;break}return C[1].v=S,C}function N(P,R){var C=_(P),S=P.read_shift(4),D=P.read_shift(4),V=P.read_shift(2);if(V==65535)return S===0&&D===3221225472?(C[1].t="e",C[1].v=15):S===0&&D===3489660928?(C[1].t="e",C[1].v=42):C[1].v=0,C;var te=V&32768;return V=(V&32767)-16446,C[1].v=(1-te*2)*(D*Math.pow(2,V+32)+S*Math.pow(2,V)),C}function U(P,R,C,S){var D=nt(14);if(D.write_shift(2,P),D.write_shift(1,C),D.write_shift(1,R),S==0)return D.write_shift(4,0),D.write_shift(4,0),D.write_shift(2,65535),D;var V=0,te=0,oe=0,he=0;return S<0&&(V=1,S=-S),te=Math.log2(S)|0,S/=Math.pow(2,te-31),he=S>>>0,he&2147483648||(S/=2,++te,he=S>>>0),S-=he,he|=2147483648,he>>>=0,S*=Math.pow(2,32),oe=S>>>0,D.write_shift(4,oe),D.write_shift(4,he),te+=16383+(V?32768:0),D.write_shift(2,te),D}function z(P,R){var C=N(P);return P.l+=R-14,C}function W(P,R){var C=_(P),S=P.read_shift(4);return C[1].v=S>>6,C}function X(P,R){var C=_(P),S=P.read_shift(8,"f");return C[1].v=S,C}function J(P,R){var C=X(P);return P.l+=R-10,C}function H(P,R){return P[P.l+R-1]==0?P.read_shift(R,"cstr"):""}function I(P,R){var C=P[P.l++];C>R-1&&(C=R-1);for(var S="";S.length127?95:D}return C[C.l++]=0,C}var B={0:{n:"BOF",f:nn},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f:h},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:u},14:{n:"NUMBER",f:m},15:{n:"LABEL",f},16:{n:"FORMULA",f:v},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:H},222:{n:"SHEETNAMELP",f:I},65535:{n:""}},L={0:{n:"BOF"},1:{n:"EOF"},2:{n:"PASSWORD"},3:{n:"CALCSET"},4:{n:"WINDOWSET"},5:{n:"SHEETCELLPTR"},6:{n:"SHEETLAYOUT"},7:{n:"COLUMNWIDTH"},8:{n:"HIDDENCOLUMN"},9:{n:"USERRANGE"},10:{n:"SYSTEMRANGE"},11:{n:"ZEROFORCE"},12:{n:"SORTKEYDIR"},13:{n:"FILESEAL"},14:{n:"DATAFILLNUMS"},15:{n:"PRINTMAIN"},16:{n:"PRINTSTRING"},17:{n:"GRAPHMAIN"},18:{n:"GRAPHSTRING"},19:{n:"??"},20:{n:"ERRCELL"},21:{n:"NACELL"},22:{n:"LABEL16",f:k},23:{n:"NUMBER17",f:N},24:{n:"NUMBER18",f:O},25:{n:"FORMULA19",f:z},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:E},28:{n:"DTLABELMISC"},29:{n:"DTLABELCELL"},30:{n:"GRAPHWINDOW"},31:{n:"CPA"},32:{n:"LPLAUTO"},33:{n:"QUERY"},34:{n:"HIDDENSHEET"},35:{n:"??"},37:{n:"NUMBER25",f:W},38:{n:"??"},39:{n:"NUMBER27",f:X},40:{n:"FORMULA28",f:J},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:H},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:M},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:n,book_to_wk3:i,to_workbook:r}}();function KT(t){var r={},e=t.match(Ln),n=0,i=!1;if(e)for(;n!=e.length;++n){var s=Wt(e[n]);switch(s[0].replace(/\w*:/g,"")){case"":case"":r.shadow=1;break;case"":break;case"":case"":r.outline=1;break;case"":break;case"":case"":r.strike=1;break;case"":break;case"":case"":r.u=1;break;case"":break;case"":case"":r.b=1;break;case"":break;case"":case"":r.i=1;break;case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":i=!1;break;default:if(s[0].charCodeAt(1)!==47&&!i)throw new Error("Unrecognized rich format "+s[0])}}return r}var YT=function(){var t=If("t"),r=If("rPr");function e(s){var o=s.match(t);if(!o)return{t:"s",v:""};var h={t:"s",v:vr(o[1])},c=s.match(r);return c&&(h.s=KT(c[1])),h}var n=/<(?:\w+:)?r>/g,i=/<\/(?:\w+:)?r>/;return function(o){return o.replace(n,"").split(i).map(e).filter(function(h){return h.v})}}(),ZT=function(){var r=/(\r\n|\n)/g;function e(i,s,o){var h=[];i.u&&h.push("text-decoration: underline;"),i.uval&&h.push("text-underline-style:"+i.uval+";"),i.sz&&h.push("font-size:"+i.sz+"pt;"),i.outline&&h.push("text-effect: outline;"),i.shadow&&h.push("text-shadow: auto;"),s.push(''),i.b&&(s.push(""),o.push("")),i.i&&(s.push(""),o.push("")),i.strike&&(s.push(""),o.push(""));var c=i.valign||"";return c=="superscript"||c=="super"?c="sup":c=="subscript"&&(c="sub"),c!=""&&(s.push("<"+c+">"),o.push("")),o.push(""),i}function n(i){var s=[[],i.v,[]];return i.v?(i.s&&e(i.s,s[0],s[2]),s[0].join("")+s[1].replace(r,"
")+s[2].join("")):""}return function(s){return s.map(n).join("")}}(),JT=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,QT=/<(?:\w+:)?r>/,qT=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function s0(t,r){var e=r?r.cellHTML:!0,n={};return t?(t.match(/^\s*<(?:\w+:)?t[^>]*>/)?(n.t=vr(Fr(t.slice(t.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")),n.r=Fr(t),e&&(n.h=Gu(n.t))):t.match(QT)&&(n.r=Fr(t),n.t=vr(Fr((t.replace(qT,"").match(JT)||[]).join("").replace(Ln,""))),e&&(n.h=ZT(YT(n.r)))),n):{t:""}}var eS=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,tS=/<(?:\w+:)?(?:si|sstItem)>/g,rS=/<\/(?:\w+:)?(?:si|sstItem)>/;function nS(t,r){var e=[],n="";if(!t)return e;var i=t.match(eS);if(i){n=i[2].replace(tS,"").split(rS);for(var s=0;s!=n.length;++s){var o=s0(n[s].trim(),r);o!=null&&(e[e.length]=o)}i=Wt(i[1]),e.Count=i.count,e.Unique=i.uniqueCount}return e}var iS=/^\s|\s$|[\t\n\r]/;function Hg(t,r){if(!r.bookSST)return"";var e=[Qr];e[e.length]=pt("sst",null,{xmlns:Wa[0],count:t.Count,uniqueCount:t.Unique});for(var n=0;n!=t.length;++n)if(t[n]!=null){var i=t[n],s="";i.r?s+=i.r:(s+=""),s+="",e[e.length]=s}return e.length>2&&(e[e.length]="",e[1]=e[1].replace("/>",">")),e.join("")}function sS(t){return[t.read_shift(4),t.read_shift(4)]}function aS(t,r){var e=[],n=!1;return js(t,function(s,o,h){switch(h){case 159:e.Count=s[0],e.Unique=s[1];break;case 19:e.push(s);break;case 160:return!0;case 35:n=!0;break;case 36:n=!1;break;default:if(o.T,!n||r.WTF)throw new Error("Unexpected record 0x"+h.toString(16))}}),e}function oS(t,r){return r||(r=nt(8)),r.write_shift(4,t.Count),r.write_shift(4,t.Unique),r}var fS=x5;function lS(t){var r=si();ct(r,159,oS(t));for(var e=0;e=4&&(t.l+=r-4),e}function cS(t){var r={};return r.id=t.read_shift(0,"lpp4"),r.R=Bs(t,4),r.U=Bs(t,4),r.W=Bs(t,4),r}function hS(t){for(var r=t.read_shift(4),e=t.l+r-4,n={},i=t.read_shift(4),s=[];i-- >0;)s.push({t:t.read_shift(4),v:t.read_shift(0,"lpp4")});if(n.name=t.read_shift(0,"lpp4"),n.comps=s,t.l!=e)throw new Error("Bad DataSpaceMapEntry: "+t.l+" != "+e);return n}function uS(t){var r=[];t.l+=4;for(var e=t.read_shift(4);e-- >0;)r.push(hS(t));return r}function dS(t){var r=[];t.l+=4;for(var e=t.read_shift(4);e-- >0;)r.push(t.read_shift(0,"lpp4"));return r}function pS(t){var r={};return t.read_shift(4),t.l+=4,r.id=t.read_shift(0,"lpp4"),r.name=t.read_shift(0,"lpp4"),r.R=Bs(t,4),r.U=Bs(t,4),r.W=Bs(t,4),r}function mS(t){var r=pS(t);if(r.ename=t.read_shift(0,"8lpp4"),r.blksz=t.read_shift(4),r.cmode=t.read_shift(4),t.read_shift(4)!=4)throw new Error("Bad !Primary record");return r}function $g(t,r){var e=t.l+r,n={};n.Flags=t.read_shift(4)&63,t.l+=4,n.AlgID=t.read_shift(4);var i=!1;switch(n.AlgID){case 26126:case 26127:case 26128:i=n.Flags==36;break;case 26625:i=n.Flags==4;break;case 0:i=n.Flags==16||n.Flags==4||n.Flags==36;break;default:throw"Unrecognized encryption algorithm: "+n.AlgID}if(!i)throw new Error("Encryption Flags/AlgID mismatch");return n.AlgIDHash=t.read_shift(4),n.KeySize=t.read_shift(4),n.ProviderType=t.read_shift(4),t.l+=8,n.CSPName=t.read_shift(e-t.l>>1,"utf16le"),t.l=e,n}function zg(t,r){var e={},n=t.l+r;return t.l+=4,e.Salt=t.slice(t.l,t.l+16),t.l+=16,e.Verifier=t.slice(t.l,t.l+16),t.l+=16,t.read_shift(4),e.VerifierHash=t.slice(t.l,n),t.l=n,e}function gS(t){var r=Bs(t);switch(r.Minor){case 2:return[r.Minor,vS(t)];case 3:return[r.Minor,xS()];case 4:return[r.Minor,bS(t)]}throw new Error("ECMA-376 Encrypted file unrecognized Version: "+r.Minor)}function vS(t){var r=t.read_shift(4);if((r&63)!=36)throw new Error("EncryptionInfo mismatch");var e=t.read_shift(4),n=$g(t,e),i=zg(t,t.length-t.l);return{t:"Std",h:n,v:i}}function xS(){throw new Error("File is password-protected: ECMA-376 Extensible")}function bS(t){var r=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];t.l+=4;var e=t.read_shift(t.length-t.l,"utf8"),n={};return e.replace(Ln,function(s){var o=Wt(s);switch(gs(o[0])){case"":break;case"":case"":break;case"":break;case"4||n.Major<2)throw new Error("unrecognized major version code: "+n.Major);e.Flags=t.read_shift(4),r-=4;var i=t.read_shift(4);return r-=4,e.EncryptionHeader=$g(t,i),r-=i,e.EncryptionVerifier=zg(t,r),e}function yS(t){var r={},e=r.EncryptionVersionInfo=Bs(t,4);if(e.Major!=1||e.Minor!=1)throw"unrecognized version code "+e.Major+" : "+e.Minor;return r.Salt=t.read_shift(16),r.EncryptedVerifier=t.read_shift(16),r.EncryptedVerifierHash=t.read_shift(16),r}function a0(t){var r=0,e,n=Wg(t),i=n.length+1,s,o,h,c,a;for(e=aa(i),e[0]=n.length,s=1;s!=i;++s)e[s]=n[s-1];for(s=i-1;s>=0;--s)o=e[s],h=r&16384?1:0,c=r<<1&32767,a=h|c,r=a^o;return r^52811}var Xg=function(){var t=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],r=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],e=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],n=function(o){return(o/2|o*128)&255},i=function(o,h){return n(o^h)},s=function(o){for(var h=r[o.length-1],c=104,a=o.length-1;a>=0;--a)for(var f=o[a],l=0;l!=7;++l)f&64&&(h^=e[c]),f*=2,--c;return h};return function(o){for(var h=Wg(o),c=s(h),a=h.length,f=aa(16),l=0;l!=16;++l)f[l]=0;var u,p,m;for((a&1)===1&&(u=c>>8,f[a]=i(t[0],u),--a,u=c&255,p=h[h.length-1],f[a]=i(p,u));a>0;)--a,u=c>>8,f[a]=i(h[a],u),--a,u=c&255,f[a]=i(h[a],u);for(a=15,m=15-h.length;m>0;)u=c>>8,f[a]=i(t[m],u),--a,--m,u=c&255,f[a]=i(h[a],u),--a,--m;return f}}(),_S=function(t,r,e,n,i){i||(i=r),n||(n=Xg(t));var s,o;for(s=0;s!=r.length;++s)o=r[s],o^=n[e],o=(o>>5|o<<3)&255,i[s]=o,++e;return[i,e,n]},ES=function(t){var r=0,e=Xg(t);return function(n){var i=_S("",n,r,e);return r=i[1],i[0]}};function TS(t,r,e,n){var i={key:nn(t),verificationBytes:nn(t)};return e.password&&(i.verifier=a0(e.password)),n.valid=i.verificationBytes===i.verifier,n.valid&&(n.insitu=ES(e.password)),i}function SS(t,r,e){var n=e||{};return n.Info=t.read_shift(2),t.l-=2,n.Info===1?n.Data=yS(t):n.Data=wS(t,r),n}function kS(t,r,e){var n={Type:e.biff>=8?t.read_shift(2):0};return n.Type?SS(t,r-2,n):TS(t,e.biff>=8?r:r-2,e,n),n}var Vg=function(){function t(i,s){switch(s.type){case"base64":return r(wi(i),s);case"binary":return r(i,s);case"buffer":return r(nr&&Buffer.isBuffer(i)?i.toString("binary"):ha(i),s);case"array":return r(Ba(i),s)}throw new Error("Unrecognized type "+s.type)}function r(i,s){var o=s||{},h=o.dense?[]:{},c=i.match(/\\trowd.*?\\row\b/g);if(!c.length)throw new Error("RTF missing table");var a={s:{c:0,r:0},e:{c:0,r:c.length-1}};return c.forEach(function(f,l){Array.isArray(h)&&(h[l]=[]);for(var u=/\\\w+\b/g,p=0,m,d=-1;m=u.exec(f);){switch(m[0]){case"\\cell":var v=f.slice(p,u.lastIndex-m[0].length);if(v[0]==" "&&(v=v.slice(1)),++d,v.length){var x={v,t:"s"};Array.isArray(h)?h[l][d]=x:h[Vt({r:l,c:d})]=x}break}p=u.lastIndex}d>a.e.c&&(a.e.c=d)}),h["!ref"]=cr(a),h}function e(i,s){return $a(t(i,s),s)}function n(i){for(var s=["{\\rtf1\\ansi"],o=Er(i["!ref"]),h,c=Array.isArray(i),a=o.s.r;a<=o.e.r;++a){s.push("\\trowd\\trautofit1");for(var f=o.s.c;f<=o.e.c;++f)s.push("\\cellx"+(f+1));for(s.push("\\pard\\intbl"),f=o.s.c;f<=o.e.c;++f){var l=Vt({r:a,c:f});h=c?(i[a]||[])[f]:i[l],!(!h||h.v==null&&(!h.f||h.F))&&(s.push(" "+(h.w||(oa(h),h.w))),s.push("\\cell"))}s.push("\\pard\\intbl\\row")}return s.join("")+"}"}return{to_workbook:e,to_sheet:t,from_sheet:n}}();function CS(t){var r=t.slice(t[0]==="#"?1:0).slice(0,6);return[parseInt(r.slice(0,2),16),parseInt(r.slice(2,4),16),parseInt(r.slice(4,6),16)]}function Pf(t){for(var r=0,e=1;r!=3;++r)e=e*256+(t[r]>255?255:t[r]<0?0:t[r]);return e.toString(16).toUpperCase().slice(1)}function AS(t){var r=t[0]/255,e=t[1]/255,n=t[2]/255,i=Math.max(r,e,n),s=Math.min(r,e,n),o=i-s;if(o===0)return[0,0,r];var h=0,c=0,a=i+s;switch(c=o/(a>1?2-a:a),i){case r:h=((e-n)/o+6)%6;break;case e:h=(n-r)/o+2;break;case n:h=(r-e)/o+4;break}return[h/6,c,a/2]}function FS(t){var r=t[0],e=t[1],n=t[2],i=e*2*(n<.5?n:1-n),s=n-i/2,o=[s,s,s],h=6*r,c;if(e!==0)switch(h|0){case 0:case 6:c=i*h,o[0]+=i,o[1]+=c;break;case 1:c=i*(2-h),o[0]+=c,o[1]+=i;break;case 2:c=i*(h-2),o[1]+=i,o[2]+=c;break;case 3:c=i*(4-h),o[1]+=c,o[2]+=i;break;case 4:c=i*(h-4),o[2]+=i,o[0]+=c;break;case 5:c=i*(6-h),o[2]+=c,o[0]+=i;break}for(var a=0;a!=3;++a)o[a]=Math.round(o[a]*255);return o}function Tc(t,r){if(r===0)return t;var e=AS(CS(t));return r<0?e[2]=e[2]*(1+r):e[2]=1-(1-e[2])*(1-r),Pf(FS(e))}var Gg=6,RS=15,MS=1,On=Gg;function Bf(t){return Math.floor((t+Math.round(128/On)/256)*On)}function Lf(t){return Math.floor((t-5)/On*100+.5)/100}function Sc(t){return Math.round((t*On+5)/On*256)/256}function zh(t){return Sc(Lf(Bf(t)))}function o0(t){var r=Math.abs(t-zh(t)),e=On;if(r>.005)for(On=MS;On":case"":break;case"":case"":i={},h.diagonalUp&&(i.diagonalUp=Pr(h.diagonalUp)),h.diagonalDown&&(i.diagonalDown=Pr(h.diagonalDown)),r.Borders.push(i);break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":break;case"":case"":break;case"":case"":break;case"":s=!1;break;default:if(n&&n.WTF&&!s)throw new Error("unrecognized "+h[0]+" in borders")}})}function NS(t,r,e,n){r.Fills=[];var i={},s=!1;(t[0].match(Ln)||[]).forEach(function(o){var h=Wt(o);switch(gs(h[0])){case"":case"":break;case"":case"":i={},r.Fills.push(i);break;case"":break;case"":break;case"":r.Fills.push(i),i={};break;case"":h.patternType&&(i.patternType=h.patternType);break;case"":case"":break;case"":case"":break;case"":case"":break;case"":break;case"":break;case"":break;case"":break;case"":case"":break;case"":s=!1;break;default:if(n&&n.WTF&&!s)throw new Error("unrecognized "+h[0]+" in fills")}})}function PS(t,r,e,n){r.Fonts=[];var i={},s=!1;(t[0].match(Ln)||[]).forEach(function(o){var h=Wt(o);switch(gs(h[0])){case"":case"":break;case"":break;case"":case"":r.Fonts.push(i),i={};break;case"":case"":break;case"":i.bold=1;break;case"":i.italic=1;break;case"":i.underline=1;break;case"":i.strike=1;break;case"":i.outline=1;break;case"":i.shadow=1;break;case"":i.condense=1;break;case"":i.extend=1;break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":s=!1;break;case"":case"":break;case"":s=!1;break;default:if(n&&n.WTF&&!s)throw new Error("unrecognized "+h[0]+" in fonts")}})}function BS(t,r,e){r.NumberFmt=[];for(var n=Jr(Ht),i=0;i":case"":case"":break;case"0){if(c>392){for(c=392;c>60&&r.NumberFmt[c]!=null;--c);r.NumberFmt[c]=h}Ns(h,c)}}break;case"":break;default:if(e.WTF)throw new Error("unrecognized "+o[0]+" in numFmts")}}}function LS(t){var r=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach(function(e){for(var n=e[0];n<=e[1];++n)t[n]!=null&&(r[r.length]=pt("numFmt",null,{numFmtId:n,formatCode:Cr(t[n])}))}),r.length===1?"":(r[r.length]="",r[0]=pt("numFmts",null,{count:r.length-2}).replace("/>",">"),r.join(""))}var Jl=["numFmtId","fillId","fontId","borderId","xfId"],Ql=["applyAlignment","applyBorder","applyFill","applyFont","applyNumberFormat","applyProtection","pivotButton","quotePrefix"];function US(t,r,e){r.CellXf=[];var n,i=!1;(t[0].match(Ln)||[]).forEach(function(s){var o=Wt(s),h=0;switch(gs(o[0])){case"":case"":case"":break;case"":for(n=o,delete n[0],h=0;h392){for(h=392;h>60;--h)if(r.NumberFmt[n.numFmtId]==r.NumberFmt[h]){n.numFmtId=h;break}}r.CellXf.push(n);break;case"":break;case"":var c={};o.vertical&&(c.vertical=o.vertical),o.horizontal&&(c.horizontal=o.horizontal),o.textRotation!=null&&(c.textRotation=o.textRotation),o.indent&&(c.indent=o.indent),o.wrapText&&(c.wrapText=Pr(o.wrapText)),n.alignment=c;break;case"":break;case"":case"":break;case"":i=!1;break;case"":case"":break;case"":i=!1;break;default:if(e&&e.WTF&&!i)throw new Error("unrecognized "+o[0]+" in cellXfs")}})}function jS(t){var r=[];return r[r.length]=pt("cellXfs",null),t.forEach(function(e){r[r.length]=pt("xf",null,e)}),r[r.length]="",r.length===2?"":(r[0]=pt("cellXfs",null,{count:r.length-2}).replace("/>",">"),r.join(""))}var HS=function(){var r=/<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/,e=/<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/,n=/<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/,i=/<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/,s=/<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/;return function(h,c,a){var f={};if(!h)return f;h=h.replace(//mg,"").replace(//gm,"");var l;return(l=h.match(r))&&BS(l,f,a),(l=h.match(i))&&PS(l,f,c,a),(l=h.match(n))&&NS(l,f,c,a),(l=h.match(s))&&DS(l,f,c,a),(l=h.match(e))&&US(l,f,a),f}}();function Yg(t,r){var e=[Qr,pt("styleSheet",null,{xmlns:Wa[0],"xmlns:vt":un.vt})],n;return t.SSF&&(n=LS(t.SSF))!=null&&(e[e.length]=n),e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',(n=jS(r.cellXfs))&&(e[e.length]=n),e[e.length]='',e[e.length]='',e[e.length]='',e.length>2&&(e[e.length]="",e[1]=e[1].replace("/>",">")),e.join("")}function WS(t,r){var e=t.read_shift(2),n=Nn(t);return[e,n]}function $S(t,r,e){e||(e=nt(6+4*r.length)),e.write_shift(2,t),bn(r,e);var n=e.length>e.l?e.slice(0,e.l):e;return e.l==null&&(e.l=e.length),n}function zS(t,r,e){var n={};n.sz=t.read_shift(2)/20;var i=S5(t);i.fItalic&&(n.italic=1),i.fCondense&&(n.condense=1),i.fExtend&&(n.extend=1),i.fShadow&&(n.shadow=1),i.fOutline&&(n.outline=1),i.fStrikeout&&(n.strike=1);var s=t.read_shift(2);switch(s===700&&(n.bold=1),t.read_shift(2)){case 1:n.vertAlign="superscript";break;case 2:n.vertAlign="subscript";break}var o=t.read_shift(1);o!=0&&(n.underline=o);var h=t.read_shift(1);h>0&&(n.family=h);var c=t.read_shift(1);switch(c>0&&(n.charset=c),t.l++,n.color=T5(t),t.read_shift(1)){case 1:n.scheme="major";break;case 2:n.scheme="minor";break}return n.name=Nn(t),n}function XS(t,r){r||(r=nt(25+4*32)),r.write_shift(2,t.sz*20),k5(t,r),r.write_shift(2,t.bold?700:400);var e=0;t.vertAlign=="superscript"?e=1:t.vertAlign=="subscript"&&(e=2),r.write_shift(2,e),r.write_shift(1,t.underline||0),r.write_shift(1,t.family||0),r.write_shift(1,t.charset||0),r.write_shift(1,0),yc(t.color,r);var n=0;return t.scheme=="major"&&(n=1),t.scheme=="minor"&&(n=2),r.write_shift(1,n),bn(t.name,r),r.length>r.l?r.slice(0,r.l):r}var VS=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Xh,GS=Bn;function B1(t,r){r||(r=nt(4*3+8*7+16*1)),Xh||(Xh=Rc(VS));var e=Xh[t.patternType];e==null&&(e=40),r.write_shift(4,e);var n=0;if(e!=40)for(yc({auto:1},r),yc({auto:1},r);n<12;++n)r.write_shift(4,0);else{for(;n<4;++n)r.write_shift(4,0);for(;n<12;++n)r.write_shift(4,0)}return r.length>r.l?r.slice(0,r.l):r}function KS(t,r){var e=t.l+r,n=t.read_shift(2),i=t.read_shift(2);return t.l=e,{ixfe:n,numFmtId:i}}function Zg(t,r,e){e||(e=nt(16)),e.write_shift(2,r||0),e.write_shift(2,t.numFmtId||0),e.write_shift(2,0),e.write_shift(2,0),e.write_shift(2,0),e.write_shift(1,0),e.write_shift(1,0);var n=0;return e.write_shift(1,n),e.write_shift(1,0),e.write_shift(1,0),e.write_shift(1,0),e}function df(t,r){return r||(r=nt(10)),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(4,0),r.write_shift(4,0),r}var YS=Bn;function ZS(t,r){return r||(r=nt(51)),r.write_shift(1,0),df(null,r),df(null,r),df(null,r),df(null,r),df(null,r),r.length>r.l?r.slice(0,r.l):r}function JS(t,r){return r||(r=nt(12+4*10)),r.write_shift(4,t.xfId),r.write_shift(2,1),r.write_shift(1,+t.builtinId),r.write_shift(1,0),wc(t.name||"",r),r.length>r.l?r.slice(0,r.l):r}function QS(t,r,e){var n=nt(2052);return n.write_shift(4,t),wc(r,n),wc(e,n),n.length>n.l?n.slice(0,n.l):n}function qS(t,r,e){var n={};n.NumberFmt=[];for(var i in Ht)n.NumberFmt[i]=Ht[i];n.CellXf=[],n.Fonts=[];var s=[],o=!1;return js(t,function(c,a,f){switch(f){case 44:n.NumberFmt[c[0]]=c[1],Ns(c[1],c[0]);break;case 43:n.Fonts.push(c),c.color.theme!=null&&r&&r.themeElements&&r.themeElements.clrScheme&&(c.color.rgb=Tc(r.themeElements.clrScheme[c.color.theme].rgb,c.color.tint||0));break;case 1025:break;case 45:break;case 46:break;case 47:s[s.length-1]==617&&n.CellXf.push(c);break;case 48:case 507:case 572:case 475:break;case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 35:o=!0;break;case 36:o=!1;break;case 37:s.push(f),o=!0;break;case 38:s.pop(),o=!1;break;default:if(a.T>0)s.push(f);else if(a.T<0)s.pop();else if(!o||e.WTF&&s[s.length-1]!=37)throw new Error("Unexpected record 0x"+f.toString(16))}}),n}function ek(t,r){if(r){var e=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)r[i]!=null&&++e}),e!=0&&(ct(t,615,rs(e)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)r[i]!=null&&ct(t,44,$S(i,r[i]))}),ct(t,616))}}function tk(t){var r=1;ct(t,611,rs(r)),ct(t,43,XS({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),ct(t,612)}function rk(t){var r=2;ct(t,603,rs(r)),ct(t,45,B1({patternType:"none"})),ct(t,45,B1({patternType:"gray125"})),ct(t,604)}function nk(t){var r=1;ct(t,613,rs(r)),ct(t,46,ZS()),ct(t,614)}function ik(t){var r=1;ct(t,626,rs(r)),ct(t,47,Zg({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),ct(t,627)}function sk(t,r){ct(t,617,rs(r.length)),r.forEach(function(e){ct(t,47,Zg(e,0))}),ct(t,618)}function ak(t){var r=1;ct(t,619,rs(r)),ct(t,48,JS({xfId:0,builtinId:0,name:"Normal"})),ct(t,620)}function ok(t){var r=0;ct(t,505,rs(r)),ct(t,506)}function fk(t){var r=0;ct(t,508,QS(r,"TableStyleMedium9","PivotStyleMedium4")),ct(t,509)}function lk(t,r){var e=si();return ct(e,278),ek(e,t.SSF),tk(e),rk(e),nk(e),ik(e),sk(e,r.cellXfs),ak(e),ok(e),fk(e),ct(e,279),e.end()}var ck=["","","","","","","","","","","",""];function hk(t,r,e){r.themeElements.clrScheme=[];var n={};(t[0].match(Ln)||[]).forEach(function(i){var s=Wt(i);switch(s[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":s[0].charAt(1)==="/"?(r.themeElements.clrScheme[ck.indexOf(s[0])]=n,n={}):n.name=s[0].slice(3,s[0].length-1);break;default:if(e&&e.WTF)throw new Error("Unrecognized "+s[0]+" in clrScheme")}})}function uk(){}function dk(){}var pk=/]*)>[\s\S]*<\/a:clrScheme>/,mk=/]*)>[\s\S]*<\/a:fontScheme>/,gk=/]*)>[\s\S]*<\/a:fmtScheme>/;function vk(t,r,e){r.themeElements={};var n;[["clrScheme",pk,hk],["fontScheme",mk,uk],["fmtScheme",gk,dk]].forEach(function(i){if(!(n=t.match(i[1])))throw new Error(i[0]+" not found in themeElements");i[2](n,r,e)})}var xk=/]*)>[\s\S]*<\/a:themeElements>/;function Jg(t,r){(!t||t.length===0)&&(t=f0());var e,n={};if(!(e=t.match(xk)))throw new Error("themeElements not found in theme");return vk(e[0],n,r),n.raw=t,n}function f0(t,r){if(r&&r.themeXLSX)return r.themeXLSX;if(t&&typeof t.raw=="string")return t.raw;var e=[Qr];return e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]='',e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]='',e[e.length]="",e[e.length]="",e[e.length]="",e[e.length]="",e.join("")}function bk(t,r,e){var n=t.l+r,i=t.read_shift(4);if(i!==124226){if(!e.cellStyles){t.l=n;return}var s=t.slice(t.l);t.l=n;var o;try{o=$m(s,{type:"array"})}catch{return}var h=bi(o,"theme/theme/theme1.xml",!0);if(h)return Jg(h,e)}}function wk(t){return t.read_shift(4)}function yk(t){var r={};switch(r.xclrType=t.read_shift(2),r.nTintShade=t.read_shift(2),r.xclrType){case 0:t.l+=4;break;case 1:r.xclrValue=_k(t,4);break;case 2:r.xclrValue=Rg(t);break;case 3:r.xclrValue=wk(t);break;case 4:t.l+=4;break}return t.l+=8,r}function _k(t,r){return Bn(t,r)}function Ek(t,r){return Bn(t,r)}function Tk(t){var r=t.read_shift(2),e=t.read_shift(2)-4,n=[r];switch(r){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:n[1]=yk(t);break;case 6:n[1]=Ek(t,e);break;case 14:case 15:n[1]=t.read_shift(e===1?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+r+" "+e)}return n}function Sk(t,r){var e=t.l+r;t.l+=2;var n=t.read_shift(2);t.l+=2;for(var i=t.read_shift(2),s=[];i-- >0;)s.push(Tk(t,e-t.l));return{ixfe:n,ext:s}}function kk(t,r){r.forEach(function(e){switch(e[0]){}})}function Ck(t,r){return{flags:t.read_shift(4),version:t.read_shift(4),name:Nn(t)}}function Ak(t){var r=nt(12+2*t.name.length);return r.write_shift(4,t.flags),r.write_shift(4,t.version),bn(t.name,r),r.slice(0,r.l)}function Fk(t){for(var r=[],e=t.read_shift(4);e-- >0;)r.push([t.read_shift(4),t.read_shift(4)]);return r}function Rk(t){var r=nt(4+8*t.length);r.write_shift(4,t.length);for(var e=0;e":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":s=2;break;case"":s=2;break;case"":case"":case"":break;case"":i=!1;break;case" + + + + + + + + + + + + + + + + + +`),t.join("")}function Bk(t){var r=[];if(!t)return r;var e=1;return(t.match(Ln)||[]).forEach(function(n){var i=Wt(n);switch(i[0]){case"":case"":break;case"]*r:id="([^"]*)"/)||["",""])[1];return r["!id"][e].Target}var Mo=1024;function qg(t,r){for(var e=[21600,21600],n=["m0,0l0",e[1],e[0],e[1],e[0],"0xe"].join(","),i=[pt("xml",null,{"xmlns:v":gi.v,"xmlns:o":gi.o,"xmlns:x":gi.x,"xmlns:mv":gi.mv}).replace(/\/>/,">"),pt("o:shapelayout",pt("o:idmap",null,{"v:ext":"edit",data:t}),{"v:ext":"edit"}),pt("v:shapetype",[pt("v:stroke",null,{joinstyle:"miter"}),pt("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:e.join(","),path:n})];Mo",a,pt("v:shadow",null,f),pt("v:path",null,{"o:connecttype":"none"}),'
','',"","",kn("x:Anchor",[o.c+1,0,o.r+1,0,o.c+3,20,o.r+5,20].join(",")),kn("x:AutoFill","False"),kn("x:Row",String(o.r)),kn("x:Column",String(o.c)),s[1].hidden?"":"","",""])}),i.push(""),i.join("")}function L1(t,r,e,n){var i=Array.isArray(t),s;r.forEach(function(o){var h=dn(o.ref);if(i?(t[h.r]||(t[h.r]=[]),s=t[h.r][h.c]):s=t[o.ref],!s){s={t:"z"},i?t[h.r][h.c]=s:t[o.ref]=s;var c=Er(t["!ref"]||"BDWGO1000001:A1");c.s.r>h.r&&(c.s.r=h.r),c.e.rh.c&&(c.s.c=h.c),c.e.c=0;--l){if(!e&&s.c[l].T)return;e&&!s.c[l].T&&s.c.splice(l,1)}if(e&&n){for(l=0;l/))return[];var e=[],n=[],i=t.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);i&&i[1]&&i[1].split(/<\/\w*:?author>/).forEach(function(o){if(!(o===""||o.trim()==="")){var h=o.match(/<(?:\w+:)?author[^>]*>(.*)/);h&&e.push(h[1])}});var s=t.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return s&&s[1]&&s[1].split(/<\/\w*:?comment>/).forEach(function(o){if(!(o===""||o.trim()==="")){var h=o.match(/<(?:\w+:)?comment[^>]*>/);if(h){var c=Wt(h[0]),a={author:c.authorId&&e[c.authorId]||"sheetjsghost",ref:c.ref,guid:c.guid},f=dn(c.ref);if(!(r.sheetRows&&r.sheetRows<=f.r)){var l=o.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),u=!!l&&!!l[1]&&s0(l[1])||{r:"",t:"",h:""};a.r=u.r,u.r==""&&(u.t=u.h=""),a.t=(u.t||"").replace(/\r\n/g,` +`).replace(/\r/g,` +`),r.cellHTML&&(a.h=u.h),n.push(a)}}}}),n}function ev(t){var r=[Qr,pt("comments",null,{xmlns:Wa[0]})],e=[];return r.push(""),t.forEach(function(n){n[1].forEach(function(i){var s=Cr(i.a);e.indexOf(s)==-1&&(e.push(s),r.push(""+s+"")),i.T&&i.ID&&e.indexOf("tc="+i.ID)==-1&&(e.push("tc="+i.ID),r.push("tc="+i.ID+""))})}),e.length==0&&(e.push("SheetJ5"),r.push("SheetJ5")),r.push(""),r.push(""),t.forEach(function(n){var i=0,s=[];if(n[1][0]&&n[1][0].T&&n[1][0].ID?i=e.indexOf("tc="+n[1][0].ID):n[1].forEach(function(c){c.a&&(i=e.indexOf(Cr(c.a))),s.push(c.t||"")}),r.push(''),s.length<=1)r.push(kn("t",Cr(s[0]||"")));else{for(var o=`Comment: + `+s[0]+` +`,h=1;h")}),r.push(""),r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function $k(t,r){var e=[],n=!1,i={},s=0;return t.replace(Ln,function(h,c){var a=Wt(h);switch(gs(a[0])){case"":break;case"":i.t!=null&&e.push(i);break;case"":case"":i.t=t.slice(s,c).replace(/\r\n/g,` +`).replace(/\r/g,` +`);break;case"":n=!0;break;case"":n=!1;break;case"":case"
":case"":break;case"":n=!1;break;default:if(!n&&r.WTF)throw new Error("unrecognized "+a[0]+" in threaded comments")}return h}),e}function zk(t,r,e){var n=[Qr,pt("ThreadedComments",null,{xmlns:un.TCMNT}).replace(/[\/]>/,">")];return t.forEach(function(i){var s="";(i[1]||[]).forEach(function(o,h){if(!o.T){delete o.ID;return}o.a&&r.indexOf(o.a)==-1&&r.push(o.a);var c={ref:i[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+e.tcid++).slice(-12)+"}"};h==0?s=c.id:c.parentId=s,o.ID=c.id,o.a&&(c.personId="{54EE7950-7262-4200-6969-"+("000000000000"+r.indexOf(o.a)).slice(-12)+"}"),n.push(pt("threadedComment",kn("text",o.t||""),c))})}),n.push(""),n.join("")}function Xk(t,r){var e=[],n=!1;return t.replace(Ln,function(s){var o=Wt(s);switch(gs(o[0])){case"":break;case"":break;case"":case"":case"":break;case"":n=!1;break;default:if(!n&&r.WTF)throw new Error("unrecognized "+o[0]+" in threaded comments")}return s}),e}function Vk(t){var r=[Qr,pt("personList",null,{xmlns:un.TCMNT,"xmlns:x":Wa[0]}).replace(/[\/]>/,">")];return t.forEach(function(e,n){r.push(pt("person",null,{displayName:e,id:"{54EE7950-7262-4200-6969-"+("000000000000"+n).slice(-12)+"}",userId:e,providerId:"None"}))}),r.push(""),r.join("")}function Gk(t){var r={};r.iauthor=t.read_shift(4);var e=Ga(t);return r.rfx=e.s,r.ref=Vt(e.s),t.l+=16,r}function Kk(t,r){return r==null&&(r=nt(36)),r.write_shift(4,t[1].iauthor),Ho(t[0],r),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r}var Yk=Nn;function Zk(t){return bn(t.slice(0,54))}function Jk(t,r){var e=[],n=[],i={},s=!1;return js(t,function(h,c,a){switch(a){case 632:n.push(h);break;case 635:i=h;break;case 637:i.t=h.t,i.h=h.h,i.r=h.r;break;case 636:if(i.author=n[i.iauthor],delete i.iauthor,r.sheetRows&&i.rfx&&r.sheetRows<=i.rfx.r)break;i.t||(i.t=""),delete i.rfx,e.push(i);break;case 3072:break;case 35:s=!0;break;case 36:s=!1;break;case 37:break;case 38:break;default:if(!c.T){if(!s||r.WTF)throw new Error("Unexpected record 0x"+a.toString(16))}}}),e}function Qk(t){var r=si(),e=[];return ct(r,628),ct(r,630),t.forEach(function(n){n[1].forEach(function(i){e.indexOf(i.a)>-1||(e.push(i.a.slice(0,54)),ct(r,632,Zk(i.a)))})}),ct(r,631),ct(r,633),t.forEach(function(n){n[1].forEach(function(i){i.iauthor=e.indexOf(i.a);var s={s:dn(n[0]),e:dn(n[0])};ct(r,635,Kk([s,i])),i.t&&i.t.length>0&&ct(r,637,w5(i)),ct(r,636),delete i.iauthor})}),ct(r,634),ct(r,629),r.end()}var qk="application/vnd.ms-office.vbaProject";function e9(t){var r=It.utils.cfb_new({root:"R"});return t.FullPaths.forEach(function(e,n){if(!(e.slice(-1)==="/"||!e.match(/_VBA_PROJECT_CUR/))){var i=e.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/,"");It.utils.cfb_add(r,i,t.FileIndex[n].content)}}),It.write(r)}function t9(t,r){r.FullPaths.forEach(function(e,n){if(n!=0){var i=e.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");i.slice(-1)!=="/"&&It.utils.cfb_add(t,i,r.FileIndex[n].content)}})}var tv=["xlsb","xlsm","xlam","biff8","xla"];function r9(){return{"!type":"dialog"}}function n9(){return{"!type":"dialog"}}function i9(){return{"!type":"macro"}}function s9(){return{"!type":"macro"}}var Do=function(){var t=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,r={r:0,c:0};function e(n,i,s,o){var h=!1,c=!1;s.length==0?c=!0:s.charAt(0)=="["&&(c=!0,s=s.slice(1,-1)),o.length==0?h=!0:o.charAt(0)=="["&&(h=!0,o=o.slice(1,-1));var a=s.length>0?parseInt(s,10)|0:0,f=o.length>0?parseInt(o,10)|0:0;return h?f+=r.c:--f,c?a+=r.r:--a,i+(h?"":"$")+an(f)+(c?"":"$")+wn(a)}return function(i,s){return r=s,i.replace(t,e)}}(),l0=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,c0=function(){return function(r,e){return r.replace(l0,function(n,i,s,o,h,c){var a=og(o)-(s?0:e.c),f=ag(c)-(h?0:e.r),l=f==0?"":h?f+1:"["+f+"]",u=a==0?"":s?a+1:"["+a+"]";return i+"R"+l+"C"+u})}}();function rv(t,r){return t.replace(l0,function(e,n,i,s,o,h){return n+(i=="$"?i+s:an(og(s)+r.c))+(o=="$"?o+h:wn(ag(h)+r.r))})}function a9(t,r,e){var n=Li(r),i=n.s,s=dn(e),o={r:s.r-i.r,c:s.c-i.c};return rv(t,o)}function o9(t){return t.length!=1}function U1(t){return t.replace(/_xlfn\./g,"")}function tn(t){t.l+=1}function la(t,r){var e=t.read_shift(r==1?1:2);return[e&16383,e>>14&1,e>>15&1]}function nv(t,r,e){var n=2;if(e){if(e.biff>=2&&e.biff<=5)return iv(t);e.biff==12&&(n=4)}var i=t.read_shift(n),s=t.read_shift(n),o=la(t,2),h=la(t,2);return{s:{r:i,c:o[0],cRel:o[1],rRel:o[2]},e:{r:s,c:h[0],cRel:h[1],rRel:h[2]}}}function iv(t){var r=la(t,2),e=la(t,2),n=t.read_shift(1),i=t.read_shift(1);return{s:{r:r[0],c:n,cRel:r[1],rRel:r[2]},e:{r:e[0],c:i,cRel:e[1],rRel:e[2]}}}function f9(t,r,e){if(e.biff<8)return iv(t);var n=t.read_shift(e.biff==12?4:2),i=t.read_shift(e.biff==12?4:2),s=la(t,2),o=la(t,2);return{s:{r:n,c:s[0],cRel:s[1],rRel:s[2]},e:{r:i,c:o[0],cRel:o[1],rRel:o[2]}}}function sv(t,r,e){if(e&&e.biff>=2&&e.biff<=5)return l9(t);var n=t.read_shift(e&&e.biff==12?4:2),i=la(t,2);return{r:n,c:i[0],cRel:i[1],rRel:i[2]}}function l9(t){var r=la(t,2),e=t.read_shift(1);return{r:r[0],c:e,cRel:r[1],rRel:r[2]}}function c9(t){var r=t.read_shift(2),e=t.read_shift(2);return{r,c:e&255,fQuoted:!!(e&16384),cRel:e>>15,rRel:e>>15}}function h9(t,r,e){var n=e&&e.biff?e.biff:8;if(n>=2&&n<=5)return u9(t);var i=t.read_shift(n>=12?4:2),s=t.read_shift(2),o=(s&16384)>>14,h=(s&32768)>>15;if(s&=16383,h==1)for(;i>524287;)i-=1048576;if(o==1)for(;s>8191;)s=s-16384;return{r:i,c:s,cRel:o,rRel:h}}function u9(t){var r=t.read_shift(2),e=t.read_shift(1),n=(r&32768)>>15,i=(r&16384)>>14;return r&=16383,n==1&&r>=8192&&(r=r-16384),i==1&&e>=128&&(e=e-256),{r,c:e,cRel:i,rRel:n}}function d9(t,r,e){var n=(t[t.l++]&96)>>5,i=nv(t,e.biff>=2&&e.biff<=5?6:8,e);return[n,i]}function p9(t,r,e){var n=(t[t.l++]&96)>>5,i=t.read_shift(2,"i"),s=8;if(e)switch(e.biff){case 5:t.l+=12,s=6;break;case 12:s=12;break}var o=nv(t,s,e);return[n,i,o]}function m9(t,r,e){var n=(t[t.l++]&96)>>5;return t.l+=e&&e.biff>8?12:e.biff<8?6:8,[n]}function g9(t,r,e){var n=(t[t.l++]&96)>>5,i=t.read_shift(2),s=8;if(e)switch(e.biff){case 5:t.l+=12,s=6;break;case 12:s=12;break}return t.l+=s,[n,i]}function v9(t,r,e){var n=(t[t.l++]&96)>>5,i=f9(t,r-1,e);return[n,i]}function x9(t,r,e){var n=(t[t.l++]&96)>>5;return t.l+=e.biff==2?6:e.biff==12?14:7,[n]}function j1(t){var r=t[t.l+1]&1,e=1;return t.l+=4,[r,e]}function b9(t,r,e){t.l+=2;for(var n=t.read_shift(e&&e.biff==2?1:2),i=[],s=0;s<=n;++s)i.push(t.read_shift(e&&e.biff==2?1:2));return i}function w9(t,r,e){var n=t[t.l+1]&255?1:0;return t.l+=2,[n,t.read_shift(e&&e.biff==2?1:2)]}function y9(t,r,e){var n=t[t.l+1]&255?1:0;return t.l+=2,[n,t.read_shift(e&&e.biff==2?1:2)]}function _9(t){var r=t[t.l+1]&255?1:0;return t.l+=2,[r,t.read_shift(2)]}function E9(t,r,e){var n=t[t.l+1]&255?1:0;return t.l+=e&&e.biff==2?3:4,[n]}function av(t){var r=t.read_shift(1),e=t.read_shift(1);return[r,e]}function T9(t){return t.read_shift(2),av(t)}function S9(t){return t.read_shift(2),av(t)}function k9(t,r,e){var n=(t[t.l]&96)>>5;t.l+=1;var i=sv(t,0,e);return[n,i]}function C9(t,r,e){var n=(t[t.l]&96)>>5;t.l+=1;var i=h9(t,0,e);return[n,i]}function A9(t,r,e){var n=(t[t.l]&96)>>5;t.l+=1;var i=t.read_shift(2);e&&e.biff==5&&(t.l+=12);var s=sv(t,0,e);return[n,i,s]}function F9(t,r,e){var n=(t[t.l]&96)>>5;t.l+=1;var i=t.read_shift(e&&e.biff<=3?1:2);return[I7[i],lv[i],n]}function R9(t,r,e){var n=t[t.l++],i=t.read_shift(1),s=e&&e.biff<=3?[n==88?-1:0,t.read_shift(1)]:M9(t);return[i,(s[0]===0?lv:M7)[s[1]]]}function M9(t){return[t[t.l+1]>>7,t.read_shift(2)&32767]}function I9(t,r,e){t.l+=e&&e.biff==2?3:4}function O9(t,r,e){if(t.l++,e&&e.biff==12)return[t.read_shift(4,"i"),0];var n=t.read_shift(2),i=t.read_shift(e&&e.biff==2?1:2);return[n,i]}function D9(t){return t.l++,Hs[t.read_shift(1)]}function N9(t){return t.l++,t.read_shift(2)}function P9(t){return t.l++,t.read_shift(1)!==0}function B9(t){return t.l++,Dn(t)}function L9(t,r,e){return t.l++,Kf(t,r-1,e)}function U9(t,r){var e=[t.read_shift(1)];if(r==12)switch(e[0]){case 2:e[0]=4;break;case 4:e[0]=16;break;case 0:e[0]=1;break;case 1:e[0]=2;break}switch(e[0]){case 4:e[1]=Yr(t,1)?"TRUE":"FALSE",r!=12&&(t.l+=7);break;case 37:case 16:e[1]=Hs[t[t.l]],t.l+=r==12?4:8;break;case 0:t.l+=8;break;case 1:e[1]=Dn(t);break;case 2:e[1]=Ka(t,0,{biff:r>0&&r<8?2:r});break;default:throw new Error("Bad SerAr: "+e[0])}return e}function j9(t,r,e){for(var n=t.read_shift(e.biff==12?4:2),i=[],s=0;s!=n;++s)i.push((e.biff==12?Ga:Oc)(t));return i}function H9(t,r,e){var n=0,i=0;e.biff==12?(n=t.read_shift(4),i=t.read_shift(4)):(i=1+t.read_shift(1),n=1+t.read_shift(2)),e.biff>=2&&e.biff<8&&(--n,--i==0&&(i=256));for(var s=0,o=[];s!=n&&(o[s]=[]);++s)for(var h=0;h!=i;++h)o[s][h]=U9(t,e.biff);return o}function W9(t,r,e){var n=t.read_shift(1)>>>5&3,i=!e||e.biff>=8?4:2,s=t.read_shift(i);switch(e.biff){case 2:t.l+=5;break;case 3:case 4:t.l+=8;break;case 5:t.l+=12;break}return[n,0,s]}function $9(t,r,e){if(e.biff==5)return z9(t);var n=t.read_shift(1)>>>5&3,i=t.read_shift(2),s=t.read_shift(4);return[n,i,s]}function z9(t){var r=t.read_shift(1)>>>5&3,e=t.read_shift(2,"i");t.l+=8;var n=t.read_shift(2);return t.l+=12,[r,e,n]}function X9(t,r,e){var n=t.read_shift(1)>>>5&3;t.l+=e&&e.biff==2?3:4;var i=t.read_shift(e&&e.biff==2?1:2);return[n,i]}function V9(t,r,e){var n=t.read_shift(1)>>>5&3,i=t.read_shift(e&&e.biff==2?1:2);return[n,i]}function G9(t,r,e){var n=t.read_shift(1)>>>5&3;return t.l+=4,e.biff<8&&t.l--,e.biff==12&&(t.l+=2),[n]}function K9(t,r,e){var n=(t[t.l++]&96)>>5,i=t.read_shift(2),s=4;if(e)switch(e.biff){case 5:s=15;break;case 12:s=6;break}return t.l+=s,[n,i]}var Y9=Bn,Z9=Bn,J9=Bn;function Zf(t,r,e){return t.l+=2,[c9(t)]}function h0(t){return t.l+=6,[]}var Q9=Zf,q9=h0,e7=h0,t7=Zf;function ov(t){return t.l+=2,[nn(t),t.read_shift(2)&1]}var r7=Zf,n7=ov,i7=h0,s7=Zf,a7=Zf,o7=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];function f7(t){t.l+=2;var r=t.read_shift(2),e=t.read_shift(2),n=t.read_shift(4),i=t.read_shift(2),s=t.read_shift(2),o=o7[e>>2&31];return{ixti:r,coltype:e&3,rt:o,idx:n,c:i,C:s}}function l7(t){return t.l+=2,[t.read_shift(4)]}function c7(t,r,e){return t.l+=5,t.l+=2,t.l+=e.biff==2?1:4,["PTGSHEET"]}function h7(t,r,e){return t.l+=e.biff==2?4:5,["PTGENDSHEET"]}function u7(t){var r=t.read_shift(1)>>>5&3,e=t.read_shift(2);return[r,e]}function d7(t){var r=t.read_shift(1)>>>5&3,e=t.read_shift(2);return[r,e]}function p7(t){return t.l+=4,[0,0]}var H1={1:{n:"PtgExp",f:O9},2:{n:"PtgTbl",f:J9},3:{n:"PtgAdd",f:tn},4:{n:"PtgSub",f:tn},5:{n:"PtgMul",f:tn},6:{n:"PtgDiv",f:tn},7:{n:"PtgPower",f:tn},8:{n:"PtgConcat",f:tn},9:{n:"PtgLt",f:tn},10:{n:"PtgLe",f:tn},11:{n:"PtgEq",f:tn},12:{n:"PtgGe",f:tn},13:{n:"PtgGt",f:tn},14:{n:"PtgNe",f:tn},15:{n:"PtgIsect",f:tn},16:{n:"PtgUnion",f:tn},17:{n:"PtgRange",f:tn},18:{n:"PtgUplus",f:tn},19:{n:"PtgUminus",f:tn},20:{n:"PtgPercent",f:tn},21:{n:"PtgParen",f:tn},22:{n:"PtgMissArg",f:tn},23:{n:"PtgStr",f:L9},26:{n:"PtgSheet",f:c7},27:{n:"PtgEndSheet",f:h7},28:{n:"PtgErr",f:D9},29:{n:"PtgBool",f:P9},30:{n:"PtgInt",f:N9},31:{n:"PtgNum",f:B9},32:{n:"PtgArray",f:x9},33:{n:"PtgFunc",f:F9},34:{n:"PtgFuncVar",f:R9},35:{n:"PtgName",f:W9},36:{n:"PtgRef",f:k9},37:{n:"PtgArea",f:d9},38:{n:"PtgMemArea",f:X9},39:{n:"PtgMemErr",f:Y9},40:{n:"PtgMemNoMem",f:Z9},41:{n:"PtgMemFunc",f:V9},42:{n:"PtgRefErr",f:G9},43:{n:"PtgAreaErr",f:m9},44:{n:"PtgRefN",f:C9},45:{n:"PtgAreaN",f:v9},46:{n:"PtgMemAreaN",f:u7},47:{n:"PtgMemNoMemN",f:d7},57:{n:"PtgNameX",f:$9},58:{n:"PtgRef3d",f:A9},59:{n:"PtgArea3d",f:p9},60:{n:"PtgRefErr3d",f:K9},61:{n:"PtgAreaErr3d",f:g9},255:{}},m7={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},g7={1:{n:"PtgElfLel",f:ov},2:{n:"PtgElfRw",f:s7},3:{n:"PtgElfCol",f:Q9},6:{n:"PtgElfRwV",f:a7},7:{n:"PtgElfColV",f:t7},10:{n:"PtgElfRadical",f:r7},11:{n:"PtgElfRadicalS",f:i7},13:{n:"PtgElfColS",f:q9},15:{n:"PtgElfColSV",f:e7},16:{n:"PtgElfRadicalLel",f:n7},25:{n:"PtgList",f:f7},29:{n:"PtgSxName",f:l7},255:{}},v7={0:{n:"PtgAttrNoop",f:p7},1:{n:"PtgAttrSemi",f:E9},2:{n:"PtgAttrIf",f:y9},4:{n:"PtgAttrChoose",f:b9},8:{n:"PtgAttrGoto",f:w9},16:{n:"PtgAttrSum",f:I9},32:{n:"PtgAttrBaxcel",f:j1},33:{n:"PtgAttrBaxcel",f:j1},64:{n:"PtgAttrSpace",f:T9},65:{n:"PtgAttrSpaceSemi",f:S9},128:{n:"PtgAttrIfError",f:_9},255:{}};function Jf(t,r,e,n){if(n.biff<8)return Bn(t,r);for(var i=t.l+r,s=[],o=0;o!==e.length;++o)switch(e[o][0]){case"PtgArray":e[o][1]=H9(t,0,n),s.push(e[o][1]);break;case"PtgMemArea":e[o][2]=j9(t,e[o][1],n),s.push(e[o][2]);break;case"PtgExp":n&&n.biff==12&&(e[o][1][1]=t.read_shift(4),s.push(e[o][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+e[o][0]}return r=i-t.l,r!==0&&s.push(Bn(t,r)),s}function Qf(t,r,e){for(var n=t.l+r,i,s,o=[];n!=t.l;)r=n-t.l,s=t[t.l],i=H1[s]||H1[m7[s]],(s===24||s===25)&&(i=(s===24?g7:v7)[t[t.l+1]]),!i||!i.f?Bn(t,r):o.push([i.n,i.f(t,r,e)]);return o}function x7(t){for(var r=[],e=0;e=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function w7(t,r){if(!t&&!(r&&r.biff<=5&&r.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(t)?"'"+t+"'":t}function fv(t,r,e){if(!t)return"SH33TJSERR0";if(e.biff>8&&(!t.XTI||!t.XTI[r]))return t.SheetNames[r];if(!t.XTI)return"SH33TJSERR6";var n=t.XTI[r];if(e.biff<8)return r>1e4&&(r-=65536),r<0&&(r=-r),r==0?"":t.XTI[r-1];if(!n)return"SH33TJSERR1";var i="";if(e.biff>8)switch(t[n[0]][0]){case 357:return i=n[1]==-1?"#REF":t.SheetNames[n[1]],n[1]==n[2]?i:i+":"+t.SheetNames[n[2]];case 358:return e.SID!=null?t.SheetNames[e.SID]:"SH33TJSSAME"+t[n[0]][0];case 355:default:return"SH33TJSSRC"+t[n[0]][0]}switch(t[n[0]][0][0]){case 1025:return i=n[1]==-1?"#REF":t.SheetNames[n[1]]||"SH33TJSERR3",n[1]==n[2]?i:i+":"+t.SheetNames[n[2]];case 14849:return t[n[0]].slice(1).map(function(s){return s.Name}).join(";;");default:return t[n[0]][0][3]?(i=n[1]==-1?"#REF":t[n[0]][0][3][n[1]]||"SH33TJSERR4",n[1]==n[2]?i:i+":"+t[n[0]][0][3][n[2]]):"SH33TJSERR2"}}function W1(t,r,e){var n=fv(t,r,e);return n=="#REF"?n:w7(n,e)}function In(t,r,e,n,i){var s=i&&i.biff||8,o={s:{c:0,r:0},e:{c:0,r:0}},h=[],c,a,f,l=0,u=0,p,m="";if(!t[0]||!t[0][0])return"";for(var d=-1,v="",x=0,g=t[0].length;x=0){switch(t[0][d][1][0]){case 0:v=zr(" ",t[0][d][1][1]);break;case 1:v=zr("\r",t[0][d][1][1]);break;default:if(v="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+t[0][d][1][0])}a=a+v,d=-1}h.push(a+b7[w[0]]+c);break;case"PtgIsect":c=h.pop(),a=h.pop(),h.push(a+" "+c);break;case"PtgUnion":c=h.pop(),a=h.pop(),h.push(a+","+c);break;case"PtgRange":c=h.pop(),a=h.pop(),h.push(a+":"+c);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":f=_f(w[1][1],o,i),h.push(Ef(f,s));break;case"PtgRefN":f=e?_f(w[1][1],e,i):w[1][1],h.push(Ef(f,s));break;case"PtgRef3d":l=w[1][1],f=_f(w[1][2],o,i),m=W1(n,l,i),h.push(m+"!"+Ef(f,s));break;case"PtgFunc":case"PtgFuncVar":var y=w[1][0],_=w[1][1];y||(y=0),y&=127;var k=y==0?[]:h.slice(-y);h.length-=y,_==="User"&&(_=k.shift()),h.push(_+"("+k.join(",")+")");break;case"PtgBool":h.push(w[1]?"TRUE":"FALSE");break;case"PtgInt":h.push(w[1]);break;case"PtgNum":h.push(String(w[1]));break;case"PtgStr":h.push('"'+w[1].replace(/"/g,'""')+'"');break;case"PtgErr":h.push(w[1]);break;case"PtgAreaN":p=v1(w[1][1],e?{s:e}:o,i),h.push(Hh(p,i));break;case"PtgArea":p=v1(w[1][1],o,i),h.push(Hh(p,i));break;case"PtgArea3d":l=w[1][1],p=w[1][2],m=W1(n,l,i),h.push(m+"!"+Hh(p,i));break;case"PtgAttrSum":h.push("SUM("+h.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":u=w[1][2];var F=(n.names||[])[u-1]||(n[0]||[])[u],O=F?F.Name:"SH33TJSNAME"+String(u);O&&O.slice(0,6)=="_xlfn."&&!i.xlfn&&(O=O.slice(6)),h.push(O);break;case"PtgNameX":var N=w[1][1];u=w[1][2];var U;if(i.biff<=5)N<0&&(N=-N),n[N]&&(U=n[N][u]);else{var z="";if(((n[N]||[])[0]||[])[0]==14849||(((n[N]||[])[0]||[])[0]==1025?n[N][u]&&n[N][u].itab>0&&(z=n.SheetNames[n[N][u].itab-1]+"!"):z=n.SheetNames[u-1]+"!"),n[N]&&n[N][u])z+=n[N][u].Name;else if(n[0]&&n[0][u])z+=n[0][u].Name;else{var W=(fv(n,N,i)||"").split(";;");W[u-1]?z=W[u-1]:z+="SH33TJSERRX"}h.push(z);break}U||(U={Name:"SH33TJSERRY"}),h.push(U.Name);break;case"PtgParen":var X="(",J=")";if(d>=0){switch(v="",t[0][d][1][0]){case 2:X=zr(" ",t[0][d][1][1])+X;break;case 3:X=zr("\r",t[0][d][1][1])+X;break;case 4:J=zr(" ",t[0][d][1][1])+J;break;case 5:J=zr("\r",t[0][d][1][1])+J;break;default:if(i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+t[0][d][1][0])}d=-1}h.push(X+h.pop()+J);break;case"PtgRefErr":h.push("#REF!");break;case"PtgRefErr3d":h.push("#REF!");break;case"PtgExp":f={c:w[1][1],r:w[1][0]};var H={c:e.c,r:e.r};if(n.sharedf[Vt(f)]){var I=n.sharedf[Vt(f)];h.push(In(I,o,H,n,i))}else{var M=!1;for(c=0;c!=n.arrayf.length;++c)if(a=n.arrayf[c],!(f.ca[0].e.c)&&!(f.ra[0].e.r)){h.push(In(a[1],o,H,n,i)),M=!0;break}M||h.push(w[1])}break;case"PtgArray":h.push("{"+x7(w[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":d=x;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":h.push("");break;case"PtgAreaErr":h.push("#REF!");break;case"PtgAreaErr3d":h.push("#REF!");break;case"PtgList":h.push("Table"+w[1].idx+"[#"+w[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":break;case"PtgMemFunc":break;case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":throw new Error("Unrecognized Formula Token: "+String(w));default:throw new Error("Unrecognized Formula Token: "+String(w))}var E=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(i.biff!=3&&d>=0&&E.indexOf(t[0][x][0])==-1){w=t[0][d];var A=!0;switch(w[1][0]){case 4:A=!1;case 0:v=zr(" ",w[1][1]);break;case 5:A=!1;case 1:v=zr("\r",w[1][1]);break;default:if(v="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+w[1][0])}h.push((A?v:"")+h.pop()+(A?"":v)),d=-1}}if(h.length>1&&i.WTF)throw new Error("bad formula stack");return h[0]}function y7(t,r,e){var n=t.l+r,i=e.biff==2?1:2,s,o=t.read_shift(i);if(o==65535)return[[],Bn(t,r-2)];var h=Qf(t,o,e);return r!==o+i&&(s=Jf(t,r-o-i,h,e)),t.l=n,[h,s]}function _7(t,r,e){var n=t.l+r,i=e.biff==2?1:2,s,o=t.read_shift(i);if(o==65535)return[[],Bn(t,r-2)];var h=Qf(t,o,e);return r!==o+i&&(s=Jf(t,r-o-i,h,e)),t.l=n,[h,s]}function E7(t,r,e,n){var i=t.l+r,s=Qf(t,n,e),o;return i!==t.l&&(o=Jf(t,i-t.l,s,e)),[s,o]}function T7(t,r,e){var n=t.l+r,i,s=t.read_shift(2),o=Qf(t,s,e);return s==65535?[[],Bn(t,r-2)]:(r!==s+2&&(i=Jf(t,n-s-2,o,e)),[o,i])}function S7(t){var r;if(Os(t,t.l+6)!==65535)return[Dn(t),"n"];switch(t[t.l]){case 0:return t.l+=8,["String","s"];case 1:return r=t[t.l+2]===1,t.l+=8,[r,"b"];case 2:return r=t[t.l+2],t.l+=8,[r,"e"];case 3:return t.l+=8,["","s"]}return[]}function k7(t){if(t==null){var r=nt(8);return r.write_shift(1,3),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,65535),r}else if(typeof t=="number")return La(t);return La(0)}function Vh(t,r,e){var n=t.l+r,i=vs(t);e.biff==2&&++t.l;var s=S7(t),o=t.read_shift(1);e.biff!=2&&(t.read_shift(1),e.biff>=5&&t.read_shift(4));var h=_7(t,n-t.l,e);return{cell:i,val:s[0],formula:h,shared:o>>3&1,tt:s[1]}}function C7(t,r,e,n,i){var s=ja(r,e,i),o=k7(t.v),h=nt(6),c=33;h.write_shift(2,c),h.write_shift(4,0);for(var a=nt(t.bf.length),f=0;f0?Jf(t,s,i,e):null;return[i,o]}var A7=Dc,Nc=Dc,F7=Dc,R7=Dc,M7={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},lv={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},I7={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function $1(t){return t.slice(0,3)=="of:"&&(t=t.slice(3)),t.charCodeAt(0)==61&&(t=t.slice(1),t.charCodeAt(0)==61&&(t=t.slice(1))),t=t.replace(/COM\.MICROSOFT\./g,""),t=t.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,function(r,e){return e.replace(/\./g,"")}),t=t.replace(/\[.(#[A-Z]*[?!])\]/g,"$1"),t.replace(/[;~]/g,",").replace(/\|/g,";")}function O7(t){var r="of:="+t.replace(l0,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return r.replace(/;/g,"|").replace(/,/g,";")}function Gh(t){var r=t.split(":"),e=r[0].split(".")[0];return[e,r[0].split(".")[1]+(r.length>1?":"+(r[1].split(".")[1]||r[1].split(".")[0]):"")]}function D7(t){return t.replace(/\./,"!")}var Sf={},No={},kf=typeof Map<"u";function u0(t,r,e){var n=0,i=t.length;if(e){if(kf?e.has(r):Object.prototype.hasOwnProperty.call(e,r)){for(var s=kf?e.get(r):e[r];n-1?(e.width=Sc(n),e.customWidth=1):r.width!=null&&(e.width=r.width),r.hidden&&(e.hidden=!0),r.level!=null&&(e.outlineLevel=e.level=r.level),e}function Da(t,r){if(t){var e=[.7,.7,.75,.75,.3,.3];r=="xlml"&&(e=[1,1,1,1,.5,.5]),t.left==null&&(t.left=e[0]),t.right==null&&(t.right=e[1]),t.top==null&&(t.top=e[2]),t.bottom==null&&(t.bottom=e[3]),t.header==null&&(t.header=e[4]),t.footer==null&&(t.footer=e[5])}}function ua(t,r,e){var n=e.revssf[r.z!=null?r.z:"General"],i=60,s=t.length;if(n==null&&e.ssf){for(;i<392;++i)if(e.ssf[i]==null){Ns(r.z,i),e.ssf[i]=r.z,e.revssf[r.z]=n=i;break}}for(i=0;i!=s;++i)if(t[i].numFmtId===n)return i;return t[s]={numFmtId:n,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function cv(t,r,e,n,i,s){try{n.cellNF&&(t.z=Ht[r])}catch(h){if(n.WTF)throw h}if(!(t.t==="z"&&!n.cellStyles)){if(t.t==="d"&&typeof t.v=="string"&&(t.v=jr(t.v)),(!n||n.cellText!==!1)&&t.t!=="z")try{if(Ht[r]==null&&Ns(M8[r]||"General",r),t.t==="e")t.w=t.w||Hs[t.v];else if(r===0)if(t.t==="n")(t.v|0)===t.v?t.w=t.v.toString(10):t.w=Rf(t.v);else if(t.t==="d"){var o=Cn(t.v);(o|0)===o?t.w=o.toString(10):t.w=Rf(o)}else{if(t.v===void 0)return"";t.w=Pa(t.v,No)}else t.t==="d"?t.w=Bi(r,Cn(t.v),No):t.w=Bi(r,t.v,No)}catch(h){if(n.WTF)throw h}if(n.cellStyles&&e!=null)try{t.s=s.Fills[e],t.s.fgColor&&t.s.fgColor.theme&&!t.s.fgColor.rgb&&(t.s.fgColor.rgb=Tc(i.themeElements.clrScheme[t.s.fgColor.theme].rgb,t.s.fgColor.tint||0),n.WTF&&(t.s.fgColor.raw_rgb=i.themeElements.clrScheme[t.s.fgColor.theme].rgb)),t.s.bgColor&&t.s.bgColor.theme&&(t.s.bgColor.rgb=Tc(i.themeElements.clrScheme[t.s.bgColor.theme].rgb,t.s.bgColor.tint||0),n.WTF&&(t.s.bgColor.raw_rgb=i.themeElements.clrScheme[t.s.bgColor.theme].rgb))}catch(h){if(n.WTF&&s.Fills)throw h}}}function N7(t,r,e){if(t&&t["!ref"]){var n=Er(t["!ref"]);if(n.e.c=0&&e.s.c>=0&&(t["!ref"]=cr(e))}var B7=/<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g,L7=/<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/,U7=/<(?:\w:)?hyperlink [^>]*>/mg,j7=/"(\w*:\w*)"/,H7=/<(?:\w:)?col\b[^>]*[\/]?>/g,W7=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,$7=/<(?:\w:)?pageMargins[^>]*\/>/g,hv=/<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/,z7=/<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/,X7=/<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;function V7(t,r,e,n,i,s,o){if(!t)return t;n||(n={"!id":{}});var h=r.dense?[]:{},c={s:{r:2e6,c:2e6},e:{r:0,c:0}},a="",f="",l=t.match(L7);l?(a=t.slice(0,l.index),f=t.slice(l.index+l[0].length)):a=f=t;var u=a.match(hv);u?d0(u[0],h,i,e):(u=a.match(z7))&&K7(u[0],u[1]||"",h,i,e);var p=(a.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(p>0){var m=a.slice(p,p+50).match(j7);m&&P7(h,m[1])}var d=a.match(X7);d&&d[1]&&oC(d[1],i);var v=[];if(r.cellStyles){var x=a.match(H7);x&&rC(v,x)}l&&cC(l[1],h,r,c,s,o);var g=f.match(W7);g&&(h["!autofilter"]=iC(g[0]));var w=[],y=f.match(B7);if(y)for(p=0;p!=y.length;++p)w[p]=Er(y[p].slice(y[p].indexOf('"')+1));var _=f.match(U7);_&&q7(h,_,n);var k=f.match($7);if(k&&(h["!margins"]=eC(Wt(k[0]))),!h["!ref"]&&c.e.c>=c.s.c&&c.e.r>=c.s.r&&(h["!ref"]=cr(c)),r.sheetRows>0&&h["!ref"]){var F=Er(h["!ref"]);r.sheetRows<=+F.e.r&&(F.e.r=r.sheetRows-1,F.e.r>c.e.r&&(F.e.r=c.e.r),F.e.rc.e.c&&(F.e.c=c.e.c),F.e.c0&&(h["!cols"]=v),w.length>0&&(h["!merges"]=w),h}function G7(t){if(t.length===0)return"";for(var r='',e=0;e!=t.length;++e)r+='';return r+""}function d0(t,r,e,n){var i=Wt(t);e.Sheets[n]||(e.Sheets[n]={}),i.codeName&&(e.Sheets[n].CodeName=vr(Fr(i.codeName)))}function K7(t,r,e,n,i){d0(t.slice(0,t.indexOf(">")),e,n,i)}function Y7(t,r,e,n,i){var s=!1,o={},h=null;if(n.bookType!=="xlsx"&&r.vbaraw){var c=r.SheetNames[e];try{r.Workbook&&(c=r.Workbook.Sheets[e].CodeName||c)}catch{}s=!0,o.codeName=ds(Cr(c))}if(t&&t["!outline"]){var a={summaryBelow:1,summaryRight:1};t["!outline"].above&&(a.summaryBelow=0),t["!outline"].left&&(a.summaryRight=0),h=(h||"")+pt("outlinePr",null,a)}!s&&!h||(i[i.length]=pt("sheetPr",h,o))}var Z7=["objects","scenarios","selectLockedCells","selectUnlockedCells"],J7=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];function Q7(t){var r={sheet:1};return Z7.forEach(function(e){t[e]!=null&&t[e]&&(r[e]="1")}),J7.forEach(function(e){t[e]!=null&&!t[e]&&(r[e]="0")}),t.password&&(r.password=a0(t.password).toString(16).toUpperCase()),pt("sheetProtection",null,r)}function q7(t,r,e){for(var n=Array.isArray(t),i=0;i!=r.length;++i){var s=Wt(Fr(r[i]),!0);if(!s.ref)return;var o=((e||{})["!id"]||[])[s.id];o?(s.Target=o.Target,s.location&&(s.Target+="#"+vr(s.location))):(s.Target="#"+vr(s.location),o={Target:s.Target,TargetMode:"Internal"}),s.Rel=o,s.tooltip&&(s.Tooltip=s.tooltip,delete s.tooltip);for(var h=Er(s.ref),c=h.s.r;c<=h.e.r;++c)for(var a=h.s.c;a<=h.e.c;++a){var f=Vt({c:a,r:c});n?(t[c]||(t[c]=[]),t[c][a]||(t[c][a]={t:"z",v:void 0}),t[c][a].l=s):(t[f]||(t[f]={t:"z",v:void 0}),t[f].l=s)}}}function eC(t){var r={};return["left","right","top","bottom","header","footer"].forEach(function(e){t[e]&&(r[e]=parseFloat(t[e]))}),r}function tC(t){return Da(t),pt("pageMargins",null,t)}function rC(t,r){for(var e=!1,n=0;n!=r.length;++n){var i=Wt(r[n],!0);i.hidden&&(i.hidden=Pr(i.hidden));var s=parseInt(i.min,10)-1,o=parseInt(i.max,10)-1;for(i.outlineLevel&&(i.level=+i.outlineLevel||0),delete i.min,delete i.max,i.width=+i.width,!e&&i.width&&(e=!0,o0(i.width)),fa(i);s<=o;)t[s++]=Br(i)}}function nC(t,r){for(var e=[""],n,i=0;i!=r.length;++i)(n=r[i])&&(e[e.length]=pt("col",null,Pc(i,n)));return e[e.length]="",e.join("")}function iC(t){var r={ref:(t.match(/ref="([^"]*)"/)||[])[1]};return r}function sC(t,r,e,n){var i=typeof t.ref=="string"?t.ref:cr(t.ref);e.Workbook||(e.Workbook={Sheets:[]}),e.Workbook.Names||(e.Workbook.Names=[]);var s=e.Workbook.Names,o=Li(i);o.s.r==o.e.r&&(o.e.r=Li(r["!ref"]).e.r,i=cr(o));for(var h=0;ha-z][^>]*)?\/?>/;function oC(t,r){r.Views||(r.Views=[{}]),(t.match(aC)||[]).forEach(function(e,n){var i=Wt(e);r.Views[n]||(r.Views[n]={}),+i.zoomScale&&(r.Views[n].zoom=+i.zoomScale),Pr(i.rightToLeft)&&(r.Views[n].RTL=!0)})}function fC(t,r,e,n){var i={workbookViewId:"0"};return(((n||{}).Workbook||{}).Views||[])[0]&&(i.rightToLeft=n.Workbook.Views[0].RTL?"1":"0"),pt("sheetViews",pt("sheetView",null,i),{})}function lC(t,r,e,n){if(t.c&&e["!comments"].push([r,t.c]),t.v===void 0&&typeof t.f!="string"||t.t==="z"&&!t.f)return"";var i="",s=t.t,o=t.v;if(t.t!=="z")switch(t.t){case"b":i=t.v?"1":"0";break;case"n":i=""+t.v;break;case"e":i=Hs[t.v];break;case"d":n&&n.cellDates?i=jr(t.v,-1).toISOString():(t=Br(t),t.t="n",i=""+(t.v=Cn(jr(t.v)))),typeof t.z>"u"&&(t.z=Ht[14]);break;default:i=t.v;break}var h=kn("v",Cr(i)),c={r},a=ua(n.cellXfs,t,n);switch(a!==0&&(c.s=a),t.t){case"n":break;case"d":c.t="d";break;case"b":c.t="b";break;case"e":c.t="e";break;case"z":break;default:if(t.v==null){delete t.t;break}if(t.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){h=kn("v",""+u0(n.Strings,t.v,n.revStrings)),c.t="s";break}c.t="str";break}if(t.t!=s&&(t.t=s,t.v=o),typeof t.f=="string"&&t.f){var f=t.F&&t.F.slice(0,r.length)==r?{t:"array",ref:t.F}:null;h=pt("f",Cr(t.f),f)+(t.v!=null?h:"")}return t.l&&e["!links"].push([r,t.l]),t.D&&(c.cm=1),pt("c",h,c)}var cC=function(){var t=/<(?:\w+:)?c[ \/>]/,r=/<\/(?:\w+:)?row>/,e=/r=["']([^"']*)["']/,n=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,i=/ref=["']([^"']*)["']/,s=If("v"),o=If("f");return function(c,a,f,l,u,p){for(var m=0,d="",v=[],x=[],g=0,w=0,y=0,_="",k,F,O=0,N=0,U,z,W=0,X=0,J=Array.isArray(p.CellXf),H,I=[],M=[],E=Array.isArray(a),A=[],B={},L=!1,P=!!f.sheetStubs,R=c.split(r),C=0,S=R.length;C!=S;++C){d=R[C].trim();var D=d.length;if(D!==0){var V=0;e:for(m=0;m":if(d[m-1]!="/"){++m;break e}if(f&&f.cellStyles){if(F=Wt(d.slice(V,m),!0),O=F.r!=null?parseInt(F.r,10):O+1,N=-1,f.sheetRows&&f.sheetRows=m)break;if(F=Wt(d.slice(V,m),!0),O=F.r!=null?parseInt(F.r,10):O+1,N=-1,!(f.sheetRows&&f.sheetRowsO-1&&(l.s.r=O-1),l.e.r":"")+d,x!=null&&x.length===2){for(g=0,_=x[1],w=0;w!=_.length&&!((y=_.charCodeAt(w)-64)<1||y>26);++w)g=26*g+y;--g,N=g}else++N;for(w=0;w!=d.length&&d.charCodeAt(w)!==62;++w);if(++w,F=Wt(d.slice(0,w),!0),F.r||(F.r=Vt({r:O-1,c:N})),_=d.slice(w),k={t:""},(x=_.match(s))!=null&&x[1]!==""&&(k.v=vr(x[1])),f.cellFormula){if((x=_.match(o))!=null&&x[1]!==""){if(k.f=vr(Fr(x[1])).replace(/\r\n/g,` +`),f.xlfn||(k.f=U1(k.f)),x[0].indexOf('t="array"')>-1)k.F=(_.match(i)||[])[1],k.F.indexOf(":")>-1&&I.push([Er(k.F),k.F]);else if(x[0].indexOf('t="shared"')>-1){z=Wt(x[0]);var oe=vr(Fr(x[1]));f.xlfn||(oe=U1(oe)),M[parseInt(z.si,10)]=[z,oe,F.r]}}else(x=_.match(/]*\/>/))&&(z=Wt(x[0]),M[z.si]&&(k.f=a9(M[z.si][1],M[z.si][2],F.r)));var he=dn(F.r);for(w=0;w=I[w][0].s.r&&he.r<=I[w][0].e.r&&he.c>=I[w][0].s.c&&he.c<=I[w][0].e.c&&(k.F=I[w][1])}if(F.t==null&&k.v===void 0)if(k.f||k.F)k.v=0,k.t="n";else if(P)k.t="z";else continue;else k.t=F.t||"n";switch(l.s.c>N&&(l.s.c=N),l.e.c"u"){if(!P)continue;k.t="z"}else U=Sf[parseInt(k.v,10)],k.v=U.t,k.r=U.r,f.cellHTML&&(k.h=U.h);break;case"str":k.t="s",k.v=k.v!=null?Fr(k.v):"",f.cellHTML&&(k.h=Gu(k.v));break;case"inlineStr":x=_.match(n),k.t="s",x!=null&&(U=s0(x[1]))?(k.v=U.t,f.cellHTML&&(k.h=U.h)):k.v="";break;case"b":k.v=Pr(k.v);break;case"d":f.cellDates?k.v=jr(k.v,1):(k.v=Cn(jr(k.v,1)),k.t="n");break;case"e":(!f||f.cellText!==!1)&&(k.w=k.v),k.v=dg[k.v];break}if(W=X=0,H=null,J&&F.s!==void 0&&(H=p.CellXf[F.s],H!=null&&(H.numFmtId!=null&&(W=H.numFmtId),f.cellStyles&&H.fillId!=null&&(X=H.fillId))),cv(k,W,X,f,u,p),f.cellDates&&J&&k.t=="n"&&Uo(Ht[W])&&(k.t="d",k.v=Ic(k.v)),F.cm&&f.xlmeta){var Ne=(f.xlmeta.Cell||[])[+F.cm-1];Ne&&Ne.type=="XLDAPR"&&(k.D=!0)}if(E){var q=dn(F.r);a[q.r]||(a[q.r]=[]),a[q.r][q.c]=k}else a[F.r]=k}}}}A.length>0&&(a["!rows"]=A)}}();function hC(t,r,e,n){var i=[],s=[],o=Er(t["!ref"]),h="",c,a="",f=[],l=0,u=0,p=t["!rows"],m=Array.isArray(t),d={r:a},v,x=-1;for(u=o.s.c;u<=o.e.c;++u)f[u]=an(u);for(l=o.s.r;l<=o.e.r;++l){for(s=[],a=wn(l),u=o.s.c;u<=o.e.c;++u){c=f[u]+a;var g=m?(t[l]||[])[u]:t[c];g!==void 0&&(h=lC(g,c,t,r))!=null&&s.push(h)}(s.length>0||p&&p[l])&&(d={r:a},p&&p[l]&&(v=p[l],v.hidden&&(d.hidden=1),x=-1,v.hpx?x=Uf(v.hpx):v.hpt&&(x=v.hpt),x>-1&&(d.ht=x,d.customHeight=1),v.level&&(d.outlineLevel=v.level)),i[i.length]=pt("row",s.join(""),d))}if(p)for(;l-1&&(d.ht=x,d.customHeight=1),v.level&&(d.outlineLevel=v.level),i[i.length]=pt("row","",d));return i.join("")}function uv(t,r,e,n){var i=[Qr,pt("worksheet",null,{xmlns:Wa[0],"xmlns:r":un.r})],s=e.SheetNames[t],o=0,h="",c=e.Sheets[s];c==null&&(c={});var a=c["!ref"]||"A1",f=Er(a);if(f.e.c>16383||f.e.r>1048575){if(r.WTF)throw new Error("Range "+a+" exceeds format limit A1:XFD1048576");f.e.c=Math.min(f.e.c,16383),f.e.r=Math.min(f.e.c,1048575),a=cr(f)}n||(n={}),c["!comments"]=[];var l=[];Y7(c,e,t,r,i),i[i.length]=pt("dimension",null,{ref:a}),i[i.length]=fC(c,r,t,e),r.sheetFormat&&(i[i.length]=pt("sheetFormatPr",null,{defaultRowHeight:r.sheetFormat.defaultRowHeight||"16",baseColWidth:r.sheetFormat.baseColWidth||"10",outlineLevelRow:r.sheetFormat.outlineLevelRow||"7"})),c["!cols"]!=null&&c["!cols"].length>0&&(i[i.length]=nC(c,c["!cols"])),i[o=i.length]="",c["!links"]=[],c["!ref"]!=null&&(h=hC(c,r),h.length>0&&(i[i.length]=h)),i.length>o+1&&(i[i.length]="",i[o]=i[o].replace("/>",">")),c["!protect"]&&(i[i.length]=Q7(c["!protect"])),c["!autofilter"]!=null&&(i[i.length]=sC(c["!autofilter"],c,e,t)),c["!merges"]!=null&&c["!merges"].length>0&&(i[i.length]=G7(c["!merges"]));var u=-1,p,m=-1;return c["!links"].length>0&&(i[i.length]="",c["!links"].forEach(function(d){d[1].Target&&(p={ref:d[0]},d[1].Target.charAt(0)!="#"&&(m=kr(n,-1,Cr(d[1].Target).replace(/#.*$/,""),fr.HLINK),p["r:id"]="rId"+m),(u=d[1].Target.indexOf("#"))>-1&&(p.location=Cr(d[1].Target.slice(u+1))),d[1].Tooltip&&(p.tooltip=Cr(d[1].Tooltip)),i[i.length]=pt("hyperlink",null,p))}),i[i.length]=""),delete c["!links"],c["!margins"]!=null&&(i[i.length]=tC(c["!margins"])),(!r||r.ignoreEC||r.ignoreEC==null)&&(i[i.length]=kn("ignoredErrors",pt("ignoredError",null,{numberStoredAsText:1,sqref:a}))),l.length>0&&(m=kr(n,-1,"../drawings/drawing"+(t+1)+".xml",fr.DRAW),i[i.length]=pt("drawing",null,{"r:id":"rId"+m}),c["!drawing"]=l),c["!comments"].length>0&&(m=kr(n,-1,"../drawings/vmlDrawing"+(t+1)+".vml",fr.VML),i[i.length]=pt("legacyDrawing",null,{"r:id":"rId"+m}),c["!legacy"]=m),i.length>1&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}function uC(t,r){var e={},n=t.l+r;e.r=t.read_shift(4),t.l+=4;var i=t.read_shift(2);t.l+=1;var s=t.read_shift(1);return t.l=n,s&7&&(e.level=s&7),s&16&&(e.hidden=!0),s&32&&(e.hpt=i/20),e}function dC(t,r,e){var n=nt(145),i=(e["!rows"]||[])[t]||{};n.write_shift(4,t),n.write_shift(4,0);var s=320;i.hpx?s=Uf(i.hpx)*20:i.hpt&&(s=i.hpt*20),n.write_shift(2,s),n.write_shift(1,0);var o=0;i.level&&(o|=i.level),i.hidden&&(o|=16),(i.hpx||i.hpt)&&(o|=32),n.write_shift(1,o),n.write_shift(1,0);var h=0,c=n.l;n.l+=4;for(var a={r:t,c:0},f=0;f<16;++f)if(!(r.s.c>f+1<<10||r.e.cn.l?n.slice(0,n.l):n}function pC(t,r,e,n){var i=dC(n,e,r);(i.length>17||(r["!rows"]||[])[n])&&ct(t,0,i)}var mC=Ga,gC=Ho;function vC(){}function xC(t,r){var e={},n=t[t.l];return++t.l,e.above=!(n&64),e.left=!(n&128),t.l+=18,e.name=y5(t),e}function bC(t,r,e){e==null&&(e=nt(84+4*t.length));var n=192;r&&(r.above&&(n&=-65),r.left&&(n&=-129)),e.write_shift(1,n);for(var i=1;i<3;++i)e.write_shift(1,0);return yc({auto:1},e),e.write_shift(-4,-1),e.write_shift(-4,-1),fg(t,e),e.slice(0,e.l)}function wC(t){var r=Ui(t);return[r]}function yC(t,r,e){return e==null&&(e=nt(8)),za(r,e)}function _C(t){var r=Xa(t);return[r]}function EC(t,r,e){return e==null&&(e=nt(4)),Va(r,e)}function TC(t){var r=Ui(t),e=t.read_shift(1);return[r,e,"b"]}function SC(t,r,e){return e==null&&(e=nt(9)),za(r,e),e.write_shift(1,t.v?1:0),e}function kC(t){var r=Xa(t),e=t.read_shift(1);return[r,e,"b"]}function CC(t,r,e){return e==null&&(e=nt(5)),Va(r,e),e.write_shift(1,t.v?1:0),e}function AC(t){var r=Ui(t),e=t.read_shift(1);return[r,e,"e"]}function FC(t,r,e){return e==null&&(e=nt(9)),za(r,e),e.write_shift(1,t.v),e}function RC(t){var r=Xa(t),e=t.read_shift(1);return[r,e,"e"]}function MC(t,r,e){return e==null&&(e=nt(8)),Va(r,e),e.write_shift(1,t.v),e.write_shift(2,0),e.write_shift(1,0),e}function IC(t){var r=Ui(t),e=t.read_shift(4);return[r,e,"s"]}function OC(t,r,e){return e==null&&(e=nt(12)),za(r,e),e.write_shift(4,r.v),e}function DC(t){var r=Xa(t),e=t.read_shift(4);return[r,e,"s"]}function NC(t,r,e){return e==null&&(e=nt(8)),Va(r,e),e.write_shift(4,r.v),e}function PC(t){var r=Ui(t),e=Dn(t);return[r,e,"n"]}function BC(t,r,e){return e==null&&(e=nt(16)),za(r,e),La(t.v,e),e}function dv(t){var r=Xa(t),e=Dn(t);return[r,e,"n"]}function LC(t,r,e){return e==null&&(e=nt(12)),Va(r,e),La(t.v,e),e}function UC(t){var r=Ui(t),e=e0(t);return[r,e,"n"]}function jC(t,r,e){return e==null&&(e=nt(12)),za(r,e),lg(t.v,e),e}function HC(t){var r=Xa(t),e=e0(t);return[r,e,"n"]}function WC(t,r,e){return e==null&&(e=nt(8)),Va(r,e),lg(t.v,e),e}function $C(t){var r=Ui(t),e=Ju(t);return[r,e,"is"]}function zC(t){var r=Ui(t),e=Nn(t);return[r,e,"str"]}function XC(t,r,e){return e==null&&(e=nt(12+4*t.v.length)),za(r,e),bn(t.v,e),e.length>e.l?e.slice(0,e.l):e}function VC(t){var r=Xa(t),e=Nn(t);return[r,e,"str"]}function GC(t,r,e){return e==null&&(e=nt(8+4*t.v.length)),Va(r,e),bn(t.v,e),e.length>e.l?e.slice(0,e.l):e}function KC(t,r,e){var n=t.l+r,i=Ui(t);i.r=e["!row"];var s=t.read_shift(1),o=[i,s,"b"];if(e.cellFormula){t.l+=2;var h=Nc(t,n-t.l,e);o[3]=In(h,null,i,e.supbooks,e)}else t.l=n;return o}function YC(t,r,e){var n=t.l+r,i=Ui(t);i.r=e["!row"];var s=t.read_shift(1),o=[i,s,"e"];if(e.cellFormula){t.l+=2;var h=Nc(t,n-t.l,e);o[3]=In(h,null,i,e.supbooks,e)}else t.l=n;return o}function ZC(t,r,e){var n=t.l+r,i=Ui(t);i.r=e["!row"];var s=Dn(t),o=[i,s,"n"];if(e.cellFormula){t.l+=2;var h=Nc(t,n-t.l,e);o[3]=In(h,null,i,e.supbooks,e)}else t.l=n;return o}function JC(t,r,e){var n=t.l+r,i=Ui(t);i.r=e["!row"];var s=Nn(t),o=[i,s,"str"];if(e.cellFormula){t.l+=2;var h=Nc(t,n-t.l,e);o[3]=In(h,null,i,e.supbooks,e)}else t.l=n;return o}var QC=Ga,qC=Ho;function eA(t,r){return r==null&&(r=nt(4)),r.write_shift(4,t),r}function tA(t,r){var e=t.l+r,n=Ga(t),i=Qu(t),s=Nn(t),o=Nn(t),h=Nn(t);t.l=e;var c={rfx:n,relId:i,loc:s,display:h};return o&&(c.Tooltip=o),c}function rA(t,r){var e=nt(50+4*(t[1].Target.length+(t[1].Tooltip||"").length));Ho({s:dn(t[0]),e:dn(t[0])},e),qu("rId"+r,e);var n=t[1].Target.indexOf("#"),i=n==-1?"":t[1].Target.slice(n+1);return bn(i||"",e),bn(t[1].Tooltip||"",e),bn("",e),e.slice(0,e.l)}function nA(){}function iA(t,r,e){var n=t.l+r,i=cg(t),s=t.read_shift(1),o=[i];if(o[2]=s,e.cellFormula){var h=A7(t,n-t.l,e);o[1]=h}else t.l=n;return o}function sA(t,r,e){var n=t.l+r,i=Ga(t),s=[i];if(e.cellFormula){var o=R7(t,n-t.l,e);s[1]=o,t.l=n}else t.l=n;return s}function aA(t,r,e){e==null&&(e=nt(18));var n=Pc(t,r);e.write_shift(-4,t),e.write_shift(-4,t),e.write_shift(4,(n.width||10)*256),e.write_shift(4,0);var i=0;return r.hidden&&(i|=1),typeof n.width=="number"&&(i|=2),r.level&&(i|=r.level<<8),e.write_shift(2,i),e}var pv=["left","right","top","bottom","header","footer"];function oA(t){var r={};return pv.forEach(function(e){r[e]=Dn(t)}),r}function fA(t,r){return r==null&&(r=nt(6*8)),Da(t),pv.forEach(function(e){La(t[e],r)}),r}function lA(t){var r=t.read_shift(2);return t.l+=28,{RTL:r&32}}function cA(t,r,e){e==null&&(e=nt(30));var n=924;return(((r||{}).Views||[])[0]||{}).RTL&&(n|=32),e.write_shift(2,n),e.write_shift(4,0),e.write_shift(4,0),e.write_shift(4,0),e.write_shift(1,0),e.write_shift(1,0),e.write_shift(2,0),e.write_shift(2,100),e.write_shift(2,0),e.write_shift(2,0),e.write_shift(2,0),e.write_shift(4,0),e}function hA(t){var r=nt(24);return r.write_shift(4,4),r.write_shift(4,1),Ho(t,r),r}function uA(t,r){return r==null&&(r=nt(16*4+2)),r.write_shift(2,t.password?a0(t.password):0),r.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach(function(e){e[1]?r.write_shift(4,t[e[0]]!=null&&!t[e[0]]?1:0):r.write_shift(4,t[e[0]]!=null&&t[e[0]]?0:1)}),r}function dA(){}function pA(){}function mA(t,r,e,n,i,s,o){if(!t)return t;var h=r||{};n||(n={"!id":{}});var c=h.dense?[]:{},a,f={s:{r:2e6,c:2e6},e:{r:0,c:0}},l=!1,u=!1,p,m,d,v,x,g,w,y,_,k=[];h.biff=12,h["!row"]=0;var F=0,O=!1,N=[],U={},z=h.supbooks||i.supbooks||[[]];if(z.sharedf=U,z.arrayf=N,z.SheetNames=i.SheetNames||i.Sheets.map(function(E){return E.name}),!h.supbooks&&(h.supbooks=z,i.Names))for(var W=0;W=P[0].s.r&&p.r<=P[0].e.r&&x>=P[0].s.c&&x<=P[0].e.c&&(m.F=cr(P[0]),O=!0)}!O&&A.length>3&&(m.f=A[3])}if(f.s.r>p.r&&(f.s.r=p.r),f.s.c>x&&(f.s.c=x),f.e.rp.r&&(f.s.r=p.r),f.s.c>x&&(f.s.c=x),f.e.r=A.s;)X[A.e--]={width:A.w/256,hidden:!!(A.flags&1),level:A.level},H||(H=!0,o0(A.w/256)),fa(X[A.e+1]);break;case 161:c["!autofilter"]={ref:cr(A)};break;case 476:c["!margins"]=A;break;case 147:i.Sheets[e]||(i.Sheets[e]={}),A.name&&(i.Sheets[e].CodeName=A.name),(A.above||A.left)&&(c["!outline"]={above:A.above,left:A.left});break;case 137:i.Views||(i.Views=[{}]),i.Views[0]||(i.Views[0]={}),A.RTL&&(i.Views[0].RTL=!0);break;case 485:break;case 64:case 1053:break;case 151:break;case 152:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:l=!0;break;case 36:l=!1;break;case 37:l=!0;break;case 38:l=!1;break;default:if(!B.T){if(!l||h.WTF)throw new Error("Unexpected record 0x"+L.toString(16))}}},h),delete h.supbooks,delete h["!row"],!c["!ref"]&&(f.s.r<2e6||a&&(a.e.r>0||a.e.c>0||a.s.r>0||a.s.c>0))&&(c["!ref"]=cr(a||f)),h.sheetRows&&c["!ref"]){var M=Er(c["!ref"]);h.sheetRows<=+M.e.r&&(M.e.r=h.sheetRows-1,M.e.r>f.e.r&&(M.e.r=f.e.r),M.e.rf.e.c&&(M.e.c=f.e.c),M.e.c0&&(c["!merges"]=k),X.length>0&&(c["!cols"]=X),J.length>0&&(c["!rows"]=J),c}function gA(t,r,e,n,i,s,o){if(r.v===void 0)return!1;var h="";switch(r.t){case"b":h=r.v?"1":"0";break;case"d":r=Br(r),r.z=r.z||Ht[14],r.v=Cn(jr(r.v)),r.t="n";break;case"n":case"e":h=""+r.v;break;default:h=r.v;break}var c={r:e,c:n};switch(c.s=ua(i.cellXfs,r,i),r.l&&s["!links"].push([Vt(c),r.l]),r.c&&s["!comments"].push([Vt(c),r.c]),r.t){case"s":case"str":return i.bookSST?(h=u0(i.Strings,r.v,i.revStrings),c.t="s",c.v=h,o?ct(t,18,NC(r,c)):ct(t,7,OC(r,c))):(c.t="str",o?ct(t,17,GC(r,c)):ct(t,6,XC(r,c))),!0;case"n":return r.v==(r.v|0)&&r.v>-1e3&&r.v<1e3?o?ct(t,13,WC(r,c)):ct(t,2,jC(r,c)):o?ct(t,16,LC(r,c)):ct(t,5,BC(r,c)),!0;case"b":return c.t="b",o?ct(t,15,CC(r,c)):ct(t,4,SC(r,c)),!0;case"e":return c.t="e",o?ct(t,14,MC(r,c)):ct(t,3,FC(r,c)),!0}return o?ct(t,12,EC(r,c)):ct(t,1,yC(r,c)),!0}function vA(t,r,e,n){var i=Er(r["!ref"]||"A1"),s,o="",h=[];ct(t,145);var c=Array.isArray(r),a=i.e.r;r["!rows"]&&(a=Math.max(i.e.r,r["!rows"].length-1));for(var f=i.s.r;f<=a;++f){o=wn(f),pC(t,r,i,f);var l=!1;if(f<=i.e.r)for(var u=i.s.c;u<=i.e.c;++u){f===i.s.r&&(h[u]=an(u)),s=h[u]+o;var p=c?(r[f]||[])[u]:r[s];if(!p){l=!1;continue}l=gA(t,p,f,u,n,r,l)}}ct(t,146)}function xA(t,r){!r||!r["!merges"]||(ct(t,177,eA(r["!merges"].length)),r["!merges"].forEach(function(e){ct(t,176,qC(e))}),ct(t,178))}function bA(t,r){!r||!r["!cols"]||(ct(t,390),r["!cols"].forEach(function(e,n){e&&ct(t,60,aA(n,e))}),ct(t,391))}function wA(t,r){!r||!r["!ref"]||(ct(t,648),ct(t,649,hA(Er(r["!ref"]))),ct(t,650))}function yA(t,r,e){r["!links"].forEach(function(n){if(n[1].Target){var i=kr(e,-1,n[1].Target.replace(/#.*$/,""),fr.HLINK);ct(t,494,rA(n,i))}}),delete r["!links"]}function _A(t,r,e,n){if(r["!comments"].length>0){var i=kr(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",fr.VML);ct(t,551,qu("rId"+i)),r["!legacy"]=i}}function EA(t,r,e,n){if(r["!autofilter"]){var i=r["!autofilter"],s=typeof i.ref=="string"?i.ref:cr(i.ref);e.Workbook||(e.Workbook={Sheets:[]}),e.Workbook.Names||(e.Workbook.Names=[]);var o=e.Workbook.Names,h=Li(s);h.s.r==h.e.r&&(h.e.r=Li(r["!ref"]).e.r,s=cr(h));for(var c=0;c16383||c.e.r>1048575){if(r.WTF)throw new Error("Range "+(o["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");c.e.c=Math.min(c.e.c,16383),c.e.r=Math.min(c.e.c,1048575)}return o["!links"]=[],o["!comments"]=[],ct(i,129),(e.vbaraw||o["!outline"])&&ct(i,147,bC(h,o["!outline"])),ct(i,148,gC(c)),TA(i,o,e.Workbook),bA(i,o),vA(i,o,t,r),SA(i,o),EA(i,o,e,t),xA(i,o),yA(i,o,n),o["!margins"]&&ct(i,476,fA(o["!margins"])),(!r||r.ignoreEC||r.ignoreEC==null)&&wA(i,o),_A(i,o,t,n),ct(i,130),i.end()}function CA(t){var r=[],e=t.match(/^/),n;(t.match(/(.*?)<\/c:pt>/mg)||[]).forEach(function(s){var o=s.match(/(.*)<\/c:v><\/c:pt>/);o&&(r[+o[1]]=e?+o[2]:o[2])});var i=vr((t.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return(t.match(/(.*?)<\/c:f>/mg)||[]).forEach(function(s){n=s.replace(/<.*?>/g,"")}),[r,i,n]}function AA(t,r,e,n,i,s){var o=s||{"!type":"chart"};if(!t)return s;var h=0,c=0,a="A",f={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(t.match(/[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(l){var u=CA(l);f.s.r=f.s.c=0,f.e.c=h,a=an(h),u[0].forEach(function(p,m){o[a+wn(m)]={t:"n",v:p,z:u[1]},c=m}),f.e.r0&&(o["!ref"]=cr(f)),o}function FA(t,r,e,n,i){if(!t)return t;n||(n={"!id":{}});var s={"!type":"chart","!drawel":null,"!rel":""},o,h=t.match(hv);return h&&d0(h[0],s,i,e),(o=t.match(/drawing r:id="(.*?)"/))&&(s["!rel"]=o[1]),n["!id"][s["!rel"]]&&(s["!drawel"]=n["!id"][s["!rel"]]),s}function RA(t,r){t.l+=10;var e=Nn(t);return{name:e}}function MA(t,r,e,n,i){if(!t)return t;n||(n={"!id":{}});var s={"!type":"chart","!drawel":null,"!rel":""},o=!1;return js(t,function(c,a,f){switch(f){case 550:s["!rel"]=c;break;case 651:i.Sheets[e]||(i.Sheets[e]={}),c.name&&(i.Sheets[e].CodeName=c.name);break;case 562:case 652:case 669:case 679:case 551:case 552:case 476:case 3072:break;case 35:o=!0;break;case 36:o=!1;break;case 37:break;case 38:break;default:if(!(a.T>0)){if(!(a.T<0)){if(!o||r.WTF)throw new Error("Unexpected record 0x"+f.toString(16))}}}},r),n["!id"][s["!rel"]]&&(s["!drawel"]=n["!id"][s["!rel"]]),s}var p0=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],IA=[["activeTab",0,"int"],["autoFilterDateGrouping",!0,"bool"],["firstSheet",0,"int"],["minimized",!1,"bool"],["showHorizontalScroll",!0,"bool"],["showSheetTabs",!0,"bool"],["showVerticalScroll",!0,"bool"],["tabRatio",600,"int"],["visibility","visible"]],OA=[],DA=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];function z1(t,r){for(var e=0;e!=t.length;++e)for(var n=t[e],i=0;i!=r.length;++i){var s=r[i];if(n[s[0]]==null)n[s[0]]=s[1];else switch(s[2]){case"bool":typeof n[s[0]]=="string"&&(n[s[0]]=Pr(n[s[0]]));break;case"int":typeof n[s[0]]=="string"&&(n[s[0]]=parseInt(n[s[0]],10));break}}}function X1(t,r){for(var e=0;e!=r.length;++e){var n=r[e];if(t[n[0]]==null)t[n[0]]=n[1];else switch(n[2]){case"bool":typeof t[n[0]]=="string"&&(t[n[0]]=Pr(t[n[0]]));break;case"int":typeof t[n[0]]=="string"&&(t[n[0]]=parseInt(t[n[0]],10));break}}}function mv(t){X1(t.WBProps,p0),X1(t.CalcPr,DA),z1(t.WBView,IA),z1(t.Sheets,OA),No.date1904=Pr(t.WBProps.date1904)}function NA(t){return!t.Workbook||!t.Workbook.WBProps?"false":Pr(t.Workbook.WBProps.date1904)?"true":"false"}var PA="][*?/\\".split("");function gv(t,r){if(t.length>31){if(r)return!1;throw new Error("Sheet names cannot exceed 31 chars")}var e=!0;return PA.forEach(function(n){if(t.indexOf(n)!=-1){if(!r)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");e=!1}}),e}function BA(t,r,e){t.forEach(function(n,i){gv(n);for(var s=0;s22)throw new Error("Bad Code Name: Worksheet"+o)}})}function LA(t){if(!t||!t.SheetNames||!t.Sheets)throw new Error("Invalid Workbook");if(!t.SheetNames.length)throw new Error("Workbook is empty");var r=t.Workbook&&t.Workbook.Sheets||[];BA(t.SheetNames,r,!!t.vbaraw);for(var e=0;e":break;case"":case"":break;case"":break;case"":p0.forEach(function(l){if(f[l[0]]!=null)switch(l[2]){case"bool":e.WBProps[l[0]]=Pr(f[l[0]]);break;case"int":e.WBProps[l[0]]=parseInt(f[l[0]],10);break;default:e.WBProps[l[0]]=f[l[0]]}}),f.codeName&&(e.WBProps.CodeName=Fr(f.codeName));break;case"":break;case"":break;case"":case"":break;case"":delete f[0],e.WBView.push(f);break;case"":break;case"":case"":break;case"":break;case"":break;case"":case"":break;case"":break;case"":case"":n=!1;break;case"":s.Ref=vr(Fr(t.slice(o,a))),e.Names.push(s);break;case"":break;case"":delete f[0],e.CalcPr=f;break;case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":break;case"":break;case"":case"":break;case"":case"":case"":break;case"":n=!1;break;case"":n=!0;break;case"":n=!1;break;case"0,n={codeName:"ThisWorkbook"};t.Workbook&&t.Workbook.WBProps&&(p0.forEach(function(h){t.Workbook.WBProps[h[0]]!=null&&t.Workbook.WBProps[h[0]]!=h[1]&&(n[h[0]]=t.Workbook.WBProps[h[0]])}),t.Workbook.WBProps.CodeName&&(n.codeName=t.Workbook.WBProps.CodeName,delete n.CodeName)),r[r.length]=pt("workbookPr",null,n);var i=t.Workbook&&t.Workbook.Sheets||[],s=0;if(i&&i[0]&&i[0].Hidden){for(r[r.length]="",s=0;s!=t.SheetNames.length&&!(!i[s]||!i[s].Hidden);++s);s==t.SheetNames.length&&(s=0),r[r.length]='',r[r.length]=""}for(r[r.length]="",s=0;s!=t.SheetNames.length;++s){var o={name:Cr(t.SheetNames[s].slice(0,31))};if(o.sheetId=""+(s+1),o["r:id"]="rId"+(s+1),i[s])switch(i[s].Hidden){case 1:o.state="hidden";break;case 2:o.state="veryHidden";break}r[r.length]=pt("sheet",null,o)}return r[r.length]="",e&&(r[r.length]="",t.Workbook&&t.Workbook.Names&&t.Workbook.Names.forEach(function(h){var c={name:h.Name};h.Comment&&(c.comment=h.Comment),h.Sheet!=null&&(c.localSheetId=""+h.Sheet),h.Hidden&&(c.hidden="1"),h.Ref&&(r[r.length]=pt("definedName",Cr(h.Ref),c))}),r[r.length]=""),r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function HA(t,r){var e={};return e.Hidden=t.read_shift(4),e.iTabID=t.read_shift(4),e.strRelID=mu(t),e.name=Nn(t),e}function WA(t,r){return r||(r=nt(127)),r.write_shift(4,t.Hidden),r.write_shift(4,t.iTabID),qu(t.strRelID,r),bn(t.name.slice(0,31),r),r.length>r.l?r.slice(0,r.l):r}function $A(t,r){var e={},n=t.read_shift(4);e.defaultThemeVersion=t.read_shift(4);var i=r>8?Nn(t):"";return i.length>0&&(e.CodeName=i),e.autoCompressPictures=!!(n&65536),e.backupFile=!!(n&64),e.checkCompatibility=!!(n&4096),e.date1904=!!(n&1),e.filterPrivacy=!!(n&8),e.hidePivotFieldList=!!(n&1024),e.promptedSolutions=!!(n&16),e.publishItems=!!(n&2048),e.refreshAllConnections=!!(n&262144),e.saveExternalLinkValues=!!(n&128),e.showBorderUnselectedTables=!!(n&4),e.showInkAnnotation=!!(n&32),e.showObjects=["all","placeholders","none"][n>>13&3],e.showPivotChartFilter=!!(n&32768),e.updateLinks=["userSet","never","always"][n>>8&3],e}function zA(t,r){r||(r=nt(72));var e=0;return t&&t.filterPrivacy&&(e|=8),r.write_shift(4,e),r.write_shift(4,0),fg(t&&t.CodeName||"ThisWorkbook",r),r.slice(0,r.l)}function XA(t,r){var e={};return t.read_shift(4),e.ArchID=t.read_shift(4),t.l+=r-8,e}function VA(t,r,e){var n=t.l+r;t.l+=4,t.l+=1;var i=t.read_shift(4),s=_5(t),o=F7(t,0,e),h=Qu(t);t.l=n;var c={Name:s,Ptg:o};return i<268435455&&(c.Sheet=i),h&&(c.Comment=h),c}function GA(t,r){var e={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},n=[],i=!1;r||(r={}),r.biff=12;var s=[],o=[[]];return o.SheetNames=[],o.XTI=[],jf[16]={n:"BrtFRTArchID$",f:XA},js(t,function(c,a,f){switch(f){case 156:o.SheetNames.push(c.name),e.Sheets.push(c);break;case 153:e.WBProps=c;break;case 39:c.Sheet!=null&&(r.SID=c.Sheet),c.Ref=In(c.Ptg,null,null,o,r),delete r.SID,delete c.Ptg,s.push(c);break;case 1036:break;case 357:case 358:case 355:case 667:o[0].length?o.push([f,c]):o[0]=[f,c],o[o.length-1].XTI=[];break;case 362:o.length===0&&(o[0]=[],o[0].XTI=[]),o[o.length-1].XTI=o[o.length-1].XTI.concat(c),o.XTI=o.XTI.concat(c);break;case 361:break;case 2071:case 158:case 143:case 664:case 353:break;case 3072:case 3073:case 534:case 677:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:n.push(f),i=!0;break;case 36:n.pop(),i=!1;break;case 37:n.push(f),i=!0;break;case 38:n.pop(),i=!1;break;case 16:break;default:if(!a.T){if(!i||r.WTF&&n[n.length-1]!=37&&n[n.length-1]!=35)throw new Error("Unexpected record 0x"+f.toString(16))}}},r),mv(e),e.Names=s,e.supbooks=o,e}function KA(t,r){ct(t,143);for(var e=0;e!=r.SheetNames.length;++e){var n=r.Workbook&&r.Workbook.Sheets&&r.Workbook.Sheets[e]&&r.Workbook.Sheets[e].Hidden||0,i={Hidden:n,iTabID:e+1,strRelID:"rId"+(e+1),name:r.SheetNames[e]};ct(t,156,WA(i))}ct(t,144)}function YA(t,r){r||(r=nt(127));for(var e=0;e!=4;++e)r.write_shift(4,0);return bn("SheetJS",r),bn(pc.version,r),bn(pc.version,r),bn("7262",r),r.length>r.l?r.slice(0,r.l):r}function ZA(t,r){r||(r=nt(29)),r.write_shift(-4,0),r.write_shift(-4,460),r.write_shift(4,28800),r.write_shift(4,17600),r.write_shift(4,500),r.write_shift(4,t),r.write_shift(4,t);var e=120;return r.write_shift(1,e),r.length>r.l?r.slice(0,r.l):r}function JA(t,r){if(!(!r.Workbook||!r.Workbook.Sheets)){for(var e=r.Workbook.Sheets,n=0,i=-1,s=-1;ni||(ct(t,135),ct(t,158,ZA(i)),ct(t,136))}}function QA(t,r){var e=si();return ct(e,131),ct(e,128,YA()),ct(e,153,zA(t.Workbook&&t.Workbook.WBProps||null)),JA(e,t),KA(e,t),ct(e,132),e.end()}function qA(t,r,e){return r.slice(-4)===".bin"?GA(t,e):jA(t,e)}function eF(t,r,e,n,i,s,o,h){return r.slice(-4)===".bin"?mA(t,n,e,i,s,o,h):V7(t,n,e,i,s,o,h)}function tF(t,r,e,n,i,s,o,h){return r.slice(-4)===".bin"?MA(t,n,e,i,s):FA(t,n,e,i,s)}function rF(t,r,e,n,i,s,o,h){return r.slice(-4)===".bin"?i9():s9()}function nF(t,r,e,n,i,s,o,h){return r.slice(-4)===".bin"?r9():n9()}function iF(t,r,e,n){return r.slice(-4)===".bin"?qS(t,e,n):HS(t,e,n)}function sF(t,r,e){return Jg(t,e)}function aF(t,r,e){return r.slice(-4)===".bin"?aS(t,e):nS(t,e)}function oF(t,r,e){return r.slice(-4)===".bin"?Jk(t,e):Wk(t,e)}function fF(t,r,e){return r.slice(-4)===".bin"?Uk(t):Bk(t)}function lF(t,r,e,n){return e.slice(-4)===".bin"?jk(t,r,e,n):void 0}function cF(t,r,e){return r.slice(-4)===".bin"?Dk(t,r,e):Pk(t,r,e)}function hF(t,r,e){return(r.slice(-4)===".bin"?QA:vv)(t)}function uF(t,r,e,n,i){return(r.slice(-4)===".bin"?kA:uv)(t,e,n,i)}function dF(t,r,e){return(r.slice(-4)===".bin"?lk:Yg)(t,e)}function pF(t,r,e){return(r.slice(-4)===".bin"?lS:Hg)(t,e)}function mF(t,r,e){return(r.slice(-4)===".bin"?Qk:ev)(t)}function gF(t){return(t.slice(-4)===".bin"?Nk:Qg)()}var xv=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,bv=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function Ji(t,r){var e=t.split(/\s+/),n=[];if(r||(n[0]=e[0]),e.length===1)return n;var i=t.match(xv),s,o,h,c;if(i)for(c=0;c!=i.length;++c)s=i[c].match(bv),(o=s[1].indexOf(":"))===-1?n[s[1]]=s[2].slice(1,s[2].length-1):(s[1].slice(0,6)==="xmlns:"?h="xmlns"+s[1].slice(6):h=s[1].slice(o+1),n[h]=s[2].slice(1,s[2].length-1));return n}function vF(t){var r=t.split(/\s+/),e={};if(r.length===1)return e;var n=t.match(xv),i,s,o,h;if(n)for(h=0;h!=n.length;++h)i=n[h].match(bv),(s=i[1].indexOf(":"))===-1?e[i[1]]=i[2].slice(1,i[2].length-1):(i[1].slice(0,6)==="xmlns:"?o="xmlns"+i[1].slice(6):o=i[1].slice(s+1),e[o]=i[2].slice(1,i[2].length-1));return e}var Cf;function xF(t,r){var e=Cf[t]||vr(t);return e==="General"?Pa(r):Bi(e,r)}function bF(t,r,e,n){var i=n;switch((e[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":i=Pr(n);break;case"i2":case"int":i=parseInt(n,10);break;case"r4":case"float":i=parseFloat(n);break;case"date":case"dateTime.tz":i=jr(n);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+e[0])}t[vr(r)]=i}function wF(t,r,e){if(t.t!=="z"){if(!e||e.cellText!==!1)try{t.t==="e"?t.w=t.w||Hs[t.v]:r==="General"?t.t==="n"?(t.v|0)===t.v?t.w=t.v.toString(10):t.w=Rf(t.v):t.w=Pa(t.v):t.w=xF(r||"General",t.v)}catch(s){if(e.WTF)throw s}try{var n=Cf[r]||r||"General";if(e.cellNF&&(t.z=n),e.cellDates&&t.t=="n"&&Uo(n)){var i=Aa(t.v);i&&(t.t="d",t.v=new Date(i.y,i.m-1,i.d,i.H,i.M,i.S,i.u))}}catch(s){if(e.WTF)throw s}}}function yF(t,r,e){if(e.cellStyles&&r.Interior){var n=r.Interior;n.Pattern&&(n.patternType=OS[n.Pattern]||n.Pattern)}t[r.ID]=r}function _F(t,r,e,n,i,s,o,h,c,a){var f="General",l=n.StyleID,u={};a=a||{};var p=[],m=0;for(l===void 0&&h&&(l=h.StyleID),l===void 0&&o&&(l=o.StyleID);s[l]!==void 0&&(s[l].nf&&(f=s[l].nf),s[l].Interior&&p.push(s[l].Interior),!!s[l].Parent);)l=s[l].Parent;switch(e.Type){case"Boolean":n.t="b",n.v=Pr(t);break;case"String":n.t="s",n.r=f1(vr(t)),n.v=t.indexOf("<")>-1?vr(r||t).replace(/<.*?>/g,""):n.r;break;case"DateTime":t.slice(-1)!="Z"&&(t+="Z"),n.v=(jr(t)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3),n.v!==n.v?n.v=vr(t):n.v<60&&(n.v=n.v-1),(!f||f=="General")&&(f="yyyy-mm-dd");case"Number":n.v===void 0&&(n.v=+t),n.t||(n.t="n");break;case"Error":n.t="e",n.v=dg[t],a.cellText!==!1&&(n.w=t);break;default:t==""&&r==""?n.t="z":(n.t="s",n.v=f1(r||t));break}if(wF(n,f,a),a.cellFormula!==!1)if(n.Formula){var d=vr(n.Formula);d.charCodeAt(0)==61&&(d=d.slice(1)),n.f=Do(d,i),delete n.Formula,n.ArrayRange=="RC"?n.F=Do("RC:RC",i):n.ArrayRange&&(n.F=Do(n.ArrayRange,i),c.push([Er(n.F),n.F]))}else for(m=0;m=c[m][0].s.r&&i.r<=c[m][0].e.r&&i.c>=c[m][0].s.c&&i.c<=c[m][0].e.c&&(n.F=c[m][1]);a.cellStyles&&(p.forEach(function(v){!u.patternType&&v.patternType&&(u.patternType=v.patternType)}),n.s=u),n.StyleID!==void 0&&(n.ixfe=n.StyleID)}function EF(t){t.t=t.v||"",t.t=t.t.replace(/\r\n/g,` +`).replace(/\r/g,` +`),t.v=t.w=t.ixfe=void 0}function Kh(t,r){var e=r||{};jo();var n=xf(Ku(t));(e.type=="binary"||e.type=="array"||e.type=="base64")&&(n=Fr(n));var i=n.slice(0,1024).toLowerCase(),s=!1;if(i=i.replace(/".*?"/g,""),(i.indexOf(">")&1023)>Math.min(i.indexOf(",")&1023,i.indexOf(";")&1023)){var o=Br(e);return o.type="string",Po.to_workbook(n,o)}if(i.indexOf("=0&&(s=!0)}),s)return fR(n,e);Cf={"General Number":"General","General Date":Ht[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":Ht[15],"Short Date":Ht[14],"Long Time":Ht[19],"Medium Time":Ht[18],"Short Time":Ht[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:Ht[2],Standard:Ht[4],Percent:Ht[10],Scientific:Ht[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var h,c=[],a,f={},l=[],u=e.dense?[]:{},p="",m={},d={},v=Ji(''),x=0,g=0,w=0,y={s:{r:2e6,c:2e6},e:{r:0,c:0}},_={},k={},F="",O=0,N=[],U={},z={},W=0,X=[],J=[],H={},I=[],M,E=!1,A=[],B=[],L={},P=0,R=0,C={Sheets:[],WBProps:{date1904:!1}},S={};Df.lastIndex=0,n=n.replace(//mg,"");for(var D="";h=Df.exec(n);)switch(h[3]=(D=h[3]).toLowerCase()){case"data":if(D=="data"){if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else h[0].charAt(h[0].length-2)!=="/"&&c.push([h[3],!0]);break}if(c[c.length-1][1])break;h[1]==="/"?_F(n.slice(x,h.index),F,v,c[c.length-1][0]=="comment"?H:m,{c:g,r:w},_,I[g],d,A,e):(F="",v=Ji(h[0]),x=h.index+h[0].length);break;case"cell":if(h[1]==="/")if(J.length>0&&(m.c=J),(!e.sheetRows||e.sheetRows>w)&&m.v!==void 0&&(e.dense?(u[w]||(u[w]=[]),u[w][g]=m):u[an(g)+wn(w)]=m),m.HRef&&(m.l={Target:vr(m.HRef)},m.HRefScreenTip&&(m.l.Tooltip=m.HRefScreenTip),delete m.HRef,delete m.HRefScreenTip),(m.MergeAcross||m.MergeDown)&&(P=g+(parseInt(m.MergeAcross,10)|0),R=w+(parseInt(m.MergeDown,10)|0),N.push({s:{c:g,r:w},e:{c:P,r:R}})),!e.sheetStubs)m.MergeAcross?g=P+1:++g;else if(m.MergeAcross||m.MergeDown){for(var V=g;V<=P;++V)for(var te=w;te<=R;++te)(V>g||te>w)&&(e.dense?(u[te]||(u[te]=[]),u[te][V]={t:"z"}):u[an(V)+wn(te)]={t:"z"});g=P+1}else++g;else m=vF(h[0]),m.Index&&(g=+m.Index-1),gy.e.c&&(y.e.c=g),h[0].slice(-2)==="/>"&&++g,J=[];break;case"row":h[1]==="/"||h[0].slice(-2)==="/>"?(wy.e.r&&(y.e.r=w),h[0].slice(-2)==="/>"&&(d=Ji(h[0]),d.Index&&(w=+d.Index-1)),g=0,++w):(d=Ji(h[0]),d.Index&&(w=+d.Index-1),L={},(d.AutoFitHeight=="0"||d.Height)&&(L.hpx=parseInt(d.Height,10),L.hpt=Uf(L.hpx),B[w]=L),d.Hidden=="1"&&(L.hidden=!0,B[w]=L));break;case"worksheet":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"));l.push(p),y.s.r<=y.e.r&&y.s.c<=y.e.c&&(u["!ref"]=cr(y),e.sheetRows&&e.sheetRows<=y.e.r&&(u["!fullref"]=u["!ref"],y.e.r=e.sheetRows-1,u["!ref"]=cr(y))),N.length&&(u["!merges"]=N),I.length>0&&(u["!cols"]=I),B.length>0&&(u["!rows"]=B),f[p]=u}else y={s:{r:2e6,c:2e6},e:{r:0,c:0}},w=g=0,c.push([h[3],!1]),a=Ji(h[0]),p=vr(a.Name),u=e.dense?[]:{},N=[],A=[],B=[],S={name:p,Hidden:0},C.Sheets.push(S);break;case"table":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else{if(h[0].slice(-2)=="/>")break;c.push([h[3],!1]),I=[],E=!1}break;case"style":h[1]==="/"?yF(_,k,e):k=Ji(h[0]);break;case"numberformat":k.nf=vr(Ji(h[0]).Format||"General"),Cf[k.nf]&&(k.nf=Cf[k.nf]);for(var oe=0;oe!=392&&Ht[oe]!=k.nf;++oe);if(oe==392){for(oe=57;oe!=392;++oe)if(Ht[oe]==null){Ns(k.nf,oe);break}}break;case"column":if(c[c.length-1][0]!=="table")break;if(M=Ji(h[0]),M.Hidden&&(M.hidden=!0,delete M.Hidden),M.Width&&(M.wpx=parseInt(M.Width,10)),!E&&M.wpx>10){E=!0,On=Gg;for(var he=0;he0&&(ne.Sheet=C.Sheets.length-1),C.Names.push(ne);break;case"namedcell":break;case"b":break;case"i":break;case"u":break;case"s":break;case"em":break;case"h2":break;case"h3":break;case"sub":break;case"sup":break;case"span":break;case"alignment":break;case"borders":break;case"border":break;case"font":if(h[0].slice(-2)==="/>")break;h[1]==="/"?F+=n.slice(O,h.index):O=h.index+h[0].length;break;case"interior":if(!e.cellStyles)break;k.Interior=Ji(h[0]);break;case"protection":break;case"author":case"title":case"description":case"created":case"keywords":case"subject":case"category":case"company":case"lastauthor":case"lastsaved":case"lastprinted":case"version":case"revision":case"totaltime":case"hyperlinkbase":case"manager":case"contentstatus":case"identifier":case"language":case"appname":if(h[0].slice(-2)==="/>")break;h[1]==="/"?G5(U,D,n.slice(W,h.index)):W=h.index+h[0].length;break;case"paragraphs":break;case"styles":case"workbook":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else c.push([h[3],!1]);break;case"comment":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"));EF(H),J.push(H)}else c.push([h[3],!1]),a=Ji(h[0]),H={a:a.Author};break;case"autofilter":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else if(h[0].charAt(h[0].length-2)!=="/"){var Q=Ji(h[0]);u["!autofilter"]={ref:Do(Q.Range).replace(/\$/g,"")},c.push([h[3],!0])}break;case"name":break;case"datavalidation":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else h[0].charAt(h[0].length-2)!=="/"&&c.push([h[3],!0]);break;case"pixelsperinch":break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if(h[1]==="/"){if((a=c.pop())[0]!==h[3])throw new Error("Bad state: "+a.join("|"))}else h[0].charAt(h[0].length-2)!=="/"&&c.push([h[3],!0]);break;case"null":break;default:if(c.length==0&&h[3]=="document"||c.length==0&&h[3]=="uof")return Y1(n,e);var re=!0;switch(c[c.length-1][0]){case"officedocumentsettings":switch(h[3]){case"allowpng":break;case"removepersonalinformation":break;case"downloadcomponents":break;case"locationofcomponents":break;case"colors":break;case"color":break;case"index":break;case"rgb":break;case"targetscreensize":break;case"readonlyrecommended":break;default:re=!1}break;case"componentoptions":switch(h[3]){case"toolbar":break;case"hideofficelogo":break;case"spreadsheetautofit":break;case"label":break;case"caption":break;case"maxheight":break;case"maxwidth":break;case"nextsheetnumber":break;default:re=!1}break;case"excelworkbook":switch(h[3]){case"date1904":C.WBProps.date1904=!0;break;case"windowheight":break;case"windowwidth":break;case"windowtopx":break;case"windowtopy":break;case"tabratio":break;case"protectstructure":break;case"protectwindow":break;case"protectwindows":break;case"activesheet":break;case"displayinknotes":break;case"firstvisiblesheet":break;case"supbook":break;case"sheetname":break;case"sheetindex":break;case"sheetindexfirst":break;case"sheetindexlast":break;case"dll":break;case"acceptlabelsinformulas":break;case"donotsavelinkvalues":break;case"iteration":break;case"maxiterations":break;case"maxchange":break;case"path":break;case"xct":break;case"count":break;case"selectedsheets":break;case"calculation":break;case"uncalced":break;case"startupprompt":break;case"crn":break;case"externname":break;case"formula":break;case"colfirst":break;case"collast":break;case"wantadvise":break;case"boolean":break;case"error":break;case"text":break;case"ole":break;case"noautorecover":break;case"publishobjects":break;case"donotcalculatebeforesave":break;case"number":break;case"refmoder1c1":break;case"embedsavesmarttags":break;default:re=!1}break;case"workbookoptions":switch(h[3]){case"owcversion":break;case"height":break;case"width":break;default:re=!1}break;case"worksheetoptions":switch(h[3]){case"visible":if(h[0].slice(-2)!=="/>")if(h[1]==="/")switch(n.slice(W,h.index)){case"SheetHidden":S.Hidden=1;break;case"SheetVeryHidden":S.Hidden=2;break}else W=h.index+h[0].length;break;case"header":u["!margins"]||Da(u["!margins"]={},"xlml"),isNaN(+Wt(h[0]).Margin)||(u["!margins"].header=+Wt(h[0]).Margin);break;case"footer":u["!margins"]||Da(u["!margins"]={},"xlml"),isNaN(+Wt(h[0]).Margin)||(u["!margins"].footer=+Wt(h[0]).Margin);break;case"pagemargins":var ve=Wt(h[0]);u["!margins"]||Da(u["!margins"]={},"xlml"),isNaN(+ve.Top)||(u["!margins"].top=+ve.Top),isNaN(+ve.Left)||(u["!margins"].left=+ve.Left),isNaN(+ve.Right)||(u["!margins"].right=+ve.Right),isNaN(+ve.Bottom)||(u["!margins"].bottom=+ve.Bottom);break;case"displayrighttoleft":C.Views||(C.Views=[]),C.Views[0]||(C.Views[0]={}),C.Views[0].RTL=!0;break;case"freezepanes":break;case"frozennosplit":break;case"splithorizontal":case"splitvertical":break;case"donotdisplaygridlines":break;case"activerow":break;case"activecol":break;case"toprowbottompane":break;case"leftcolumnrightpane":break;case"unsynced":break;case"print":break;case"printerrors":break;case"panes":break;case"scale":break;case"pane":break;case"number":break;case"layout":break;case"pagesetup":break;case"selected":break;case"protectobjects":break;case"enableselection":break;case"protectscenarios":break;case"validprinterinfo":break;case"horizontalresolution":break;case"verticalresolution":break;case"numberofcopies":break;case"activepane":break;case"toprowvisible":break;case"leftcolumnvisible":break;case"fittopage":break;case"rangeselection":break;case"papersizeindex":break;case"pagelayoutzoom":break;case"pagebreakzoom":break;case"filteron":break;case"fitwidth":break;case"fitheight":break;case"commentslayout":break;case"zoom":break;case"lefttoright":break;case"gridlines":break;case"allowsort":break;case"allowfilter":break;case"allowinsertrows":break;case"allowdeleterows":break;case"allowinsertcols":break;case"allowdeletecols":break;case"allowinserthyperlinks":break;case"allowformatcells":break;case"allowsizecols":break;case"allowsizerows":break;case"nosummaryrowsbelowdetail":u["!outline"]||(u["!outline"]={}),u["!outline"].above=!0;break;case"tabcolorindex":break;case"donotdisplayheadings":break;case"showpagelayoutzoom":break;case"nosummarycolumnsrightdetail":u["!outline"]||(u["!outline"]={}),u["!outline"].left=!0;break;case"blackandwhite":break;case"donotdisplayzeros":break;case"displaypagebreak":break;case"rowcolheadings":break;case"donotdisplayoutline":break;case"noorientation":break;case"allowusepivottables":break;case"zeroheight":break;case"viewablerange":break;case"selection":break;case"protectcontents":break;default:re=!1}break;case"pivottable":case"pivotcache":switch(h[3]){case"immediateitemsondrop":break;case"showpagemultipleitemlabel":break;case"compactrowindent":break;case"location":break;case"pivotfield":break;case"orientation":break;case"layoutform":break;case"layoutsubtotallocation":break;case"layoutcompactrow":break;case"position":break;case"pivotitem":break;case"datatype":break;case"datafield":break;case"sourcename":break;case"parentfield":break;case"ptlineitems":break;case"ptlineitem":break;case"countofsameitems":break;case"item":break;case"itemtype":break;case"ptsource":break;case"cacheindex":break;case"consolidationreference":break;case"filename":break;case"reference":break;case"nocolumngrand":break;case"norowgrand":break;case"blanklineafteritems":break;case"hidden":break;case"subtotal":break;case"basefield":break;case"mapchilditems":break;case"function":break;case"refreshonfileopen":break;case"printsettitles":break;case"mergelabels":break;case"defaultversion":break;case"refreshname":break;case"refreshdate":break;case"refreshdatecopy":break;case"versionlastrefresh":break;case"versionlastupdate":break;case"versionupdateablemin":break;case"versionrefreshablemin":break;case"calculation":break;default:re=!1}break;case"pagebreaks":switch(h[3]){case"colbreaks":break;case"colbreak":break;case"rowbreaks":break;case"rowbreak":break;case"colstart":break;case"colend":break;case"rowend":break;default:re=!1}break;case"autofilter":switch(h[3]){case"autofiltercolumn":break;case"autofiltercondition":break;case"autofilterand":break;case"autofilteror":break;default:re=!1}break;case"querytable":switch(h[3]){case"id":break;case"autoformatfont":break;case"autoformatpattern":break;case"querysource":break;case"querytype":break;case"enableredirections":break;case"refreshedinxl9":break;case"urlstring":break;case"htmltables":break;case"connection":break;case"commandtext":break;case"refreshinfo":break;case"notitles":break;case"nextid":break;case"columninfo":break;case"overwritecells":break;case"donotpromptforfile":break;case"textwizardsettings":break;case"source":break;case"number":break;case"decimal":break;case"thousandseparator":break;case"trailingminusnumbers":break;case"formatsettings":break;case"fieldtype":break;case"delimiters":break;case"tab":break;case"comma":break;case"autoformatname":break;case"versionlastedit":break;case"versionlastrefresh":break;default:re=!1}break;case"datavalidation":switch(h[3]){case"range":break;case"type":break;case"min":break;case"max":break;case"sort":break;case"descending":break;case"order":break;case"casesensitive":break;case"value":break;case"errorstyle":break;case"errormessage":break;case"errortitle":break;case"inputmessage":break;case"inputtitle":break;case"combohide":break;case"inputhide":break;case"condition":break;case"qualifier":break;case"useblank":break;case"value1":break;case"value2":break;case"format":break;case"cellrangelist":break;default:re=!1}break;case"sorting":case"conditionalformatting":switch(h[3]){case"range":break;case"type":break;case"min":break;case"max":break;case"sort":break;case"descending":break;case"order":break;case"casesensitive":break;case"value":break;case"errorstyle":break;case"errormessage":break;case"errortitle":break;case"cellrangelist":break;case"inputmessage":break;case"inputtitle":break;case"combohide":break;case"inputhide":break;case"condition":break;case"qualifier":break;case"useblank":break;case"value1":break;case"value2":break;case"format":break;default:re=!1}break;case"mapinfo":case"schema":case"data":switch(h[3]){case"map":break;case"entry":break;case"range":break;case"xpath":break;case"field":break;case"xsdtype":break;case"filteron":break;case"aggregate":break;case"elementtype":break;case"attributetype":break;case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:re=!1}break;case"smarttags":break;default:re=!1;break}if(re||h[3].match(/!\[CDATA/))break;if(!c[c.length-1][1])throw"Unrecognized tag: "+h[3]+"|"+c.join("|");if(c[c.length-1][0]==="customdocumentproperties"){if(h[0].slice(-2)==="/>")break;h[1]==="/"?bF(z,D,X,n.slice(W,h.index)):(X=h,W=h.index+h[0].length);break}if(e.WTF)throw"Unrecognized tag: "+h[3]+"|"+c.join("|")}var Ce={};return!e.bookSheets&&!e.bookProps&&(Ce.Sheets=f),Ce.SheetNames=l,Ce.Workbook=C,Ce.SSF=Br(Ht),Ce.Props=U,Ce.Custprops=z,Ce}function _u(t,r){switch(g0(r=r||{}),r.type||"base64"){case"base64":return Kh(wi(t),r);case"binary":case"buffer":case"file":return Kh(t,r);case"array":return Kh(ha(t),r)}}function TF(t,r){var e=[];return t.Props&&e.push(K5(t.Props,r)),t.Custprops&&e.push(Y5(t.Props,t.Custprops)),e.join("")}function SF(){return""}function kF(t,r){var e=[''];return r.cellXfs.forEach(function(n,i){var s=[];s.push(pt("NumberFormat",null,{"ss:Format":Cr(Ht[n.numFmtId])}));var o={"ss:ID":"s"+(21+i)};e.push(pt("Style",s.join(""),o))}),pt("Styles",e.join(""))}function wv(t){return pt("NamedRange",null,{"ss:Name":t.Name,"ss:RefersTo":"="+c0(t.Ref,{r:0,c:0})})}function CF(t){if(!((t||{}).Workbook||{}).Names)return"";for(var r=t.Workbook.Names,e=[],n=0;n"),t["!margins"].header&&i.push(pt("Header",null,{"x:Margin":t["!margins"].header})),t["!margins"].footer&&i.push(pt("Footer",null,{"x:Margin":t["!margins"].footer})),i.push(pt("PageMargins",null,{"x:Bottom":t["!margins"].bottom||"0.75","x:Left":t["!margins"].left||"0.7","x:Right":t["!margins"].right||"0.7","x:Top":t["!margins"].top||"0.75"})),i.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[e])if(n.Workbook.Sheets[e].Hidden)i.push(pt("Visible",n.Workbook.Sheets[e].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var s=0;s")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(""),t["!protect"]&&(i.push(kn("ProtectContents","True")),t["!protect"].objects&&i.push(kn("ProtectObjects","True")),t["!protect"].scenarios&&i.push(kn("ProtectScenarios","True")),t["!protect"].selectLockedCells!=null&&!t["!protect"].selectLockedCells?i.push(kn("EnableSelection","NoSelection")):t["!protect"].selectUnlockedCells!=null&&!t["!protect"].selectUnlockedCells&&i.push(kn("EnableSelection","UnlockedCells")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(o){t["!protect"][o[0]]&&i.push("<"+o[1]+"/>")})),i.length==0?"":pt("WorksheetOptions",i.join(""),{xmlns:gi.x})}function RF(t){return t.map(function(r){var e=Z8(r.t||""),n=pt("ss:Data",e,{xmlns:"http://www.w3.org/TR/REC-html40"});return pt("Comment",n,{"ss:Author":r.a})}).join("")}function MF(t,r,e,n,i,s,o){if(!t||t.v==null&&t.f==null)return"";var h={};if(t.f&&(h["ss:Formula"]="="+Cr(c0(t.f,o))),t.F&&t.F.slice(0,r.length)==r){var c=dn(t.F.slice(r.length+1));h["ss:ArrayRange"]="RC:R"+(c.r==o.r?"":"["+(c.r-o.r)+"]")+"C"+(c.c==o.c?"":"["+(c.c-o.c)+"]")}if(t.l&&t.l.Target&&(h["ss:HRef"]=Cr(t.l.Target),t.l.Tooltip&&(h["x:HRefScreenTip"]=Cr(t.l.Tooltip))),e["!merges"])for(var a=e["!merges"],f=0;f!=a.length;++f)a[f].s.c!=o.c||a[f].s.r!=o.r||(a[f].e.c>a[f].s.c&&(h["ss:MergeAcross"]=a[f].e.c-a[f].s.c),a[f].e.r>a[f].s.r&&(h["ss:MergeDown"]=a[f].e.r-a[f].s.r));var l="",u="";switch(t.t){case"z":if(!n.sheetStubs)return"";break;case"n":l="Number",u=String(t.v);break;case"b":l="Boolean",u=t.v?"1":"0";break;case"e":l="Error",u=Hs[t.v];break;case"d":l="DateTime",u=new Date(t.v).toISOString(),t.z==null&&(t.z=t.z||Ht[14]);break;case"s":l="String",u=Y8(t.v||"");break}var p=ua(n.cellXfs,t,n);h["ss:StyleID"]="s"+(21+p),h["ss:Index"]=o.c+1;var m=t.v!=null?u:"",d=t.t=="z"?"":''+m+"";return(t.c||[]).length>0&&(d+=RF(t.c)),pt("Cell",d,h)}function IF(t,r){var e='"}function OF(t,r,e,n){if(!t["!ref"])return"";var i=Er(t["!ref"]),s=t["!merges"]||[],o=0,h=[];t["!cols"]&&t["!cols"].forEach(function(v,x){fa(v);var g=!!v.width,w=Pc(x,v),y={"ss:Index":x+1};g&&(y["ss:Width"]=Bf(w.width)),v.hidden&&(y["ss:Hidden"]="1"),h.push(pt("Column",null,y))});for(var c=Array.isArray(t),a=i.s.r;a<=i.e.r;++a){for(var f=[IF(a,(t["!rows"]||[])[a])],l=i.s.c;l<=i.e.c;++l){var u=!1;for(o=0;o!=s.length;++o)if(!(s[o].s.c>l)&&!(s[o].s.r>a)&&!(s[o].e.c"),f.length>2&&h.push(f.join(""))}return h.join("")}function DF(t,r,e){var n=[],i=e.SheetNames[t],s=e.Sheets[i],o=s?AF(s,r,t,e):"";return o.length>0&&n.push(""+o+""),o=s?OF(s,r,t,e):"",o.length>0&&n.push(""+o+"
"),n.push(FF(s,r,t,e)),n.join("")}function NF(t,r){r||(r={}),t.SSF||(t.SSF=Br(Ht)),t.SSF&&(jo(),Fc(t.SSF),r.revssf=Mc(t.SSF),r.revssf[t.SSF[65535]]=0,r.ssf=t.SSF,r.cellXfs=[],ua(r.cellXfs,{},{revssf:{General:0}}));var e=[];e.push(TF(t,r)),e.push(SF()),e.push(""),e.push("");for(var n=0;n40||(e.l-=4,r.Reserved1=e.read_shift(0,"lpstr-ansi"),e.length-e.l<=4)||(n=e.read_shift(4),n!==1907505652)||(r.UnicodeClipboardFormat=A5(e),n=e.read_shift(4),n==0||n>40))return r;e.l-=4,r.Reserved2=e.read_shift(0,"lpwstr")}var BF=[60,1084,2066,2165,2175];function LF(t,r,e,n,i){var s=n,o=[],h=e.slice(e.l,e.l+s);if(i&&i.enc&&i.enc.insitu&&h.length>0)switch(t){case 9:case 521:case 1033:case 2057:case 47:case 405:case 225:case 406:case 312:case 404:case 10:break;case 133:break;default:i.enc.insitu(h)}o.push(h),e.l+=s;for(var c=Os(e,e.l),a=Eu[c],f=0;a!=null&&BF.indexOf(c)>-1;)s=Os(e,e.l+2),f=e.l+4,c==2066?f+=4:(c==2165||c==2175)&&(f+=12),h=e.slice(f,e.l+4+s),o.push(h),e.l+=4+s,a=Eu[c=Os(e,e.l)];var l=xn(o);Sn(l,0);var u=0;l.lens=[];for(var p=0;p1)&&!(Ue.sheetRows&&we.r>=Ue.sheetRows)){if(Ue.cellStyles&&Fe.XF&&Fe.XF.data&&U(we,Fe,Ue),delete Fe.ixfe,delete Fe.XF,l=we,u=Vt(we),(!o||!o.s||!o.e)&&(o={s:{r:0,c:0},e:{r:0,c:0}}),we.ro.e.r&&(o.e.r=we.r+1),we.c+1>o.e.c&&(o.e.c=we.c+1),Ue.cellFormula&&Fe.f){for(var Pe=0;Pewe.c||g[Pe][0].s.r>we.r)&&!(g[Pe][0].e.c>8)!==te)throw new Error("rt mismatch: "+Ne+"!="+te);he.r==12&&(t.l+=10,oe-=10)}var q={};if(te===10?q=he.f(t,oe,W):q=LF(te,he,t,oe,W),L==0&&[9,521,1033,2057].indexOf(B)===-1)continue;switch(te){case 34:e.opts.Date1904=F.WBProps.date1904=q;break;case 134:e.opts.WriteProtect=!0;break;case 47:if(W.enc||(t.l=0),W.enc=q,!r.password)throw new Error("File is password-protected");if(q.valid==null)throw new Error("Encryption scheme unsupported");if(!q.valid)throw new Error("Password is incorrect");break;case 92:W.lastuser=q;break;case 66:var ne=Number(q);switch(ne){case 21010:ne=1200;break;case 32768:ne=1e4;break;case 32769:ne=1252;break}es(W.codepage=ne),D=!0;break;case 317:W.rrtabid=q;break;case 25:W.winlocked=q;break;case 439:e.opts.RefreshAll=q;break;case 12:e.opts.CalcCount=q;break;case 16:e.opts.CalcDelta=q;break;case 17:e.opts.CalcIter=q;break;case 13:e.opts.CalcMode=q;break;case 14:e.opts.CalcPrecision=q;break;case 95:e.opts.CalcSaveRecalc=q;break;case 15:W.CalcRefMode=q;break;case 2211:e.opts.FullCalc=q;break;case 129:q.fDialog&&(i["!type"]="dialog"),q.fBelow||((i["!outline"]||(i["!outline"]={})).above=!0),q.fRight||((i["!outline"]||(i["!outline"]={})).left=!0);break;case 224:_.push(q);break;case 430:A.push([q]),A[A.length-1].XTI=[];break;case 35:case 547:A[A.length-1].push(q);break;case 24:case 536:S={Name:q.Name,Ref:In(q.rgce,o,null,A,W)},q.itab>0&&(S.Sheet=q.itab-1),A.names.push(S),A[0]||(A[0]=[],A[0].XTI=[]),A[A.length-1].push(q),q.Name=="_xlnm._FilterDatabase"&&q.itab>0&&q.rgce&&q.rgce[0]&&q.rgce[0][0]&&q.rgce[0][0][0]=="PtgArea3d"&&(C[q.itab-1]={ref:cr(q.rgce[0][0][1][2])});break;case 22:W.ExternCount=q;break;case 23:A.length==0&&(A[0]=[],A[0].XTI=[]),A[A.length-1].XTI=A[A.length-1].XTI.concat(q),A.XTI=A.XTI.concat(q);break;case 2196:if(W.biff<8)break;S!=null&&(S.Comment=q[1]);break;case 18:i["!protect"]=q;break;case 19:q!==0&&W.WTF&&console.error("Password verifier: "+q);break;case 133:s[q.pos]=q,W.snames.push(q.name);break;case 10:{if(--L)break;if(o.e){if(o.e.r>0&&o.e.c>0){if(o.e.r--,o.e.c--,i["!ref"]=cr(o),r.sheetRows&&r.sheetRows<=o.e.r){var Q=o.e.r;o.e.r=r.sheetRows-1,i["!fullref"]=i["!ref"],i["!ref"]=cr(o),o.e.r=Q}o.e.r++,o.e.c++}J.length>0&&(i["!merges"]=J),H.length>0&&(i["!objects"]=H),I.length>0&&(i["!cols"]=I),M.length>0&&(i["!rows"]=M),F.Sheets.push(O)}a===""?f=i:n[a]=i,i=r.dense?[]:{}}break;case 9:case 521:case 1033:case 2057:{if(W.biff===8&&(W.biff={9:2,521:3,1033:4}[te]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[q.BIFFVer]||8),W.biffguess=q.BIFFVer==0,q.BIFFVer==0&&q.dt==4096&&(W.biff=5,D=!0,es(W.codepage=28591)),W.biff==8&&q.BIFFVer==0&&q.dt==16&&(W.biff=2),L++)break;if(i=r.dense?[]:{},W.biff<8&&!D&&(D=!0,es(W.codepage=r.codepage||1252)),W.biff<5||q.BIFFVer==0&&q.dt==4096){a===""&&(a="Sheet1"),o={s:{r:0,c:0},e:{r:0,c:0}};var re={pos:t.l-oe,name:a};s[re.pos]=re,W.snames.push(a)}else a=(s[V]||{name:""}).name;q.dt==32&&(i["!type"]="chart"),q.dt==64&&(i["!type"]="macro"),J=[],H=[],W.arrayf=g=[],I=[],M=[],E=!1,O={Hidden:(s[V]||{hs:0}).hs,name:a}}break;case 515:case 3:case 2:i["!type"]=="chart"&&(r.dense?(i[q.r]||[])[q.c]:i[Vt({c:q.c,r:q.r})])&&++q.c,w={ixfe:q.ixfe,XF:_[q.ixfe]||{},v:q.val,t:"n"},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r);break;case 5:case 517:w={ixfe:q.ixfe,XF:_[q.ixfe],v:q.val,t:q.t},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r);break;case 638:w={ixfe:q.ixfe,XF:_[q.ixfe],v:q.rknum,t:"n"},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r);break;case 189:for(var ve=q.c;ve<=q.C;++ve){var Ce=q.rkrec[ve-q.c][0];w={ixfe:Ce,XF:_[Ce],v:q.rkrec[ve-q.c][1],t:"n"},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:ve,r:q.r},w,r)}break;case 6:case 518:case 1030:{if(q.val=="String"){h=q;break}if(w=ql(q.val,q.cell.ixfe,q.tt),w.XF=_[w.ixfe],r.cellFormula){var ce=q.formula;if(ce&&ce[0]&&ce[0][0]&&ce[0][0][0]=="PtgExp"){var se=ce[0][0][1][0],ee=ce[0][0][1][1],G=Vt({r:se,c:ee});x[G]?w.f=""+In(q.formula,o,q.cell,A,W):w.F=((r.dense?(i[se]||[])[ee]:i[G])||{}).F}else w.f=""+In(q.formula,o,q.cell,A,W)}P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z(q.cell,w,r),h=q}break;case 7:case 519:if(h)h.val=q,w=ql(q,h.cell.ixfe,"s"),w.XF=_[w.ixfe],r.cellFormula&&(w.f=""+In(h.formula,o,h.cell,A,W)),P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z(h.cell,w,r),h=null;else throw new Error("String record expects Formula");break;case 33:case 545:{g.push(q);var Z=Vt(q[0].s);if(p=r.dense?(i[q[0].s.r]||[])[q[0].s.c]:i[Z],r.cellFormula&&p){if(!h||!Z||!p)break;p.f=""+In(q[1],o,q[0],A,W),p.F=cr(q[0])}}break;case 1212:{if(!r.cellFormula)break;if(u){if(!h)break;x[Vt(h.cell)]=q[0],p=r.dense?(i[h.cell.r]||[])[h.cell.c]:i[Vt(h.cell)],(p||{}).f=""+In(q[0],o,l,A,W)}}break;case 253:w=ql(c[q.isst].t,q.ixfe,"s"),c[q.isst].h&&(w.h=c[q.isst].h),w.XF=_[w.ixfe],P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r);break;case 513:r.sheetStubs&&(w={ixfe:q.ixfe,XF:_[q.ixfe],t:"z"},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r));break;case 190:if(r.sheetStubs)for(var de=q.c;de<=q.C;++de){var Ae=q.ixfe[de-q.c];w={ixfe:Ae,XF:_[Ae],t:"z"},P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:de,r:q.r},w,r)}break;case 214:case 516:case 4:w=ql(q.val,q.ixfe,"s"),w.XF=_[w.ixfe],P>0&&(w.z=R[w.ixfe>>8&63]),ls(w,r,e.opts.Date1904),z({c:q.c,r:q.r},w,r);break;case 0:case 512:L===1&&(o=q);break;case 252:c=q;break;case 1054:if(W.biff==4){R[P++]=q[1];for(var K=0;K=163&&Ns(q[1],P+163)}else Ns(q[1],q[0]);break;case 30:{R[P++]=q;for(var Te=0;Te=163&&Ns(q,P+163)}break;case 229:J=J.concat(q);break;case 93:H[q.cmo[0]]=W.lastobj=q;break;case 438:W.lastobj.TxO=q;break;case 127:W.lastobj.ImData=q;break;case 440:for(v=q[0].s.r;v<=q[0].e.r;++v)for(d=q[0].s.c;d<=q[0].e.c;++d)p=r.dense?(i[v]||[])[d]:i[Vt({c:d,r:v})],p&&(p.l=q[1]);break;case 2048:for(v=q[0].s.r;v<=q[0].e.r;++v)for(d=q[0].s.c;d<=q[0].e.c;++d)p=r.dense?(i[v]||[])[d]:i[Vt({c:d,r:v})],p&&p.l&&(p.l.Tooltip=q[1]);break;case 28:{if(W.biff<=5&&W.biff>=2)break;p=r.dense?(i[q[0].r]||[])[q[0].c]:i[Vt(q[0])];var Oe=H[q[2]];p||(r.dense?(i[q[0].r]||(i[q[0].r]=[]),p=i[q[0].r][q[0].c]={t:"z"}):p=i[Vt(q[0])]={t:"z"},o.e.r=Math.max(o.e.r,q[0].r),o.s.r=Math.min(o.s.r,q[0].r),o.e.c=Math.max(o.e.c,q[0].c),o.s.c=Math.min(o.s.c,q[0].c)),p.c||(p.c=[]),m={a:q[1],t:Oe.TxO.t},p.c.push(m)}break;case 2173:kk(_[q.ixfe],q.ext);break;case 125:{if(!W.cellStyles)break;for(;q.e>=q.s;)I[q.e--]={width:q.w/256,level:q.level||0,hidden:!!(q.flags&1)},E||(E=!0,o0(q.w/256)),fa(I[q.e+1])}break;case 520:{var ie={};q.level!=null&&(M[q.r]=ie,ie.level=q.level),q.hidden&&(M[q.r]=ie,ie.hidden=!0),q.hpt&&(M[q.r]=ie,ie.hpt=q.hpt,ie.hpx=Bo(q.hpt))}break;case 38:case 39:case 40:case 41:i["!margins"]||Da(i["!margins"]={}),i["!margins"][{38:"left",39:"right",40:"top",41:"bottom"}[te]]=q;break;case 161:i["!margins"]||Da(i["!margins"]={}),i["!margins"].header=q.header,i["!margins"].footer=q.footer;break;case 574:q.RTL&&(F.Views[0].RTL=!0);break;case 146:k=q;break;case 2198:X=q;break;case 140:y=q;break;case 442:a?O.CodeName=q||O.name:F.WBProps.CodeName=q||"ThisWorkbook";break}}else he||console.error("Missing Info for XLS Record 0x"+te.toString(16)),t.l+=oe}return e.SheetNames=Jr(s).sort(function(fe,we){return Number(fe)-Number(we)}).map(function(fe){return s[fe].name}),r.bookSheets||(e.Sheets=n),!e.SheetNames.length&&f["!ref"]?(e.SheetNames.push("Sheet1"),e.Sheets&&(e.Sheets.Sheet1=f)):e.Preamble=f,e.Sheets&&C.forEach(function(fe,we){e.Sheets[e.SheetNames[we]]["!autofilter"]=fe}),e.Strings=c,e.SSF=Br(Ht),W.enc&&(e.Encryption=W.enc),X&&(e.Themes=X),e.Metadata={},y!==void 0&&(e.Metadata.Country=y),A.names.length>0&&(F.Names=A.names),e.Workbook=F,e}var Af={SI:"e0859ff2f94f6810ab9108002b27b3d9",DSI:"02d5cdd59c2e1b10939708002b2cf9ae",UDI:"05d5cdd59c2e1b10939708002b2cf9ae"};function jF(t,r,e){var n=It.find(t,"/!DocumentSummaryInformation");if(n&&n.size>0)try{var i=k1(n,gu,Af.DSI);for(var s in i)r[s]=i[s]}catch(a){if(e.WTF)throw a}var o=It.find(t,"/!SummaryInformation");if(o&&o.size>0)try{var h=k1(o,vu,Af.SI);for(var c in h)r[c]==null&&(r[c]=h[c])}catch(a){if(e.WTF)throw a}r.HeadingPairs&&r.TitlesOfParts&&(bg(r.HeadingPairs,r.TitlesOfParts,r,e),delete r.HeadingPairs,delete r.TitlesOfParts)}function HF(t,r){var e=[],n=[],i=[],s=0,o,h=r1(gu,"n"),c=r1(vu,"n");if(t.Props)for(o=Jr(t.Props),s=0;s-1||xg.indexOf(i[s][0])>-1||i[s][1]!=null&&a.push(i[s]);n.length&&It.utils.cfb_add(r,"/SummaryInformation",C1(n,Af.SI,c,vu)),(e.length||a.length)&&It.utils.cfb_add(r,"/DocumentSummaryInformation",C1(e,Af.DSI,h,gu,a.length?a:null,Af.UDI))}function yv(t,r){r||(r={}),g0(r),Uu(),r.codepage&&Lu(r.codepage);var e,n;if(t.FullPaths){if(It.find(t,"/encryption"))throw new Error("File is password-protected");e=It.find(t,"!CompObj"),n=It.find(t,"/Workbook")||It.find(t,"/Book")}else{switch(r.type){case"base64":t=xi(wi(t));break;case"binary":t=xi(t);break;case"buffer":break;case"array":Array.isArray(t)||(t=Array.prototype.slice.call(t));break}Sn(t,0),n={content:t}}var i,s;if(e&&PF(e),r.bookProps&&!r.bookSheets)i={};else{var o=nr?"buffer":"array";if(n&&n.content)i=UF(n.content,r);else if((s=It.find(t,"PerfectOffice_MAIN"))&&s.content)i=Oa.to_workbook(s.content,(r.type=o,r));else if((s=It.find(t,"NativeContent_MAIN"))&&s.content)i=Oa.to_workbook(s.content,(r.type=o,r));else throw(s=It.find(t,"MN0"))&&s.content?new Error("Unsupported Works 4 for Mac file"):new Error("Cannot find Workbook stream");r.bookVBA&&t.FullPaths&&It.find(t,"/_VBA_PROJECT_CUR/VBA/dir")&&(i.vbaraw=e9(t))}var h={};return t.FullPaths&&jF(t,h,r),i.Props=i.Custprops=h,r.bookFiles&&(i.cfb=t),i}function WF(t,r){var e=r||{},n=It.utils.cfb_new({root:"R"}),i="/Workbook";switch(e.bookType||"xls"){case"xls":e.bookType="biff8";case"xla":e.bookType||(e.bookType="xla");case"biff8":i="/Workbook",e.biff=8;break;case"biff5":i="/Book",e.biff=5;break;default:throw new Error("invalid type "+e.bookType+" for XLS CFB")}return It.utils.cfb_add(n,i,_v(t,e)),e.biff==8&&(t.Props||t.Custprops)&&HF(t,n),e.biff==8&&t.vbaraw&&t9(n,It.read(t.vbaraw,{type:typeof t.vbaraw=="string"?"binary":"buffer"})),n}var jf={0:{f:uC},1:{f:wC},2:{f:UC},3:{f:AC},4:{f:TC},5:{f:PC},6:{f:zC},7:{f:IC},8:{f:JC},9:{f:ZC},10:{f:KC},11:{f:YC},12:{f:_C},13:{f:HC},14:{f:RC},15:{f:kC},16:{f:dv},17:{f:VC},18:{f:DC},19:{f:Ju},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:VA},40:{},42:{},43:{f:zS},44:{f:WS},45:{f:GS},46:{f:YS},47:{f:KS},48:{},49:{f:m5},50:{},51:{f:Fk},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:Bg},62:{f:$C},63:{f:Lk},64:{f:dA},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:Bn,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:lA},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:xC},148:{f:mC,p:16},151:{f:nA},152:{},153:{f:$A},154:{},155:{},156:{f:HA},157:{},158:{},159:{T:1,f:sS},160:{T:-1},161:{T:1,f:Ga},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:QC},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:Ck},336:{T:-1},337:{f:Ik,T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:mu},357:{},358:{},359:{},360:{T:1},361:{},362:{f:Pg},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:iA},427:{f:sA},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:oA},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:vC},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:tA},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:mu},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:Yk},633:{T:1},634:{T:-1},635:{T:1,f:Gk},636:{T:-1},637:{f:b5},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:RA},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:pA},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}},Eu={6:{f:Vh},10:{f:ea},12:{f:nn},13:{f:nn},14:{f:Yr},15:{f:Yr},16:{f:Dn},17:{f:Yr},18:{f:Yr},19:{f:nn},20:{f:O1},21:{f:O1},23:{f:Pg},24:{f:N1},25:{f:Yr},26:{},27:{},28:{f:pT},29:{},34:{f:Yr},35:{f:D1},38:{f:Dn},39:{f:Dn},40:{f:Dn},41:{f:Dn},42:{f:Yr},43:{f:Yr},47:{f:kS},49:{f:HE},51:{f:nn},60:{},61:{f:PE},64:{f:Yr},65:{f:jE},66:{f:nn},77:{},80:{},81:{},82:{},85:{f:nn},89:{},90:{},91:{},92:{f:SE},93:{f:vT},94:{},95:{f:Yr},96:{},97:{},99:{f:Yr},125:{f:Bg},128:{f:rT},129:{f:CE},130:{f:nn},131:{f:Yr},132:{f:Yr},133:{f:AE},134:{},140:{f:ST},141:{f:nn},144:{},146:{f:AT},151:{},152:{},153:{},154:{},155:{},156:{f:nn},157:{},158:{},160:{f:NT},161:{f:MT},174:{},175:{},176:{},177:{},178:{},180:{},181:{},182:{},184:{},185:{},189:{f:QE},190:{f:qE},193:{f:ea},197:{},198:{},199:{},200:{},201:{},202:{f:Yr},203:{},204:{},205:{},206:{},207:{},208:{},209:{},210:{},211:{},213:{},215:{},216:{},217:{},218:{f:nn},220:{},221:{f:Yr},222:{},224:{f:tT},225:{f:TE},226:{f:ea},227:{},229:{f:mT},233:{},235:{},236:{},237:{},239:{},240:{},241:{},242:{},244:{},245:{},246:{},247:{},248:{},249:{},251:{},252:{f:RE},253:{f:$E},255:{f:IE},256:{},259:{},290:{},311:{},312:{},315:{},317:{f:Cg},318:{},319:{},320:{},330:{},331:{},333:{},334:{},335:{},336:{},337:{},338:{},339:{},340:{},351:{},352:{f:Yr},353:{f:ea},401:{},402:{},403:{},404:{},405:{},406:{},407:{},408:{},425:{},426:{},427:{},428:{},429:{},430:{f:oT},431:{f:Yr},432:{},433:{},434:{},437:{},438:{f:wT},439:{f:Yr},440:{f:yT},441:{},442:{f:Yf},443:{},444:{f:nn},445:{},446:{},448:{f:ea},449:{f:NE,r:2},450:{f:ea},512:{f:R1},513:{f:DT},515:{f:sT},516:{f:XE},517:{f:I1},519:{f:PT},520:{f:OE},523:{},545:{f:P1},549:{f:F1},566:{},574:{f:LE},638:{f:JE},659:{},1048:{},1054:{f:GE},1084:{},1212:{f:hT},2048:{f:ET},2049:{},2050:{},2051:{},2052:{},2053:{},2054:{},2055:{},2056:{},2057:{f:Zl},2058:{},2059:{},2060:{},2061:{},2062:{},2063:{},2064:{},2066:{},2067:{},2128:{},2129:{},2130:{},2131:{},2132:{},2133:{},2134:{},2135:{},2136:{},2137:{},2138:{},2146:{},2147:{r:12},2148:{},2149:{},2150:{},2151:{f:ea},2152:{},2154:{},2155:{},2156:{},2161:{},2162:{},2164:{},2165:{},2166:{},2167:{},2168:{},2169:{},2170:{},2171:{},2172:{f:FT,r:12},2173:{f:Sk,r:12},2174:{},2175:{},2180:{},2181:{},2182:{},2183:{},2184:{},2185:{},2186:{},2187:{},2188:{f:Yr,r:12},2189:{},2190:{r:12},2191:{},2192:{},2194:{},2195:{},2196:{f:cT,r:12},2197:{},2198:{f:bk,r:12},2199:{},2200:{},2201:{},2202:{f:uT,r:12},2203:{f:ea},2204:{},2205:{},2206:{},2207:{},2211:{f:DE},2212:{},2213:{},2214:{},2215:{},4097:{},4098:{},4099:{},4102:{},4103:{},4105:{},4106:{},4107:{},4108:{},4109:{},4116:{},4117:{},4118:{},4119:{},4120:{},4121:{},4122:{},4123:{},4124:{},4125:{},4126:{},4127:{},4128:{},4129:{},4130:{},4132:{},4133:{},4134:{f:nn},4135:{},4146:{},4147:{},4148:{},4149:{},4154:{},4156:{},4157:{},4158:{},4159:{},4160:{},4161:{},4163:{},4164:{f:IT},4165:{},4166:{},4168:{},4170:{},4171:{},4174:{},4175:{},4176:{},4177:{},4187:{},4188:{f:CT},4189:{},4191:{},4192:{},4193:{},4194:{},4195:{},4196:{},4197:{},4198:{},4199:{},4200:{},0:{f:R1},1:{},2:{f:HT},3:{f:UT},4:{f:LT},5:{f:I1},7:{f:$T},8:{},9:{f:Zl},11:{},22:{f:nn},30:{f:YE},31:{},32:{},33:{f:P1},36:{},37:{f:F1},50:{f:zT},62:{},52:{},67:{},68:{f:nn},69:{},86:{},126:{},127:{f:BT},135:{},136:{},137:{},145:{},148:{},149:{},150:{},169:{},171:{},188:{},191:{},192:{},194:{},195:{},214:{f:XT},223:{},234:{},354:{},421:{},518:{f:Vh},521:{f:Zl},536:{f:N1},547:{f:D1},561:{},579:{},1030:{f:Vh},1033:{f:Zl},1091:{},2157:{},2163:{},2177:{},2240:{},2241:{},2242:{},2243:{},2244:{},2245:{},2246:{},2247:{},2248:{},2249:{},2250:{},2251:{},2262:{r:12},29282:{}};function mt(t,r,e,n){var i=r;if(!isNaN(i)){var s=n||(e||[]).length||0,o=t.next(4);o.write_shift(2,i),o.write_shift(2,s),s>0&&Zu(e)&&t.push(e)}}function $F(t,r,e,n){var i=n||(e||[]).length||0;if(i<=8224)return mt(t,r,e,i);var s=r;if(!isNaN(s)){for(var o=e.parts||[],h=0,c=0,a=0;a+(o[h]||8224)<=8224;)a+=o[h]||8224,h++;var f=t.next(4);for(f.write_shift(2,s),f.write_shift(2,a),t.push(e.slice(c,c+a)),c+=a;c=0&&i<65536?mt(t,2,WT(e,n,i)):mt(t,3,jT(e,n,i));return;case"b":case"e":mt(t,5,zF(e,n,r.v,r.t));return;case"s":case"str":mt(t,4,XF(e,n,(r.v||"").slice(0,255)));return}mt(t,1,qf(null,e,n))}function GF(t,r,e,n){var i=Array.isArray(r),s=Er(r["!ref"]||"A1"),o,h="",c=[];if(s.e.c>255||s.e.r>16383){if(n.WTF)throw new Error("Range "+(r["!ref"]||"A1")+" exceeds format limit A1:IV16384");s.e.c=Math.min(s.e.c,255),s.e.r=Math.min(s.e.c,16383),o=cr(s)}for(var a=s.s.r;a<=s.e.r;++a){h=wn(a);for(var f=s.s.c;f<=s.e.c;++f){a===s.s.r&&(c[f]=an(f)),o=c[f]+h;var l=i?(r[a]||[])[f]:r[o];l&&VF(t,l,a,f)}}}function KF(t,r){for(var e=r||{},n=si(),i=0,s=0;s255||p.e.r>=m){if(r.WTF)throw new Error("Range "+(s["!ref"]||"A1")+" exceeds format limit A1:IV16384");p.e.c=Math.min(p.e.c,255),p.e.r=Math.min(p.e.c,m-1)}mt(n,2057,i0(e,16,r)),mt(n,13,Ni(1)),mt(n,12,Ni(100)),mt(n,15,zn(!0)),mt(n,17,zn(!1)),mt(n,16,La(.001)),mt(n,95,zn(!0)),mt(n,42,zn(!1)),mt(n,43,zn(!1)),mt(n,130,Ni(1)),mt(n,128,nT([0,0])),mt(n,131,zn(!1)),mt(n,132,zn(!1)),a&&eR(n,s["!cols"]),mt(n,512,ZE(p,r)),a&&(s["!links"]=[]);for(var d=p.s.r;d<=p.e.r;++d){l=wn(d);for(var v=p.s.c;v<=p.e.c;++v){d===p.s.r&&(u[v]=an(v)),f=u[v]+l;var x=c?(s[d]||[])[v]:s[f];x&&(tR(n,x,d,v,r),a&&x.l&&s["!links"].push([f,x.l]))}}var g=h.CodeName||h.name||i;return a&&mt(n,574,UE((o.Views||[])[0])),a&&(s["!merges"]||[]).length&&mt(n,229,gT(s["!merges"])),a&&qF(n,s),mt(n,442,Fg(g)),a&&JF(n,s),mt(n,10),n.end()}function nR(t,r,e){var n=si(),i=(t||{}).Workbook||{},s=i.Sheets||[],o=i.WBProps||{},h=e.biff==8,c=e.biff==5;if(mt(n,2057,i0(t,5,e)),e.bookType=="xla"&&mt(n,135),mt(n,225,h?Ni(1200):null),mt(n,193,iE(2)),c&&mt(n,191),c&&mt(n,192),mt(n,226),mt(n,92,kE("SheetJS",e)),mt(n,66,Ni(h?1200:1252)),h&&mt(n,353,Ni(0)),h&&mt(n,448),mt(n,317,OT(t.SheetNames.length)),h&&t.vbaraw&&mt(n,211),h&&t.vbaraw){var a=o.CodeName||"ThisWorkbook";mt(n,442,Fg(a))}mt(n,156,Ni(17)),mt(n,25,zn(!1)),mt(n,18,zn(!1)),mt(n,19,Ni(0)),h&&mt(n,431,zn(!1)),h&&mt(n,444,Ni(0)),mt(n,61,BE()),mt(n,64,zn(!1)),mt(n,141,Ni(0)),mt(n,34,zn(NA(t)=="true")),mt(n,14,zn(!0)),h&&mt(n,439,zn(!1)),mt(n,218,Ni(0)),YF(n,t,e),ZF(n,t.SSF,e),QF(n,e),h&&mt(n,352,zn(!1));var f=n.end(),l=si();h&&mt(l,140,kT()),h&&e.Strings&&$F(l,252,ME(e.Strings)),mt(l,10);var u=l.end(),p=si(),m=0,d=0;for(d=0;d255&&typeof console<"u"&&console.error&&console.error("Worksheet '"+t.SheetNames[e]+"' extends beyond column IV (255). Data may be lost.")}}var s=r||{};switch(s.biff||2){case 8:case 5:return iR(t,r);case 4:case 3:case 2:return KF(t,r)}throw new Error("invalid type "+s.bookType+" for BIFF")}function V1(t,r){var e=r||{},n=e.dense?[]:{};t=t.replace(//g,"");var i=t.match(/");var s=t.match(/<\/table/i),o=i.index,h=s&&s.index||t.length,c=W8(t.slice(o,h),/(:?]*>)/i,""),a=-1,f=0,l=0,u=0,p={s:{r:1e7,c:1e7},e:{r:0,c:0}},m=[];for(o=0;o/i);for(h=0;h"))>-1;)w=w.slice(y+1);for(var _=0;_")));u=F.colspan?+F.colspan:1,((l=+F.rowspan)>1||u>1)&&m.push({s:{r:a,c:f},e:{r:a+(l||1)-1,c:f+u-1}});var O=F.t||F["data-t"]||"";if(!w.length){f+=u;continue}if(w=J8(w),p.s.r>a&&(p.s.r=a),p.e.rf&&(p.s.c=f),p.e.ce||i[a].s.c>o)&&!(i[a].e.r1&&(p.rowspan=h),c>1&&(p.colspan=c),n.editable?u=''+u+"":l&&(p["data-t"]=l&&l.t||"z",l.v!=null&&(p["data-v"]=l.v),l.z!=null&&(p["data-z"]=l.z),l.l&&(l.l.Target||"#").charAt(0)!="#"&&(u=''+u+"")),p.id=(n.id||"sjs")+"-"+f,s.push(pt("td",u,p))}}var m="";return m+s.join("")+""}var aR='SheetJS Table Export',oR="";function fR(t,r){var e=t.match(/[\s\S]*?<\/table>/gi);if(!e||e.length==0)throw new Error("Invalid HTML: could not find
");if(e.length==1)return $a(V1(e[0],r),r);var n=Mv();return e.forEach(function(i,s){Iv(n,V1(i,r),"Sheet"+(s+1))}),n}function lR(t,r,e){var n=[];return n.join("")+""}function cR(t,r){var e=r||{},n=e.header!=null?e.header:aR,i=e.footer!=null?e.footer:oR,s=[n],o=Li(t["!ref"]);e.dense=Array.isArray(t),s.push(lR(t,o,e));for(var h=o.s.r;h<=o.e.r;++h)s.push(sR(t,o,h,e));return s.push("
"+i),s.join("")}function hR(t){var r=t.replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(//g," ").replace(//g,function(n,i){return Array(parseInt(i,10)+1).join(" ")}).replace(/]*\/>/g," ").replace(//g,` +`),e=vr(r.replace(/<[^>]*>/g,""));return[e]}var G1={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"],era:["e","ee"],quarter:["\\Qm",'m\\"th quarter"']};function Ev(t,r){var e=r||{},n=Ku(t),i=[],s,o,h={name:""},c="",a=0,f,l,u={},p=[],m=e.dense?[]:{},d,v,x={value:""},g="",w=0,y=[],_=-1,k=-1,F={s:{r:1e6,c:1e7},e:{r:0,c:0}},O=0,N={},U=[],z={},W=0,X=0,J=[],H=1,I=1,M=[],E={Names:[]},A={},B=["",""],L=[],P={},R="",C=0,S=!1,D=!1,V=0;for(Df.lastIndex=0,n=n.replace(//mg,"").replace(//gm,"");d=Df.exec(n);)switch(d[3]=d[3].replace(/_.*$/,"")){case"table":case"工作表":d[1]==="/"?(F.e.c>=F.s.c&&F.e.r>=F.s.r?m["!ref"]=cr(F):m["!ref"]="A1:A1",e.sheetRows>0&&e.sheetRows<=F.e.r&&(m["!fullref"]=m["!ref"],F.e.r=e.sheetRows-1,m["!ref"]=cr(F)),U.length&&(m["!merges"]=U),J.length&&(m["!rows"]=J),f.name=f.名称||f.name,typeof JSON<"u"&&JSON.stringify(f),p.push(f.name),u[f.name]=m,D=!1):d[0].charAt(d[0].length-2)!=="/"&&(f=Wt(d[0],!1),_=k=-1,F.s.r=F.s.c=1e7,F.e.r=F.e.c=0,m=e.dense?[]:{},U=[],J=[],D=!0);break;case"table-row-group":d[1]==="/"?--O:++O;break;case"table-row":case"行":if(d[1]==="/"){_+=H,H=1;break}if(l=Wt(d[0],!1),l.行号?_=l.行号-1:_==-1&&(_=0),H=+l["number-rows-repeated"]||1,H<10)for(V=0;V0&&(J[_+V]={level:O});k=-1;break;case"covered-table-cell":d[1]!=="/"&&++k,e.sheetStubs&&(e.dense?(m[_]||(m[_]=[]),m[_][k]={t:"z"}):m[Vt({r:_,c:k})]={t:"z"}),g="",y=[];break;case"table-cell":case"数据":if(d[0].charAt(d[0].length-2)==="/")++k,x=Wt(d[0],!1),I=parseInt(x["number-columns-repeated"]||"1",10),v={t:"z",v:null},x.formula&&e.cellFormula!=!1&&(v.f=$1(vr(x.formula))),(x.数据类型||x["value-type"])=="string"&&(v.t="s",v.v=vr(x["string-value"]||""),e.dense?(m[_]||(m[_]=[]),m[_][k]=v):m[Vt({r:_,c:k})]=v),k+=I-1;else if(d[1]!=="/"){++k,g="",w=0,y=[],I=1;var te=H?_+H-1:_;if(k>F.e.c&&(F.e.c=k),kF.e.r&&(F.e.r=te),x=Wt(d[0],!1),L=[],P={},v={t:x.数据类型||x["value-type"],v:null},e.cellFormula)if(x.formula&&(x.formula=vr(x.formula)),x["number-matrix-columns-spanned"]&&x["number-matrix-rows-spanned"]&&(W=parseInt(x["number-matrix-rows-spanned"],10)||0,X=parseInt(x["number-matrix-columns-spanned"],10)||0,z={s:{r:_,c:k},e:{r:_+W-1,c:k+X-1}},v.F=cr(z),M.push([z,v.F])),x.formula)v.f=$1(x.formula);else for(V=0;V=M[V][0].s.r&&_<=M[V][0].e.r&&k>=M[V][0].s.c&&k<=M[V][0].e.c&&(v.F=M[V][1]);switch((x["number-columns-spanned"]||x["number-rows-spanned"])&&(W=parseInt(x["number-rows-spanned"],10)||0,X=parseInt(x["number-columns-spanned"],10)||0,z={s:{r:_,c:k},e:{r:_+W-1,c:k+X-1}},U.push(z)),x["number-columns-repeated"]&&(I=parseInt(x["number-columns-repeated"],10)),v.t){case"boolean":v.t="b",v.v=Pr(x["boolean-value"]);break;case"float":v.t="n",v.v=parseFloat(x.value);break;case"percentage":v.t="n",v.v=parseFloat(x.value);break;case"currency":v.t="n",v.v=parseFloat(x.value);break;case"date":v.t="d",v.v=jr(x["date-value"]),e.cellDates||(v.t="n",v.v=Cn(v.v)),v.z="m/d/yy";break;case"time":v.t="n",v.v=U8(x["time-value"])/86400,e.cellDates&&(v.t="d",v.v=Ic(v.v)),v.z="HH:MM:SS";break;case"number":v.t="n",v.v=parseFloat(x.数据数值);break;default:if(v.t==="string"||v.t==="text"||!v.t)v.t="s",x["string-value"]!=null&&(g=vr(x["string-value"]),y=[]);else throw new Error("Unsupported value type "+v.t)}}else{if(S=!1,v.t==="s"&&(v.v=g||"",y.length&&(v.R=y),S=w==0),A.Target&&(v.l=A),L.length>0&&(v.c=L,L=[]),g&&e.cellText!==!1&&(v.w=g),S&&(v.t="z",delete v.v),(!S||e.sheetStubs)&&!(e.sheetRows&&e.sheetRows<=_))for(var oe=0;oe0;)m[_+oe][k+I]=Br(v);else for(m[Vt({r:_+oe,c:k})]=v;--I>0;)m[Vt({r:_+oe,c:k+I})]=Br(v);F.e.c<=k&&(F.e.c=k)}I=parseInt(x["number-columns-repeated"]||"1",10),k+=I-1,I=0,v={},g="",y=[]}A={};break;case"document":case"document-content":case"电子表格文档":case"spreadsheet":case"主体":case"scripts":case"styles":case"font-face-decls":case"master-styles":if(d[1]==="/"){if((s=i.pop())[0]!==d[3])throw"Bad state: "+s}else d[0].charAt(d[0].length-2)!=="/"&&i.push([d[3],!0]);break;case"annotation":if(d[1]==="/"){if((s=i.pop())[0]!==d[3])throw"Bad state: "+s;P.t=g,y.length&&(P.R=y),P.a=R,L.push(P)}else d[0].charAt(d[0].length-2)!=="/"&&i.push([d[3],!1]);R="",C=0,g="",w=0,y=[];break;case"creator":d[1]==="/"?R=n.slice(C,d.index):C=d.index+d[0].length;break;case"meta":case"元数据":case"settings":case"config-item-set":case"config-item-map-indexed":case"config-item-map-entry":case"config-item-map-named":case"shapes":case"frame":case"text-box":case"image":case"data-pilot-tables":case"list-style":case"form":case"dde-links":case"event-listeners":case"chart":if(d[1]==="/"){if((s=i.pop())[0]!==d[3])throw"Bad state: "+s}else d[0].charAt(d[0].length-2)!=="/"&&i.push([d[3],!1]);g="",w=0,y=[];break;case"scientific-number":break;case"currency-symbol":break;case"currency-style":break;case"number-style":case"percentage-style":case"date-style":case"time-style":if(d[1]==="/"){if(N[h.name]=c,(s=i.pop())[0]!==d[3])throw"Bad state: "+s}else d[0].charAt(d[0].length-2)!=="/"&&(c="",h=Wt(d[0],!1),i.push([d[3],!0]));break;case"script":break;case"libraries":break;case"automatic-styles":break;case"default-style":case"page-layout":break;case"style":break;case"map":break;case"font-face":break;case"paragraph-properties":break;case"table-properties":break;case"table-column-properties":break;case"table-row-properties":break;case"table-cell-properties":break;case"number":switch(i[i.length-1][0]){case"time-style":case"date-style":o=Wt(d[0],!1),c+=G1[d[3]][o.style==="long"?1:0];break}break;case"fraction":break;case"day":case"month":case"year":case"era":case"day-of-week":case"week-of-year":case"quarter":case"hours":case"minutes":case"seconds":case"am-pm":switch(i[i.length-1][0]){case"time-style":case"date-style":o=Wt(d[0],!1),c+=G1[d[3]][o.style==="long"?1:0];break}break;case"boolean-style":break;case"boolean":break;case"text-style":break;case"text":if(d[0].slice(-2)==="/>")break;if(d[1]==="/")switch(i[i.length-1][0]){case"number-style":case"date-style":case"time-style":c+=n.slice(a,d.index);break}else a=d.index+d[0].length;break;case"named-range":o=Wt(d[0],!1),B=Gh(o["cell-range-address"]);var he={Name:o.name,Ref:B[0]+"!"+B[1]};D&&(he.Sheet=p.length),E.Names.push(he);break;case"text-content":break;case"text-properties":break;case"embedded-text":break;case"body":case"电子表格":break;case"forms":break;case"table-column":break;case"table-header-rows":break;case"table-rows":break;case"table-column-group":break;case"table-header-columns":break;case"table-columns":break;case"null-date":break;case"graphic-properties":break;case"calculation-settings":break;case"named-expressions":break;case"label-range":break;case"label-ranges":break;case"named-expression":break;case"sort":break;case"sort-by":break;case"sort-groups":break;case"tab":break;case"line-break":break;case"span":break;case"p":case"文本串":if(["master-styles"].indexOf(i[i.length-1][0])>-1)break;if(d[1]==="/"&&(!x||!x["string-value"])){var Ne=hR(n.slice(w,d.index));g=(g.length>0?g+` +`:"")+Ne[0]}else Wt(d[0],!1),w=d.index+d[0].length;break;case"s":break;case"database-range":if(d[1]==="/")break;try{B=Gh(Wt(d[0])["target-range-address"]),u[B[0]]["!autofilter"]={ref:B[1]}}catch{}break;case"date":break;case"object":break;case"title":case"标题":break;case"desc":break;case"binary-data":break;case"table-source":break;case"scenario":break;case"iteration":break;case"content-validations":break;case"content-validation":break;case"help-message":break;case"error-message":break;case"database-ranges":break;case"filter":break;case"filter-and":break;case"filter-or":break;case"filter-condition":break;case"list-level-style-bullet":break;case"list-level-style-number":break;case"list-level-properties":break;case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":break;case"event-listener":break;case"initial-creator":case"creation-date":case"print-date":case"generator":case"document-statistic":case"user-defined":case"editing-duration":case"editing-cycles":break;case"config-item":break;case"page-number":break;case"page-count":break;case"time":break;case"cell-range-source":break;case"detective":break;case"operation":break;case"highlighted-range":break;case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":break;case"rect":break;case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":break;case"properties":break;case"property":break;case"a":if(d[1]!=="/"){if(A=Wt(d[0],!1),!A.href)break;A.Target=vr(A.href),delete A.href,A.Target.charAt(0)=="#"&&A.Target.indexOf(".")>-1?(B=Gh(A.Target.slice(1)),A.Target="#"+B[0]+"!"+B[1]):A.Target.match(/^\.\.[\\\/]/)&&(A.Target=A.Target.slice(3))}break;case"table-protection":break;case"data-pilot-grand-total":break;case"office-document-common-attrs":break;default:switch(d[2]){case"dc:":case"calcext:":case"loext:":case"ooo:":case"chartooo:":case"draw:":case"style:":case"chart:":case"form:":case"uof:":case"表:":case"字:":break;default:if(e.WTF)throw new Error(d)}}var q={Sheets:u,SheetNames:p,Workbook:E};return e.bookSheets&&delete q.Sheets,q}function K1(t,r){r=r||{},Di(t,"META-INF/manifest.xml")&&U5(rn(t,"META-INF/manifest.xml"),r);var e=bi(t,"content.xml");if(!e)throw new Error("Missing content.xml in ODS / UOF file");var n=Ev(Fr(e),r);return Di(t,"meta.xml")&&(n.Props=gg(rn(t,"meta.xml"))),n}function Y1(t,r){return Ev(t,r)}var uR=function(){var t=["",'',"",'',"",'',"",""].join(""),r=""+t+"";return function(){return Qr+r}}(),Z1=function(){var t=function(s){return Cr(s).replace(/ +/g,function(o){return''}).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"")},r=` +`,e=` +`,n=function(s,o,h){var c=[];c.push(' +`);var a=0,f=0,l=Li(s["!ref"]||"A1"),u=s["!merges"]||[],p=0,m=Array.isArray(s);if(s["!cols"])for(f=0;f<=l.e.c;++f)c.push(" +`);var d="",v=s["!rows"]||[];for(a=0;a +`);for(;a<=l.e.r;++a){for(d=v[a]?' table:style-name="ro'+v[a].ods+'"':"",c.push(" +`),f=0;ff)&&!(u[p].s.r>a)&&!(u[p].e.c +`)}return c.push(` +`),c.join("")},i=function(s,o){s.push(` +`),s.push(` +`),s.push(` +`),s.push(` / +`),s.push(` +`),s.push(` / +`),s.push(` +`),s.push(` +`);var h=0;o.SheetNames.map(function(a){return o.Sheets[a]}).forEach(function(a){if(a&&a["!cols"]){for(var f=0;f +`),s.push(' +`),s.push(` +`),++h}}});var c=0;o.SheetNames.map(function(a){return o.Sheets[a]}).forEach(function(a){if(a&&a["!rows"]){for(var f=0;f +`),s.push(' +`),s.push(` +`),++c}}}),s.push(` +`),s.push(` +`),s.push(` +`),s.push(` +`),s.push(` +`)};return function(o,h){var c=[Qr],a=Of({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),f=Of({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});h.bookType=="fods"?(c.push(" +`),c.push(mg().replace(/office:document-meta/g,"office:meta"))):c.push(" +`),i(c,o),c.push(` +`),c.push(` +`);for(var l=0;l!=o.SheetNames.length;++l)c.push(n(o.Sheets[o.SheetNames[l]],o,l));return c.push(` +`),c.push(` +`),h.bookType=="fods"?c.push(""):c.push(""),c.join("")}}();function Tv(t,r){if(r.bookType=="fods")return Z1(t,r);var e=zu(),n="",i=[],s=[];return n="mimetype",qt(e,n,"application/vnd.oasis.opendocument.spreadsheet"),n="content.xml",qt(e,n,Z1(t,r)),i.push([n,"text/xml"]),s.push([n,"ContentFile"]),n="styles.xml",qt(e,n,uR(t,r)),i.push([n,"text/xml"]),s.push([n,"StylesFile"]),n="meta.xml",qt(e,n,Qr+mg()),i.push([n,"text/xml"]),s.push([n,"MetadataFile"]),n="manifest.rdf",qt(e,n,W5(s)),i.push([n,"application/rdf+xml"]),n="META-INF/manifest.xml",qt(e,n,j5(i)),e}/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function Ha(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function Tu(t){return typeof TextDecoder<"u"?new TextDecoder().decode(t):Fr(ha(t))}function dR(t){return typeof TextEncoder<"u"?new TextEncoder().encode(t):xi(ds(t))}function pR(t,r){e:for(var e=0;e<=t.length-r.length;++e){for(var n=0;n>1&1431655765,t=(t&858993459)+(t>>2&858993459),(t+(t>>4)&252645135)*16843009>>>24}function mR(t,r){for(var e=(t[r+15]&127)<<7|t[r+14]>>1,n=t[r+14]&1,i=r+13;i>=r;--i)n=n*256+t[i];return(t[r+15]&128?-n:n)*Math.pow(10,e-6176)}function gR(t,r,e){var n=Math.floor(e==0?0:Math.LOG10E*Math.log(Math.abs(e)))+6176-20,i=e/Math.pow(10,n-6176);t[r+15]|=n>>7,t[r+14]|=(n&127)<<1;for(var s=0;i>=1;++s,i/=256)t[r+s]=i&255;t[r+15]|=e>=0?0:128}function Hf(t,r){var e=r?r[0]:0,n=t[e]&127;e:if(t[e++]>=128&&(n|=(t[e]&127)<<7,t[e++]<128||(n|=(t[e]&127)<<14,t[e++]<128)||(n|=(t[e]&127)<<21,t[e++]<128)||(n+=(t[e]&127)*Math.pow(2,28),++e,t[e++]<128)||(n+=(t[e]&127)*Math.pow(2,35),++e,t[e++]<128)||(n+=(t[e]&127)*Math.pow(2,42),++e,t[e++]<128)))break e;return r&&(r[0]=e),n}function Sr(t){var r=new Uint8Array(7);r[0]=t&127;var e=1;e:if(t>127){if(r[e-1]|=128,r[e]=t>>7&127,++e,t<=16383||(r[e-1]|=128,r[e]=t>>14&127,++e,t<=2097151)||(r[e-1]|=128,r[e]=t>>21&127,++e,t<=268435455)||(r[e-1]|=128,r[e]=t/256>>>21&127,++e,t<=34359738367)||(r[e-1]|=128,r[e]=t/65536>>>21&127,++e,t<=4398046511103))break e;r[e-1]|=128,r[e]=t/16777216>>>21&127,++e}return r.slice(0,e)}function Xr(t){var r=0,e=t[r]&127;e:if(t[r++]>=128){if(e|=(t[r]&127)<<7,t[r++]<128||(e|=(t[r]&127)<<14,t[r++]<128)||(e|=(t[r]&127)<<21,t[r++]<128))break e;e|=(t[r]&127)<<28}return e}function xr(t){for(var r=[],e=[0];e[0]=128;);h=t.slice(c,e[0])}break;case 5:o=4,h=t.slice(e[0],e[0]+o),e[0]+=o;break;case 1:o=8,h=t.slice(e[0],e[0]+o),e[0]+=o;break;case 2:o=Hf(t,e),h=t.slice(e[0],e[0]+o),e[0]+=o;break;case 3:case 4:default:throw new Error("PB Type ".concat(s," for Field ").concat(i," at offset ").concat(n))}var a={data:h,type:s};r[i]==null?r[i]=[a]:r[i].push(a)}return r}function Tn(t){var r=[];return t.forEach(function(e,n){e.forEach(function(i){i.data&&(r.push(Sr(n*8+i.type)),i.type==2&&r.push(Sr(i.data.length)),r.push(i.data))})}),ca(r)}function m0(t,r){return(t==null?void 0:t.map(function(e){return r(e.data)}))||[]}function Ii(t){for(var r,e=[],n=[0];n[0]>>0>0),e.push(o)}return e}function Co(t){var r=[];return t.forEach(function(e){var n=[];n[1]=[{data:Sr(e.id),type:0}],n[2]=[],e.merge!=null&&(n[3]=[{data:Sr(+!!e.merge),type:0}]);var i=[];e.messages.forEach(function(o){i.push(o.data),o.meta[3]=[{type:0,data:Sr(o.data.length)}],n[2].push({data:Tn(o.meta),type:2})});var s=Tn(n);r.push(Sr(s.length)),r.push(s),i.forEach(function(o){return r.push(o)})}),ca(r)}function vR(t,r){if(t!=0)throw new Error("Unexpected Snappy chunk type ".concat(t));for(var e=[0],n=Hf(r,e),i=[];e[0]>2;if(o<60)++o;else{var h=o-59;o=r[e[0]],h>1&&(o|=r[e[0]+1]<<8),h>2&&(o|=r[e[0]+2]<<16),h>3&&(o|=r[e[0]+3]<<24),o>>>=0,o++,e[0]+=h}i.push(r.slice(e[0],e[0]+o)),e[0]+=o;continue}else{var c=0,a=0;if(s==1?(a=(r[e[0]]>>2&7)+4,c=(r[e[0]++]&224)<<3,c|=r[e[0]++]):(a=(r[e[0]++]>>2)+1,s==2?(c=r[e[0]]|r[e[0]+1]<<8,e[0]+=2):(c=(r[e[0]]|r[e[0]+1]<<8|r[e[0]+2]<<16|r[e[0]+3]<<24)>>>0,e[0]+=4)),i=[ca(i)],c==0)throw new Error("Invalid offset 0");if(c>i[0].length)throw new Error("Invalid offset beyond length");if(a>=c)for(i.push(i[0].slice(-c)),a-=c;a>=i[i.length-1].length;)i.push(i[i.length-1]),a-=i[i.length-1].length;i.push(i[0].slice(-c,-c+a))}}var f=ca(i);if(f.length!=n)throw new Error("Unexpected length: ".concat(f.length," != ").concat(n));return f}function Oi(t){for(var r=[],e=0;e>8&255]))):n<=16777216?(o+=4,r.push(new Uint8Array([248,n-1&255,n-1>>8&255,n-1>>16&255]))):n<=4294967296&&(o+=5,r.push(new Uint8Array([252,n-1&255,n-1>>8&255,n-1>>16&255,n-1>>>24&255]))),r.push(t.slice(e,e+n)),o+=n,i[0]=0,i[1]=o&255,i[2]=o>>8&255,i[3]=o>>16&255,e+=n}return ca(r)}function xR(t,r,e,n){var i=Ha(t),s=i.getUint32(4,!0),o=(n>1?12:8)+J1(s&(n>1?3470:398))*4,h=-1,c=-1,a=NaN,f=new Date(2001,0,1);s&512&&(h=i.getUint32(o,!0),o+=4),o+=J1(s&(n>1?12288:4096))*4,s&16&&(c=i.getUint32(o,!0),o+=4),s&32&&(a=i.getFloat64(o,!0),o+=8),s&64&&(f.setTime(f.getTime()+i.getFloat64(o,!0)*1e3),o+=8);var l;switch(t[2]){case 0:break;case 2:l={t:"n",v:a};break;case 3:l={t:"s",v:r[c]};break;case 5:l={t:"d",v:f};break;case 6:l={t:"b",v:a>0};break;case 7:l={t:"n",v:a/86400};break;case 8:l={t:"e",v:0};break;case 9:if(h>-1)l={t:"s",v:e[h]};else if(c>-1)l={t:"s",v:r[c]};else if(!isNaN(a))l={t:"n",v:a};else throw new Error("Unsupported cell type ".concat(t.slice(0,4)));break;default:throw new Error("Unsupported cell type ".concat(t.slice(0,4)))}return l}function bR(t,r,e){var n=Ha(t),i=n.getUint32(8,!0),s=12,o=-1,h=-1,c=NaN,a=NaN,f=new Date(2001,0,1);i&1&&(c=mR(t,s),s+=16),i&2&&(a=n.getFloat64(s,!0),s+=8),i&4&&(f.setTime(f.getTime()+n.getFloat64(s,!0)*1e3),s+=8),i&8&&(h=n.getUint32(s,!0),s+=4),i&16&&(o=n.getUint32(s,!0),s+=4);var l;switch(t[1]){case 0:break;case 2:l={t:"n",v:c};break;case 3:l={t:"s",v:r[h]};break;case 5:l={t:"d",v:f};break;case 6:l={t:"b",v:a>0};break;case 7:l={t:"n",v:a/86400};break;case 8:l={t:"e",v:0};break;case 9:if(o>-1)l={t:"s",v:e[o]};else throw new Error("Unsupported cell type ".concat(t[1]," : ").concat(i&31," : ").concat(t.slice(0,4)));break;case 10:l={t:"n",v:c};break;default:throw new Error("Unsupported cell type ".concat(t[1]," : ").concat(i&31," : ").concat(t.slice(0,4)))}return l}function Yh(t,r){var e=new Uint8Array(32),n=Ha(e),i=12,s=0;switch(e[0]=5,t.t){case"n":e[1]=2,gR(e,i,t.v),s|=1,i+=16;break;case"b":e[1]=6,n.setFloat64(i,t.v?1:0,!0),s|=2,i+=8;break;case"s":if(r.indexOf(t.v)==-1)throw new Error("Value ".concat(t.v," missing from SST!"));e[1]=3,n.setUint32(i,r.indexOf(t.v),!0),s|=8,i+=4;break;default:throw"unsupported cell type "+t.t}return n.setUint32(8,s,!0),e.slice(0,i)}function Zh(t,r){var e=new Uint8Array(32),n=Ha(e),i=12,s=0;switch(e[0]=3,t.t){case"n":e[2]=2,n.setFloat64(i,t.v,!0),s|=32,i+=8;break;case"b":e[2]=6,n.setFloat64(i,t.v?1:0,!0),s|=32,i+=8;break;case"s":if(r.indexOf(t.v)==-1)throw new Error("Value ".concat(t.v," missing from SST!"));e[2]=3,n.setUint32(i,r.indexOf(t.v),!0),s|=16,i+=4;break;default:throw"unsupported cell type "+t.t}return n.setUint32(4,s,!0),e.slice(0,i)}function wR(t,r,e){switch(t[0]){case 0:case 1:case 2:case 3:return xR(t,r,e,t[0]);case 5:return bR(t,r,e);default:throw new Error("Unsupported payload version ".concat(t[0]))}}function Mn(t){var r=xr(t);return Hf(r[1][0].data)}function Q1(t,r){var e=xr(r.data),n=Xr(e[1][0].data),i=e[3],s=[];return(i||[]).forEach(function(o){var h=xr(o.data),c=Xr(h[1][0].data)>>>0;switch(n){case 1:s[c]=Tu(h[3][0].data);break;case 8:{var a=t[Mn(h[9][0].data)][0],f=xr(a.data),l=t[Mn(f[1][0].data)][0],u=Xr(l.meta[1][0].data);if(u!=2001)throw new Error("2000 unexpected reference to ".concat(u));var p=xr(l.data);s[c]=p[3].map(function(m){return Tu(m.data)}).join("")}break}}),s}function yR(t,r){var e,n,i,s,o,h,c,a,f,l,u,p,m,d,v=xr(t),x=Xr(v[1][0].data)>>>0,g=Xr(v[2][0].data)>>>0,w=((n=(e=v[8])==null?void 0:e[0])==null?void 0:n.data)&&Xr(v[8][0].data)>0||!1,y,_;if((s=(i=v[7])==null?void 0:i[0])!=null&&s.data&&r!=0)y=(h=(o=v[7])==null?void 0:o[0])==null?void 0:h.data,_=(a=(c=v[6])==null?void 0:c[0])==null?void 0:a.data;else if((l=(f=v[4])==null?void 0:f[0])!=null&&l.data&&r!=1)y=(p=(u=v[4])==null?void 0:u[0])==null?void 0:p.data,_=(d=(m=v[3])==null?void 0:m[0])==null?void 0:d.data;else throw"NUMBERS Tile missing ".concat(r," cell storage");for(var k=w?4:1,F=Ha(y),O=[],N=0;N=1&&(z[O[O.length-1][0]]=_.subarray(O[O.length-1][1]*k)),{R:x,cells:z}}function _R(t,r){var e,n=xr(r.data),i=(e=n==null?void 0:n[7])!=null&&e[0]?Xr(n[7][0].data)>>>0>0?1:0:-1,s=m0(n[5],function(o){return yR(o,i)});return{nrows:Xr(n[4][0].data)>>>0,data:s.reduce(function(o,h){return o[h.R]||(o[h.R]=[]),h.cells.forEach(function(c,a){if(o[h.R][a])throw new Error("Duplicate cell r=".concat(h.R," c=").concat(a));o[h.R][a]=c}),o},[])}}function ER(t,r,e){var n,i=xr(r.data),s={s:{r:0,c:0},e:{r:0,c:0}};if(s.e.r=(Xr(i[6][0].data)>>>0)-1,s.e.r<0)throw new Error("Invalid row varint ".concat(i[6][0].data));if(s.e.c=(Xr(i[7][0].data)>>>0)-1,s.e.c<0)throw new Error("Invalid col varint ".concat(i[7][0].data));e["!ref"]=cr(s);var o=xr(i[4][0].data),h=Q1(t,t[Mn(o[4][0].data)][0]),c=(n=o[17])!=null&&n[0]?Q1(t,t[Mn(o[17][0].data)][0]):[],a=xr(o[3][0].data),f=0;a[1].forEach(function(l){var u=xr(l.data),p=t[Mn(u[2][0].data)][0],m=Xr(p.meta[1][0].data);if(m!=6002)throw new Error("6001 unexpected reference to ".concat(m));var d=_R(t,p);d.data.forEach(function(v,x){v.forEach(function(g,w){var y=Vt({r:f+x,c:w}),_=wR(g,h,c);_&&(e[y]=_)})}),f+=d.nrows})}function TR(t,r){var e=xr(r.data),n={"!ref":"A1"},i=t[Mn(e[2][0].data)],s=Xr(i[0].meta[1][0].data);if(s!=6001)throw new Error("6000 unexpected reference to ".concat(s));return ER(t,i[0],n),n}function SR(t,r){var e,n=xr(r.data),i={name:(e=n[1])!=null&&e[0]?Tu(n[1][0].data):"",sheets:[]},s=m0(n[2],Mn);return s.forEach(function(o){t[o].forEach(function(h){var c=Xr(h.meta[1][0].data);c==6e3&&i.sheets.push(TR(t,h))})}),i}function kR(t,r){var e=Mv(),n=xr(r.data),i=m0(n[1],Mn);if(i.forEach(function(s){t[s].forEach(function(o){var h=Xr(o.meta[1][0].data);if(h==2){var c=SR(t,o);c.sheets.forEach(function(a,f){Iv(e,a,f==0?c.name:c.name+"_"+f,!0)})}})}),e.SheetNames.length==0)throw new Error("Empty NUMBERS file");return e}function Jh(t){var r,e,n,i,s={},o=[];if(t.FullPaths.forEach(function(c){if(c.match(/\.iwpv2/))throw new Error("Unsupported password protection")}),t.FileIndex.forEach(function(c){if(c.name.match(/\.iwa$/)){var a;try{a=Oi(c.content)}catch(l){return console.log("?? "+c.content.length+" "+(l.message||l))}var f;try{f=Ii(a)}catch(l){return console.log("## "+(l.message||l))}f.forEach(function(l){s[l.id]=l.messages,o.push(l.id)})}}),!o.length)throw new Error("File has no messages");var h=((i=(n=(e=(r=s==null?void 0:s[1])==null?void 0:r[0])==null?void 0:e.meta)==null?void 0:n[1])==null?void 0:i[0].data)&&Xr(s[1][0].meta[1][0].data)==1&&s[1][0];if(h||o.forEach(function(c){s[c].forEach(function(a){var f=Xr(a.meta[1][0].data)>>>0;if(f==1)if(!h)h=a;else throw new Error("Document has multiple roots")})}),!h)throw new Error("Cannot find Document root");return kR(s,h)}function CR(t,r,e){var n,i,s,o;if(!((n=t[6])!=null&&n[0])||!((i=t[7])!=null&&i[0]))throw"Mutation only works on post-BNC storages!";var h=((o=(s=t[8])==null?void 0:s[0])==null?void 0:o.data)&&Xr(t[8][0].data)>0||!1;if(h)throw"Math only works with normal offsets";for(var c=0,a=Ha(t[7][0].data),f=0,l=[],u=Ha(t[4][0].data),p=0,m=[],d=0;d1&&console.error("The Numbers writer currently writes only the first table");var n=Li(e["!ref"]);n.s.r=n.s.c=0;var i=!1;n.e.c>9&&(i=!0,n.e.c=9),n.e.r>49&&(i=!0,n.e.r=49),i&&console.error("The Numbers writer is currently limited to ".concat(cr(n)));var s=Fv(e,{range:n,header:1}),o=["~Sh33tJ5~"];s.forEach(function(R){return R.forEach(function(C){typeof C=="string"&&o.push(C)})});var h={},c=[],a=It.read(r.numbers,{type:"base64"});a.FileIndex.map(function(R,C){return[R,a.FullPaths[C]]}).forEach(function(R){var C=R[0],S=R[1];if(C.type==2&&C.name.match(/\.iwa/)){var D=C.content,V=Oi(D),te=Ii(V);te.forEach(function(oe){c.push(oe.id),h[oe.id]={deps:[],location:S,type:Xr(oe.messages[0].meta[1][0].data)}})}}),c.sort(function(R,C){return R-C});var f=c.filter(function(R){return R>1}).map(function(R){return[R,Sr(R)]});a.FileIndex.map(function(R,C){return[R,a.FullPaths[C]]}).forEach(function(R){var C=R[0];if(R[1],!!C.name.match(/\.iwa/)){var S=Ii(Oi(C.content));S.forEach(function(D){D.messages.forEach(function(V){f.forEach(function(te){D.messages.some(function(oe){return Xr(oe.meta[1][0].data)!=11006&&pR(oe.data,te[1])})&&h[te[0]].deps.push(D.id)})})})}});for(var l=It.find(a,h[1].location),u=Ii(Oi(l.content)),p,m=0;m-1?"sheet":t==fr.CS?"chart":t==fr.DS?"dialog":t==fr.MS?"macro":t&&t.length?t:"sheet"}function RR(t,r){if(!t)return 0;try{t=r.map(function(n){return n.id||(n.id=n.strRelID),[n.name,t["!id"][n.id].Target,FR(t["!id"][n.id].Type)]})}catch{return null}return!t||t.length===0?null:t}function MR(t,r,e,n,i,s,o,h,c,a,f,l){try{s[n]=Tf(bi(t,e,!0),r);var u=rn(t,r),p;switch(h){case"sheet":p=eF(u,r,i,c,s[n],a,f,l);break;case"chart":if(p=tF(u,r,i,c,s[n],a,f,l),!p||!p["!drawel"])break;var m=wf(p["!drawel"].Target,r),d=Nf(m),v=Hk(bi(t,m,!0),Tf(bi(t,d,!0),m)),x=wf(v,m),g=Nf(x);p=AA(bi(t,x,!0),x,c,Tf(bi(t,g,!0),x),a,p);break;case"macro":p=rF(u,r,i,c,s[n],a,f,l);break;case"dialog":p=nF(u,r,i,c,s[n],a,f,l);break;default:throw new Error("Unrecognized sheet type "+h)}o[n]=p;var w=[];s&&s[n]&&Jr(s[n]).forEach(function(y){var _="";if(s[n][y].Type==fr.CMNT){_=wf(s[n][y].Target,r);var k=oF(rn(t,_,!0),_,c);if(!k||!k.length)return;L1(p,k,!1)}s[n][y].Type==fr.TCMNT&&(_=wf(s[n][y].Target,r),w=w.concat($k(rn(t,_,!0),c)))}),w&&w.length&&L1(p,w,!0,c.people||[])}catch(y){if(c.WTF)throw y}}function Ri(t){return t.charAt(0)=="/"?t.slice(1):t}function IR(t,r){if(jo(),r=r||{},g0(r),Di(t,"META-INF/manifest.xml")||Di(t,"objectdata.xml"))return K1(t,r);if(Di(t,"Index/Document.iwa")){if(typeof Uint8Array>"u")throw new Error("NUMBERS file parsing requires Uint8Array support");if(typeof Jh<"u"){if(t.FileIndex)return Jh(t);var e=It.utils.cfb_new();return s1(t).forEach(function(J){qt(e,J,Wm(t,J))}),Jh(e)}throw new Error("Unsupported NUMBERS file")}if(!Di(t,"[Content_Types].xml"))throw Di(t,"index.xml.gz")?new Error("Unsupported NUMBERS 08 file"):Di(t,"index.xml")?new Error("Unsupported NUMBERS 09 file"):new Error("Unsupported ZIP file");var n=s1(t),i=B5(bi(t,"[Content_Types].xml")),s=!1,o,h;if(i.workbooks.length===0&&(h="xl/workbook.xml",rn(t,h,!0)&&i.workbooks.push(h)),i.workbooks.length===0){if(h="xl/workbook.bin",!rn(t,h,!0))throw new Error("Could not find workbook");i.workbooks.push(h),s=!0}i.workbooks[0].slice(-3)=="bin"&&(s=!0);var c={},a={};if(!r.bookSheets&&!r.bookProps){if(Sf=[],i.sst)try{Sf=aF(rn(t,Ri(i.sst)),i.sst,r)}catch(J){if(r.WTF)throw J}r.cellStyles&&i.themes.length&&(c=sF(bi(t,i.themes[0].replace(/^\//,""),!0)||"",i.themes[0],r)),i.style&&(a=iF(rn(t,Ri(i.style)),i.style,c,r))}i.links.map(function(J){try{var H=Tf(bi(t,Nf(Ri(J))),J);return lF(rn(t,Ri(J)),H,J,r)}catch{}});var f=qA(rn(t,Ri(i.workbooks[0])),i.workbooks[0],r),l={},u="";i.coreprops.length&&(u=rn(t,Ri(i.coreprops[0]),!0),u&&(l=gg(u)),i.extprops.length!==0&&(u=rn(t,Ri(i.extprops[0]),!0),u&&z5(u,l,r)));var p={};(!r.bookSheets||r.bookProps)&&i.custprops.length!==0&&(u=bi(t,Ri(i.custprops[0]),!0),u&&(p=V5(u,r)));var m={};if((r.bookSheets||r.bookProps)&&(f.Sheets?o=f.Sheets.map(function(H){return H.name}):l.Worksheets&&l.SheetNames.length>0&&(o=l.SheetNames),r.bookProps&&(m.Props=l,m.Custprops=p),r.bookSheets&&typeof o<"u"&&(m.SheetNames=o),r.bookSheets?m.SheetNames:r.bookProps))return m;o={};var d={};r.bookDeps&&i.calcchain&&(d=fF(rn(t,Ri(i.calcchain)),i.calcchain));var v=0,x={},g,w;{var y=f.Sheets;l.Worksheets=y.length,l.SheetNames=[];for(var _=0;_!=y.length;++_)l.SheetNames[_]=y[_].name}var k=s?"bin":"xml",F=i.workbooks[0].lastIndexOf("/"),O=(i.workbooks[0].slice(0,F+1)+"_rels/"+i.workbooks[0].slice(F+1)+".rels").replace(/^\//,"");Di(t,O)||(O="xl/_rels/workbook."+k+".rels");var N=Tf(bi(t,O,!0),O.replace(/_rels.*/,"s5s"));(i.metadata||[]).length>=1&&(r.xlmeta=cF(rn(t,Ri(i.metadata[0])),i.metadata[0],r)),(i.people||[]).length>=1&&(r.people=Xk(rn(t,Ri(i.people[0])),r)),N&&(N=RR(N,f.Sheets));var U=rn(t,"xl/worksheets/sheet.xml",!0)?1:0;e:for(v=0;v!=l.Worksheets;++v){var z="sheet";if(N&&N[v]?(g="xl/"+N[v][1].replace(/[\/]?xl\//,""),Di(t,g)||(g=N[v][1]),Di(t,g)||(g=O.replace(/_rels\/.*$/,"")+N[v][1]),z=N[v][2]):(g="xl/worksheets/sheet"+(v+1-U)+"."+k,g=g.replace(/sheet0\./,"sheet.")),w=g.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels"),r&&r.sheets!=null)switch(typeof r.sheets){case"number":if(v!=r.sheets)continue e;break;case"string":if(l.SheetNames[v].toLowerCase()!=r.sheets.toLowerCase())continue e;break;default:if(Array.isArray&&Array.isArray(r.sheets)){for(var W=!1,X=0;X!=r.sheets.length;++X)typeof r.sheets[X]=="number"&&r.sheets[X]==v&&(W=1),typeof r.sheets[X]=="string"&&r.sheets[X].toLowerCase()==l.SheetNames[v].toLowerCase()&&(W=1);if(!W)continue e}}MR(t,g,w,l.SheetNames[v],v,x,o,z,r,f,c,a)}return m={Directory:i,Workbook:f,Props:l,Custprops:p,Deps:d,Sheets:o,SheetNames:l.SheetNames,Strings:Sf,Styles:a,Themes:c,SSF:Br(Ht)},r&&r.bookFiles&&(t.files?(m.keys=n,m.files=t.files):(m.keys=[],m.files={},t.FullPaths.forEach(function(J,H){J=J.replace(/^Root Entry[\/]/,""),m.keys.push(J),m.files[J]=t.FileIndex[H]}))),r&&r.bookVBA&&(i.vba.length>0?m.vbaraw=rn(t,Ri(i.vba[0]),!0):i.defaults&&i.defaults.bin===qk&&(m.vbaraw=rn(t,"xl/vbaProject.bin",!0))),m}function OR(t,r){var e=r||{},n="Workbook",i=It.find(t,n);try{if(n="/!DataSpaces/Version",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);if(cS(i.content),n="/!DataSpaces/DataSpaceMap",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);var s=uS(i.content);if(s.length!==1||s[0].comps.length!==1||s[0].comps[0].t!==0||s[0].name!=="StrongEncryptionDataSpace"||s[0].comps[0].v!=="EncryptedPackage")throw new Error("ECMA-376 Encrypted file bad "+n);if(n="/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);var o=dS(i.content);if(o.length!=1||o[0]!="StrongEncryptionTransform")throw new Error("ECMA-376 Encrypted file bad "+n);if(n="/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);mS(i.content)}catch{}if(n="/EncryptionInfo",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);var h=gS(i.content);if(n="/EncryptedPackage",i=It.find(t,n),!i||!i.content)throw new Error("ECMA-376 Encrypted file missing "+n);if(h[0]==4&&typeof decrypt_agile<"u")return decrypt_agile(h[1],i.content,e.password||"",e);if(h[0]==2&&typeof decrypt_std76<"u")return decrypt_std76(h[1],i.content,e.password||"",e);throw new Error("File is password-protected")}function DR(t,r){return r.bookType=="ods"?Tv(t,r):r.bookType=="numbers"?AR(t,r):r.bookType=="xlsb"?NR(t,r):PR(t,r)}function NR(t,r){Mo=1024,t&&!t.SSF&&(t.SSF=Br(Ht)),t&&t.SSF&&(jo(),Fc(t.SSF),r.revssf=Mc(t.SSF),r.revssf[t.SSF[65535]]=0,r.ssf=t.SSF),r.rels={},r.wbrels={},r.Strings=[],r.Strings.Count=0,r.Strings.Unique=0,kf?r.revStrings=new Map:(r.revStrings={},r.revStrings.foo=[],delete r.revStrings.foo);var e=r.bookType=="xlsb"?"bin":"xml",n=tv.indexOf(r.bookType)>-1,i=r0();v0(r=r||{});var s=zu(),o="",h=0;if(r.cellXfs=[],ua(r.cellXfs,{},{revssf:{General:0}}),t.Props||(t.Props={}),o="docProps/core.xml",qt(s,o,vg(t.Props,r)),i.coreprops.push(o),kr(r.rels,2,o,fr.CORE_PROPS),o="docProps/app.xml",!(t.Props&&t.Props.SheetNames))if(!t.Workbook||!t.Workbook.Sheets)t.Props.SheetNames=t.SheetNames;else{for(var c=[],a=0;a0&&(o="docProps/custom.xml",qt(s,o,yg(t.Custprops)),i.custprops.push(o),kr(r.rels,4,o,fr.CUST_PROPS)),h=1;h<=t.SheetNames.length;++h){var f={"!id":{}},l=t.Sheets[t.SheetNames[h-1]],u=(l||{})["!type"]||"sheet";switch(u){case"chart":default:o="xl/worksheets/sheet"+h+"."+e,qt(s,o,uF(h-1,o,r,t,f)),i.sheets.push(o),kr(r.wbrels,-1,"worksheets/sheet"+h+"."+e,fr.WS[0])}if(l){var p=l["!comments"],m=!1,d="";p&&p.length>0&&(d="xl/comments"+h+"."+e,qt(s,d,mF(p,d)),i.comments.push(d),kr(f,-1,"../comments"+h+"."+e,fr.CMNT),m=!0),l["!legacy"]&&m&&qt(s,"xl/drawings/vmlDrawing"+h+".vml",qg(h,l["!comments"])),delete l["!comments"],delete l["!legacy"]}f["!id"].rId1&&qt(s,Nf(o),Oo(f))}return r.Strings!=null&&r.Strings.length>0&&(o="xl/sharedStrings."+e,qt(s,o,pF(r.Strings,o,r)),i.strs.push(o),kr(r.wbrels,-1,"sharedStrings."+e,fr.SST)),o="xl/workbook."+e,qt(s,o,hF(t,o)),i.workbooks.push(o),kr(r.rels,1,o,fr.WB),o="xl/theme/theme1.xml",qt(s,o,f0(t.Themes,r)),i.themes.push(o),kr(r.wbrels,-1,"theme/theme1.xml",fr.THEME),o="xl/styles."+e,qt(s,o,dF(t,o,r)),i.styles.push(o),kr(r.wbrels,-1,"styles."+e,fr.STY),t.vbaraw&&n&&(o="xl/vbaProject.bin",qt(s,o,t.vbaraw),i.vba.push(o),kr(r.wbrels,-1,"vbaProject.bin",fr.VBA)),o="xl/metadata."+e,qt(s,o,gF(o)),i.metadata.push(o),kr(r.wbrels,-1,"metadata."+e,fr.XLMETA),qt(s,"[Content_Types].xml",pg(i,r)),qt(s,"_rels/.rels",Oo(r.rels)),qt(s,"xl/_rels/workbook."+e+".rels",Oo(r.wbrels)),delete r.revssf,delete r.ssf,s}function PR(t,r){Mo=1024,t&&!t.SSF&&(t.SSF=Br(Ht)),t&&t.SSF&&(jo(),Fc(t.SSF),r.revssf=Mc(t.SSF),r.revssf[t.SSF[65535]]=0,r.ssf=t.SSF),r.rels={},r.wbrels={},r.Strings=[],r.Strings.Count=0,r.Strings.Unique=0,kf?r.revStrings=new Map:(r.revStrings={},r.revStrings.foo=[],delete r.revStrings.foo);var e="xml",n=tv.indexOf(r.bookType)>-1,i=r0();v0(r=r||{});var s=zu(),o="",h=0;if(r.cellXfs=[],ua(r.cellXfs,{},{revssf:{General:0}}),t.Props||(t.Props={}),o="docProps/core.xml",qt(s,o,vg(t.Props,r)),i.coreprops.push(o),kr(r.rels,2,o,fr.CORE_PROPS),o="docProps/app.xml",!(t.Props&&t.Props.SheetNames))if(!t.Workbook||!t.Workbook.Sheets)t.Props.SheetNames=t.SheetNames;else{for(var c=[],a=0;a0&&(o="docProps/custom.xml",qt(s,o,yg(t.Custprops)),i.custprops.push(o),kr(r.rels,4,o,fr.CUST_PROPS));var f=["SheetJ5"];for(r.tcid=0,h=1;h<=t.SheetNames.length;++h){var l={"!id":{}},u=t.Sheets[t.SheetNames[h-1]],p=(u||{})["!type"]||"sheet";switch(p){case"chart":default:o="xl/worksheets/sheet"+h+"."+e,qt(s,o,uv(h-1,r,t,l)),i.sheets.push(o),kr(r.wbrels,-1,"worksheets/sheet"+h+"."+e,fr.WS[0])}if(u){var m=u["!comments"],d=!1,v="";if(m&&m.length>0){var x=!1;m.forEach(function(g){g[1].forEach(function(w){w.T==!0&&(x=!0)})}),x&&(v="xl/threadedComments/threadedComment"+h+"."+e,qt(s,v,zk(m,f,r)),i.threadedcomments.push(v),kr(l,-1,"../threadedComments/threadedComment"+h+"."+e,fr.TCMNT)),v="xl/comments"+h+"."+e,qt(s,v,ev(m)),i.comments.push(v),kr(l,-1,"../comments"+h+"."+e,fr.CMNT),d=!0}u["!legacy"]&&d&&qt(s,"xl/drawings/vmlDrawing"+h+".vml",qg(h,u["!comments"])),delete u["!comments"],delete u["!legacy"]}l["!id"].rId1&&qt(s,Nf(o),Oo(l))}return r.Strings!=null&&r.Strings.length>0&&(o="xl/sharedStrings."+e,qt(s,o,Hg(r.Strings,r)),i.strs.push(o),kr(r.wbrels,-1,"sharedStrings."+e,fr.SST)),o="xl/workbook."+e,qt(s,o,vv(t)),i.workbooks.push(o),kr(r.rels,1,o,fr.WB),o="xl/theme/theme1.xml",qt(s,o,f0(t.Themes,r)),i.themes.push(o),kr(r.wbrels,-1,"theme/theme1.xml",fr.THEME),o="xl/styles."+e,qt(s,o,Yg(t,r)),i.styles.push(o),kr(r.wbrels,-1,"styles."+e,fr.STY),t.vbaraw&&n&&(o="xl/vbaProject.bin",qt(s,o,t.vbaraw),i.vba.push(o),kr(r.wbrels,-1,"vbaProject.bin",fr.VBA)),o="xl/metadata."+e,qt(s,o,Qg()),i.metadata.push(o),kr(r.wbrels,-1,"metadata."+e,fr.XLMETA),f.length>1&&(o="xl/persons/person.xml",qt(s,o,Vk(f)),i.people.push(o),kr(r.wbrels,-1,"persons/person.xml",fr.PEOPLE)),qt(s,"[Content_Types].xml",pg(i,r)),qt(s,"_rels/.rels",Oo(r.rels)),qt(s,"xl/_rels/workbook."+e+".rels",Oo(r.wbrels)),delete r.revssf,delete r.ssf,s}function x0(t,r){var e="";switch((r||{}).type||"base64"){case"buffer":return[t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]];case"base64":e=wi(t.slice(0,12));break;case"binary":e=t;break;case"array":return[t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]];default:throw new Error("Unrecognized type "+(r&&r.type||"undefined"))}return[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3),e.charCodeAt(4),e.charCodeAt(5),e.charCodeAt(6),e.charCodeAt(7)]}function BR(t,r){return It.find(t,"EncryptedPackage")?OR(t,r):yv(t,r)}function LR(t,r){var e,n=t,i=r||{};return i.type||(i.type=nr&&Buffer.isBuffer(t)?"buffer":"base64"),e=$m(n,i),IR(e,i)}function kv(t,r){var e=0;e:for(;e=2&&i[3]===0||i[2]===0&&(i[3]===8||i[3]===9)))return Oa.to_workbook(n,e);break;case 3:case 131:case 139:case 140:return yu.to_workbook(n,e);case 123:if(i[1]===92&&i[2]===114&&i[3]===116)return Vg.to_workbook(n,e);break;case 10:case 13:case 32:return UR(n,e);case 137:if(i[1]===80&&i[2]===78&&i[3]===71)throw new Error("PNG Image File is not a spreadsheet");break}return VT.indexOf(i[0])>-1&&i[2]<=12&&i[3]<=31?yu.to_workbook(n,e):Qh(t,n,e,s)}function Cv(t,r){switch(r.type){case"base64":case"binary":break;case"buffer":case"array":r.type="";break;case"file":return Xf(r.file,It.write(t,{type:nr?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+r.bookType+"' files");default:throw new Error("Unrecognized type "+r.type)}return It.write(t,r)}function WR(t,r){var e=Br(r||{}),n=DR(t,e);return $R(n,e)}function $R(t,r){var e={},n=nr?"nodebuffer":typeof Uint8Array<"u"?"array":"string";if(r.compression&&(e.compression="DEFLATE"),r.password)e.type=n;else switch(r.type){case"base64":e.type="base64";break;case"binary":e.type="string";break;case"string":throw new Error("'string' output type invalid for '"+r.bookType+"' files");case"buffer":case"file":e.type=n;break;default:throw new Error("Unrecognized type "+r.type)}var i=t.FullPaths?It.write(t,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[e.type]||e.type,compression:!!r.compression}):t.generate(e);if(typeof Deno<"u"&&typeof i=="string"){if(r.type=="binary"||r.type=="base64")return i;i=new Uint8Array(Ac(i))}return r.password&&typeof encrypt_agile<"u"?Cv(encrypt_agile(i,r.password),r):r.type==="file"?Xf(r.file,i):r.type=="string"?Fr(i):i}function zR(t,r){var e=r||{},n=WF(t,e);return Cv(n,e)}function hs(t,r,e){e||(e="");var n=e+t;switch(r.type){case"base64":return Ff(ds(n));case"binary":return ds(n);case"string":return t;case"file":return Xf(r.file,n,"utf8");case"buffer":return nr?Us(n,"utf8"):typeof TextEncoder<"u"?new TextEncoder().encode(n):hs(n,{type:"binary"}).split("").map(function(i){return i.charCodeAt(0)})}throw new Error("Unrecognized type "+r.type)}function XR(t,r){switch(r.type){case"base64":return Ff(t);case"binary":return t;case"string":return t;case"file":return Xf(r.file,t,"binary");case"buffer":return nr?Us(t,"binary"):t.split("").map(function(e){return e.charCodeAt(0)})}throw new Error("Unrecognized type "+r.type)}function ec(t,r){switch(r.type){case"string":case"base64":case"binary":for(var e="",n=0;n0&&(i=0);var l=wn(c.s.r),u=[],p=[],m=0,d=0,v=Array.isArray(t),x=c.s.r,g=0,w={};v&&!t[x]&&(t[x]=[]);var y=a.skipHidden&&t["!cols"]||[],_=a.skipHidden&&t["!rows"]||[];for(g=c.s.c;g<=c.e.c;++g)if(!(y[g]||{}).hidden)switch(u[g]=an(g),e=v?t[x][g]:t[u[g]+l],n){case 1:s[g]=g-c.s.c;break;case 2:s[g]=u[g];break;case 3:s[g]=a.header[g-c.s.c];break;default:if(e==null&&(e={w:"__EMPTY",t:"s"}),h=o=oa(e,null,a),d=w[o]||0,!d)w[o]=1;else{do h=o+"_"+d++;while(w[h]);w[o]=d,w[h]=1}s[g]=h}for(x=c.s.r+i;x<=c.e.r;++x)if(!(_[x]||{}).hidden){var k=VR(t,c,x,u,n,s,v,a);(k.isempty===!1||(n===1?a.blankrows!==!1:a.blankrows))&&(p[m++]=k.row)}return p.length=m,p}var q1=/"/g;function GR(t,r,e,n,i,s,o,h){for(var c=!0,a=[],f="",l=wn(e),u=r.s.c;u<=r.e.c;++u)if(n[u]){var p=h.dense?(t[e]||[])[u]:t[n[u]+l];if(p==null)f="";else if(p.v!=null){c=!1,f=""+(h.rawNumbers&&p.t=="n"?p.v:oa(p,null,h));for(var m=0,d=0;m!==f.length;++m)if((d=f.charCodeAt(m))===i||d===s||d===34||h.forceQuotes){f='"'+f.replace(q1,'""')+'"';break}f=="ID"&&(f='"ID"')}else p.f!=null&&!p.F?(c=!1,f="="+p.f,f.indexOf(",")>=0&&(f='"'+f.replace(q1,'""')+'"')):f="";a.push(f)}return h.blankrows===!1&&c?null:a.join(o)}function Rv(t,r){var e=[],n=r??{};if(t==null||t["!ref"]==null)return"";var i=Er(t["!ref"]),s=n.FS!==void 0?n.FS:",",o=s.charCodeAt(0),h=n.RS!==void 0?n.RS:` +`,c=h.charCodeAt(0),a=new RegExp((s=="|"?"\\|":s)+"+$"),f="",l=[];n.dense=Array.isArray(t);for(var u=n.skipHidden&&t["!cols"]||[],p=n.skipHidden&&t["!rows"]||[],m=i.s.c;m<=i.e.c;++m)(u[m]||{}).hidden||(l[m]=an(m));for(var d=0,v=i.s.r;v<=i.e.r;++v)(p[v]||{}).hidden||(f=GR(t,i,v,l,o,c,s,n),f!=null&&(n.strip&&(f=f.replace(a,"")),(f||n.blankrows!==!1)&&e.push((d++?h:"")+f)));return delete n.dense,e.join("")}function KR(t,r){r||(r={}),r.FS=" ",r.RS=` +`;var e=Rv(t,r);return e}function Mv(){return{SheetNames:[],Sheets:{}}}function Iv(t,r,e,n){var i=1;if(!e)for(;i<=65535&&t.SheetNames.indexOf(e="Sheet"+i)!=-1;++i,e=void 0);if(!e||t.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&t.SheetNames.indexOf(e)>=0){var s=e.match(/(^.*?)(\d+)$/);i=s&&+s[2]||0;var o=s&&s[1]||e;for(++i;i<=65535&&t.SheetNames.indexOf(e=o+i)!=-1;++i);}if(gv(e),t.SheetNames.indexOf(e)>=0)throw new Error("Worksheet with name |"+e+"| already exists!");return t.SheetNames.push(e),t.Sheets[e]=r,e}const qh=["#FFFFFF","#000000","#BFBFBF","#323232","#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5","#71AD47"],eu=["#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#800000","#008000","#000080","#808000","#800080","#008080","#C0C0C0","#808080","#9999FF","#993366","#FFFFCC","#CCFFFF","#660066","#FF8080","#0066CC","#CCCCFF","#000080","#FF00FF","#FFFF00","#00FFFF","#800080","#800000","#008080","#0000FF","#00CCFF","#CCFFFF","#CCFFCC","#FFFF99","#99CCFF","#FF99CC","#CC99FF","#FFCC99","#3366FF","#33CCCC","#99CC00","#FFCC00","#FF9900","#FF6600","#666699","#969696","#003366","#339966","#003300","#333300","#993300","#993366","#333399","#333333","#000000"];let YR=80,ZR=24;function dM(t,r={}){return JR(r4(t),r)}function JR(t,r){return new Promise(function(e,n){const i=new XMLHttpRequest;i.open(r.method||"GET",t,!0),i.responseType=r.responseType||"arraybuffer",i.onload=function(){i.status===200?e(i.response):n(i.status)},i.onerror=function(){n(i.status)},i.withCredentials=r.withCredentials||!1,r.headers&&Object.keys(r.headers).forEach(function(s){i.setRequestHeader(s,r.headers[s])}),i.send(r.body)})}function pM(t,r){try{if(r){const n=Su(t,{type:"array"});t=Av(n,{bookType:"xlsx",type:"array"})}return new M6.Workbook().xlsx.load(t)}catch(e){return console.warn(e),Promise.reject(e)}}function QR(t,r,e){for(let n=0;n<(t.columns||[]).length;n++)r.cols[n.toString()]={},t.columns[n].width?r.cols[n.toString()].width=t.columns[n].width*6+(e.widthOffset||0):r.cols[n.toString()].width=YR+(e.widthOffset||0);r.cols.len=Math.max(Object.keys(r.cols).length,e.minColLength||0)}function qR(t){let{numFmt:r,value:e,type:n}=t;switch(n){case 2:try{if(t.style.numFmt){if(t.style.numFmt.endsWith("%")){let i=t.style.numFmt.match(/\.(\d+)%/);return i?(e*100).toFixed(i[1].length)+"%":e*100+"%"}else if(/0(\.0+)?/.test(t.style.numFmt)){let i="";if(t.style.numFmt.startsWith("$")?i="$":t.style.numFmt.startsWith('"¥')&&(i="¥"),e===0&&t.style.numFmt.startsWith("_"))return"-";let s=t.style.numFmt.match(/0\.(0+)(_|;|$)/);s?s=s[1].length:s=0;let o=e.toFixed(s)+"";if(t.style.numFmt.includes("#,##")){o=o.split(".");let h=o[0].split("").reverse(),c=[];for(let a=0;a9?"#C7C9CC":typeof r>"u"?qh[t]:r>0?n8(qh[t],r):r8(qh[t],Math.abs(r))}function eM(t){t.style=Pu.cloneDeep(t.style);let r=null;t.style.fill&&t.style.fill.fgColor&&(t.style.fill.fgColor.argb?r=tu(t.style.fill.fgColor.argb):t.style.fill.fgColor.hasOwnProperty("theme")?r=ru(t.style.fill.fgColor.theme,t.style.fill.fgColor.tint):t.style.fill.fgColor.indexed?r=eu[t.style.fill.fgColor.indexed]||"#C7C9CC":r="#C7C9CC"),r&&(t.style.bgcolor=r);let e=null;if(t.style.font&&t.style.font.color&&(t.style.font.color.argb?e=tu(t.style.font.color.argb):t.style.font.color.hasOwnProperty("theme")?e=ru(t.style.font.color.theme,t.style.font.color.tint):t.style.font.color.indexed?e=eu[t.style.font.color.indexed]||"#000000":e="#000000"),e&&(t.style.color=e),t.style.alignment&&(t.style.alignment.horizontal&&(t.style.align=t.style.alignment.horizontal),t.style.alignment.vertical&&(t.style.valign=t.style.alignment.vertical)),t.style.alignment&&t.style.alignment.wrapText&&(t.style.textwrap=!0),t.style.border){let n={};Object.keys(t.style.border).forEach(i=>{let s=t.style.border[i],o="#000000";typeof s.color=="string"?o=s.color:s.color&&(s.color.argb?o=tu(s.color.argb):s.color.hasOwnProperty("theme")?o=ru(s.color.theme,s.color.tint):s.color.indexed&&(o=eu[s.color.indexed])),n[i]=[s.style||"thin",o]}),t.style.border2={...t.style.border},t.style.border=n}return t.style.font&&t.style.font.size&&typeof t.style.font.size=="number"&&(t.style.font.size=Math.round(t.style.font.size/1.333333)),t.style}function mM(t,r){let e=[],n=[];return t.eachSheet(i=>{n.push(i);let s={name:i.name,styles:[],rows:{},cols:{},merges:[],media:[]},o=[];for(let c in i._merges){s.merges.push(i._merges[c].shortRange);let a={};a.startAddress=i._merges[c].tl,a.endAddress=i._merges[c].br,a.YRange=i._merges[c].model.bottom-i._merges[c].model.top,a.XRange=i._merges[c].model.right-i._merges[c].model.left,o.push(a)}QR(i,s,r),(i._rows||[]).forEach((c,a)=>{s.rows[a]={cells:{}},c.height?s.rows[a].height=c.height+(r.heightOffset||0):s.rows[a].height=ZR+(r.heightOffset||0),(c._cells||[]).forEach((f,l)=>{s.rows[a].cells[l]={};let u=Pu.find(o,function(p){return p.startAddress==f._address});u&&f.master.address!=u.startAddress||(u&&(s.rows[a].cells[l].merge=[u.YRange,u.XRange]),s.rows[a].cells[l].text=qR(f),s.styles.push(eM(f)),s.rows[a].cells[l].style=s.styles.length-1)})}),s._media&&(s.media=s._media);let h=Object.keys(s.rows);s.rows.len=Math.max(+h[h.length-1]+1,r.hasOwnProperty("minRowLength")?r.minRowLength:100),e.push(s)}),t._worksheets=n,{workbookData:e,workbookSource:t,medias:t.media||[]}}let nc=[];function gM(t,r,e,n,i={}){e&&e._media.length&&e._media.forEach(s=>{let{imageId:o,range:h,type:c}=s;if(c==="image"){let a=tM(e,h,n,i);rM(t,o,r[o],a)}})}let ic=60,sc=25,nu=80,iu=24,us=window.devicePixelRatio;function tM(t,r,e,n){var F,O,N,U,z,W,X,J,H,I,M,E,A,B;let{widthOffset:i,heightOffset:s}=n,{tl:o,br:h,ext:c}=r,{nativeCol:a=0,nativeColOff:f=0,nativeRow:l=0,nativeRowOff:u=0}=o||{},p=ic,m=sc;for(let L=0;L{let s=0,o=0,h=i.width,c=i.height,a=n.x,f=n.y,l=n.width,u=n.height,p=l/h,m=u/c;if(a{console.error(i)})}function nM(t,r){return new Promise((e,n)=>{if(nc[t])return e(nc[t]);const{buffer:i}=r.buffer;let s=new Blob([i],{type:"image/"+r.extension}),o=URL.createObjectURL(s),h=new Image;h.src=o,h.onload=function(){e(h),nc[t]=h},h.onerror=function(c){n(c)}})}function xM(t){if(t){let r=t.querySelectorAll("input");for(let e of r)e&&!e.readOnly&&(e.readOnly=!0);document.activeElement&&document.activeElement.blur()}}export{F6 as S,gM as a,pM as b,vM as c,dM as g,Pu as l,xM as r,mM as t}; diff --git a/examples/dist/assets/index-bf0149c5.js b/examples/dist/assets/index-bf0149c5.js new file mode 100644 index 0000000..8b7725a --- /dev/null +++ b/examples/dist/assets/index-bf0149c5.js @@ -0,0 +1,121 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();function Ip(t,e){const n=Object.create(null),r=t.split(",");for(let a=0;a!!n[a.toLowerCase()]:a=>!!n[a]}function _p(t){if(bt(t)){const e={};for(let n=0;n{if(n){const r=n.split(a5);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function Np(t){let e="";if(pn(t))e=t;else if(bt(t))for(let n=0;n{},s5=()=>!1,c5=/^on[^a-z]/,Xc=t=>c5.test(t),$p=t=>t.startsWith("onUpdate:"),hn=Object.assign,Ap=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},d5=Object.prototype.hasOwnProperty,Tt=(t,e)=>d5.call(t,e),bt=Array.isArray,Sl=t=>Qc(t)==="[object Map]",f5=t=>Qc(t)==="[object Set]",St=t=>typeof t=="function",pn=t=>typeof t=="string",Rp=t=>typeof t=="symbol",Zt=t=>t!==null&&typeof t=="object",Zw=t=>Zt(t)&&St(t.then)&&St(t.catch),v5=Object.prototype.toString,Qc=t=>v5.call(t),h5=t=>Qc(t).slice(8,-1),p5=t=>Qc(t)==="[object Object]",Dp=t=>pn(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,Ss=Ip(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zc=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},g5=/-(\w)/g,Ln=Zc(t=>t.replace(g5,(e,n)=>n?n.toUpperCase():"")),m5=/\B([A-Z])/g,Li=Zc(t=>t.replace(m5,"-$1").toLowerCase()),Jc=Zc(t=>t.charAt(0).toUpperCase()+t.slice(1)),yf=Zc(t=>t?`on${Jc(t)}`:""),Wl=(t,e)=>!Object.is(t,e),bf=(t,e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})},Fp=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let K0;const y5=()=>K0||(K0=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Yn;class b5{constructor(e=!1){this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Yn,!e&&Yn&&(this.index=(Yn.scopes||(Yn.scopes=[])).push(this)-1)}run(e){if(this.active){const n=Yn;try{return Yn=this,e()}finally{Yn=n}}}on(){Yn=this}off(){Yn=this.parent}stop(e){if(this.active){let n,r;for(n=0,r=this.effects.length;n{const e=new Set(t);return e.w=0,e.n=0,e},Jw=t=>(t.w&za)>0,eS=t=>(t.n&za)>0,S5=({deps:t})=>{if(t.length)for(let e=0;e{const{deps:e}=t;if(e.length){let n=0;for(let r=0;r{(d==="length"||d>=u)&&l.push(s)})}else switch(n!==void 0&&l.push(i.get(n)),e){case"add":bt(t)?Dp(n)&&l.push(i.get("length")):(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"delete":bt(t)||(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"set":Sl(t)&&l.push(i.get(Po));break}if(l.length===1)l[0]&&Wv(l[0]);else{const u=[];for(const s of l)s&&u.push(...s);Wv(Lp(u))}}function Wv(t,e){const n=bt(t)?t:[...t];for(const r of n)r.computed&&z0(r);for(const r of n)r.computed||z0(r)}function z0(t,e){(t!==gr||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const k5=Ip("__proto__,__v_isRef,__isVue"),rS=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Rp)),O5=jp(),T5=jp(!1,!0),E5=jp(!0),W0=M5();function M5(){const t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...n){const r=rt(this);for(let o=0,i=this.length;o{t[e]=function(...n){Bi();const r=rt(this)[e].apply(this,n);return ji(),r}}),t}function jp(t=!1,e=!1){return function(r,a,o){if(a==="__v_isReactive")return!t;if(a==="__v_isReadonly")return t;if(a==="__v_isShallow")return e;if(a==="__v_raw"&&o===(t?e?W5:uS:e?lS:iS).get(r))return r;const i=bt(r);if(!t&&i&&Tt(W0,a))return Reflect.get(W0,a,o);const l=Reflect.get(r,a,o);return(Rp(a)?rS.has(a):k5(a))||(t||Xn(r,"get",a),e)?l:fn(l)?i&&Dp(a)?l:l.value:Zt(l)?t?cS(l):xt(l):l}}const I5=aS(),_5=aS(!0);function aS(t=!1){return function(n,r,a,o){let i=n[r];if(Si(i)&&fn(i)&&!fn(a))return!1;if(!t&&(!ic(a)&&!Si(a)&&(i=rt(i),a=rt(a)),!bt(n)&&fn(i)&&!fn(a)))return i.value=a,!0;const l=bt(n)&&Dp(r)?Number(r)t,ed=t=>Reflect.getPrototypeOf(t);function Lu(t,e,n=!1,r=!1){t=t.__v_raw;const a=rt(t),o=rt(e);n||(e!==o&&Xn(a,"get",e),Xn(a,"get",o));const{has:i}=ed(a),l=r?Vp:n?zp:Ul;if(i.call(a,e))return l(t.get(e));if(i.call(a,o))return l(t.get(o));t!==a&&t.get(e)}function Bu(t,e=!1){const n=this.__v_raw,r=rt(n),a=rt(t);return e||(t!==a&&Xn(r,"has",t),Xn(r,"has",a)),t===a?n.has(t):n.has(t)||n.has(a)}function ju(t,e=!1){return t=t.__v_raw,!e&&Xn(rt(t),"iterate",Po),Reflect.get(t,"size",t)}function U0(t){t=rt(t);const e=rt(this);return ed(e).has.call(e,t)||(e.add(t),va(e,"add",t,t)),this}function Y0(t,e){e=rt(e);const n=rt(this),{has:r,get:a}=ed(n);let o=r.call(n,t);o||(t=rt(t),o=r.call(n,t));const i=a.call(n,t);return n.set(t,e),o?Wl(e,i)&&va(n,"set",t,e):va(n,"add",t,e),this}function G0(t){const e=rt(this),{has:n,get:r}=ed(e);let a=n.call(e,t);a||(t=rt(t),a=n.call(e,t)),r&&r.call(e,t);const o=e.delete(t);return a&&va(e,"delete",t,void 0),o}function q0(){const t=rt(this),e=t.size!==0,n=t.clear();return e&&va(t,"clear",void 0,void 0),n}function Vu(t,e){return function(r,a){const o=this,i=o.__v_raw,l=rt(i),u=e?Vp:t?zp:Ul;return!t&&Xn(l,"iterate",Po),i.forEach((s,d)=>r.call(a,u(s),u(d),o))}}function Ku(t,e,n){return function(...r){const a=this.__v_raw,o=rt(a),i=Sl(o),l=t==="entries"||t===Symbol.iterator&&i,u=t==="keys"&&i,s=a[t](...r),d=n?Vp:e?zp:Ul;return!e&&Xn(o,"iterate",u?zv:Po),{next(){const{value:c,done:f}=s.next();return f?{value:c,done:f}:{value:l?[d(c[0]),d(c[1])]:d(c),done:f}},[Symbol.iterator](){return this}}}}function wa(t){return function(...e){return t==="delete"?!1:this}}function F5(){const t={get(o){return Lu(this,o)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!1)},e={get(o){return Lu(this,o,!1,!0)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!0)},n={get(o){return Lu(this,o,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!1)},r={get(o){return Lu(this,o,!0,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{t[o]=Ku(o,!1,!1),n[o]=Ku(o,!0,!1),e[o]=Ku(o,!1,!0),r[o]=Ku(o,!0,!0)}),[t,n,e,r]}const[L5,B5,j5,V5]=F5();function Kp(t,e){const n=e?t?V5:j5:t?B5:L5;return(r,a,o)=>a==="__v_isReactive"?!t:a==="__v_isReadonly"?t:a==="__v_raw"?r:Reflect.get(Tt(n,a)&&a in r?n:r,a,o)}const K5={get:Kp(!1,!1)},H5={get:Kp(!1,!0)},z5={get:Kp(!0,!1)},iS=new WeakMap,lS=new WeakMap,uS=new WeakMap,W5=new WeakMap;function U5(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Y5(t){return t.__v_skip||!Object.isExtensible(t)?0:U5(h5(t))}function xt(t){return Si(t)?t:Hp(t,!1,oS,K5,iS)}function sS(t){return Hp(t,!1,D5,H5,lS)}function cS(t){return Hp(t,!0,R5,z5,uS)}function Hp(t,e,n,r,a){if(!Zt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const o=a.get(t);if(o)return o;const i=Y5(t);if(i===0)return t;const l=new Proxy(t,i===2?r:n);return a.set(t,l),l}function di(t){return Si(t)?di(t.__v_raw):!!(t&&t.__v_isReactive)}function Si(t){return!!(t&&t.__v_isReadonly)}function ic(t){return!!(t&&t.__v_isShallow)}function dS(t){return di(t)||Si(t)}function rt(t){const e=t&&t.__v_raw;return e?rt(e):t}function fS(t){return oc(t,"__v_skip",!0),t}const Ul=t=>Zt(t)?xt(t):t,zp=t=>Zt(t)?cS(t):t;function vS(t){Ba&&gr&&(t=rt(t),nS(t.dep||(t.dep=Lp())))}function hS(t,e){t=rt(t),t.dep&&Wv(t.dep)}function fn(t){return!!(t&&t.__v_isRef===!0)}function Q(t){return pS(t,!1)}function dt(t){return pS(t,!0)}function pS(t,e){return fn(t)?t:new G5(t,e)}class G5{constructor(e,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:rt(e),this._value=n?e:Ul(e)}get value(){return vS(this),this._value}set value(e){const n=this.__v_isShallow||ic(e)||Si(e);e=n?e:rt(e),Wl(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Ul(e),hS(this))}}function tn(t){return fn(t)?t.value:t}const q5={get:(t,e,n)=>tn(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const a=t[e];return fn(a)&&!fn(n)?(a.value=n,!0):Reflect.set(t,e,n,r)}};function gS(t){return di(t)?t:new Proxy(t,q5)}function ko(t){const e=bt(t)?new Array(t.length):{};for(const n in t)e[n]=Ke(t,n);return e}class X5{constructor(e,n,r){this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}}function Ke(t,e,n){const r=t[e];return fn(r)?r:new X5(t,e,n)}var mS;class Q5{constructor(e,n,r,a){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[mS]=!1,this._dirty=!0,this.effect=new Bp(e,()=>{this._dirty||(this._dirty=!0,hS(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=r}get value(){const e=rt(this);return vS(e),(e._dirty||!e._cacheable)&&(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}mS="__v_isReadonly";function Z5(t,e,n=!1){let r,a;const o=St(t);return o?(r=t,a=br):(r=t.get,a=t.set),new Q5(r,a,o||!a,n)}function ja(t,e,n,r){let a;try{a=r?t(...r):t()}catch(o){td(o,e,n)}return a}function lr(t,e,n,r){if(St(t)){const o=ja(t,e,n,r);return o&&Zw(o)&&o.catch(i=>{td(i,e,n)}),o}const a=[];for(let o=0;o>>1;Gl(xn[r])Br&&xn.splice(e,1)}function nT(t){bt(t)?fi.push(...t):(!aa||!aa.includes(t,t.allowRecurse?vo+1:vo))&&fi.push(t),bS()}function X0(t,e=Yl?Br+1:0){for(;eGl(n)-Gl(r)),vo=0;vot.id==null?1/0:t.id,rT=(t,e)=>{const n=Gl(t)-Gl(e);if(n===0){if(t.pre&&!e.pre)return-1;if(e.pre&&!t.pre)return 1}return n};function xS(t){Uv=!1,Yl=!0,xn.sort(rT);const e=br;try{for(Br=0;Brpn(v)?v.trim():v)),c&&(a=n.map(Fp))}let l,u=r[l=yf(e)]||r[l=yf(Ln(e))];!u&&o&&(u=r[l=yf(Li(e))]),u&&lr(u,t,6,a);const s=r[l+"Once"];if(s){if(!t.emitted)t.emitted={};else if(t.emitted[l])return;t.emitted[l]=!0,lr(s,t,6,a)}}function wS(t,e,n=!1){const r=e.emitsCache,a=r.get(t);if(a!==void 0)return a;const o=t.emits;let i={},l=!1;if(!St(t)){const u=s=>{const d=wS(s,e,!0);d&&(l=!0,hn(i,d))};!n&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}return!o&&!l?(Zt(t)&&r.set(t,null),null):(bt(o)?o.forEach(u=>i[u]=null):hn(i,o),Zt(t)&&r.set(t,i),i)}function nd(t,e){return!t||!Xc(e)?!1:(e=e.slice(2).replace(/Once$/,""),Tt(t,e[0].toLowerCase()+e.slice(1))||Tt(t,Li(e))||Tt(t,e))}let mn=null,rd=null;function lc(t){const e=mn;return mn=t,rd=t&&t.type.__scopeId||null,e}function Kre(t){rd=t}function Hre(){rd=null}function pl(t,e=mn,n){if(!e||t._n)return t;const r=(...a)=>{r._d&&l1(-1);const o=lc(e);let i;try{i=t(...a)}finally{lc(o),r._d&&l1(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Cf(t){const{type:e,vnode:n,proxy:r,withProxy:a,props:o,propsOptions:[i],slots:l,attrs:u,emit:s,render:d,renderCache:c,data:f,setupState:v,ctx:g,inheritAttrs:p}=t;let m,b;const C=lc(t);try{if(n.shapeFlag&4){const w=a||r;m=Lr(d.call(w,w,c,o,v,f,g)),b=u}else{const w=e;m=Lr(w.length>1?w(o,{attrs:u,slots:l,emit:s}):w(o,null)),b=e.props?u:oT(u)}}catch(w){Tl.length=0,td(w,t,1),m=h(qn)}let x=m;if(b&&p!==!1){const w=Object.keys(b),{shapeFlag:P}=x;w.length&&P&7&&(i&&w.some($p)&&(b=iT(b,i)),x=Cn(x,b))}return n.dirs&&(x=Cn(x),x.dirs=x.dirs?x.dirs.concat(n.dirs):n.dirs),n.transition&&(x.transition=n.transition),m=x,lc(C),m}const oT=t=>{let e;for(const n in t)(n==="class"||n==="style"||Xc(n))&&((e||(e={}))[n]=t[n]);return e},iT=(t,e)=>{const n={};for(const r in t)(!$p(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function lT(t,e,n){const{props:r,children:a,component:o}=t,{props:i,children:l,patchFlag:u}=e,s=o.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return r?Q0(r,i,s):!!i;if(u&8){const d=e.dynamicProps;for(let c=0;ct.__isSuspense;function cT(t,e){e&&e.pendingBranch?bt(t)?e.effects.push(...t):e.effects.push(t):nT(t)}function at(t,e){if(dn){let n=dn.provides;const r=dn.parent&&dn.parent.provides;r===n&&(n=dn.provides=Object.create(r)),n[t]=e}}function Ze(t,e,n=!1){const r=dn||mn;if(r){const a=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(a&&t in a)return a[t];if(arguments.length>1)return n&&St(e)?e.call(r.proxy):e}}function Je(t,e){return Yp(t,null,e)}const Hu={};function Se(t,e,n){return Yp(t,e,n)}function Yp(t,e,{immediate:n,deep:r,flush:a,onTrack:o,onTrigger:i}=Ht){const l=dn;let u,s=!1,d=!1;if(fn(t)?(u=()=>t.value,s=ic(t)):di(t)?(u=()=>t,r=!0):bt(t)?(d=!0,s=t.some(x=>di(x)||ic(x)),u=()=>t.map(x=>{if(fn(x))return x.value;if(di(x))return xo(x);if(St(x))return ja(x,l,2)})):St(t)?e?u=()=>ja(t,l,2):u=()=>{if(!(l&&l.isUnmounted))return c&&c(),lr(t,l,3,[f])}:u=br,e&&r){const x=u;u=()=>xo(x())}let c,f=x=>{c=b.onStop=()=>{ja(x,l,4)}},v;if(Zl)if(f=br,e?n&&lr(e,l,3,[u(),d?[]:void 0,f]):u(),a==="sync"){const x=n7();v=x.__watcherHandles||(x.__watcherHandles=[])}else return br;let g=d?new Array(t.length).fill(Hu):Hu;const p=()=>{if(b.active)if(e){const x=b.run();(r||s||(d?x.some((w,P)=>Wl(w,g[P])):Wl(x,g)))&&(c&&c(),lr(e,l,3,[x,g===Hu?void 0:d&&g[0]===Hu?[]:g,f]),g=x)}else b.run()};p.allowRecurse=!!e;let m;a==="sync"?m=p:a==="post"?m=()=>Rn(p,l&&l.suspense):(p.pre=!0,l&&(p.id=l.uid),m=()=>Up(p));const b=new Bp(u,m);e?n?p():g=b.run():a==="post"?Rn(b.run.bind(b),l&&l.suspense):b.run();const C=()=>{b.stop(),l&&l.scope&&Ap(l.scope.effects,b)};return v&&v.push(C),C}function dT(t,e,n){const r=this.proxy,a=pn(t)?t.includes(".")?SS(r,t):()=>r[t]:t.bind(r,r);let o;St(e)?o=e:(o=e.handler,n=e);const i=dn;Pi(this);const l=Yp(a,o.bind(r),n);return i?Pi(i):Oo(),l}function SS(t,e){const n=e.split(".");return()=>{let r=t;for(let a=0;a{xo(n,e)});else if(p5(t))for(const n in t)xo(t[n],e);return t}function PS(){const t={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ge(()=>{t.isMounted=!0}),ut(()=>{t.isUnmounting=!0}),t}const tr=[Function,Array],fT={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tr,onEnter:tr,onAfterEnter:tr,onEnterCancelled:tr,onBeforeLeave:tr,onLeave:tr,onAfterLeave:tr,onLeaveCancelled:tr,onBeforeAppear:tr,onAppear:tr,onAfterAppear:tr,onAppearCancelled:tr},setup(t,{slots:e}){const n=sn(),r=PS();let a;return()=>{const o=e.default&&Gp(e.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const p of o)if(p.type!==qn){i=p;break}}const l=rt(t),{mode:u}=l;if(r.isLeaving)return xf(i);const s=Z0(i);if(!s)return xf(i);const d=ql(s,l,r,n);Xl(s,d);const c=n.subTree,f=c&&Z0(c);let v=!1;const{getTransitionKey:g}=s.type;if(g){const p=g();a===void 0?a=p:p!==a&&(a=p,v=!0)}if(f&&f.type!==qn&&(!ho(s,f)||v)){const p=ql(f,l,r,n);if(Xl(f,p),u==="out-in")return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},xf(i);u==="in-out"&&s.type!==qn&&(p.delayLeave=(m,b,C)=>{const x=OS(r,f);x[String(f.key)]=f,m._leaveCb=()=>{b(),m._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=C})}return i}}},kS=fT;function OS(t,e){const{leavingVNodes:n}=t;let r=n.get(e.type);return r||(r=Object.create(null),n.set(e.type,r)),r}function ql(t,e,n,r){const{appear:a,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:s,onEnterCancelled:d,onBeforeLeave:c,onLeave:f,onAfterLeave:v,onLeaveCancelled:g,onBeforeAppear:p,onAppear:m,onAfterAppear:b,onAppearCancelled:C}=e,x=String(t.key),w=OS(n,t),P=(T,O)=>{T&&lr(T,r,9,O)},S=(T,O)=>{const N=O[1];P(T,O),bt(T)?T.every($=>$.length<=1)&&N():T.length<=1&&N()},k={mode:o,persisted:i,beforeEnter(T){let O=l;if(!n.isMounted)if(a)O=p||l;else return;T._leaveCb&&T._leaveCb(!0);const N=w[x];N&&ho(t,N)&&N.el._leaveCb&&N.el._leaveCb(),P(O,[T])},enter(T){let O=u,N=s,$=d;if(!n.isMounted)if(a)O=m||u,N=b||s,$=C||d;else return;let I=!1;const E=T._enterCb=F=>{I||(I=!0,F?P($,[T]):P(N,[T]),k.delayedLeave&&k.delayedLeave(),T._enterCb=void 0)};O?S(O,[T,E]):E()},leave(T,O){const N=String(t.key);if(T._enterCb&&T._enterCb(!0),n.isUnmounting)return O();P(c,[T]);let $=!1;const I=T._leaveCb=E=>{$||($=!0,O(),E?P(g,[T]):P(v,[T]),T._leaveCb=void 0,w[N]===t&&delete w[N])};w[N]=t,f?S(f,[T,I]):I()},clone(T){return ql(T,e,n,r)}};return k}function xf(t){if(ad(t))return t=Cn(t),t.children=null,t}function Z0(t){return ad(t)?t.children?t.children[0]:void 0:t}function Xl(t,e){t.shapeFlag&6&&t.component?Xl(t.component.subTree,e):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Gp(t,e=!1,n){let r=[],a=0;for(let o=0;o1)for(let o=0;o!!t.type.__asyncLoader,ad=t=>t.type.__isKeepAlive;function od(t,e){ES(t,"a",e)}function TS(t,e){ES(t,"da",e)}function ES(t,e,n=dn){const r=t.__wdc||(t.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return t()});if(id(e,r,n),n){let a=n.parent;for(;a&&a.parent;)ad(a.parent.vnode)&&vT(r,e,n,a),a=a.parent}}function vT(t,e,n,r){const a=id(e,t,r,!0);Sn(()=>{Ap(r[e],a)},n)}function id(t,e,n=dn,r=!1){if(n){const a=n[t]||(n[t]=[]),o=e.__weh||(e.__weh=(...i)=>{if(n.isUnmounted)return;Bi(),Pi(n);const l=lr(e,n,t,i);return Oo(),ji(),l});return r?a.unshift(o):a.push(o),o}}const pa=t=>(e,n=dn)=>(!Zl||t==="sp")&&id(t,(...r)=>e(...r),n),ld=pa("bm"),Ge=pa("m"),qp=pa("bu"),wn=pa("u"),ut=pa("bum"),Sn=pa("um"),hT=pa("sp"),pT=pa("rtg"),gT=pa("rtc");function mT(t,e=dn){id("ec",t,e)}function gn(t,e){const n=mn;if(n===null)return t;const r=sd(n)||n.proxy,a=t.dirs||(t.dirs=[]);for(let o=0;ovn(e)?!(e.type===qn||e.type===et&&!_S(e.children)):!0)?t:null}const Yv=t=>t?zS(t)?sd(t)||t.proxy:Yv(t.parent):null,kl=hn(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Yv(t.parent),$root:t=>Yv(t.root),$emit:t=>t.emit,$options:t=>Qp(t),$forceUpdate:t=>t.f||(t.f=()=>Up(t.update)),$nextTick:t=>t.n||(t.n=nt.bind(t.proxy)),$watch:t=>dT.bind(t)}),Sf=(t,e)=>t!==Ht&&!t.__isScriptSetup&&Tt(t,e),xT={get({_:t},e){const{ctx:n,setupState:r,data:a,props:o,accessCache:i,type:l,appContext:u}=t;let s;if(e[0]!=="$"){const v=i[e];if(v!==void 0)switch(v){case 1:return r[e];case 2:return a[e];case 4:return n[e];case 3:return o[e]}else{if(Sf(r,e))return i[e]=1,r[e];if(a!==Ht&&Tt(a,e))return i[e]=2,a[e];if((s=t.propsOptions[0])&&Tt(s,e))return i[e]=3,o[e];if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];Gv&&(i[e]=0)}}const d=kl[e];let c,f;if(d)return e==="$attrs"&&Xn(t,"get",e),d(t);if((c=l.__cssModules)&&(c=c[e]))return c;if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];if(f=u.config.globalProperties,Tt(f,e))return f[e]},set({_:t},e,n){const{data:r,setupState:a,ctx:o}=t;return Sf(a,e)?(a[e]=n,!0):r!==Ht&&Tt(r,e)?(r[e]=n,!0):Tt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(o[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:a,propsOptions:o}},i){let l;return!!n[i]||t!==Ht&&Tt(t,i)||Sf(e,i)||(l=o[0])&&Tt(l,i)||Tt(r,i)||Tt(kl,i)||Tt(a.config.globalProperties,i)},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:Tt(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};let Gv=!0;function wT(t){const e=Qp(t),n=t.proxy,r=t.ctx;Gv=!1,e.beforeCreate&&e1(e.beforeCreate,t,"bc");const{data:a,computed:o,methods:i,watch:l,provide:u,inject:s,created:d,beforeMount:c,mounted:f,beforeUpdate:v,updated:g,activated:p,deactivated:m,beforeDestroy:b,beforeUnmount:C,destroyed:x,unmounted:w,render:P,renderTracked:S,renderTriggered:k,errorCaptured:T,serverPrefetch:O,expose:N,inheritAttrs:$,components:I,directives:E,filters:F}=e;if(s&&ST(s,r,null,t.appContext.config.unwrapInjectedRef),i)for(const R in i){const _=i[R];St(_)&&(r[R]=_.bind(n))}if(a){const R=a.call(n,n);Zt(R)&&(t.data=xt(R))}if(Gv=!0,o)for(const R in o){const _=o[R],M=St(_)?_.bind(n,n):St(_.get)?_.get.bind(n,n):br,V=!St(_)&&St(_.set)?_.set.bind(n):br,B=L({get:M,set:V});Object.defineProperty(r,R,{enumerable:!0,configurable:!0,get:()=>B.value,set:U=>B.value=U})}if(l)for(const R in l)NS(l[R],r,n,R);if(u){const R=St(u)?u.call(n):u;Reflect.ownKeys(R).forEach(_=>{at(_,R[_])})}d&&e1(d,t,"c");function D(R,_){bt(_)?_.forEach(M=>R(M.bind(n))):_&&R(_.bind(n))}if(D(ld,c),D(Ge,f),D(qp,v),D(wn,g),D(od,p),D(TS,m),D(mT,T),D(gT,S),D(pT,k),D(ut,C),D(Sn,w),D(hT,O),bt(N))if(N.length){const R=t.exposed||(t.exposed={});N.forEach(_=>{Object.defineProperty(R,_,{get:()=>n[_],set:M=>n[_]=M})})}else t.exposed||(t.exposed={});P&&t.render===br&&(t.render=P),$!=null&&(t.inheritAttrs=$),I&&(t.components=I),E&&(t.directives=E)}function ST(t,e,n=br,r=!1){bt(t)&&(t=qv(t));for(const a in t){const o=t[a];let i;Zt(o)?"default"in o?i=Ze(o.from||a,o.default,!0):i=Ze(o.from||a):i=Ze(o),fn(i)&&r?Object.defineProperty(e,a,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):e[a]=i}}function e1(t,e,n){lr(bt(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function NS(t,e,n,r){const a=r.includes(".")?SS(n,r):()=>n[r];if(pn(t)){const o=e[t];St(o)&&Se(a,o)}else if(St(t))Se(a,t.bind(n));else if(Zt(t))if(bt(t))t.forEach(o=>NS(o,e,n,r));else{const o=St(t.handler)?t.handler.bind(n):e[t.handler];St(o)&&Se(a,o,t)}}function Qp(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:a,optionsCache:o,config:{optionMergeStrategies:i}}=t.appContext,l=o.get(e);let u;return l?u=l:!a.length&&!n&&!r?u=e:(u={},a.length&&a.forEach(s=>uc(u,s,i,!0)),uc(u,e,i)),Zt(e)&&o.set(e,u),u}function uc(t,e,n,r=!1){const{mixins:a,extends:o}=e;o&&uc(t,o,n,!0),a&&a.forEach(i=>uc(t,i,n,!0));for(const i in e)if(!(r&&i==="expose")){const l=PT[i]||n&&n[i];t[i]=l?l(t[i],e[i]):e[i]}return t}const PT={data:t1,props:so,emits:so,methods:so,computed:so,beforeCreate:On,created:On,beforeMount:On,mounted:On,beforeUpdate:On,updated:On,beforeDestroy:On,beforeUnmount:On,destroyed:On,unmounted:On,activated:On,deactivated:On,errorCaptured:On,serverPrefetch:On,components:so,directives:so,watch:OT,provide:t1,inject:kT};function t1(t,e){return e?t?function(){return hn(St(t)?t.call(this,this):t,St(e)?e.call(this,this):e)}:e:t}function kT(t,e){return so(qv(t),qv(e))}function qv(t){if(bt(t)){const e={};for(let n=0;n0)&&!(i&16)){if(i&8){const d=t.vnode.dynamicProps;for(let c=0;c{u=!0;const[f,v]=AS(c,e,!0);hn(i,f),v&&l.push(...v)};!n&&e.mixins.length&&e.mixins.forEach(d),t.extends&&d(t.extends),t.mixins&&t.mixins.forEach(d)}if(!o&&!u)return Zt(t)&&r.set(t,ci),ci;if(bt(o))for(let d=0;d-1,v[1]=p<0||g-1||Tt(v,"default"))&&l.push(c)}}}const s=[i,l];return Zt(t)&&r.set(t,s),s}function n1(t){return t[0]!=="$"}function r1(t){const e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:t===null?"null":""}function a1(t,e){return r1(t)===r1(e)}function o1(t,e){return bt(e)?e.findIndex(n=>a1(n,t)):St(e)&&a1(e,t)?0:-1}const RS=t=>t[0]==="_"||t==="$stable",Zp=t=>bt(t)?t.map(Lr):[Lr(t)],MT=(t,e,n)=>{if(e._n)return e;const r=pl((...a)=>Zp(e(...a)),n);return r._c=!1,r},DS=(t,e,n)=>{const r=t._ctx;for(const a in t){if(RS(a))continue;const o=t[a];if(St(o))e[a]=MT(a,o,r);else if(o!=null){const i=Zp(o);e[a]=()=>i}}},FS=(t,e)=>{const n=Zp(e);t.slots.default=()=>n},IT=(t,e)=>{if(t.vnode.shapeFlag&32){const n=e._;n?(t.slots=rt(e),oc(e,"_",n)):DS(e,t.slots={})}else t.slots={},e&&FS(t,e);oc(t.slots,ud,1)},_T=(t,e,n)=>{const{vnode:r,slots:a}=t;let o=!0,i=Ht;if(r.shapeFlag&32){const l=e._;l?n&&l===1?o=!1:(hn(a,e),!n&&l===1&&delete a._):(o=!e.$stable,DS(e,a)),i=e}else e&&(FS(t,e),i={default:1});if(o)for(const l in a)!RS(l)&&!(l in i)&&delete a[l]};function LS(){return{app:null,config:{isNativeTag:s5,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let NT=0;function $T(t,e){return function(r,a=null){St(r)||(r=Object.assign({},r)),a!=null&&!Zt(a)&&(a=null);const o=LS(),i=new Set;let l=!1;const u=o.app={_uid:NT++,_component:r,_props:a,_container:null,_context:o,_instance:null,version:r7,get config(){return o.config},set config(s){},use(s,...d){return i.has(s)||(s&&St(s.install)?(i.add(s),s.install(u,...d)):St(s)&&(i.add(s),s(u,...d))),u},mixin(s){return o.mixins.includes(s)||o.mixins.push(s),u},component(s,d){return d?(o.components[s]=d,u):o.components[s]},directive(s,d){return d?(o.directives[s]=d,u):o.directives[s]},mount(s,d,c){if(!l){const f=h(r,a);return f.appContext=o,d&&e?e(f,s):t(f,s,c),l=!0,u._container=s,s.__vue_app__=u,sd(f.component)||f.component.proxy}},unmount(){l&&(t(null,u._container),delete u._container.__vue_app__)},provide(s,d){return o.provides[s]=d,u}};return u}}function Qv(t,e,n,r,a=!1){if(bt(t)){t.forEach((f,v)=>Qv(f,e&&(bt(e)?e[v]:e),n,r,a));return}if(Pl(r)&&!a)return;const o=r.shapeFlag&4?sd(r.component)||r.component.proxy:r.el,i=a?null:o,{i:l,r:u}=t,s=e&&e.r,d=l.refs===Ht?l.refs={}:l.refs,c=l.setupState;if(s!=null&&s!==u&&(pn(s)?(d[s]=null,Tt(c,s)&&(c[s]=null)):fn(s)&&(s.value=null)),St(u))ja(u,l,12,[i,d]);else{const f=pn(u),v=fn(u);if(f||v){const g=()=>{if(t.f){const p=f?Tt(c,u)?c[u]:d[u]:u.value;a?bt(p)&&Ap(p,o):bt(p)?p.includes(o)||p.push(o):f?(d[u]=[o],Tt(c,u)&&(c[u]=d[u])):(u.value=[o],t.k&&(d[t.k]=u.value))}else f?(d[u]=i,Tt(c,u)&&(c[u]=i)):v&&(u.value=i,t.k&&(d[t.k]=i))};i?(g.id=-1,Rn(g,n)):g()}}}const Rn=cT;function AT(t){return RT(t)}function RT(t,e){const n=y5();n.__VUE__=!0;const{insert:r,remove:a,patchProp:o,createElement:i,createText:l,createComment:u,setText:s,setElementText:d,parentNode:c,nextSibling:f,setScopeId:v=br,insertStaticContent:g}=t,p=(q,H,Z,ae=null,oe=null,ue=null,me=!1,se=null,ie=!!H.dynamicChildren)=>{if(q===H)return;q&&!ho(q,H)&&(ae=z(q),U(q,oe,ue,!0),q=null),H.patchFlag===-2&&(ie=!1,H.dynamicChildren=null);const{type:ne,ref:de,shapeFlag:ve}=H;switch(ne){case Ua:m(q,H,Z,ae);break;case qn:b(q,H,Z,ae);break;case Pf:q==null&&C(H,Z,ae,me);break;case et:I(q,H,Z,ae,oe,ue,me,se,ie);break;default:ve&1?P(q,H,Z,ae,oe,ue,me,se,ie):ve&6?E(q,H,Z,ae,oe,ue,me,se,ie):(ve&64||ve&128)&&ne.process(q,H,Z,ae,oe,ue,me,se,ie,J)}de!=null&&oe&&Qv(de,q&&q.ref,ue,H||q,!H)},m=(q,H,Z,ae)=>{if(q==null)r(H.el=l(H.children),Z,ae);else{const oe=H.el=q.el;H.children!==q.children&&s(oe,H.children)}},b=(q,H,Z,ae)=>{q==null?r(H.el=u(H.children||""),Z,ae):H.el=q.el},C=(q,H,Z,ae)=>{[q.el,q.anchor]=g(q.children,H,Z,ae,q.el,q.anchor)},x=({el:q,anchor:H},Z,ae)=>{let oe;for(;q&&q!==H;)oe=f(q),r(q,Z,ae),q=oe;r(H,Z,ae)},w=({el:q,anchor:H})=>{let Z;for(;q&&q!==H;)Z=f(q),a(q),q=Z;a(H)},P=(q,H,Z,ae,oe,ue,me,se,ie)=>{me=me||H.type==="svg",q==null?S(H,Z,ae,oe,ue,me,se,ie):O(q,H,oe,ue,me,se,ie)},S=(q,H,Z,ae,oe,ue,me,se)=>{let ie,ne;const{type:de,props:ve,shapeFlag:be,transition:Pe,dirs:$e}=q;if(ie=q.el=i(q.type,ue,ve&&ve.is,ve),be&8?d(ie,q.children):be&16&&T(q.children,ie,null,ae,oe,ue&&de!=="foreignObject",me,se),$e&&eo(q,null,ae,"created"),ve){for(const we in ve)we!=="value"&&!Ss(we)&&o(ie,we,null,ve[we],ue,q.children,ae,oe,X);"value"in ve&&o(ie,"value",null,ve.value),(ne=ve.onVnodeBeforeMount)&&Ar(ne,ae,q)}k(ie,q,q.scopeId,me,ae),$e&&eo(q,null,ae,"beforeMount");const De=(!oe||oe&&!oe.pendingBranch)&&Pe&&!Pe.persisted;De&&Pe.beforeEnter(ie),r(ie,H,Z),((ne=ve&&ve.onVnodeMounted)||De||$e)&&Rn(()=>{ne&&Ar(ne,ae,q),De&&Pe.enter(ie),$e&&eo(q,null,ae,"mounted")},oe)},k=(q,H,Z,ae,oe)=>{if(Z&&v(q,Z),ae)for(let ue=0;ue{for(let ne=ie;ne{const se=H.el=q.el;let{patchFlag:ie,dynamicChildren:ne,dirs:de}=H;ie|=q.patchFlag&16;const ve=q.props||Ht,be=H.props||Ht;let Pe;Z&&to(Z,!1),(Pe=be.onVnodeBeforeUpdate)&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"beforeUpdate"),Z&&to(Z,!0);const $e=oe&&H.type!=="foreignObject";if(ne?N(q.dynamicChildren,ne,se,Z,ae,$e,ue):me||_(q,H,se,null,Z,ae,$e,ue,!1),ie>0){if(ie&16)$(se,H,ve,be,Z,ae,oe);else if(ie&2&&ve.class!==be.class&&o(se,"class",null,be.class,oe),ie&4&&o(se,"style",ve.style,be.style,oe),ie&8){const De=H.dynamicProps;for(let we=0;we{Pe&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"updated")},ae)},N=(q,H,Z,ae,oe,ue,me)=>{for(let se=0;se{if(Z!==ae){if(Z!==Ht)for(const se in Z)!Ss(se)&&!(se in ae)&&o(q,se,Z[se],null,me,H.children,oe,ue,X);for(const se in ae){if(Ss(se))continue;const ie=ae[se],ne=Z[se];ie!==ne&&se!=="value"&&o(q,se,ne,ie,me,H.children,oe,ue,X)}"value"in ae&&o(q,"value",Z.value,ae.value)}},I=(q,H,Z,ae,oe,ue,me,se,ie)=>{const ne=H.el=q?q.el:l(""),de=H.anchor=q?q.anchor:l("");let{patchFlag:ve,dynamicChildren:be,slotScopeIds:Pe}=H;Pe&&(se=se?se.concat(Pe):Pe),q==null?(r(ne,Z,ae),r(de,Z,ae),T(H.children,Z,de,oe,ue,me,se,ie)):ve>0&&ve&64&&be&&q.dynamicChildren?(N(q.dynamicChildren,be,Z,oe,ue,me,se),(H.key!=null||oe&&H===oe.subTree)&&Jp(q,H,!0)):_(q,H,Z,de,oe,ue,me,se,ie)},E=(q,H,Z,ae,oe,ue,me,se,ie)=>{H.slotScopeIds=se,q==null?H.shapeFlag&512?oe.ctx.activate(H,Z,ae,me,ie):F(H,Z,ae,oe,ue,me,ie):j(q,H,ie)},F=(q,H,Z,ae,oe,ue,me)=>{const se=q.component=YT(q,ae,oe);if(ad(q)&&(se.ctx.renderer=J),GT(se),se.asyncDep){if(oe&&oe.registerDep(se,D),!q.el){const ie=se.subTree=h(qn);b(null,ie,H,Z)}return}D(se,q,H,Z,oe,ue,me)},j=(q,H,Z)=>{const ae=H.component=q.component;if(lT(q,H,Z))if(ae.asyncDep&&!ae.asyncResolved){R(ae,H,Z);return}else ae.next=H,tT(ae.update),ae.update();else H.el=q.el,ae.vnode=H},D=(q,H,Z,ae,oe,ue,me)=>{const se=()=>{if(q.isMounted){let{next:de,bu:ve,u:be,parent:Pe,vnode:$e}=q,De=de,we;to(q,!1),de?(de.el=$e.el,R(q,de,me)):de=$e,ve&&bf(ve),(we=de.props&&de.props.onVnodeBeforeUpdate)&&Ar(we,Pe,de,$e),to(q,!0);const he=Cf(q),Oe=q.subTree;q.subTree=he,p(Oe,he,c(Oe.el),z(Oe),q,oe,ue),de.el=he.el,De===null&&uT(q,he.el),be&&Rn(be,oe),(we=de.props&&de.props.onVnodeUpdated)&&Rn(()=>Ar(we,Pe,de,$e),oe)}else{let de;const{el:ve,props:be}=H,{bm:Pe,m:$e,parent:De}=q,we=Pl(H);if(to(q,!1),Pe&&bf(Pe),!we&&(de=be&&be.onVnodeBeforeMount)&&Ar(de,De,H),to(q,!0),ve&&re){const he=()=>{q.subTree=Cf(q),re(ve,q.subTree,q,oe,null)};we?H.type.__asyncLoader().then(()=>!q.isUnmounted&&he()):he()}else{const he=q.subTree=Cf(q);p(null,he,Z,ae,q,oe,ue),H.el=he.el}if($e&&Rn($e,oe),!we&&(de=be&&be.onVnodeMounted)){const he=H;Rn(()=>Ar(de,De,he),oe)}(H.shapeFlag&256||De&&Pl(De.vnode)&&De.vnode.shapeFlag&256)&&q.a&&Rn(q.a,oe),q.isMounted=!0,H=Z=ae=null}},ie=q.effect=new Bp(se,()=>Up(ne),q.scope),ne=q.update=()=>ie.run();ne.id=q.uid,to(q,!0),ne()},R=(q,H,Z)=>{H.component=q;const ae=q.vnode.props;q.vnode=H,q.next=null,ET(q,H.props,ae,Z),_T(q,H.children,Z),Bi(),X0(),ji()},_=(q,H,Z,ae,oe,ue,me,se,ie=!1)=>{const ne=q&&q.children,de=q?q.shapeFlag:0,ve=H.children,{patchFlag:be,shapeFlag:Pe}=H;if(be>0){if(be&128){V(ne,ve,Z,ae,oe,ue,me,se,ie);return}else if(be&256){M(ne,ve,Z,ae,oe,ue,me,se,ie);return}}Pe&8?(de&16&&X(ne,oe,ue),ve!==ne&&d(Z,ve)):de&16?Pe&16?V(ne,ve,Z,ae,oe,ue,me,se,ie):X(ne,oe,ue,!0):(de&8&&d(Z,""),Pe&16&&T(ve,Z,ae,oe,ue,me,se,ie))},M=(q,H,Z,ae,oe,ue,me,se,ie)=>{q=q||ci,H=H||ci;const ne=q.length,de=H.length,ve=Math.min(ne,de);let be;for(be=0;bede?X(q,oe,ue,!0,!1,ve):T(H,Z,ae,oe,ue,me,se,ie,ve)},V=(q,H,Z,ae,oe,ue,me,se,ie)=>{let ne=0;const de=H.length;let ve=q.length-1,be=de-1;for(;ne<=ve&&ne<=be;){const Pe=q[ne],$e=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ne++}for(;ne<=ve&&ne<=be;){const Pe=q[ve],$e=H[be]=ie?Ia(H[be]):Lr(H[be]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ve--,be--}if(ne>ve){if(ne<=be){const Pe=be+1,$e=Pebe)for(;ne<=ve;)U(q[ne],oe,ue,!0),ne++;else{const Pe=ne,$e=ne,De=new Map;for(ne=$e;ne<=be;ne++){const ge=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);ge.key!=null&&De.set(ge.key,ne)}let we,he=0;const Oe=be-$e+1;let Me=!1,Ce=0;const fe=new Array(Oe);for(ne=0;ne=Oe){U(ge,oe,ue,!0);continue}let ke;if(ge.key!=null)ke=De.get(ge.key);else for(we=$e;we<=be;we++)if(fe[we-$e]===0&&ho(ge,H[we])){ke=we;break}ke===void 0?U(ge,oe,ue,!0):(fe[ke-$e]=ne+1,ke>=Ce?Ce=ke:Me=!0,p(ge,H[ke],Z,null,oe,ue,me,se,ie),he++)}const pe=Me?DT(fe):ci;for(we=pe.length-1,ne=Oe-1;ne>=0;ne--){const ge=$e+ne,ke=H[ge],_e=ge+1{const{el:ue,type:me,transition:se,children:ie,shapeFlag:ne}=q;if(ne&6){B(q.component.subTree,H,Z,ae);return}if(ne&128){q.suspense.move(H,Z,ae);return}if(ne&64){me.move(q,H,Z,J);return}if(me===et){r(ue,H,Z);for(let ve=0;vese.enter(ue),oe);else{const{leave:ve,delayLeave:be,afterLeave:Pe}=se,$e=()=>r(ue,H,Z),De=()=>{ve(ue,()=>{$e(),Pe&&Pe()})};be?be(ue,$e,De):De()}else r(ue,H,Z)},U=(q,H,Z,ae=!1,oe=!1)=>{const{type:ue,props:me,ref:se,children:ie,dynamicChildren:ne,shapeFlag:de,patchFlag:ve,dirs:be}=q;if(se!=null&&Qv(se,null,Z,q,!0),de&256){H.ctx.deactivate(q);return}const Pe=de&1&&be,$e=!Pl(q);let De;if($e&&(De=me&&me.onVnodeBeforeUnmount)&&Ar(De,H,q),de&6)W(q.component,Z,ae);else{if(de&128){q.suspense.unmount(Z,ae);return}Pe&&eo(q,null,H,"beforeUnmount"),de&64?q.type.remove(q,H,Z,oe,J,ae):ne&&(ue!==et||ve>0&&ve&64)?X(ne,H,Z,!1,!0):(ue===et&&ve&384||!oe&&de&16)&&X(ie,H,Z),ae&&Y(q)}($e&&(De=me&&me.onVnodeUnmounted)||Pe)&&Rn(()=>{De&&Ar(De,H,q),Pe&&eo(q,null,H,"unmounted")},Z)},Y=q=>{const{type:H,el:Z,anchor:ae,transition:oe}=q;if(H===et){K(Z,ae);return}if(H===Pf){w(q);return}const ue=()=>{a(Z),oe&&!oe.persisted&&oe.afterLeave&&oe.afterLeave()};if(q.shapeFlag&1&&oe&&!oe.persisted){const{leave:me,delayLeave:se}=oe,ie=()=>me(Z,ue);se?se(q.el,ue,ie):ie()}else ue()},K=(q,H)=>{let Z;for(;q!==H;)Z=f(q),a(q),q=Z;a(H)},W=(q,H,Z)=>{const{bum:ae,scope:oe,update:ue,subTree:me,um:se}=q;ae&&bf(ae),oe.stop(),ue&&(ue.active=!1,U(me,q,H,Z)),se&&Rn(se,H),Rn(()=>{q.isUnmounted=!0},H),H&&H.pendingBranch&&!H.isUnmounted&&q.asyncDep&&!q.asyncResolved&&q.suspenseId===H.pendingId&&(H.deps--,H.deps===0&&H.resolve())},X=(q,H,Z,ae=!1,oe=!1,ue=0)=>{for(let me=ue;meq.shapeFlag&6?z(q.component.subTree):q.shapeFlag&128?q.suspense.next():f(q.anchor||q.el),ee=(q,H,Z)=>{q==null?H._vnode&&U(H._vnode,null,null,!0):p(H._vnode||null,q,H,null,null,null,Z),X0(),CS(),H._vnode=q},J={p,um:U,m:B,r:Y,mt:F,mc:T,pc:_,pbc:N,n:z,o:t};let te,re;return e&&([te,re]=e(J)),{render:ee,hydrate:te,createApp:$T(ee,te)}}function to({effect:t,update:e},n){t.allowRecurse=e.allowRecurse=n}function Jp(t,e,n=!1){const r=t.children,a=e.children;if(bt(r)&&bt(a))for(let o=0;o>1,t[n[l]]0&&(e[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=e[i];return n}const FT=t=>t.__isTeleport,Ol=t=>t&&(t.disabled||t.disabled===""),i1=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Zv=(t,e)=>{const n=t&&t.to;return pn(n)?e?e(n):null:n},LT={__isTeleport:!0,process(t,e,n,r,a,o,i,l,u,s){const{mc:d,pc:c,pbc:f,o:{insert:v,querySelector:g,createText:p,createComment:m}}=s,b=Ol(e.props);let{shapeFlag:C,children:x,dynamicChildren:w}=e;if(t==null){const P=e.el=p(""),S=e.anchor=p("");v(P,n,r),v(S,n,r);const k=e.target=Zv(e.props,g),T=e.targetAnchor=p("");k&&(v(T,k),i=i||i1(k));const O=(N,$)=>{C&16&&d(x,N,$,a,o,i,l,u)};b?O(n,S):k&&O(k,T)}else{e.el=t.el;const P=e.anchor=t.anchor,S=e.target=t.target,k=e.targetAnchor=t.targetAnchor,T=Ol(t.props),O=T?n:S,N=T?P:k;if(i=i||i1(S),w?(f(t.dynamicChildren,w,O,a,o,i,l),Jp(t,e,!0)):u||c(t,e,O,N,a,o,i,l,!1),b)T||zu(e,n,P,s,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const $=e.target=Zv(e.props,g);$&&zu(e,$,null,s,0)}else T&&zu(e,S,k,s,1)}BS(e)},remove(t,e,n,r,{um:a,o:{remove:o}},i){const{shapeFlag:l,children:u,anchor:s,targetAnchor:d,target:c,props:f}=t;if(c&&o(d),(i||!Ol(f))&&(o(s),l&16))for(let v=0;v0?yr||ci:null,jT(),Ql>0&&yr&&yr.push(t),t}function VT(t,e,n,r,a,o){return jS(HS(t,e,n,r,a,o,!0))}function VS(t,e,n,r,a){return jS(h(t,e,n,r,a,!0))}function vn(t){return t?t.__v_isVNode===!0:!1}function ho(t,e){return t.type===e.type&&t.key===e.key}const ud="__vInternal",KS=({key:t})=>t??null,Ps=({ref:t,ref_key:e,ref_for:n})=>t!=null?pn(t)||fn(t)||St(t)?{i:mn,r:t,k:e,f:!!n}:t:null;function HS(t,e=null,n=null,r=0,a=null,o=t===et?0:1,i=!1,l=!1){const u={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&KS(e),ref:e&&Ps(e),scopeId:rd,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:mn};return l?(ng(u,n),o&128&&t.normalize(u)):n&&(u.shapeFlag|=pn(n)?8:16),Ql>0&&!i&&yr&&(u.patchFlag>0||o&6)&&u.patchFlag!==32&&yr.push(u),u}const h=KT;function KT(t,e=null,n=null,r=0,a=null,o=!1){if((!t||t===bT)&&(t=qn),vn(t)){const l=Cn(t,e,!0);return n&&ng(l,n),Ql>0&&!o&&yr&&(l.shapeFlag&6?yr[yr.indexOf(t)]=l:yr.push(l)),l.patchFlag|=-2,l}if(ZT(t)&&(t=t.__vccOpts),e){e=HT(e);let{class:l,style:u}=e;l&&!pn(l)&&(e.class=Np(l)),Zt(u)&&(dS(u)&&!bt(u)&&(u=hn({},u)),e.style=_p(u))}const i=pn(t)?1:sT(t)?128:FT(t)?64:Zt(t)?4:St(t)?2:0;return HS(t,e,n,r,a,i,o,!0)}function HT(t){return t?dS(t)||ud in t?hn({},t):t:null}function Cn(t,e,n=!1){const{props:r,ref:a,patchFlag:o,children:i}=t,l=e?zT(r||{},e):r;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:l,key:l&&KS(l),ref:e&&e.ref?n&&a?bt(a)?a.concat(Ps(e)):[a,Ps(e)]:Ps(e):a,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:i,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==et?o===-1?16:o|16:o,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Cn(t.ssContent),ssFallback:t.ssFallback&&Cn(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx}}function _n(t=" ",e=0){return h(Ua,null,t,e)}function zre(t="",e=!1){return e?(tg(),VS(qn,null,t)):h(qn,null,t)}function Lr(t){return t==null||typeof t=="boolean"?h(qn):bt(t)?h(et,null,t.slice()):typeof t=="object"?Ia(t):h(Ua,null,String(t))}function Ia(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Cn(t)}function ng(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(bt(e))n=16;else if(typeof e=="object")if(r&65){const a=e.default;a&&(a._c&&(a._d=!1),ng(t,a()),a._c&&(a._d=!0));return}else{n=32;const a=e._;!a&&!(ud in e)?e._ctx=mn:a===3&&mn&&(mn.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else St(e)?(e={default:e,_ctx:mn},n=32):(e=String(e),r&64?(n=16,e=[_n(e)]):n=8);t.children=e,t.shapeFlag|=n}function zT(...t){const e={};for(let n=0;ndn||mn,Pi=t=>{dn=t,t.scope.on()},Oo=()=>{dn&&dn.scope.off(),dn=null};function zS(t){return t.vnode.shapeFlag&4}let Zl=!1;function GT(t,e=!1){Zl=e;const{props:n,children:r}=t.vnode,a=zS(t);TT(t,n,a,e),IT(t,r);const o=a?qT(t,e):void 0;return Zl=!1,o}function qT(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=fS(new Proxy(t.ctx,xT));const{setup:r}=n;if(r){const a=t.setupContext=r.length>1?US(t):null;Pi(t),Bi();const o=ja(r,t,0,[t.props,a]);if(ji(),Oo(),Zw(o)){if(o.then(Oo,Oo),e)return o.then(i=>{u1(t,i,e)}).catch(i=>{td(i,t,0)});t.asyncDep=o}else u1(t,o,e)}else WS(t,e)}function u1(t,e,n){St(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Zt(e)&&(t.setupState=gS(e)),WS(t,n)}let s1;function WS(t,e,n){const r=t.type;if(!t.render){if(!e&&s1&&!r.render){const a=r.template||Qp(t).template;if(a){const{isCustomElement:o,compilerOptions:i}=t.appContext.config,{delimiters:l,compilerOptions:u}=r,s=hn(hn({isCustomElement:o,delimiters:l},i),u);r.render=s1(a,s)}}t.render=r.render||br}Pi(t),Bi(),wT(t),ji(),Oo()}function XT(t){return new Proxy(t.attrs,{get(e,n){return Xn(t,"get","$attrs"),e[n]}})}function US(t){const e=r=>{t.exposed=r||{}};let n;return{get attrs(){return n||(n=XT(t))},slots:t.slots,emit:t.emit,expose:e}}function sd(t){if(t.exposed)return t.exposeProxy||(t.exposeProxy=new Proxy(gS(fS(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in kl)return kl[n](t)},has(e,n){return n in e||n in kl}}))}function QT(t,e=!0){return St(t)?t.displayName||t.name:t.name||e&&t.__name}function ZT(t){return St(t)&&"__vccOpts"in t}const L=(t,e)=>Z5(t,e,Zl);function JT(){return e7().attrs}function e7(){const t=sn();return t.setupContext||(t.setupContext=US(t))}function Jl(t,e,n){const r=arguments.length;return r===2?Zt(e)&&!bt(e)?vn(e)?h(t,null,[e]):h(t,e):h(t,null,e):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&vn(n)&&(n=[n]),h(t,e,n))}const t7=Symbol(""),n7=()=>Ze(t7),r7="3.2.45",a7="http://www.w3.org/2000/svg",po=typeof document<"u"?document:null,c1=po&&po.createElement("template"),o7={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const a=e?po.createElementNS(a7,t):po.createElement(t,n?{is:n}:void 0);return t==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:t=>po.createTextNode(t),createComment:t=>po.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>po.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,a,o){const i=n?n.previousSibling:e.lastChild;if(a&&(a===o||a.nextSibling))for(;e.insertBefore(a.cloneNode(!0),n),!(a===o||!(a=a.nextSibling)););else{c1.innerHTML=r?`${t}`:t;const l=c1.content;if(r){const u=l.firstChild;for(;u.firstChild;)l.appendChild(u.firstChild);l.removeChild(u)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}};function i7(t,e,n){const r=t._vtc;r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}function l7(t,e,n){const r=t.style,a=pn(n);if(n&&!a){for(const o in n)Jv(r,o,n[o]);if(e&&!pn(e))for(const o in e)n[o]==null&&Jv(r,o,"")}else{const o=r.display;a?e!==n&&(r.cssText=n):e&&t.removeAttribute("style"),"_vod"in t&&(r.display=o)}}const d1=/\s*!important$/;function Jv(t,e,n){if(bt(n))n.forEach(r=>Jv(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=u7(t,e);d1.test(n)?t.setProperty(Li(r),n.replace(d1,""),"important"):t[r]=n}}const f1=["Webkit","Moz","ms"],kf={};function u7(t,e){const n=kf[e];if(n)return n;let r=Ln(e);if(r!=="filter"&&r in t)return kf[e]=r;r=Jc(r);for(let a=0;aOf||(p7.then(()=>Of=0),Of=Date.now());function m7(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;lr(y7(r,n.value),e,5,[r])};return n.value=t,n.attached=g7(),n}function y7(t,e){if(bt(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>a=>!a._stopped&&r&&r(a))}else return e}const p1=/^on[a-z]/,b7=(t,e,n,r,a=!1,o,i,l,u)=>{e==="class"?i7(t,r,a):e==="style"?l7(t,n,r):Xc(e)?$p(e)||v7(t,e,n,r,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):C7(t,e,r,a))?c7(t,e,r,o,i,l,u):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),s7(t,e,r,a))};function C7(t,e,n,r){return r?!!(e==="innerHTML"||e==="textContent"||e in t&&p1.test(e)&&St(n)):e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA"||p1.test(e)&&pn(n)?!1:e in t}const Sa="transition",nl="animation",Nn=(t,{slots:e})=>Jl(kS,GS(t),e);Nn.displayName="Transition";const YS={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},x7=Nn.props=hn({},kS.props,YS),no=(t,e=[])=>{bt(t)?t.forEach(n=>n(...e)):t&&t(...e)},g1=t=>t?bt(t)?t.some(e=>e.length>1):t.length>1:!1;function GS(t){const e={};for(const I in t)I in YS||(e[I]=t[I]);if(t.css===!1)return e;const{name:n="v",type:r,duration:a,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:u=o,appearActiveClass:s=i,appearToClass:d=l,leaveFromClass:c=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,g=w7(a),p=g&&g[0],m=g&&g[1],{onBeforeEnter:b,onEnter:C,onEnterCancelled:x,onLeave:w,onLeaveCancelled:P,onBeforeAppear:S=b,onAppear:k=C,onAppearCancelled:T=x}=e,O=(I,E,F)=>{Ta(I,E?d:l),Ta(I,E?s:i),F&&F()},N=(I,E)=>{I._isLeaving=!1,Ta(I,c),Ta(I,v),Ta(I,f),E&&E()},$=I=>(E,F)=>{const j=I?k:C,D=()=>O(E,I,F);no(j,[E,D]),m1(()=>{Ta(E,I?u:o),na(E,I?d:l),g1(j)||y1(E,r,p,D)})};return hn(e,{onBeforeEnter(I){no(b,[I]),na(I,o),na(I,i)},onBeforeAppear(I){no(S,[I]),na(I,u),na(I,s)},onEnter:$(!1),onAppear:$(!0),onLeave(I,E){I._isLeaving=!0;const F=()=>N(I,E);na(I,c),XS(),na(I,f),m1(()=>{I._isLeaving&&(Ta(I,c),na(I,v),g1(w)||y1(I,r,m,F))}),no(w,[I,F])},onEnterCancelled(I){O(I,!1),no(x,[I])},onAppearCancelled(I){O(I,!0),no(T,[I])},onLeaveCancelled(I){N(I),no(P,[I])}})}function w7(t){if(t==null)return null;if(Zt(t))return[Tf(t.enter),Tf(t.leave)];{const e=Tf(t);return[e,e]}}function Tf(t){return Fp(t)}function na(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t._vtc||(t._vtc=new Set)).add(e)}function Ta(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.remove(r));const{_vtc:n}=t;n&&(n.delete(e),n.size||(t._vtc=void 0))}function m1(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let S7=0;function y1(t,e,n,r){const a=t._endId=++S7,o=()=>{a===t._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:u}=qS(t,e);if(!i)return r();const s=i+"end";let d=0;const c=()=>{t.removeEventListener(s,f),o()},f=v=>{v.target===t&&++d>=u&&c()};setTimeout(()=>{d(n[g]||"").split(", "),a=r(`${Sa}Delay`),o=r(`${Sa}Duration`),i=b1(a,o),l=r(`${nl}Delay`),u=r(`${nl}Duration`),s=b1(l,u);let d=null,c=0,f=0;e===Sa?i>0&&(d=Sa,c=i,f=o.length):e===nl?s>0&&(d=nl,c=s,f=u.length):(c=Math.max(i,s),d=c>0?i>s?Sa:nl:null,f=d?d===Sa?o.length:u.length:0);const v=d===Sa&&/\b(transform|all)(,|$)/.test(r(`${Sa}Property`).toString());return{type:d,timeout:c,propCount:f,hasTransform:v}}function b1(t,e){for(;t.lengthC1(n)+C1(t[r])))}function C1(t){return Number(t.slice(0,-1).replace(",","."))*1e3}function XS(){return document.body.offsetHeight}const QS=new WeakMap,ZS=new WeakMap,P7={name:"TransitionGroup",props:hn({},x7,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=sn(),r=PS();let a,o;return wn(()=>{if(!a.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!E7(a[0].el,n.vnode.el,i))return;a.forEach(k7),a.forEach(O7);const l=a.filter(T7);XS(),l.forEach(u=>{const s=u.el,d=s.style;na(s,i),d.transform=d.webkitTransform=d.transitionDuration="";const c=s._moveCb=f=>{f&&f.target!==s||(!f||/transform$/.test(f.propertyName))&&(s.removeEventListener("transitionend",c),s._moveCb=null,Ta(s,i))};s.addEventListener("transitionend",c)})}),()=>{const i=rt(t),l=GS(i);let u=i.tag||et;a=o,o=e.default?Gp(e.default()):[];for(let s=0;s{i.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(i=>i&&r.classList.add(i)),r.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(r);const{hasTransform:o}=qS(r);return a.removeChild(r),o}const M7=["ctrl","shift","alt","meta"],I7={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>M7.some(n=>t[`${n}Key`]&&!e.includes(n))},x1=(t,e)=>(n,...r)=>{for(let a=0;a{rl(t,!1)}):rl(t,e))},beforeUnmount(t,{value:e}){rl(t,e)}};function rl(t,e){t.style.display=e?t._vod:"none"}const _7=hn({patchProp:b7},o7);let w1;function JS(){return w1||(w1=AT(_7))}const sc=(...t)=>{JS().render(...t)},e4=(...t)=>{const e=JS().createApp(...t),{mount:n}=e;return e.mount=r=>{const a=N7(r);if(!a)return;const o=e._component;!St(o)&&!o.render&&!o.template&&(o.template=a.innerHTML),a.innerHTML="";const i=n(a,!1,a instanceof SVGElement);return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),i},e};function N7(t){return pn(t)?document.querySelector(t):t}function Fe(t){"@babel/helpers - typeof";return Fe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(t)}function $7(t,e){if(Fe(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(Fe(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function t4(t){var e=$7(t,"string");return Fe(e)=="symbol"?e:String(e)}function A(t,e,n){return e=t4(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function S1(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function y(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return typeof t=="function"?t(e):t??n}function ce(){for(var t=[],e=0;e0},t.prototype.connect_=function(){!eh||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Q7?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){!eh||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(e){var n=e.propertyName,r=n===void 0?"":n,a=X7.some(function(o){return!!~r.indexOf(o)});a&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),a4=function(t,e){for(var n=0,r=Object.keys(e);n"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)||(n.set(e,new iE(e)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)&&(n.delete(e),n.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&e.activeObservations_.push(n)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new lE(r.target,r.broadcastRect())});this.callback_.call(e,n,e),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),i4=typeof WeakMap<"u"?new WeakMap:new r4,l4=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=Z7.getInstance(),r=new uE(e,n,this);i4.set(this,r)}return t}();["observe","unobserve","disconnect"].forEach(function(t){l4.prototype[t]=function(){var e;return(e=i4.get(this))[t].apply(e,arguments)}});var sE=function(){return typeof cc.ResizeObserver<"u"?cc.ResizeObserver:l4}();const og=sE;function u4(t){if(Array.isArray(t))return t}function cE(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,a,o,i,l=[],u=!0,s=!1;try{if(o=(n=n.call(t)).next,e===0){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(d){s=!0,a=d}finally{try{if(!u&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}function th(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0,r={},a=/;(?![^(]*\))/g,o=/:(.+)/;return Fe(e)==="object"?e:(e.split(a).forEach(function(i){if(i){var l=i.split(o);if(l.length>1){var u=n?ag(l[0].trim()):l[0].trim();r[u]=l[1].trim()}}}),r)},la=function(e,n){return e[n]!==void 0},Et=function t(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=Array.isArray(e)?e:[e],a=[];return r.forEach(function(o){Array.isArray(o)?a.push.apply(a,Ie(t(o,n))):o&&o.type===et?a.push.apply(a,Ie(t(o.children,n))):o&&vn(o)?n&&!bu(o)?a.push(o):n||a.push(o):nh(o)&&a.push(o)}),a},yu=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(vn(e))return e.type===et?n==="default"?Et(e.children):[]:e.children&&e.children[n]?Et(e.children[n](r)):[];var a=e.$slots[n]&&e.$slots[n](r);return Et(a)},Ra=function(e){for(var n,r=(e==null||(n=e.vnode)===null||n===void 0?void 0:n.el)||e&&(e.$el||e);r&&!r.tagName;)r=r.nextSibling;return r},p4=function(e){var n={};if(e.$&&e.$.vnode){var r=e.$.vnode.props||{};Object.keys(e.$props).forEach(function(l){var u=e.$props[l],s=K7(l);(u!==void 0||s in r)&&(n[l]=u)})}else if(vn(e)&&Fe(e.type)==="object"){var a=e.props||{},o={};Object.keys(a).forEach(function(l){o[ag(l)]=a[l]});var i=e.type.props||{};Object.keys(i).forEach(function(l){var u=z7(i,o,l,o[l]);(u!==void 0||l in o)&&(n[l]=u)})}return n},cg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,o=void 0;if(e.$){var i=e[n];if(i!==void 0)return typeof i=="function"&&a?i(r):i;o=e.$slots[n],o=a&&o?o(r):o}else if(vn(e)){var l=e.props&&e.props[n];if(l!==void 0&&e.props!==null)return typeof l=="function"&&a?l(r):l;e.type===et?o=e.children:e.children&&e.children[n]&&(o=e.children[n],o=a&&o?o(r):o)}return Array.isArray(o)&&(o=Et(o),o=o.length===1?o[0]:o,o=o.length===0?void 0:o),o};function T1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n={};return t.$?n=y(y({},n),t.$attrs):n=y(y({},n),t.props),ug(n)[e?"onEvents":"events"]}function $E(t){var e=(vn(t)?t.props:t.$attrs)||{},n=e.class||{},r={};return typeof n=="string"?n.split(" ").forEach(function(a){r[a.trim()]=!0}):Array.isArray(n)?ce(n).split(" ").forEach(function(a){r[a.trim()]=!0}):r=y(y({},r),n),r}function g4(t,e){var n=(vn(t)?t.props:t.$attrs)||{},r=n.style||{};if(typeof r=="string")r=sg(r,e);else if(e&&r){var a={};return Object.keys(r).forEach(function(o){return a[ag(o)]=r[o]}),a}return r}function AE(t){return t==null||t===""||Array.isArray(t)&&t.length===0}function bu(t){return t&&(t.type===qn||t.type===et&&t.children.length===0||t.type===Ua&&t.children.trim()==="")}function RE(t){return t&&t.type===Ua}function Gt(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=[];return t.forEach(function(n){Array.isArray(n)?e.push.apply(e,Ie(n)):(n==null?void 0:n.type)===et?e.push.apply(e,Ie(Gt(n.children))):e.push(n)}),e.filter(function(n){return!bu(n)})}function ol(t){if(t){var e=Gt(t);return e.length?e:void 0}else return t}function Jt(t){return Array.isArray(t)&&t.length===1&&(t=t[0]),t&&t.__v_isVNode&&Fe(t.type)!=="symbol"}function $t(t,e){var n,r,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"default";return(n=e[a])!==null&&n!==void 0?n:(r=t[a])===null||r===void 0?void 0:r.call(t)}const dr=le({compatConfig:{MODE:3},name:"ResizeObserver",props:{disabled:Boolean,onResize:Function},emits:["resize"],setup:function(e,n){var r=n.slots,a=xt({width:0,height:0,offsetHeight:0,offsetWidth:0}),o=null,i=null,l=function(){i&&(i.disconnect(),i=null)},u=function(f){var v=e.onResize,g=f[0].target,p=g.getBoundingClientRect(),m=p.width,b=p.height,C=g.offsetWidth,x=g.offsetHeight,w=Math.floor(m),P=Math.floor(b);if(a.width!==w||a.height!==P||a.offsetWidth!==C||a.offsetHeight!==x){var S={width:w,height:P,offsetWidth:C,offsetHeight:x};pt(a,S),v&&Promise.resolve().then(function(){v(y(y({},S),{},{offsetWidth:C,offsetHeight:x}),g)})}},s=sn(),d=function(){var f=e.disabled;if(f){l();return}var v=Ra(s),g=v!==o;g&&(l(),o=v),!i&&v&&(i=new og(u),i.observe(v))};return Ge(function(){d()}),wn(function(){d()}),Sn(function(){l()}),Se(function(){return e.disabled},function(){d()},{flush:"post"}),function(){var c;return(c=r.default)===null||c===void 0?void 0:c.call(r)[0]}}});var m4=function(e){return setTimeout(e,16)},y4=function(e){return clearTimeout(e)};typeof window<"u"&&"requestAnimationFrame"in window&&(m4=function(e){return window.requestAnimationFrame(e)},y4=function(e){return window.cancelAnimationFrame(e)});var E1=0,dg=new Map;function b4(t){dg.delete(t)}function qe(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;E1+=1;var n=E1;function r(a){if(a===0)b4(n),t();else{var o=m4(function(){r(a-1)});dg.set(n,o)}}return r(e),n}qe.cancel=function(t){var e=dg.get(t);return b4(e),y4(e)};function rh(t){var e,n=function(o){return function(){e=null,t.apply(void 0,Ie(o))}},r=function(){if(e==null){for(var o=arguments.length,i=new Array(o),l=0;lt.top-n)return"".concat(n+e.top,"px")}function _1(t,e,n){if(n!==void 0&&e.bottom=0)&&(n[a]=t[a]);return n}function He(t,e){if(t==null)return{};var n=FE(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}const w4={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"};var LE={locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"Ok",clear:"Clear",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"};const BE=LE;var jE={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};const S4=jE;var VE={lang:y({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},BE),timePickerLocale:y({},S4)};const eu=VE;var Kn="${label} is not a valid ${type}",KE={locale:"en",Pagination:w4,DatePicker:eu,TimePicker:S4,Calendar:eu,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckall:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:Kn,method:Kn,array:Kn,object:Kn,number:Kn,date:Kn,boolean:Kn,integer:Kn,float:Kn,regexp:Kn,email:Kn,url:Kn,hex:Kn},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"}};const wr=KE,Vi=le({compatConfig:{MODE:3},name:"LocaleReceiver",props:{componentName:String,defaultLocale:{type:[Object,Function]},children:{type:Function}},setup:function(e,n){var r=n.slots,a=Ze("localeData",{}),o=L(function(){var l=e.componentName,u=l===void 0?"global":l,s=e.defaultLocale,d=s||wr[u||"global"],c=a.antLocale,f=u&&c?c[u]:{};return y(y({},typeof d=="function"?d():d),f||{})}),i=L(function(){var l=a.antLocale,u=l&&l.locale;return l&&l.exist&&!u?wr.locale:u});return function(){var l=e.children||r.default,u=a.antLocale;return l==null?void 0:l(o.value,i.value,u)}}});function zr(t,e,n){var r=Ze("localeData",{}),a=L(function(){var o=r.antLocale,i=tn(e)||wr[t||"global"],l=t&&o?o[t]:{};return y(y(y({},typeof i=="function"?i():i),l||{}),tn(n)||{})});return[a]}var P4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-default");return h("svg",{class:r,width:"184",height:"152",viewBox:"0 0 184 152"},[h("g",{fill:"none","fill-rule":"evenodd"},[h("g",{transform:"translate(24 31.67)"},[h("ellipse",{class:"".concat(r,"-ellipse"),cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"},null),h("path",{class:"".concat(r,"-path-1"),d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"},null),h("path",{class:"".concat(r,"-path-2"),d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",transform:"translate(13.56)"},null),h("path",{class:"".concat(r,"-path-3"),d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"},null),h("path",{class:"".concat(r,"-path-4"),d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"},null)]),h("path",{class:"".concat(r,"-path-5"),d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"},null),h("g",{class:"".concat(r,"-g"),transform:"translate(149.65 15.383)"},[h("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"},null),h("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"},null)])])])};P4.PRESENTED_IMAGE_DEFAULT=!0;const HE=P4;var k4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-simple");return h("svg",{class:r,width:"64",height:"41",viewBox:"0 0 64 41"},[h("g",{transform:"translate(0 1)",fill:"none","fill-rule":"evenodd"},[h("ellipse",{class:"".concat(r,"-ellipse"),fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"},null),h("g",{class:"".concat(r,"-g"),"fill-rule":"nonzero",stroke:"#D9D9D9"},[h("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"},null),h("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA",class:"".concat(r,"-path")},null)])])])};k4.PRESENTED_IMAGE_SIMPLE=!0;const zE=k4;function A1(t,e){for(var n=0;n=0||(a[n]=t[n]);return a}function R1(t){return((e=t)!=null&&typeof e=="object"&&Array.isArray(e)===!1)==1&&Object.prototype.toString.call(t)==="[object Object]";var e}var M4=Object.prototype,I4=M4.toString,WE=M4.hasOwnProperty,_4=/^\s*function (\w+)/;function D1(t){var e,n=(e=t==null?void 0:t.type)!==null&&e!==void 0?e:t;if(n){var r=n.toString().match(_4);return r?r[1]:""}return""}var No=function(t){var e,n;return R1(t)!==!1&&typeof(e=t.constructor)=="function"&&R1(n=e.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1},UE=function(t){return t},Mn=UE,tu=function(t,e){return WE.call(t,e)},YE=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t},Oi=Array.isArray||function(t){return I4.call(t)==="[object Array]"},Ti=function(t){return I4.call(t)==="[object Function]"},fc=function(t){return No(t)&&tu(t,"_vueTypes_name")},N4=function(t){return No(t)&&(tu(t,"type")||["_vueTypes_name","validator","default","required"].some(function(e){return tu(t,e)}))};function fg(t,e){return Object.defineProperty(t.bind(e),"__original",{value:t})}function Fo(t,e,n){var r;n===void 0&&(n=!1);var a=!0,o="";r=No(t)?t:{type:t};var i=fc(r)?r._vueTypes_name+" - ":"";if(N4(r)&&r.type!==null){if(r.type===void 0||r.type===!0||!r.required&&e===void 0)return a;Oi(r.type)?(a=r.type.some(function(c){return Fo(c,e,!0)===!0}),o=r.type.map(function(c){return D1(c)}).join(" or ")):a=(o=D1(r))==="Array"?Oi(e):o==="Object"?No(e):o==="String"||o==="Number"||o==="Boolean"||o==="Function"?function(c){if(c==null)return"";var f=c.constructor.toString().match(_4);return f?f[1]:""}(e)===o:e instanceof r.type}if(!a){var l=i+'value "'+e+'" should be of type "'+o+'"';return n===!1?(Mn(l),!1):l}if(tu(r,"validator")&&Ti(r.validator)){var u=Mn,s=[];if(Mn=function(c){s.push(c)},a=r.validator(e),Mn=u,!a){var d=(s.length>1?"* ":"")+s.join(` +* `);return s.length=0,n===!1?(Mn(d),a):d}}return a}function Qn(t,e){var n=Object.defineProperties(e,{_vueTypes_name:{value:t,writable:!0},isRequired:{get:function(){return this.required=!0,this}},def:{value:function(a){return a!==void 0||this.default?Ti(a)||Fo(this,a,!0)===!0?(this.default=Oi(a)?function(){return[].concat(a)}:No(a)?function(){return Object.assign({},a)}:a,this):(Mn(this._vueTypes_name+' - invalid default value: "'+a+'"'),this):this}}}),r=n.validator;return Ti(r)&&(n.validator=fg(r,n)),n}function Hr(t,e){var n=Qn(t,e);return Object.defineProperty(n,"validate",{value:function(r){return Ti(this.validator)&&Mn(this._vueTypes_name+` - calling .validate() will overwrite the current custom validator function. Validator info: +`+JSON.stringify(this)),this.validator=fg(r,this),this}})}function F1(t,e,n){var r,a,o=(r=e,a={},Object.getOwnPropertyNames(r).forEach(function(c){a[c]=Object.getOwnPropertyDescriptor(r,c)}),Object.defineProperties({},a));if(o._vueTypes_name=t,!No(n))return o;var i,l,u=n.validator,s=E4(n,["validator"]);if(Ti(u)){var d=o.validator;d&&(d=(l=(i=d).__original)!==null&&l!==void 0?l:i),o.validator=fg(d?function(c){return d.call(this,c)&&u.call(this,c)}:u,o)}return Object.assign(o,s)}function fd(t){return t.replace(/^(?!\s*$)/gm," ")}var GE=function(){return Hr("any",{})},qE=function(){return Hr("function",{type:Function})},XE=function(){return Hr("boolean",{type:Boolean})},QE=function(){return Hr("string",{type:String})},ZE=function(){return Hr("number",{type:Number})},JE=function(){return Hr("array",{type:Array})},eM=function(){return Hr("object",{type:Object})},tM=function(){return Qn("integer",{type:Number,validator:function(t){return YE(t)}})},nM=function(){return Qn("symbol",{validator:function(t){return typeof t=="symbol"}})};function rM(t,e){if(e===void 0&&(e="custom validation failed"),typeof t!="function")throw new TypeError("[VueTypes error]: You must provide a function as argument");return Qn(t.name||"<>",{validator:function(n){var r=t(n);return r||Mn(this._vueTypes_name+" - "+e),r}})}function aM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument.");var e='oneOf - value should be one of "'+t.join('", "')+'".',n=t.reduce(function(r,a){if(a!=null){var o=a.constructor;r.indexOf(o)===-1&&r.push(o)}return r},[]);return Qn("oneOf",{type:n.length>0?n:void 0,validator:function(r){var a=t.indexOf(r)!==-1;return a||Mn(e),a}})}function oM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument");for(var e=!1,n=[],r=0;r0&&n.some(function(u){return i.indexOf(u)===-1})){var l=n.filter(function(u){return i.indexOf(u)===-1});return Mn(l.length===1?'shape - required property "'+l[0]+'" is not defined.':'shape - required properties "'+l.join('", "')+'" are not defined.'),!1}return i.every(function(u){if(e.indexOf(u)===-1)return o._vueTypes_isLoose===!0||(Mn('shape - shape definition does not include a "'+u+'" property. Allowed keys: "'+e.join('", "')+'".'),!1);var s=Fo(t[u],a[u],!0);return typeof s=="string"&&Mn('shape - "'+u+`" property validation error: + `+fd(s)),s===!0})}});return Object.defineProperty(r,"_vueTypes_isLoose",{writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this}}),r}var Rr=function(){function t(){}return t.extend=function(e){var n=this;if(Oi(e))return e.forEach(function(c){return n.extend(c)}),this;var r=e.name,a=e.validate,o=a!==void 0&&a,i=e.getter,l=i!==void 0&&i,u=E4(e,["name","validate","getter"]);if(tu(this,r))throw new TypeError('[VueTypes error]: Type "'+r+'" already defined');var s,d=u.type;return fc(d)?(delete u.type,Object.defineProperty(this,r,l?{get:function(){return F1(r,d,u)}}:{value:function(){var c,f=F1(r,d,u);return f.validator&&(f.validator=(c=f.validator).bind.apply(c,[f].concat([].slice.call(arguments)))),f}})):(s=l?{get:function(){var c=Object.assign({},u);return o?Hr(r,c):Qn(r,c)},enumerable:!0}:{value:function(){var c,f,v=Object.assign({},u);return c=o?Hr(r,v):Qn(r,v),v.validator&&(c.validator=(f=v.validator).bind.apply(f,[c].concat([].slice.call(arguments)))),c},enumerable:!0},Object.defineProperty(this,r,s))},O4(t,null,[{key:"any",get:function(){return GE()}},{key:"func",get:function(){return qE().def(this.defaults.func)}},{key:"bool",get:function(){return XE().def(this.defaults.bool)}},{key:"string",get:function(){return QE().def(this.defaults.string)}},{key:"number",get:function(){return ZE().def(this.defaults.number)}},{key:"array",get:function(){return JE().def(this.defaults.array)}},{key:"object",get:function(){return eM().def(this.defaults.object)}},{key:"integer",get:function(){return tM().def(this.defaults.integer)}},{key:"symbol",get:function(){return nM()}}]),t}();function $4(t){var e;return t===void 0&&(t={func:function(){},bool:!0,string:"",number:0,array:function(){return[]},object:function(){return{}},integer:0}),(e=function(n){function r(){return n.apply(this,arguments)||this}return T4(r,n),O4(r,null,[{key:"sensibleDefaults",get:function(){return ks({},this.defaults)},set:function(a){this.defaults=a!==!1?ks({},a!==!0?a:t):{}}}]),r}(Rr)).defaults=ks({},t),e}Rr.defaults={},Rr.custom=rM,Rr.oneOf=aM,Rr.instanceOf=lM,Rr.oneOfType=oM,Rr.arrayOf=iM,Rr.objectOf=uM,Rr.shape=sM,Rr.utils={validate:function(t,e){return Fo(e,t,!0)===!0},toType:function(t,e,n){return n===void 0&&(n=!1),n?Hr(t,e):Qn(t,e)}};(function(t){function e(){return t.apply(this,arguments)||this}return T4(e,t),e})($4());var A4=$4({func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0});A4.extend([{name:"looseBool",getter:!0,type:Boolean,default:void 0},{name:"style",getter:!0,type:[String,Object],default:void 0},{name:"VueNode",getter:!0,type:null}]);function R4(t){return t.default=void 0,t}const G=A4;var cM=["image","description","imageStyle","class"],D4=h(HE,null,null),F4=h(zE,null,null),Ki=function(e,n){var r,a=n.slots,o=a===void 0?{}:a,i=n.attrs,l=Re("empty",e),u=l.direction,s=l.prefixCls,d=s.value,c=y(y({},e),i),f=c.image,v=f===void 0?D4:f,g=c.description,p=g===void 0?((r=o.description)===null||r===void 0?void 0:r.call(o))||void 0:g,m=c.imageStyle,b=c.class,C=b===void 0?"":b,x=He(c,cM);return h(Vi,{componentName:"Empty",children:function(P){var S,k=typeof p<"u"?p:P.description,T=typeof k=="string"?k:"empty",O=null;return typeof v=="string"?O=h("img",{alt:T,src:v},null):O=v,h("div",y({class:ce(d,C,(S={},A(S,"".concat(d,"-normal"),v===F4),A(S,"".concat(d,"-rtl"),u.value==="rtl"),S))},x),[h("div",{class:"".concat(d,"-image"),style:m},[O]),k&&h("p",{class:"".concat(d,"-description")},[k]),o.default&&h("div",{class:"".concat(d,"-footer")},[Gt(o.default())])])}},null)};Ki.displayName="AEmpty";Ki.PRESENTED_IMAGE_DEFAULT=D4;Ki.PRESENTED_IMAGE_SIMPLE=F4;Ki.inheritAttrs=!1;Ki.props={prefixCls:String,image:G.any,description:G.any,imageStyle:{type:Object,default:void 0}};const $a=Wt(Ki);var dM=function(e){var n=Re("empty",e),r=n.prefixCls,a=function(i){switch(i){case"Table":case"List":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE},null);case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE,class:"".concat(r.value,"-small")},null);default:return h($a,null,null)}};return a(e.componentName)};function L4(t){return h(dM,{componentName:t},null)}var L1={};function fM(t,e){}function vM(t,e){}function B4(t,e,n){!e&&!L1[n]&&(t(!1,n),L1[n]=!0)}function j4(t,e){B4(fM,t,e)}function hM(t,e){B4(vM,t,e)}const Qt=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";j4(t,"[antdv: ".concat(e,"] ").concat(n))};var ah="internalMark",Os=le({compatConfig:{MODE:3},name:"ALocaleProvider",props:{locale:{type:Object},ANT_MARK__:String},setup:function(e,n){var r=n.slots;Qt(e.ANT_MARK__===ah,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead");var a=xt({antLocale:y(y({},e.locale),{},{exist:!0}),ANT_MARK__:ah});return at("localeData",a),Se(function(){return e.locale},function(){a.antLocale=y(y({},e.locale),{},{exist:!0})},{immediate:!0}),function(){var o;return(o=r.default)===null||o===void 0?void 0:o.call(r)}}});Os.install=function(t){return t.component(Os.name,Os),t};const V4=Wt(Os);Vt("bottomLeft","bottomRight","topLeft","topRight");var pM=function(e){return e!==void 0&&(e==="topLeft"||e==="topRight")?"slide-down":"slide-up"},Ga=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,enterFromClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterToClass:"".concat(e,"-enter ").concat(e,"-enter-active"),leaveFromClass:" ".concat(e,"-leave"),leaveActiveClass:"".concat(e,"-leave ").concat(e,"-leave-active"),leaveToClass:"".concat(e,"-leave ").concat(e,"-leave-active")}:{css:!1},n);return r},vg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,appearActiveClass:"".concat(e),appearToClass:"".concat(e,"-appear ").concat(e,"-appear-active"),enterFromClass:"".concat(e,"-appear ").concat(e,"-enter ").concat(e,"-appear-prepare ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e),enterToClass:"".concat(e,"-enter ").concat(e,"-appear ").concat(e,"-appear-active ").concat(e,"-enter-active"),leaveActiveClass:"".concat(e," ").concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-active")}:{css:!1},n);return r},Sr=function(e,n,r){return r!==void 0?r:"".concat(e,"-").concat(n)};const gM=le({name:"Notice",inheritAttrs:!1,props:["prefixCls","duration","updateMark","noticeKey","closeIcon","closable","props","onClick","onClose","holder","visible"],setup:function(e,n){var r=n.attrs,a=n.slots,o,i=!1,l=L(function(){return e.duration===void 0?4.5:e.duration}),u=function(){l.value&&!i&&(o=setTimeout(function(){d()},l.value*1e3))},s=function(){o&&(clearTimeout(o),o=null)},d=function(v){v&&v.stopPropagation(),s();var g=e.onClose,p=e.noticeKey;g&&g(p)},c=function(){s(),u()};return Ge(function(){u()}),Sn(function(){i=!0,s()}),Se([l,function(){return e.updateMark},function(){return e.visible}],function(f,v){var g=Te(f,3),p=g[0],m=g[1],b=g[2],C=Te(v,3),x=C[0],w=C[1],P=C[2];(p!==x||m!==w||b!==P&&P)&&c()},{flush:"post"}),function(){var f,v,g=e.prefixCls,p=e.closable,m=e.closeIcon,b=m===void 0?(f=a.closeIcon)===null||f===void 0?void 0:f.call(a):m,C=e.onClick,x=e.holder,w=r.class,P=r.style,S="".concat(g,"-notice"),k=Object.keys(r).reduce(function(O,N){return(N.substr(0,5)==="data-"||N.substr(0,5)==="aria-"||N==="role")&&(O[N]=r[N]),O},{}),T=h("div",y({class:ce(S,w,A({},"".concat(S,"-closable"),p)),style:P,onMouseenter:s,onMouseleave:u,onClick:C},k),[h("div",{class:"".concat(S,"-content")},[(v=a.default)===null||v===void 0?void 0:v.call(a)]),p?h("a",{tabindex:0,onClick:d,class:"".concat(S,"-close")},[b||h("span",{class:"".concat(S,"-close-x")},null)]):null]);return x?h(eg,{to:x},{default:function(){return T}}):T}}});var mM=["name","getContainer","appContext","prefixCls","rootPrefixCls","transitionName","hasTransitionName"],B1=0,yM=Date.now();function j1(){var t=B1;return B1+=1,"rcNotification_".concat(yM,"_").concat(t)}var oh=le({name:"Notification",inheritAttrs:!1,props:["prefixCls","transitionName","animation","maxCount","closeIcon"],setup:function(e,n){var r=n.attrs,a=n.expose,o=n.slots,i=new Map,l=Q([]),u=L(function(){var c=e.prefixCls,f=e.animation,v=f===void 0?"fade":f,g=e.transitionName;return!g&&v&&(g="".concat(c,"-").concat(v)),vg(g)}),s=function(f,v){var g=f.key||j1(),p=y(y({},f),{},{key:g}),m=e.maxCount,b=l.value.map(function(x){return x.notice.key}).indexOf(g),C=l.value.concat();b!==-1?C.splice(b,1,{notice:p,holderCallback:v}):(m&&l.value.length>=m&&(p.key=C[0].notice.key,p.updateMark=j1(),p.userPassKey=g,C.shift()),C.push({notice:p,holderCallback:v})),l.value=C},d=function(f){l.value=l.value.filter(function(v){var g=v.notice,p=g.key,m=g.userPassKey,b=m||p;return b!==f})};return a({add:s,remove:d,notices:l}),function(){var c,f,v=e.prefixCls,g=e.closeIcon,p=g===void 0?(c=o.closeIcon)===null||c===void 0?void 0:c.call(o,{prefixCls:v}):g,m=l.value.map(function(C,x){var w=C.notice,P=C.holderCallback,S=x===l.value.length-1?w.updateMark:void 0,k=w.key,T=w.userPassKey,O=w.content,N=y(y(y({prefixCls:v,closeIcon:typeof p=="function"?p({prefixCls:v}):p},w),w.props),{},{key:k,noticeKey:T||k,updateMark:S,onClose:function(I){var E;d(I),(E=w.onClose)===null||E===void 0||E.call(w)},onClick:w.onClick});return P?h("div",{key:k,class:"".concat(v,"-hook-holder"),ref:function(I){typeof k>"u"||(I?(i.set(k,I),P(I,N)):i.delete(k))}},null):h(gM,N,{default:function(){return[typeof O=="function"?O({prefixCls:v}):O]}})}),b=(f={},A(f,v,1),A(f,r.class,!!r.class),f);return h("div",{class:b,style:r.style||{top:"65px",left:"50%"}},[h(rg,y({tag:"div"},u.value),{default:function(){return[m]}})])}}});oh.newInstance=function(e,n){var r=e||{},a=r.name,o=a===void 0?"notification":a,i=r.getContainer,l=r.appContext,u=r.prefixCls,s=r.rootPrefixCls,d=r.transitionName,c=r.hasTransitionName,f=He(r,mM),v=document.createElement("div");if(i){var g=i();g.appendChild(v)}else document.body.appendChild(v);var p=le({compatConfig:{MODE:3},name:"NotificationWrapper",setup:function(C,x){var w=x.attrs,P=Q();return Ge(function(){n({notice:function(k){var T;(T=P.value)===null||T===void 0||T.add(k)},removeNotice:function(k){var T;(T=P.value)===null||T===void 0||T.remove(k)},destroy:function(){sc(null,v),v.parentNode&&v.parentNode.removeChild(v)},component:P})}),function(){var S=Dn,k=S.getPrefixCls(o,u),T=S.getRootPrefixCls(s,k),O=c?d:"".concat(T,"-").concat(d);return h(Ng,y(y({},S),{},{notUpdateGlobalConfig:!0,prefixCls:T}),{default:function(){return[h(oh,y(y({ref:P},w),{},{prefixCls:k,transitionName:O}),null)]}})}}}),m=h(p,f);m.appContext=l||m.appContext,sc(m,v)};const K4=oh;var bM={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};const CM=bM;function bn(t,e){xM(t)&&(t="100%");var n=wM(t);return t=e===360?t:Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:(e===360?t=(t<0?t%e+e:t%e)/parseFloat(String(e)):t=t%e/parseFloat(String(e)),t)}function Uu(t){return Math.min(1,Math.max(0,t))}function xM(t){return typeof t=="string"&&t.indexOf(".")!==-1&&parseFloat(t)===1}function wM(t){return typeof t=="string"&&t.indexOf("%")!==-1}function H4(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function Yu(t){return t<=1?"".concat(Number(t)*100,"%"):t}function wo(t){return t.length===1?"0"+t:String(t)}function SM(t,e,n){return{r:bn(t,255)*255,g:bn(e,255)*255,b:bn(n,255)*255}}function V1(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=0,l=(r+a)/2;if(r===a)i=0,o=0;else{var u=r-a;switch(i=l>.5?u/(2-r-a):u/(r+a),r){case t:o=(e-n)/u+(e1&&(n-=1),n<1/6?t+(e-t)*(6*n):n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function PM(t,e,n){var r,a,o;if(t=bn(t,360),e=bn(e,100),n=bn(n,100),e===0)a=n,o=n,r=n;else{var i=n<.5?n*(1+e):n+e-n*e,l=2*n-i;r=Ef(l,i,t+1/3),a=Ef(l,i,t),o=Ef(l,i,t-1/3)}return{r:r*255,g:a*255,b:o*255}}function ih(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=r,l=r-a,u=r===0?0:l/r;if(r===a)o=0;else{switch(r){case t:o=(e-n)/l+(e>16,g:(t&65280)>>8,b:t&255}}var uh={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function ei(t){var e={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;return typeof t=="string"&&(t=_M(t)),typeof t=="object"&&(Qr(t.r)&&Qr(t.g)&&Qr(t.b)?(e=SM(t.r,t.g,t.b),i=!0,l=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Qr(t.h)&&Qr(t.s)&&Qr(t.v)?(r=Yu(t.s),a=Yu(t.v),e=kM(t.h,r,a),i=!0,l="hsv"):Qr(t.h)&&Qr(t.s)&&Qr(t.l)&&(r=Yu(t.s),o=Yu(t.l),e=PM(t.h,r,o),i=!0,l="hsl"),Object.prototype.hasOwnProperty.call(t,"a")&&(n=t.a)),n=H4(n),{ok:i,format:t.format||l,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:n}}var MM="[-\\+]?\\d+%?",IM="[-\\+]?\\d*\\.\\d+%?",Da="(?:".concat(IM,")|(?:").concat(MM,")"),Mf="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),If="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),hr={CSS_UNIT:new RegExp(Da),rgb:new RegExp("rgb"+Mf),rgba:new RegExp("rgba"+If),hsl:new RegExp("hsl"+Mf),hsla:new RegExp("hsla"+If),hsv:new RegExp("hsv"+Mf),hsva:new RegExp("hsva"+If),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function _M(t){if(t=t.trim().toLowerCase(),t.length===0)return!1;var e=!1;if(uh[t])t=uh[t],e=!0;else if(t==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=hr.rgb.exec(t);return n?{r:n[1],g:n[2],b:n[3]}:(n=hr.rgba.exec(t),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=hr.hsl.exec(t),n?{h:n[1],s:n[2],l:n[3]}:(n=hr.hsla.exec(t),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=hr.hsv.exec(t),n?{h:n[1],s:n[2],v:n[3]}:(n=hr.hsva.exec(t),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=hr.hex8.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),a:K1(n[4]),format:e?"name":"hex8"}:(n=hr.hex6.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),format:e?"name":"hex"}:(n=hr.hex4.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),a:K1(n[4]+n[4]),format:e?"name":"hex8"}:(n=hr.hex3.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),format:e?"name":"hex"}:!1)))))))))}function Qr(t){return!!hr.CSS_UNIT.exec(String(t))}var _f=function(){function t(e,n){e===void 0&&(e=""),n===void 0&&(n={});var r;if(e instanceof t)return e;typeof e=="number"&&(e=EM(e)),this.originalInput=e;var a=ei(e);this.originalInput=e,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(r=n.format)!==null&&r!==void 0?r:a.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return t.prototype.isDark=function(){return this.getBrightness()<128},t.prototype.isLight=function(){return!this.isDark()},t.prototype.getBrightness=function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},t.prototype.getLuminance=function(){var e=this.toRgb(),n,r,a,o=e.r/255,i=e.g/255,l=e.b/255;return o<=.03928?n=o/12.92:n=Math.pow((o+.055)/1.055,2.4),i<=.03928?r=i/12.92:r=Math.pow((i+.055)/1.055,2.4),l<=.03928?a=l/12.92:a=Math.pow((l+.055)/1.055,2.4),.2126*n+.7152*r+.0722*a},t.prototype.getAlpha=function(){return this.a},t.prototype.setAlpha=function(e){return this.a=H4(e),this.roundA=Math.round(100*this.a)/100,this},t.prototype.isMonochrome=function(){var e=this.toHsl().s;return e===0},t.prototype.toHsv=function(){var e=ih(this.r,this.g,this.b);return{h:e.h*360,s:e.s,v:e.v,a:this.a}},t.prototype.toHsvString=function(){var e=ih(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.v*100);return this.a===1?"hsv(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsva(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHsl=function(){var e=V1(this.r,this.g,this.b);return{h:e.h*360,s:e.s,l:e.l,a:this.a}},t.prototype.toHslString=function(){var e=V1(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.l*100);return this.a===1?"hsl(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHex=function(e){return e===void 0&&(e=!1),lh(this.r,this.g,this.b,e)},t.prototype.toHexString=function(e){return e===void 0&&(e=!1),"#"+this.toHex(e)},t.prototype.toHex8=function(e){return e===void 0&&(e=!1),OM(this.r,this.g,this.b,this.a,e)},t.prototype.toHex8String=function(e){return e===void 0&&(e=!1),"#"+this.toHex8(e)},t.prototype.toHexShortString=function(e){return e===void 0&&(e=!1),this.a===1?this.toHexString(e):this.toHex8String(e)},t.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},t.prototype.toRgbString=function(){var e=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?"rgb(".concat(e,", ").concat(n,", ").concat(r,")"):"rgba(".concat(e,", ").concat(n,", ").concat(r,", ").concat(this.roundA,")")},t.prototype.toPercentageRgb=function(){var e=function(n){return"".concat(Math.round(bn(n,255)*100),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},t.prototype.toPercentageRgbString=function(){var e=function(n){return Math.round(bn(n,255)*100)};return this.a===1?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},t.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var e="#"+lh(this.r,this.g,this.b,!1),n=0,r=Object.entries(uh);n=0,o=!n&&a&&(e.startsWith("hex")||e==="name");return o?e==="name"&&this.a===0?this.toName():this.toRgbString():(e==="rgb"&&(r=this.toRgbString()),e==="prgb"&&(r=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(r=this.toHexString()),e==="hex3"&&(r=this.toHexString(!0)),e==="hex4"&&(r=this.toHex8String(!0)),e==="hex8"&&(r=this.toHex8String()),e==="name"&&(r=this.toName()),e==="hsl"&&(r=this.toHslString()),e==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},t.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},t.prototype.clone=function(){return new t(this.toString())},t.prototype.lighten=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l+=e/100,n.l=Uu(n.l),new t(n)},t.prototype.brighten=function(e){e===void 0&&(e=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(e/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(e/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(e/100)))),new t(n)},t.prototype.darken=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l-=e/100,n.l=Uu(n.l),new t(n)},t.prototype.tint=function(e){return e===void 0&&(e=10),this.mix("white",e)},t.prototype.shade=function(e){return e===void 0&&(e=10),this.mix("black",e)},t.prototype.desaturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s-=e/100,n.s=Uu(n.s),new t(n)},t.prototype.saturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s+=e/100,n.s=Uu(n.s),new t(n)},t.prototype.greyscale=function(){return this.desaturate(100)},t.prototype.spin=function(e){var n=this.toHsl(),r=(n.h+e)%360;return n.h=r<0?360+r:r,new t(n)},t.prototype.mix=function(e,n){n===void 0&&(n=50);var r=this.toRgb(),a=new t(e).toRgb(),o=n/100,i={r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a};return new t(i)},t.prototype.analogous=function(e,n){e===void 0&&(e=6),n===void 0&&(n=30);var r=this.toHsl(),a=360/n,o=[this];for(r.h=(r.h-(a*e>>1)+720)%360;--e;)r.h=(r.h+a)%360,o.push(new t(r));return o},t.prototype.complement=function(){var e=this.toHsl();return e.h=(e.h+180)%360,new t(e)},t.prototype.monochromatic=function(e){e===void 0&&(e=6);for(var n=this.toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/e;e--;)i.push(new t({h:r,s:a,v:o})),o=(o+l)%1;return i},t.prototype.splitcomplement=function(){var e=this.toHsl(),n=e.h;return[this,new t({h:(n+72)%360,s:e.s,l:e.l}),new t({h:(n+216)%360,s:e.s,l:e.l})]},t.prototype.onBackground=function(e){var n=this.toRgb(),r=new t(e).toRgb(),a=n.a+r.a*(1-n.a);return new t({r:(n.r*n.a+r.r*r.a*(1-n.a))/a,g:(n.g*n.a+r.g*r.a*(1-n.a))/a,b:(n.b*n.a+r.b*r.a*(1-n.a))/a,a})},t.prototype.triad=function(){return this.polyad(3)},t.prototype.tetrad=function(){return this.polyad(4)},t.prototype.polyad=function(e){for(var n=this.toHsl(),r=n.h,a=[this],o=360/e,i=1;i=60&&Math.round(t.h)<=240?r=n?Math.round(t.h)-Gu*e:Math.round(t.h)+Gu*e:r=n?Math.round(t.h)+Gu*e:Math.round(t.h)-Gu*e,r<0?r+=360:r>=360&&(r-=360),r}function U1(t,e,n){if(t.h===0&&t.s===0)return t.s;var r;return n?r=t.s-H1*e:e===W4?r=t.s+H1:r=t.s+NM*e,r>1&&(r=1),n&&e===z4&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2))}function Y1(t,e,n){var r;return n?r=t.v+$M*e:r=t.v-AM*e,r>1&&(r=1),Number(r.toFixed(2))}function nu(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[],r=ei(t),a=z4;a>0;a-=1){var o=z1(r),i=qu(ei({h:W1(o,a,!0),s:U1(o,a,!0),v:Y1(o,a,!0)}));n.push(i)}n.push(qu(r));for(var l=1;l<=W4;l+=1){var u=z1(r),s=qu(ei({h:W1(u,l),s:U1(u,l),v:Y1(u,l)}));n.push(s)}return e.theme==="dark"?RM.map(function(d){var c=d.index,f=d.opacity,v=qu(DM(ei(e.backgroundColor||"#141414"),ei(n[c]),f*100));return v}):n}var vi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Nf={},$f={};Object.keys(vi).forEach(function(t){Nf[t]=nu(vi[t]),Nf[t].primary=Nf[t][5],$f[t]=nu(vi[t],{theme:"dark",backgroundColor:"#141414"}),$f[t].primary=$f[t][5]});var G1=[],il=[],FM="insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options]).";function LM(){var t=document.createElement("style");return t.setAttribute("type","text/css"),t}function BM(t,e){if(e=e||{},t===void 0)throw new Error(FM);var n=e.prepend===!0?"prepend":"append",r=e.container!==void 0?e.container:document.querySelector("head"),a=G1.indexOf(r);a===-1&&(a=G1.push(r)-1,il[a]={});var o;return il[a]!==void 0&&il[a][n]!==void 0?o=il[a][n]:(o=il[a][n]=LM(),n==="prepend"?r.insertBefore(o,r.childNodes[0]):r.appendChild(o)),t.charCodeAt(0)===65279&&(t=t.substr(1,t.length)),o.styleSheet?o.styleSheet.cssText+=t:o.textContent+=t,o}function q1(t){for(var e=1;e * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,Q1=!1,KM=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:VM;nt(function(){Q1||(typeof window<"u"&&window.document&&window.document.documentElement&&BM(e,{prepend:!0}),Q1=!0)})},HM=["icon","primaryColor","secondaryColor"];function zM(t,e){if(t==null)return{};var n=WM(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function WM(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}function Ts(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function uI(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}G4("#1890ff");var zi=function(e,n){var r,a=eb({},e,n.attrs),o=a.class,i=a.icon,l=a.spin,u=a.rotate,s=a.tabindex,d=a.twoToneColor,c=a.onClick,f=lI(a,tI),v=(r={anticon:!0},ch(r,"anticon-".concat(i.name),!!i.name),ch(r,o,o),r),g=l===""||l||i.name==="loading"?"anticon-spin":"",p=s;p===void 0&&c&&(p=-1,f.tabindex=p);var m=u?{msTransform:"rotate(".concat(u,"deg)"),transform:"rotate(".concat(u,"deg)")}:void 0,b=Y4(d),C=nI(b,2),x=C[0],w=C[1];return h("span",eb({role:"img","aria-label":i.name},f,{onClick:c,class:v}),[h(hg,{class:g,icon:i,primaryColor:x,secondaryColor:w,style:m},null)])};zi.props={spin:Boolean,rotate:Number,icon:Object,twoToneColor:String};zi.displayName="AntdIcon";zi.inheritAttrs=!1;zi.getTwoToneColor=eI;zi.setTwoToneColor=G4;const st=zi;function tb(t){for(var e=1;e=0;--Y){var K=this.tryEntries[Y],W=K.completion;if(K.tryLoc==="root")return U("end");if(K.tryLoc<=this.prev){var X=i.call(K,"catchLoc"),z=i.call(K,"finallyLoc");if(X&&z){if(this.prev=0;--U){var Y=this.tryEntries[U];if(Y.tryLoc<=this.prev&&i.call(Y,"finallyLoc")&&this.prev=0;--B){var U=this.tryEntries[B];if(U.finallyLoc===V)return this.complete(U.completion,U.afterLoc),D(U),x}},catch:function(V){for(var B=this.tryEntries.length-1;B>=0;--B){var U=this.tryEntries[B];if(U.tryLoc===V){var Y=U.completion;if(Y.type==="throw"){var K=Y.arg;D(U)}return K}}throw new Error("illegal catch attempt")},delegateYield:function(V,B,U){return this.delegate={iterator:_(V),resultName:B,nextLoc:U},this.method==="next"&&(this.arg=r),x}},a}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports})(a3);var _I=a3.exports,Es=_I(),NI=Es;try{regeneratorRuntime=Es}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Es:Function("r","regeneratorRuntime = r")(Es)}const Bn=ma(NI);var $I={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};const AI=$I;function lb(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:l3,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:u3,r;switch(t){case"topLeft":r={left:"0px",top:e,bottom:"auto"};break;case"topRight":r={right:"0px",top:e,bottom:"auto"};break;case"bottomLeft":r={left:"0px",top:"auto",bottom:n};break;default:r={right:"0px",top:"auto",bottom:n};break}return r}function XI(t,e){var n=t.prefixCls,r=t.placement,a=r===void 0?s3:r,o=t.getContainer,i=o===void 0?c3:o,l=t.top,u=t.bottom,s=t.closeIcon,d=s===void 0?d3:s,c=t.appContext,f=c_(),v=f.getPrefixCls,g=v("notification",n||dh),p="".concat(g,"-").concat(a,"-").concat(fh),m=mo[p];if(m){Promise.resolve(m).then(function(C){e(C)});return}var b=ce("".concat(g,"-").concat(a),A({},"".concat(g,"-rtl"),fh===!0));K4.newInstance({name:"notification",prefixCls:n||dh,class:b,style:qI(a,l,u),appContext:c,getContainer:i,closeIcon:function(x){var w=x.prefixCls,P=h("span",{class:"".concat(w,"-close-x")},[gl(d,{},h(Wr,{class:"".concat(w,"-close-icon")},null))]);return P},maxCount:f3,hasTransitionName:!0},function(C){mo[p]=C,e(C)})}var QI={success:wg,info:Pg,error:Og,warning:vd};function ZI(t){var e=t.icon,n=t.type,r=t.description,a=t.message,o=t.btn,i=t.duration===void 0?i3:t.duration;XI(t,function(l){l.notice({content:function(s){var d=s.prefixCls,c="".concat(d,"-notice"),f=null;if(e)f=function(){return h("span",{class:"".concat(c,"-icon")},[gl(e)])};else if(n){var v=QI[n];f=function(){return h(v,{class:"".concat(c,"-icon ").concat(c,"-icon-").concat(n)},null)}}return h("div",{class:f?"".concat(c,"-with-icon"):""},[f&&f(),h("div",{class:"".concat(c,"-message")},[!r&&f?h("span",{class:"".concat(c,"-message-single-line-auto-margin")},null):null,gl(a)]),h("div",{class:"".concat(c,"-description")},[gl(r)]),o?h("span",{class:"".concat(c,"-btn")},[gl(o)]):null])},duration:i,closable:!0,onClose:t.onClose,onClick:t.onClick,key:t.key,style:t.style||{},class:t.class})})}var ru={open:ZI,close:function(e){Object.keys(mo).forEach(function(n){return Promise.resolve(mo[n]).then(function(r){r.removeNotice(e)})})},config:GI,destroy:function(){Object.keys(mo).forEach(function(e){Promise.resolve(mo[e]).then(function(n){n.destroy()}),delete mo[e]})}},JI=["success","info","warning","error"];JI.forEach(function(t){ru[t]=function(e){return ru.open(y(y({},e),{},{type:t}))}});ru.warn=ru.warning;const Mg=ru;function Bo(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var e_="vc-util-key";function v3(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.mark;return e?e.startsWith("data-")?e:"data-".concat(e):e_}function Ig(t){if(t.attachTo)return t.attachTo;var e=document.querySelector("head");return e||document.body}function fb(t){var e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Bo())return null;var r=document.createElement("style");if((e=n.csp)!==null&&e!==void 0&&e.nonce){var a;r.nonce=(a=n.csp)===null||a===void 0?void 0:a.nonce}r.innerHTML=t;var o=Ig(n),i=o.firstChild;return n.prepend&&o.prepend?o.prepend(r):n.prepend&&i?o.insertBefore(r,i):o.appendChild(r),r}var vh=new Map;function t_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=Ig(e);return Array.from(vh.get(n).children).find(function(r){return r.tagName==="STYLE"&&r.getAttribute(v3(e))===t})}function n_(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=Ig(n);if(!vh.has(r)){var a=fb("",n),o=a.parentNode;vh.set(r,o),o.removeChild(a)}var i=t_(e,n);if(i){var l,u;if((l=n.csp)!==null&&l!==void 0&&l.nonce&&i.nonce!==((u=n.csp)===null||u===void 0?void 0:u.nonce)){var s;i.nonce=(s=n.csp)===null||s===void 0?void 0:s.nonce}return i.innerHTML!==t&&(i.innerHTML=t),i}var d=fb(t,n);return d.setAttribute(v3(n),e),d}const Pt=function(t,e,n){j4(t,"[ant-design-vue: ".concat(e,"] ").concat(n))};var r_="-ant-".concat(Date.now(),"-").concat(Math.random());function a_(t,e){var n={},r=function(d,c){var f=d.clone();return f=(c==null?void 0:c(f))||f,f.toRgbString()},a=function(d,c){var f=new _f(d),v=nu(f.toRgbString());n["".concat(c,"-color")]=r(f),n["".concat(c,"-color-disabled")]=v[1],n["".concat(c,"-color-hover")]=v[4],n["".concat(c,"-color-active")]=v[6],n["".concat(c,"-color-outline")]=f.clone().setAlpha(.2).toRgbString(),n["".concat(c,"-color-deprecated-bg")]=v[1],n["".concat(c,"-color-deprecated-border")]=v[3]};if(e.primaryColor){a(e.primaryColor,"primary");var o=new _f(e.primaryColor),i=nu(o.toRgbString());i.forEach(function(s,d){n["primary-".concat(d+1)]=s}),n["primary-color-deprecated-l-35"]=r(o,function(s){return s.lighten(35)}),n["primary-color-deprecated-l-20"]=r(o,function(s){return s.lighten(20)}),n["primary-color-deprecated-t-20"]=r(o,function(s){return s.tint(20)}),n["primary-color-deprecated-t-50"]=r(o,function(s){return s.tint(50)}),n["primary-color-deprecated-f-12"]=r(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var l=new _f(i[0]);n["primary-color-active-deprecated-f-30"]=r(l,function(s){return s.setAlpha(s.getAlpha()*.3)}),n["primary-color-active-deprecated-d-02"]=r(l,function(s){return s.darken(2)})}e.successColor&&a(e.successColor,"success"),e.warningColor&&a(e.warningColor,"warning"),e.errorColor&&a(e.errorColor,"error"),e.infoColor&&a(e.infoColor,"info");var u=Object.keys(n).map(function(s){return"--".concat(t,"-").concat(s,": ").concat(n[s],";")});Bo()?n_(` + :root { + `.concat(u.join(` +`),` + } + `),"".concat(r_,"-dynamic-theme")):Pt(!1,"ConfigProvider","SSR do not support dynamic theme with css variables.")}var h3=Symbol("GlobalFormContextKey"),o_=function(e){at(h3,e)},i_=function(){return Ze(h3,{validateMessages:L(function(){})})},l_=function(){return{getTargetContainer:{type:Function},getPopupContainer:{type:Function},prefixCls:String,getPrefixCls:{type:Function},renderEmpty:{type:Function},transformCellText:{type:Function},csp:{type:Object,default:void 0},input:{type:Object},autoInsertSpaceInButton:{type:Boolean,default:void 0},locale:{type:Object,default:void 0},pageHeader:{type:Object},componentSize:{type:String},direction:{type:String},space:{type:Object},virtual:{type:Boolean,default:void 0},dropdownMatchSelectWidth:{type:[Number,Boolean],default:!0},form:{type:Object,default:void 0},notUpdateGlobalConfig:Boolean}},u_="ant";function hi(){return Dn.prefixCls||u_}var hh=xt({}),p3=xt({}),Dn=xt({});Je(function(){pt(Dn,hh,p3),Dn.prefixCls=hi(),Dn.getPrefixCls=function(t,e){return e||(t?"".concat(Dn.prefixCls,"-").concat(t):Dn.prefixCls)},Dn.getRootPrefixCls=function(t,e){return t||(Dn.prefixCls?Dn.prefixCls:e&&e.includes("-")?e.replace(/^(.*)-[^-]*$/,"$1"):hi())}});var Af,s_=function(e){Af&&Af(),Af=Je(function(){pt(p3,xt(e)),pt(Dn,xt(e))}),e.theme&&a_(hi(),e.theme)},c_=function(){return{getPrefixCls:function(n,r){return r||(n?"".concat(hi(),"-").concat(n):hi())},getRootPrefixCls:function(n,r){return n||(Dn.prefixCls?Dn.prefixCls:r&&r.includes("-")?r.replace(/^(.*)-[^-]*$/,"$1"):hi())}}},Il=le({compatConfig:{MODE:3},name:"AConfigProvider",inheritAttrs:!1,props:l_(),setup:function(e,n){var r=n.slots,a=function(c,f){var v=e.prefixCls,g=v===void 0?"ant":v;return f||(c?"".concat(g,"-").concat(c):g)},o=function(c){var f=e.renderEmpty||r.renderEmpty||L4;return f(c)},i=function(c,f){var v=e.prefixCls;if(f)return f;var g=v||a("");return c?"".concat(g,"-").concat(c):g},l=xt(y(y({},e),{},{getPrefixCls:i,renderEmpty:o}));Object.keys(e).forEach(function(d){Se(function(){return e[d]},function(){l[d]=e[d]})}),e.notUpdateGlobalConfig||(pt(hh,l),Se(l,function(){pt(hh,l)}));var u=L(function(){var d={};if(e.locale){var c,f;d=((c=e.locale.Form)===null||c===void 0?void 0:c.defaultValidateMessages)||((f=wr.Form)===null||f===void 0?void 0:f.defaultValidateMessages)||{}}return e.form&&e.form.validateMessages&&(d=y(y({},d),e.form.validateMessages)),d});o_({validateMessages:u}),at("configProvider",l);var s=function(c){var f;return h(V4,{locale:e.locale||c,ANT_MARK__:ah},{default:function(){return[(f=r.default)===null||f===void 0?void 0:f.call(r)]}})};return Je(function(){e.direction&&(Cg.config({rtl:e.direction==="rtl"}),Mg.config({rtl:e.direction==="rtl"}))}),function(){return h(Vi,{children:function(c,f,v){return s(v)}},null)}}}),_g=xt({getPrefixCls:function(e,n){return n||(e?"ant-".concat(e):"ant")},renderEmpty:L4,direction:"ltr"});Il.config=s_;Il.install=function(t){t.component(Il.name,Il)};const Ng=Il,Re=function(t,e){var n=Ze("configProvider",_g),r=L(function(){return n.getPrefixCls(t,e.prefixCls)}),a=L(function(){var C;return(C=e.direction)!==null&&C!==void 0?C:n.direction}),o=L(function(){return n.getPrefixCls()}),i=L(function(){return n.autoInsertSpaceInButton}),l=L(function(){return n.renderEmpty}),u=L(function(){return n.space}),s=L(function(){return n.pageHeader}),d=L(function(){return n.form}),c=L(function(){return e.getTargetContainer||n.getTargetContainer}),f=L(function(){return e.getPopupContainer||n.getPopupContainer}),v=L(function(){var C;return(C=e.dropdownMatchSelectWidth)!==null&&C!==void 0?C:n.dropdownMatchSelectWidth}),g=L(function(){return(e.virtual===void 0?n.virtual!==!1:e.virtual!==!1)&&v.value!==!1}),p=L(function(){return e.size||n.componentSize}),m=L(function(){var C;return e.autocomplete||((C=n.input)===null||C===void 0?void 0:C.autocomplete)}),b=L(function(){return n.csp});return{configProvider:n,prefixCls:r,direction:a,size:p,getTargetContainer:c,getPopupContainer:f,space:u,pageHeader:s,form:d,autoInsertSpaceInButton:i,renderEmpty:l,virtual:g,dropdownMatchSelectWidth:v,rootPrefixCls:o,getPrefixCls:n.getPrefixCls,autocomplete:m,csp:b}};function it(t,e){for(var n=pt({},t),r=0;r"u")return 0;var n=e?"scrollTop":"scrollLeft",r=0;if(ph(t)?r=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?r=t.documentElement[n]:t&&(r=t[n]),t&&!ph(t)&&typeof r!="number"){var a;r=(a=(t.ownerDocument||t).documentElement)===null||a===void 0?void 0:a[n]}return r}function h_(t,e,n,r){var a=n-e;return t/=r/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function Ag(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.getContainer,r=n===void 0?function(){return window}:n,a=e.callback,o=e.duration,i=o===void 0?450:o,l=r(),u=$g(l,!0),s=Date.now(),d=function c(){var f=Date.now(),v=f-s,g=h_(v>i?i:v,u,t,i);ph(l)?l.scrollTo(window.pageXOffset,g):l instanceof HTMLDocument||l.constructor.name==="HTMLDocument"?l.documentElement.scrollTop=g:l.scrollTop=g,v0&&arguments[0]!==void 0?arguments[0]:0,k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:5,T=[],O=p.value();if(v.links.forEach(function($){var I=hb.exec($.toString());if(I){var E=document.getElementById(I[1]);if(E){var F=vb(E,O);F$.top?I:$});return N.link}return""},b=function(S){var k=e.getCurrentAnchor;g.value!==S&&(g.value=typeof k=="function"?k():S,r("change",S))},C=function(S){var k=e.offsetTop,T=e.targetOffset;b(S);var O=p.value(),N=$g(O,!0),$=hb.exec(S);if($){var I=document.getElementById($[1]);if(I){var E=vb(I,O),F=N+E;F-=T!==void 0?T:k||0,v.animating=!0,Ag(F,{callback:function(){v.animating=!1},getContainer:p.value})}}};i({scrollTo:C});var x=function(){if(!v.animating){var S=e.offsetTop,k=e.bounds,T=e.targetOffset,O=m(T!==void 0?T:S||0,k);b(O)}},w=function(){var S=f.value.getElementsByClassName("".concat(u.value,"-link-title-active"))[0];S&&(c.value.style.top="".concat(S.offsetTop+S.clientHeight/2-4.5,"px"))};return m_({registerLink:function(S){v.links.includes(S)||v.links.push(S)},unregisterLink:function(S){var k=v.links.indexOf(S);k!==-1&&v.links.splice(k,1)},activeLink:g,scrollTo:C,handleClick:function(S,k){r("click",S,k)}}),Ge(function(){nt(function(){var P=p.value();v.scrollContainer=P,v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x()})}),ut(function(){v.scrollEvent&&v.scrollEvent.remove()}),wn(function(){if(v.scrollEvent){var P=p.value();v.scrollContainer!==P&&(v.scrollContainer=P,v.scrollEvent.remove(),v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x())}w()}),function(){var P,S=e.offsetTop,k=e.affix,T=e.showInkInFixed,O=u.value,N=ce("".concat(O,"-ink-ball"),{visible:g.value}),$=ce(e.wrapperClass,"".concat(O,"-wrapper"),A({},"".concat(O,"-rtl"),d.value==="rtl")),I=ce(O,A({},"".concat(O,"-fixed"),!k&&!T)),E=y({maxHeight:S?"calc(100vh - ".concat(S,"px)"):"100vh"},e.wrapperStyle),F=h("div",{class:$,style:E,ref:f},[h("div",{class:I},[h("div",{class:"".concat(O,"-ink")},[h("span",{class:N,ref:c},null)]),(P=o.default)===null||P===void 0?void 0:P.call(o)])]);return k?h(g3,y(y({},a),{},{offsetTop:S,target:p.value}),{default:function(){return[F]}}):F}}});var C_=function(){return{prefixCls:String,href:String,title:G.any,target:String}};const y3=le({compatConfig:{MODE:3},name:"AAnchorLink",props:ct(C_(),{href:"#"}),slots:["title"],setup:function(e,n){var r=n.slots,a=null,o=g_(),i=o.handleClick,l=o.scrollTo,u=o.unregisterLink,s=o.registerLink,d=o.activeLink,c=Re("anchor",e),f=c.prefixCls,v=function(p){var m=e.href;i(p,{title:a,href:m}),l(m)};return Se(function(){return e.href},function(g,p){nt(function(){u(p),s(g)})}),Ge(function(){s(e.href)}),ut(function(){u(e.href)}),function(){var g,p=e.href,m=e.target,b=f.value,C=$t(r,e,"title");a=C;var x=d.value===p,w=ce("".concat(b,"-link"),A({},"".concat(b,"-link-active"),x)),P=ce("".concat(b,"-link-title"),A({},"".concat(b,"-link-title-active"),x));return h("div",{class:w},[h("a",{class:P,href:p,title:typeof C=="string"?C:"",target:m,onClick:v},[C]),(g=r.default)===null||g===void 0?void 0:g.call(r)])}}});yo.Link=y3;yo.install=function(t){return t.component(yo.name,yo),t.component(yo.Link.name,yo.Link),t};function Rg(t){return u4(t)||c4(t)||dd(t)||s4()}function pb(t,e){var n=t.key,r;return"value"in t&&(r=t.value),n??(r!==void 0?r:"rc-index-key-".concat(e))}function b3(t,e){var n=t||{},r=n.label,a=n.value,o=n.options;return{label:r||(e?"children":"label"),value:a||"value",options:o||"options"}}function x_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.fieldNames,r=e.childrenAsData,a=[],o=b3(n,!1),i=o.label,l=o.value,u=o.options;function s(d,c){d.forEach(function(f){var v=f[i];if(c||!(u in f)){var g=f[l];a.push({key:pb(f,a.length),groupOption:c,data:f,label:v,value:g})}else{var p=v;p===void 0&&r&&(p=f.label),a.push({key:pb(f,a.length),group:!0,data:f,label:p}),s(f[u],!0)}})}return s(t,!1),a}function gh(t){var e=y({},t);return"props"in e||Object.defineProperty(e,"props",{get:function(){return e}}),e}function w_(t,e){if(!e||!e.length)return null;var n=!1;function r(o,i){var l=Rg(i),u=l[0],s=l.slice(1);if(!u)return[o];var d=o.split(u);return n=n||d.length>1,d.reduce(function(c,f){return[].concat(Ie(c),Ie(r(f,s)))},[]).filter(function(c){return c})}var a=r(t,e);return n?a:null}function bo(t,e){return t?t.contains(e):!1}var C3=["moz","ms","webkit"];function S_(){var t=0;return function(e){var n=new Date().getTime(),r=Math.max(0,16-(n-t)),a=window.setTimeout(function(){e(n+r)},r);return t=n+r,a}}function P_(){if(typeof window>"u")return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var t=C3.filter(function(e){return"".concat(e,"RequestAnimationFrame")in window})[0];return t?window["".concat(t,"RequestAnimationFrame")]:S_()}function k_(t){if(typeof window>"u")return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(t);var e=C3.filter(function(n){return"".concat(n,"CancelAnimationFrame")in window||"".concat(n,"CancelRequestAnimationFrame")in window})[0];return e?(window["".concat(e,"CancelAnimationFrame")]||window["".concat(e,"CancelRequestAnimationFrame")]).call(this,t):clearTimeout(t)}var gb=P_(),O_=function(e){return k_(e.id)},T_=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=Date.now();function a(){Date.now()-r>=n?e.call():o.id=gb(a)}var o={id:gb(a)};return o},Dg={visible:Boolean,prefixCls:String,zIndex:Number,destroyPopupOnHide:Boolean,forceRender:Boolean,animation:[String,Object],transitionName:String,stretch:{type:String},align:{type:Object},point:{type:Object},getRootDomNode:{type:Function},getClassNameFromAlign:{type:Function},onMouseenter:{type:Function},onMouseleave:{type:Function},onMousedown:{type:Function},onTouchstart:{type:Function}},E_=y(y({},Dg),{},{mobile:{type:Object}}),M_=y(y({},Dg),{},{mask:Boolean,mobile:{type:Object},maskAnimation:String,maskTransitionName:String});function x3(t){var e=t.prefixCls,n=t.animation,r=t.transitionName;return n?{name:"".concat(e,"-").concat(n)}:r?{name:r}:{}}function w3(t){var e=t.prefixCls,n=t.visible,r=t.zIndex,a=t.mask,o=t.maskAnimation,i=t.maskTransitionName;if(!a)return null;var l={};return(i||o)&&(l=x3({prefixCls:e,transitionName:i,animation:o})),h(Nn,y({appear:!0},l),{default:function(){return[gn(h("div",{style:{zIndex:r},class:"".concat(e,"-mask")},null),[[CT("if"),n]])]}})}w3.displayName="Mask";const I_=le({compatConfig:{MODE:3},name:"MobilePopupInner",inheritAttrs:!1,props:E_,emits:["mouseenter","mouseleave","mousedown","touchstart","align"],setup:function(e,n){var r=n.expose,a=n.slots,o=Q();return r({forceAlign:function(){},getElement:function(){return o.value}}),function(){var i,l=e.zIndex,u=e.visible,s=e.prefixCls,d=e.mobile,c=d===void 0?{}:d,f=c.popupClassName,v=c.popupStyle,g=c.popupMotion,p=g===void 0?{}:g,m=c.popupRender,b=y({zIndex:l},v),C=Et((i=a.default)===null||i===void 0?void 0:i.call(a));C.length>1&&(C=h("div",{class:"".concat(s,"-content")},[C])),m&&(C=m(C));var x=ce(s,f);return h(Nn,y({ref:o},p),{default:function(){return[u?h("div",{class:x,style:b},[C]):null]}})}}});var mb=["measure","align",null,"motion"];const __=function(t,e){var n=Q(null),r=Q(),a=Q(!1);function o(u){a.value||(n.value=u)}function i(){qe.cancel(r.value)}function l(u){i(),r.value=qe(function(){var s=n.value;switch(n.value){case"align":s="motion";break;case"motion":s="stable";break}o(s),u==null||u()})}return Se(t,function(){o("measure")},{immediate:!0,flush:"post"}),Ge(function(){Se(n,function(){switch(n.value){case"measure":e();break}n.value&&(r.value=qe(Lo(Bn.mark(function u(){var s,d;return Bn.wrap(function(f){for(;;)switch(f.prev=f.next){case 0:s=mb.indexOf(n.value),d=mb[s+1],d&&s!==-1&&o(d);case 3:case"end":return f.stop()}},u)}))))},{immediate:!0,flush:"post"})}),ut(function(){a.value=!0,i()}),[n,l]},N_=function(t){var e=Q({width:0,height:0});function n(a){e.value={width:a.offsetWidth,height:a.offsetHeight}}var r=L(function(){var a={};if(t.value){var o=e.value,i=o.width,l=o.height;t.value.indexOf("height")!==-1&&l?a.height="".concat(l,"px"):t.value.indexOf("minHeight")!==-1&&l&&(a.minHeight="".concat(l,"px")),t.value.indexOf("width")!==-1&&i?a.width="".concat(i,"px"):t.value.indexOf("minWidth")!==-1&&i&&(a.minWidth="".concat(i,"px"))}return a});return[r,n]};function yb(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function bb(t){for(var e=1;e=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function tN(t,e,n,r){var a=yt.clone(t),o={width:e.width,height:e.height};return r.adjustX&&a.left=n.left&&a.left+o.width>n.right&&(o.width-=a.left+o.width-n.right),r.adjustX&&a.left+o.width>n.right&&(a.left=Math.max(n.right-o.width,n.left)),r.adjustY&&a.top=n.top&&a.top+o.height>n.bottom&&(o.height-=a.top+o.height-n.bottom),r.adjustY&&a.top+o.height>n.bottom&&(a.top=Math.max(n.bottom-o.height,n.top)),yt.mix(a,o)}function jg(t){var e,n,r;if(!yt.isWindow(t)&&t.nodeType!==9)e=yt.offset(t),n=yt.outerWidth(t),r=yt.outerHeight(t);else{var a=yt.getWindow(t);e={left:yt.getWindowScrollLeft(a),top:yt.getWindowScrollTop(a)},n=yt.viewportWidth(a),r=yt.viewportHeight(a)}return e.width=n,e.height=r,e}function Tb(t,e){var n=e.charAt(0),r=e.charAt(1),a=t.width,o=t.height,i=t.left,l=t.top;return n==="c"?l+=o/2:n==="b"&&(l+=o),r==="c"?i+=a/2:r==="r"&&(i+=a),{left:i,top:l}}function Zu(t,e,n,r,a){var o=Tb(e,n[1]),i=Tb(t,n[0]),l=[i.left-o.left,i.top-o.top];return{left:Math.round(t.left-l[0]+r[0]-a[0]),top:Math.round(t.top-l[1]+r[1]-a[1])}}function Eb(t,e,n){return t.leftn.right}function Mb(t,e,n){return t.topn.bottom}function nN(t,e,n){return t.left>n.right||t.left+e.widthn.bottom||t.top+e.height=n.right||r.top>=n.bottom}function Vg(t,e,n){var r=n.target||e,a=jg(r),o=!aN(r,n.overflow&&n.overflow.alwaysByViewport);return I3(t,a,n,o)}Vg.__getOffsetParent=Ch;Vg.__getVisibleRectForElement=Bg;function oN(t,e,n){var r,a,o=yt.getDocument(t),i=o.defaultView||o.parentWindow,l=yt.getWindowScrollLeft(i),u=yt.getWindowScrollTop(i),s=yt.viewportWidth(i),d=yt.viewportHeight(i);"pageX"in e?r=e.pageX:r=l+e.clientX,"pageY"in e?a=e.pageY:a=u+e.clientY;var c={left:r,top:a,width:0,height:0},f=r>=0&&r<=l+s&&a>=0&&a<=u+d,v=[n.points[0],"cc"];return I3(t,c,bb(bb({},n),{},{points:v}),f)}function Ct(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=t;if(Array.isArray(t)&&(a=Gt(t)[0]),!a)return null;var o=Cn(a,e,r);return o.props=n?y(y({},o.props),e):o.props,Qt(Fe(o.props.class)!=="object","class must be string"),o}function iN(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return t.map(function(r){return Ct(r,e,n)})}function _l(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(Array.isArray(t))return t.map(function(o){return _l(o,e,n,r)});var a=Ct(t,e,n,r);return Array.isArray(a.children)&&(a.children=_l(a.children)),a}const Kg=function(t){if(!t)return!1;if(t.offsetParent)return!0;if(t.getBBox){var e=t.getBBox();if(e.width||e.height)return!0}if(t.getBoundingClientRect){var n=t.getBoundingClientRect();if(n.width||n.height)return!0}return!1};function lN(t,e){return t===e?!0:!t||!e?!1:"pageX"in e&&"pageY"in e?t.pageX===e.pageX&&t.pageY===e.pageY:"clientX"in e&&"clientY"in e?t.clientX===e.clientX&&t.clientY===e.clientY:!1}function uN(t,e){t!==document.activeElement&&bo(e,t)&&typeof t.focus=="function"&&t.focus()}function Nb(t,e){var n=null,r=null;function a(i){var l=Te(i,1),u=l[0].target;if(document.documentElement.contains(u)){var s=u.getBoundingClientRect(),d=s.width,c=s.height,f=Math.floor(d),v=Math.floor(c);(n!==f||r!==v)&&Promise.resolve().then(function(){e({width:f,height:v})}),n=f,r=v}}var o=new og(a);return t&&o.observe(t),function(){o.disconnect()}}const sN=function(t,e){var n=!1,r=null;function a(){clearTimeout(r)}function o(i){if(!n||i===!0){if(t()===!1)return;n=!0,a(),r=setTimeout(function(){n=!1},e.value)}else a(),r=setTimeout(function(){n=!1,o()},e.value)}return[o,function(){n=!1,a()}]};function cN(){this.__data__=[],this.size=0}function Hg(t,e){return t===e||t!==t&&e!==e}function pd(t,e){for(var n=t.length;n--;)if(Hg(t[n][0],e))return n;return-1}var dN=Array.prototype,fN=dN.splice;function vN(t){var e=this.__data__,n=pd(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():fN.call(e,n,1),--this.size,!0}function hN(t){var e=this.__data__,n=pd(e,t);return n<0?void 0:e[n][1]}function pN(t){return pd(this.__data__,t)>-1}function gN(t,e){var n=this.__data__,r=pd(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function ya(t){var e=-1,n=t==null?0:t.length;for(this.clear();++el))return!1;var s=o.get(t),d=o.get(e);if(s&&d)return s==e&&d==t;var c=-1,f=!0,v=n&c$?new Ei:void 0;for(o.set(t,e),o.set(e,t);++c-1&&t%1==0&&t-1&&t%1==0&&t<=H$}var z$="[object Arguments]",W$="[object Array]",U$="[object Boolean]",Y$="[object Date]",G$="[object Error]",q$="[object Function]",X$="[object Map]",Q$="[object Number]",Z$="[object Object]",J$="[object RegExp]",eA="[object Set]",tA="[object String]",nA="[object WeakMap]",rA="[object ArrayBuffer]",aA="[object DataView]",oA="[object Float32Array]",iA="[object Float64Array]",lA="[object Int8Array]",uA="[object Int16Array]",sA="[object Int32Array]",cA="[object Uint8Array]",dA="[object Uint8ClampedArray]",fA="[object Uint16Array]",vA="[object Uint32Array]",Kt={};Kt[oA]=Kt[iA]=Kt[lA]=Kt[uA]=Kt[sA]=Kt[cA]=Kt[dA]=Kt[fA]=Kt[vA]=!0;Kt[z$]=Kt[W$]=Kt[rA]=Kt[U$]=Kt[aA]=Kt[Y$]=Kt[G$]=Kt[q$]=Kt[X$]=Kt[Q$]=Kt[Z$]=Kt[J$]=Kt[eA]=Kt[tA]=Kt[nA]=!1;function hA(t){return xr(t)&&qg(t.length)&&!!Kt[Ya(t)]}function md(t){return function(e){return t(e)}}var F3=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nl=F3&&typeof module=="object"&&module&&!module.nodeType&&module,pA=Nl&&Nl.exports===F3,Vf=pA&&d4.process,gA=function(){try{var t=Nl&&Nl.require&&Nl.require("util").types;return t||Vf&&Vf.binding&&Vf.binding("util")}catch{}}();const Mi=gA;var Bb=Mi&&Mi.isTypedArray,mA=Bb?md(Bb):hA;const L3=mA;var yA=Object.prototype,bA=yA.hasOwnProperty;function B3(t,e){var n=fr(t),r=!n&&Yg(t),a=!n&&!r&&mc(t),o=!n&&!r&&!a&&L3(t),i=n||r||a||o,l=i?N$(t.length,String):[],u=l.length;for(var s in t)(e||bA.call(t,s))&&!(i&&(s=="length"||a&&(s=="offset"||s=="parent")||o&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||Gg(s,u)))&&l.push(s);return l}var CA=Object.prototype;function Xg(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||CA;return t===n}var xA=v4(Object.keys,Object);const wA=xA;var SA=Object.prototype,PA=SA.hasOwnProperty;function kA(t){if(!Xg(t))return wA(t);var e=[];for(var n in Object(t))PA.call(t,n)&&n!="constructor"&&e.push(n);return e}function Su(t){return t!=null&&qg(t.length)&&!_3(t)}function Wi(t){return Su(t)?B3(t):kA(t)}function xh(t){return $3(t,Wi,Ug)}var OA=1,TA=Object.prototype,EA=TA.hasOwnProperty;function MA(t,e,n,r,a,o){var i=n&OA,l=xh(t),u=l.length,s=xh(e),d=s.length;if(u!=d&&!i)return!1;for(var c=u;c--;){var f=l[c];if(!(i?f in e:EA.call(e,f)))return!1}var v=o.get(t),g=o.get(e);if(v&&g)return v==e&&g==t;var p=!0;o.set(t,e),o.set(e,t);for(var m=i;++c1&&(Y=h("div",{class:"".concat(F,"-content")},[Y]));var K=ce(F,a.class,u.value),W=g.value||!e.visible,X=W?Ga(T.value.name,T.value):{};return h(Nn,y(y({ref:l},X),{},{onBeforeEnter:O}),{default:function(){return!j||e.visible?gn(h(zA,{target:P(),key:"popup",ref:i,monitorWindowResize:!0,disabled:N.value,align:E,onAlign:k},{default:function(){return h("div",y(y({class:K,onMouseenter:D,onMouseleave:R,onMousedown:x1(V,["capture"])},A({},nn?"onTouchstartPassive":"onTouchstart",x1(M,["capture"]))),{},{style:U}),[Y])}}),[[Tr,g.value]]):null}})}}}),UA=le({compatConfig:{MODE:3},name:"Popup",inheritAttrs:!1,props:M_,setup:function(e,n){var r=n.attrs,a=n.slots,o=n.expose,i=Q(!1),l=Q(!1),u=Q();return Se([function(){return e.visible},function(){return e.mobile}],function(){i.value=e.visible,e.visible&&e.mobile&&(l.value=!0)},{immediate:!0,flush:"post"}),o({forceAlign:function(){var d;(d=u.value)===null||d===void 0||d.forceAlign()},getElement:function(){var d;return(d=u.value)===null||d===void 0?void 0:d.getElement()}}),function(){var s=y(y(y({},e),r),{},{visible:i.value}),d=l.value?h(I_,y(y({},s),{},{mobile:e.mobile,ref:u}),{default:a.default}):h(WA,y(y({},s),{},{ref:u}),{default:a.default});return h("div",null,[h(w3,s,null),d])}}});function YA(t,e,n){return n?t[0]===e[0]:t[0]===e[0]&&t[1]===e[1]}function Xb(t,e,n){var r=t[e]||{};return y(y({},r),n)}function GA(t,e,n,r){for(var a=n.points,o=Object.keys(t),i=0;i0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=typeof e=="function"?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var a=this.getDerivedStateFromProps(p4(this),y(y({},this.$data),r));if(a===null)return;r=y(y({},r),a||{})}pt(this.$data,r),this._.isMounted&&this.$forceUpdate(),nt(function(){n&&n()})},__emit:function(){var e=[].slice.call(arguments,0),n=e[0];n="on".concat(n[0].toUpperCase()).concat(n.substring(1));var r=this.$props[n]||this.$attrs[n];if(e.length&&r)if(Array.isArray(r))for(var a=0,o=r.length;a1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};at(K3,{inTriggerContext:n.inTriggerContext,shouldRender:L(function(){var r=e||{},a=r.sPopupVisible,o=r.popupRef,i=r.forceRender,l=r.autoDestroy,u=!1;return(a||o||i)&&(u=!0),!a&&l&&(u=!1),u})})},XA=function(){Qg({},{inTriggerContext:!1});var e=Ze(K3,{shouldRender:L(function(){return!1}),inTriggerContext:!1});return{shouldRender:L(function(){return e.shouldRender.value||e.inTriggerContext===!1})}};const kh=le({compatConfig:{MODE:3},name:"Portal",inheritAttrs:!1,props:{getContainer:G.func.isRequired,didUpdate:Function},setup:function(e,n){var r=n.slots,a=!0,o,i=XA(),l=i.shouldRender;ld(function(){a=!1,l.value&&(o=e.getContainer())});var u=Se(l,function(){l.value&&!o&&(o=e.getContainer()),o&&u()});return wn(function(){nt(function(){if(l.value){var s;(s=e.didUpdate)===null||s===void 0||s.call(e,e)}})}),ut(function(){o&&o.parentNode&&o.parentNode.removeChild(o)}),function(){if(!l.value)return null;if(a){var s;return(s=r.default)===null||s===void 0?void 0:s.call(r)}return o?h(eg,{to:o},r):null}}});function Qb(){}function QA(){return""}function ZA(t){return t?t.ownerDocument:window.document}var JA=["onClick","onMousedown","onTouchstart","onMouseenter","onMouseleave","onFocus","onBlur","onContextmenu"];const Ui=le({compatConfig:{MODE:3},name:"Trigger",mixins:[Ko],inheritAttrs:!1,props:{action:G.oneOfType([G.string,G.arrayOf(G.string)]).def([]),showAction:G.any.def([]),hideAction:G.any.def([]),getPopupClassNameFromAlign:G.any.def(QA),onPopupVisibleChange:Function,afterPopupVisibleChange:G.func.def(Qb),popup:G.any,popupStyle:{type:Object,default:void 0},prefixCls:G.string.def("rc-trigger-popup"),popupClassName:G.string.def(""),popupPlacement:String,builtinPlacements:G.object,popupTransitionName:String,popupAnimation:G.any,mouseEnterDelay:G.number.def(0),mouseLeaveDelay:G.number.def(.1),zIndex:Number,focusDelay:G.number.def(0),blurDelay:G.number.def(.15),getPopupContainer:Function,getDocument:G.func.def(ZA),forceRender:{type:Boolean,default:void 0},destroyPopupOnHide:{type:Boolean,default:!1},mask:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},popupAlign:G.object.def(function(){return{}}),popupVisible:{type:Boolean,default:void 0},defaultPopupVisible:{type:Boolean,default:!1},maskTransitionName:String,maskAnimation:String,stretch:String,alignPoint:{type:Boolean,default:void 0},autoDestroy:{type:Boolean,default:!1},mobile:Object,getTriggerDOMNode:Function,tryPopPortal:Boolean},setup:function(e){var n=L(function(){var u=e.popupPlacement,s=e.popupAlign,d=e.builtinPlacements;return u&&d?Xb(d,u,s):s}),r=qA(e.tryPopPortal),a=r.setPortal,o=r.popPortal,i=Q(null),l=function(s){i.value=s};return{popPortal:o,setPortal:a,vcTriggerContext:Ze("vcTriggerContext",{}),popupRef:i,setPopupRef:l,triggerRef:Q(null),align:n,focusTime:null,clickOutsideHandler:null,contextmenuOutsideHandler1:null,contextmenuOutsideHandler2:null,touchOutsideHandler:null,attachId:null,delayTimer:null,hasPopupMouseDown:!1,preClickTime:null,preTouchTime:null,mouseDownTimeout:null,childOriginEvents:{}}},data:function(){var e=this,n,r=this.$props,a;return this.popupVisible!==void 0?a=!!r.popupVisible:a=!!r.defaultPopupVisible,JA.forEach(function(o){e["fire".concat(o)]=function(i){e.fireEvents(o,i)}}),(n=this.setPortal)===null||n===void 0||n.call(this,h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent})),{prevPopupVisible:a,sPopupVisible:a,point:null}},watch:{popupVisible:function(e){e!==void 0&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},created:function(){at("vcTriggerContext",{onPopupMouseDown:this.onPopupMouseDown}),Qg(this)},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},beforeUnmount:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),qe.cancel(this.attachId)},methods:{updatedCal:function(){var e=this.$props,n=this.$data;if(n.sPopupVisible){var r;!this.clickOutsideHandler&&(this.isClickToHide()||this.isContextmenuToShow())&&(r=e.getDocument(this.getRootDomNode()),this.clickOutsideHandler=Dt(r,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(r=r||e.getDocument(this.getRootDomNode()),this.touchOutsideHandler=Dt(r,"touchstart",this.onDocumentClick,nn?{passive:!1}:!1)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(r=r||e.getDocument(this.getRootDomNode()),this.contextmenuOutsideHandler1=Dt(r,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=Dt(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var n=this.$props.mouseEnterDelay;this.fireEvents("onMouseenter",e),this.delaySetPopupVisible(!0,n,n?null:e)},onMouseMove:function(e){this.fireEvents("onMousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("onMouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){var n;e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&bo((n=this.popupRef)===null||n===void 0?void 0:n.getElement(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("onFocus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("onMousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("onTouchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){bo(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("onBlur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("onContextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("onClick",e),this.focusTime){var n;if(this.preClickTime&&this.preTouchTime?n=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?n=this.preClickTime:this.preTouchTime&&(n=this.preTouchTime),Math.abs(n-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var r=!this.$data.sPopupVisible;(this.isClickToHide()&&!r||r&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,n=this.vcTriggerContext,r=n===void 0?{}:n;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),r.onPopupMouseDown&&r.onPopupMouseDown.apply(r,arguments)},onDocumentClick:function(e){if(!(this.$props.mask&&!this.$props.maskClosable)){var n=e.target,r=this.getRootDomNode(),a=this.getPopupDomNode();(!bo(r,n)||this.isContextMenuOnly())&&!bo(a,n)&&!this.hasPopupMouseDown&&this.delaySetPopupVisible(!1,.1)}},getPopupDomNode:function(){var e;return((e=this.popupRef)===null||e===void 0?void 0:e.getElement())||null},getRootDomNode:function(){var e=this.$props.getTriggerDOMNode;if(e){var n=Ra(this.triggerRef);return Ra(e(n))}try{var r=Ra(this.triggerRef);if(r)return r}catch{}return Ra(this)},handleGetPopupClassFromAlign:function(e){var n=[],r=this.$props,a=r.popupPlacement,o=r.builtinPlacements,i=r.prefixCls,l=r.alignPoint,u=r.getPopupClassNameFromAlign;return a&&o&&n.push(GA(o,i,e,l)),u&&n.push(u(e)),n.join(" ")},getPopupAlign:function(){var e=this.$props,n=e.popupPlacement,r=e.popupAlign,a=e.builtinPlacements;return n&&a?Xb(a,n,r):r},getComponent:function(){var e=this,n={};this.isMouseEnterToShow()&&(n.onMouseenter=this.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.onMouseleave=this.onPopupMouseleave),n.onMousedown=this.onPopupMouseDown,n[nn?"onTouchstartPassive":"onTouchstart"]=this.onPopupMouseDown;var r=this.handleGetPopupClassFromAlign,a=this.getRootDomNode,o=this.getContainer,i=this.$attrs,l=this.$props,u=l.prefixCls,s=l.destroyPopupOnHide,d=l.popupClassName,c=l.popupAnimation,f=l.popupTransitionName,v=l.popupStyle,g=l.mask,p=l.maskAnimation,m=l.maskTransitionName,b=l.zIndex,C=l.stretch,x=l.alignPoint,w=l.mobile,P=l.forceRender,S=this.$data,k=S.sPopupVisible,T=S.point,O=y(y({prefixCls:u,destroyPopupOnHide:s,visible:k,point:x?T:null,align:this.align,animation:c,getClassNameFromAlign:r,stretch:C,getRootDomNode:a,mask:g,zIndex:b,transitionName:f,maskAnimation:p,maskTransitionName:m,getContainer:o,class:d,style:v,onAlign:i.onPopupAlign||Qb},n),{},{ref:this.setPopupRef,mobile:w,forceRender:P});return h(UA,O,{default:this.$slots.popup||function(){return cg(e,"popup")}})},attachParent:function(e){var n=this;qe.cancel(this.attachId);var r=this.$props,a=r.getPopupContainer,o=r.getDocument,i=this.getRootDomNode(),l;a?(i||a.length===0)&&(l=a(i)):l=o(this.getRootDomNode()).body,l?l.appendChild(e):this.attachId=qe(function(){n.attachParent(e)})},getContainer:function(){var e=this.$props,n=e.getDocument,r=n(this.getRootDomNode()).createElement("div");return r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",this.attachParent(r),r},setPopupVisible:function(e,n){var r=this.alignPoint,a=this.sPopupVisible,o=this.onPopupVisibleChange;this.clearDelayTimer(),a!==e&&(la(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:a}),o&&o(e)),r&&n&&e&&this.setPoint(n)},setPoint:function(e){var n=this.$props.alignPoint;!n||!e||this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},handlePortalUpdate:function(){this.prevPopupVisible!==this.sPopupVisible&&this.afterPopupVisibleChange(this.sPopupVisible)},delaySetPopupVisible:function(e,n,r){var a=this,o=n*1e3;if(this.clearDelayTimer(),o){var i=r?{pageX:r.pageX,pageY:r.pageY}:null;this.delayTimer=T_(function(){a.setPopupVisible(e,i),a.clearDelayTimer()},o)}else this.setPopupVisible(e,r)},clearDelayTimer:function(){this.delayTimer&&(O_(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var n=function(){},r=T1(this);return this.childOriginEvents[e]&&r[e]?this["fire".concat(e)]:(n=this.childOriginEvents[e]||r[e]||n,n)},isClickToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isContextMenuOnly:function(){var e=this.$props.action;return e==="contextmenu"||e.length===1&&e[0]==="contextmenu"},isContextmenuToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("contextmenu")!==-1||r.indexOf("contextmenu")!==-1},isClickToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isMouseEnterToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("hover")!==-1||r.indexOf("mouseenter")!==-1},isMouseLeaveToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("hover")!==-1||r.indexOf("mouseleave")!==-1},isFocusToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("focus")!==-1||r.indexOf("focus")!==-1},isBlurToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("focus")!==-1||r.indexOf("blur")!==-1},forcePopupAlign:function(){if(this.$data.sPopupVisible){var e;(e=this.popupRef)===null||e===void 0||e.forceAlign()}},fireEvents:function(e,n){this.childOriginEvents[e]&&this.childOriginEvents[e](n);var r=this.$props[e]||this.$attrs[e];r&&r(n)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,n=this.$attrs,r=Gt(yu(this)),a=this.$props.alignPoint,o=r[0];this.childOriginEvents=T1(o);var i={key:"trigger"};this.isContextmenuToShow()?i.onContextmenu=this.onContextmenu:i.onContextmenu=this.createTwoChains("onContextmenu"),this.isClickToHide()||this.isClickToShow()?(i.onClick=this.onClick,i.onMousedown=this.onMousedown,i[nn?"onTouchstartPassive":"onTouchstart"]=this.onTouchstart):(i.onClick=this.createTwoChains("onClick"),i.onMousedown=this.createTwoChains("onMousedown"),i[nn?"onTouchstartPassive":"onTouchstart"]=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(i.onMouseenter=this.onMouseenter,a&&(i.onMousemove=this.onMouseMove)):i.onMouseenter=this.createTwoChains("onMouseenter"),this.isMouseLeaveToHide()?i.onMouseleave=this.onMouseleave:i.onMouseleave=this.createTwoChains("onMouseleave"),this.isFocusToShow()||this.isBlurToHide()?(i.onFocus=this.onFocus,i.onBlur=this.onBlur):(i.onFocus=this.createTwoChains("onFocus"),i.onBlur=function(d){d&&(!d.relatedTarget||!bo(d.target,d.relatedTarget))&&e.createTwoChains("onBlur")(d)});var l=ce(o&&o.props&&o.props.class,n.class);l&&(i.class=l);var u=Ct(o,y(y({},i),{},{ref:"triggerRef"}),!0,!0);if(this.popPortal)return u;var s=h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent});return h(et,null,[s,u])}});var e9=["empty"],t9=function(e){var n=e===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}}}},n9=le({name:"SelectTrigger",inheritAttrs:!1,props:{dropdownAlign:Object,visible:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},dropdownClassName:String,dropdownStyle:G.object,placement:String,empty:{type:Boolean,default:void 0},prefixCls:String,popupClassName:String,animation:String,transitionName:String,getPopupContainer:Function,dropdownRender:Function,containerWidth:Number,dropdownMatchSelectWidth:G.oneOfType([Number,Boolean]).def(!0),popupElement:G.any,direction:String,getTriggerDOMNode:Function,onPopupVisibleChange:Function,onPopupMouseEnter:Function},setup:function(e,n){var r=n.slots,a=n.attrs,o=n.expose,i=L(function(){var u=e.dropdownMatchSelectWidth;return t9(u)}),l=Q();return o({getPopupElement:function(){return l.value}}),function(){var u=y(y({},e),a),s=u.empty,d=s===void 0?!1:s,c=He(u,e9),f=c.visible,v=c.dropdownAlign,g=c.prefixCls,p=c.popupElement,m=c.dropdownClassName,b=c.dropdownStyle,C=c.direction,x=C===void 0?"ltr":C,w=c.placement,P=c.dropdownMatchSelectWidth,S=c.containerWidth,k=c.dropdownRender,T=c.animation,O=c.transitionName,N=c.getPopupContainer,$=c.getTriggerDOMNode,I=c.onPopupVisibleChange,E=c.onPopupMouseEnter,F="".concat(g,"-dropdown"),j=p;k&&(j=k({menuNode:p,props:e}));var D=T?"".concat(F,"-").concat(T):O,R=y({minWidth:"".concat(S,"px")},b);return typeof P=="number"?R.width="".concat(P,"px"):P&&(R.width="".concat(S,"px")),h(Ui,y(y({},e),{},{showAction:I?["click"]:[],hideAction:I?["click"]:[],popupPlacement:w||(x==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:i.value,prefixCls:F,popupTransitionName:D,popupAlign:v,popupVisible:f,getPopupContainer:N,popupClassName:ce(m,A({},"".concat(F,"-empty"),d)),popupStyle:R,getTriggerDOMNode:$,onPopupVisibleChange:I}),{default:r.default,popup:function(){return h("div",{ref:l,onMouseenter:E},[j])}})}}});const r9=n9;var ht={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var n=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||n>=ht.F1&&n<=ht.F12)return!1;switch(n){case ht.ALT:case ht.CAPS_LOCK:case ht.CONTEXT_MENU:case ht.CTRL:case ht.DOWN:case ht.END:case ht.ESC:case ht.HOME:case ht.INSERT:case ht.LEFT:case ht.MAC_FF_META:case ht.META:case ht.NUMLOCK:case ht.NUM_CENTER:case ht.PAGE_DOWN:case ht.PAGE_UP:case ht.PAUSE:case ht.PRINT_SCREEN:case ht.RIGHT:case ht.SHIFT:case ht.UP:case ht.WIN_KEY:case ht.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=ht.ZERO&&e<=ht.NINE||e>=ht.NUM_ZERO&&e<=ht.NUM_MULTIPLY||e>=ht.A&&e<=ht.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&e===0)return!0;switch(e){case ht.SPACE:case ht.QUESTION_MARK:case ht.NUM_PLUS:case ht.NUM_MINUS:case ht.NUM_PERIOD:case ht.NUM_DIVISION:case ht.SEMICOLON:case ht.DASH:case ht.EQUALS:case ht.COMMA:case ht.PERIOD:case ht.SLASH:case ht.APOSTROPHE:case ht.SINGLE_QUOTE:case ht.OPEN_SQUARE_BRACKET:case ht.BACKSLASH:case ht.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const Ee=ht;var Cd=function(e,n){var r,a=n.slots,o=e.class,i=e.customizeIcon,l=e.customizeIconProps,u=e.onMousedown,s=e.onClick,d;return typeof i=="function"?d=i(l):d=i,h("span",{class:o,onMousedown:function(f){f.preventDefault(),u&&u(f)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:s,"aria-hidden":!0},[d!==void 0?d:h("span",{class:o.split(/\s+/).map(function(c){return"".concat(c,"-icon")})},[(r=a.default)===null||r===void 0?void 0:r.call(a)])])};Cd.inheritAttrs=!1;Cd.displayName="TransBtn";Cd.props={class:String,customizeIcon:G.any,customizeIconProps:G.any,onMousedown:Function,onClick:Function};const yc=Cd;function a9(t){t.target.composing=!0}function Zb(t){t.target.composing&&(t.target.composing=!1,o9(t.target,"input"))}function o9(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Kf(t,e,n,r){t.addEventListener(e,n,r)}var i9={created:function(e,n){(!n.modifiers||!n.modifiers.lazy)&&(Kf(e,"compositionstart",a9),Kf(e,"compositionend",Zb),Kf(e,"change",Zb))}};const Yi=i9;var l9={inputRef:G.any,prefixCls:String,id:String,inputElement:G.VueNode,disabled:{type:Boolean,default:void 0},autofocus:{type:Boolean,default:void 0},autocomplete:String,editable:{type:Boolean,default:void 0},activeDescendantId:String,value:String,open:{type:Boolean,default:void 0},tabindex:G.oneOfType([G.number,G.string]),attrs:G.object,onKeydown:{type:Function},onMousedown:{type:Function},onChange:{type:Function},onPaste:{type:Function},onCompositionstart:{type:Function},onCompositionend:{type:Function},onFocus:{type:Function},onBlur:{type:Function}},u9=le({compatConfig:{MODE:3},name:"Input",inheritAttrs:!1,props:l9,setup:function(e){var n=null,r=Ze("VCSelectContainerEvent");return function(){var a,o,i=e.prefixCls,l=e.id,u=e.inputElement,s=e.disabled,d=e.tabindex,c=e.autofocus,f=e.autocomplete,v=e.editable,g=e.activeDescendantId,p=e.value,m=e.onKeydown,b=e.onMousedown,C=e.onChange,x=e.onPaste,w=e.onCompositionstart,P=e.onCompositionend,S=e.onFocus,k=e.onBlur,T=e.open,O=e.inputRef,N=e.attrs,$=u||gn(h("input",null,null),[[Yi]]),I=$.props||{},E=I.onKeydown,F=I.onInput,j=I.onFocus,D=I.onBlur,R=I.onMousedown,_=I.onCompositionstart,M=I.onCompositionend,V=I.style;return $=Ct($,pt(y(y(y({type:"search"},I),{},{id:l,ref:O,disabled:s,tabindex:d,autocomplete:f||"off",autofocus:c,class:ce("".concat(i,"-selection-search-input"),(a=$)===null||a===void 0||(o=a.props)===null||o===void 0?void 0:o.class),role:"combobox","aria-expanded":T,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":g},N),{},{value:v?p:"",readonly:!v,unselectable:v?null:"on",style:y(y({},V),{},{opacity:v?null:0}),onKeydown:function(U){m(U),E&&E(U)},onMousedown:function(U){b(U),R&&R(U)},onInput:function(U){C(U),F&&F(U)},onCompositionstart:function(U){w(U),_&&_(U)},onCompositionend:function(U){P(U),M&&M(U)},onPaste:x,onFocus:function(){clearTimeout(n),j&&j(arguments.length<=0?void 0:arguments[0]),S&&S(arguments.length<=0?void 0:arguments[0]),r==null||r.focus(arguments.length<=0?void 0:arguments[0])},onBlur:function(){for(var U=arguments.length,Y=new Array(U),K=0;K